Merge "Add annotations zip, and system and module-lib APIs"
diff --git a/mainline/i18n/sdk/Android.bp b/mainline/i18n/sdk/Android.bp
index a711a53..f82e316 100755
--- a/mainline/i18n/sdk/Android.bp
+++ b/mainline/i18n/sdk/Android.bp
@@ -95,6 +95,23 @@
         stub_srcs: ["sdk_library/public/i18n.module.public.api_stub_sources"],
         current_api: "sdk_library/public/i18n.module.public.api.txt",
         removed_api: "sdk_library/public/i18n.module.public.api-removed.txt",
+        annotations: "sdk_library/public/i18n.module.public.api_annotations.zip",
+        sdk_version: "none",
+    },
+    system: {
+        jars: ["sdk_library/system/i18n.module.public.api-stubs.jar"],
+        stub_srcs: ["sdk_library/system/i18n.module.public.api_stub_sources"],
+        current_api: "sdk_library/system/i18n.module.public.api.txt",
+        removed_api: "sdk_library/system/i18n.module.public.api-removed.txt",
+        annotations: "sdk_library/system/i18n.module.public.api_annotations.zip",
+        sdk_version: "none",
+    },
+    module_lib: {
+        jars: ["sdk_library/module-lib/i18n.module.public.api-stubs.jar"],
+        stub_srcs: ["sdk_library/module-lib/i18n.module.public.api_stub_sources"],
+        current_api: "sdk_library/module-lib/i18n.module.public.api.txt",
+        removed_api: "sdk_library/module-lib/i18n.module.public.api-removed.txt",
+        annotations: "sdk_library/module-lib/i18n.module.public.api_annotations.zip",
         sdk_version: "none",
     },
 }
@@ -118,6 +135,23 @@
         stub_srcs: ["sdk_library/public/i18n.module.public.api_stub_sources"],
         current_api: "sdk_library/public/i18n.module.public.api.txt",
         removed_api: "sdk_library/public/i18n.module.public.api-removed.txt",
+        annotations: "sdk_library/public/i18n.module.public.api_annotations.zip",
+        sdk_version: "none",
+    },
+    system: {
+        jars: ["sdk_library/system/i18n.module.public.api-stubs.jar"],
+        stub_srcs: ["sdk_library/system/i18n.module.public.api_stub_sources"],
+        current_api: "sdk_library/system/i18n.module.public.api.txt",
+        removed_api: "sdk_library/system/i18n.module.public.api-removed.txt",
+        annotations: "sdk_library/system/i18n.module.public.api_annotations.zip",
+        sdk_version: "none",
+    },
+    module_lib: {
+        jars: ["sdk_library/module-lib/i18n.module.public.api-stubs.jar"],
+        stub_srcs: ["sdk_library/module-lib/i18n.module.public.api_stub_sources"],
+        current_api: "sdk_library/module-lib/i18n.module.public.api.txt",
+        removed_api: "sdk_library/module-lib/i18n.module.public.api-removed.txt",
+        annotations: "sdk_library/module-lib/i18n.module.public.api_annotations.zip",
         sdk_version: "none",
     },
 }
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api-removed.txt b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api-stubs.jar b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api-stubs.jar
new file mode 100644
index 0000000..3fef73d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api-stubs.jar
Binary files differ
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api.txt b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_annotations.zip b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_annotations.zip
new file mode 100644
index 0000000..15cb0ec
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_annotations.zip
Binary files differ
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacter.java
new file mode 100644
index 0000000..94bd6c6
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacter.java
@@ -0,0 +1,6609 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+import android.icu.text.BreakIterator;
+import android.icu.util.RangeValueIterator;
+import android.icu.util.ValueIterator;
+import android.icu.lang.UCharacterEnums.ECharacterDirection;
+import android.icu.lang.UCharacterEnums.ECharacterCategory;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.lang.Character}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>The UCharacter class provides extensions to the {@link java.lang.Character} class.
+ * These extensions provide support for more Unicode properties.
+ * Each ICU release supports the latest version of Unicode available at that time.
+ *
+ * <p>For some time before Java 5 added support for supplementary Unicode code points,
+ * The ICU UCharacter class and many other ICU classes already supported them.
+ * Some UCharacter methods and constants were widened slightly differently than
+ * how the Character class methods and constants were widened later.
+ * In particular, {@link java.lang.Character#MAX_VALUE Character#MAX_VALUE} is still a char with the value U+FFFF,
+ * while the {@link android.icu.lang.UCharacter#MAX_VALUE UCharacter#MAX_VALUE} is an int with the value U+10FFFF.
+ *
+ * <p>Code points are represented in these API using ints. While it would be
+ * more convenient in Java to have a separate primitive datatype for them,
+ * ints suffice in the meantime.
+ *
+ * <p>Aside from the additions for UTF-16 support, and the updated Unicode
+ * properties, the main differences between UCharacter and Character are:
+ * <ul>
+ * <li> UCharacter is not designed to be a char wrapper and does not have
+ *      APIs to which involves management of that single char.<br>
+ *      These include:
+ *      <ul>
+ *        <li> char charValue(),
+ *        <li> int compareTo(java.lang.Character, java.lang.Character), etc.
+ *      </ul>
+ * <li> UCharacter does not include Character APIs that are deprecated, nor
+ *      does it include the Java-specific character information, such as
+ *      boolean isJavaIdentifierPart(char ch).
+ * <li> Character maps characters 'A' - 'Z' and 'a' - 'z' to the numeric
+ *      values '10' - '35'. UCharacter also does this in digit and
+ *      getNumericValue, to adhere to the java semantics of these
+ *      methods.  New methods unicodeDigit, and
+ *      getUnicodeNumericValue do not treat the above code points
+ *      as having numeric values.  This is a semantic change from ICU4J 1.3.1.
+ * </ul>
+ * <p>
+ * In addition to Java compatibility functions, which calculate derived properties,
+ * this API provides low-level access to the Unicode Character Database.
+ * <p>
+ * Unicode assigns each code point (not just assigned character) values for
+ * many properties.
+ * Most of them are simple boolean flags, or constants from a small enumerated list.
+ * For some properties, values are strings or other relatively more complex types.
+ * <p>
+ * For more information see
+ * <a href="http://www.unicode/org/ucd/">"About the Unicode Character Database"</a>
+ * (http://www.unicode.org/ucd/)
+ * and the <a href="http://www.icu-project.org/userguide/properties.html">ICU
+ * User Guide chapter on Properties</a>
+ * (http://www.icu-project.org/userguide/properties.html).
+ * <p>
+ * There are also functions that provide easy migration from C/POSIX functions
+ * like isblank(). Their use is generally discouraged because the C/POSIX
+ * standards do not define their semantics beyond the ASCII range, which means
+ * that different implementations exhibit very different behavior.
+ * Instead, Unicode properties should be used directly.
+ * <p>
+ * There are also only a few, broad C/POSIX character classes, and they tend
+ * to be used for conflicting purposes. For example, the "isalpha()" class
+ * is sometimes used to determine word boundaries, while a more sophisticated
+ * approach would at least distinguish initial letters from continuation
+ * characters (the latter including combining marks).
+ * (In ICU, BreakIterator is the most sophisticated API for word boundaries.)
+ * Another example: There is no "istitle()" class for titlecase characters.
+ * <p>
+ * ICU 3.4 and later provides API access for all twelve C/POSIX character classes.
+ * ICU implements them according to the Standard Recommendations in
+ * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions
+ * (http://www.unicode.org/reports/tr18/#Compatibility_Properties).
+ * <p>
+ * API access for C/POSIX character classes is as follows:
+ * <pre>{@code
+ * - alpha:     isUAlphabetic(c) or hasBinaryProperty(c, UProperty.ALPHABETIC)
+ * - lower:     isULowercase(c) or hasBinaryProperty(c, UProperty.LOWERCASE)
+ * - upper:     isUUppercase(c) or hasBinaryProperty(c, UProperty.UPPERCASE)
+ * - punct:     ((1<<getType(c)) & ((1<<DASH_PUNCTUATION)|(1<<START_PUNCTUATION)|
+ *               (1<<END_PUNCTUATION)|(1<<CONNECTOR_PUNCTUATION)|(1<<OTHER_PUNCTUATION)|
+ *               (1<<INITIAL_PUNCTUATION)|(1<<FINAL_PUNCTUATION)))!=0
+ * - digit:     isDigit(c) or getType(c)==DECIMAL_DIGIT_NUMBER
+ * - xdigit:    hasBinaryProperty(c, UProperty.POSIX_XDIGIT)
+ * - alnum:     hasBinaryProperty(c, UProperty.POSIX_ALNUM)
+ * - space:     isUWhiteSpace(c) or hasBinaryProperty(c, UProperty.WHITE_SPACE)
+ * - blank:     hasBinaryProperty(c, UProperty.POSIX_BLANK)
+ * - cntrl:     getType(c)==CONTROL
+ * - graph:     hasBinaryProperty(c, UProperty.POSIX_GRAPH)
+ * - print:     hasBinaryProperty(c, UProperty.POSIX_PRINT)}</pre>
+ * <p>
+ * The C/POSIX character classes are also available in UnicodeSet patterns,
+ * using patterns like [:graph:] or \p{graph}.
+ *
+ * <p><strong>[icu] Note:</strong> There are several ICU (and Java) whitespace functions.
+ * Comparison:<ul>
+ * <li> isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property;
+ *       most of general categories "Z" (separators) + most whitespace ISO controls
+ *       (including no-break spaces, but excluding IS1..IS4)
+ * <li> isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces
+ * <li> isSpaceChar: just Z (including no-break spaces)</ul>
+ *
+ * <p>
+ * This class is not subclassable.
+ *
+ * @author Syn Wee Quek
+ * @see android.icu.lang.UCharacterEnums
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UCharacter implements android.icu.lang.UCharacterEnums.ECharacterCategory, android.icu.lang.UCharacterEnums.ECharacterDirection {
+
+private UCharacter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returnss the numeric value of a decimal digit code point.
+ * <br>This method observes the semantics of
+ * <code>java.lang.Character.digit()</code>.  Note that this
+ * will return positive values for code points for which isDigit
+ * returns false, just like java.lang.Character.
+ * <br><em>Semantic Change:</em> In release 1.3.1 and
+ * prior, this did not treat the European letters as having a
+ * digit value, and also treated numeric letters and other numbers as
+ * digits.
+ * This has been changed to conform to the java semantics.
+ * <br>A code point is a valid digit if and only if:
+ * <ul>
+ *   <li>ch is a decimal digit or one of the european letters, and
+ *   <li>the value of ch is less than the specified radix.
+ * </ul>
+ * @param ch the code point to query
+ * @param radix the radix
+ * @return the numeric value represented by the code point in the
+ * specified radix, or -1 if the code point is not a decimal digit
+ * or if its value is too large for the radix
+ */
+
+public static int digit(int ch, int radix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returnss the numeric value of a decimal digit code point.
+ * <br>This is a convenience overload of <code>digit(int, int)</code>
+ * that provides a decimal radix.
+ * <br><em>Semantic Change:</em> In release 1.3.1 and prior, this
+ * treated numeric letters and other numbers as digits.  This has
+ * been changed to conform to the java semantics.
+ * @param ch the code point to query
+ * @return the numeric value represented by the code point,
+ * or -1 if the code point is not a decimal digit or if its
+ * value is too large for a decimal radix
+ */
+
+public static int digit(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numeric value of the code point as a nonnegative
+ * integer.
+ * <br>If the code point does not have a numeric value, then -1 is returned.
+ * <br>
+ * If the code point has a numeric value that cannot be represented as a
+ * nonnegative integer (for example, a fractional value), then -2 is
+ * returned.
+ * @param ch the code point to query
+ * @return the numeric value of the code point, or -1 if it has no numeric
+ * value, or -2 if it has a numeric value that cannot be represented as a
+ * nonnegative integer
+ */
+
+public static int getNumericValue(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the numeric value for a Unicode code point as defined in the
+ * Unicode Character Database.
+ * <p>A "double" return type is necessary because some numeric values are
+ * fractions, negative, or too large for int.
+ * <p>For characters without any numeric values in the Unicode Character
+ * Database, this function will return NO_NUMERIC_VALUE.
+ * Note: This is different from the Unicode Standard which specifies NaN as the default value.
+ * <p><em>API Change:</em> In release 2.2 and prior, this API has a
+ * return type int and returns -1 when the argument ch does not have a
+ * corresponding numeric value. This has been changed to synch with ICU4C
+ *
+ * This corresponds to the ICU4C function u_getNumericValue.
+ * @param ch Code point to get the numeric value for.
+ * @return numeric value of ch, or NO_NUMERIC_VALUE if none is defined.
+ */
+
+public static double getUnicodeNumericValue(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a value indicating a code point's Unicode category.
+ * Up-to-date Unicode implementation of java.lang.Character.getType()
+ * except for the above mentioned code points that had their category
+ * changed.<br>
+ * Return results are constants from the interface
+ * <a href=UCharacterCategory.html>UCharacterCategory</a><br>
+ * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with
+ * those returned by java.lang.Character.getType.  UCharacterCategory values
+ * match the ones used in ICU4C, while java.lang.Character type
+ * values, though similar, skip the value 17.
+ * @param ch code point whose type is to be determined
+ * @return category which is a value of UCharacterCategory
+ */
+
+public static int getType(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if a code point has a defined meaning in the up-to-date
+ * Unicode standard.
+ * E.g. supplementary code points though allocated space are not defined in
+ * Unicode yet.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isDefined()
+ * @param ch code point to be determined if it is defined in the most
+ *        current version of Unicode
+ * @return true if this code point is defined in unicode
+ */
+
+public static boolean isDefined(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if a code point is a Java digit.
+ * <br>This method observes the semantics of
+ * <code>java.lang.Character.isDigit()</code>. It returns true for decimal
+ * digits only.
+ * <br><em>Semantic Change:</em> In release 1.3.1 and prior, this treated
+ * numeric letters and other numbers as digits.
+ * This has been changed to conform to the java semantics.
+ * @param ch code point to query
+ * @return true if this code point is a digit
+ */
+
+public static boolean isDigit(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is an ISO control character.
+ * A code point is considered to be an ISO control character if it is in
+ * the range &#92;u0000 through &#92;u001F or in the range &#92;u007F through
+ * &#92;u009F.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isISOControl()
+ * @param ch code point to determine if it is an ISO control character
+ * @return true if code point is a ISO control character
+ */
+
+public static boolean isISOControl(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a letter.
+ * Up-to-date Unicode implementation of java.lang.Character.isLetter()
+ * @param ch code point to determine if it is a letter
+ * @return true if code point is a letter
+ */
+
+public static boolean isLetter(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a letter or digit.
+ * <strong>[icu] Note:</strong> This method, unlike java.lang.Character does not regard the ascii
+ * characters 'A' - 'Z' and 'a' - 'z' as digits.
+ * @param ch code point to determine if it is a letter or a digit
+ * @return true if code point is a letter or a digit
+ */
+
+public static boolean isLetterOrDigit(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compatibility override of Java method, delegates to
+ * java.lang.Character.isJavaIdentifierStart.
+ * @param cp the code point
+ * @return true if the code point can start a java identifier.
+ */
+
+public static boolean isJavaIdentifierStart(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compatibility override of Java method, delegates to
+ * java.lang.Character.isJavaIdentifierPart.
+ * @param cp the code point
+ * @return true if the code point can continue a java identifier.
+ */
+
+public static boolean isJavaIdentifierPart(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a lowercase character.
+ * UnicodeData only contains case mappings for code points where they are
+ * one-to-one mappings; it also omits information about context-sensitive
+ * case mappings.<br> For more information about Unicode case mapping
+ * please refer to the
+ * <a href=http://www.unicode.org/unicode/reports/tr21/>Technical report
+ * #21</a>.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isLowerCase()
+ * @param ch code point to determine if it is in lowercase
+ * @return true if code point is a lowercase character
+ */
+
+public static boolean isLowerCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a white space character.
+ * A code point is considered to be an whitespace character if and only
+ * if it satisfies one of the following criteria:
+ * <ul>
+ * <li> It is a Unicode Separator character (categories "Z" = "Zs" or "Zl" or "Zp"), but is not
+ *      also a non-breaking space (&#92;u00A0 or &#92;u2007 or &#92;u202F).
+ * <li> It is &#92;u0009, HORIZONTAL TABULATION.
+ * <li> It is &#92;u000A, LINE FEED.
+ * <li> It is &#92;u000B, VERTICAL TABULATION.
+ * <li> It is &#92;u000C, FORM FEED.
+ * <li> It is &#92;u000D, CARRIAGE RETURN.
+ * <li> It is &#92;u001C, FILE SEPARATOR.
+ * <li> It is &#92;u001D, GROUP SEPARATOR.
+ * <li> It is &#92;u001E, RECORD SEPARATOR.
+ * <li> It is &#92;u001F, UNIT SEPARATOR.
+ * </ul>
+ *
+ * This API tries to sync with the semantics of Java's
+ * java.lang.Character.isWhitespace(), but it may not return
+ * the exact same results because of the Unicode version
+ * difference.
+ * <p>Note: Unicode 4.0.1 changed U+200B ZERO WIDTH SPACE from a Space Separator (Zs)
+ * to a Format Control (Cf). Since then, isWhitespace(0x200b) returns false.
+ * See http://www.unicode.org/versions/Unicode4.0.1/
+ * @param ch code point to determine if it is a white space
+ * @return true if the specified code point is a white space character
+ */
+
+public static boolean isWhitespace(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a Unicode specified space
+ * character, i.e. if code point is in the category Zs, Zl and Zp.
+ * Up-to-date Unicode implementation of java.lang.Character.isSpaceChar().
+ * @param ch code point to determine if it is a space
+ * @return true if the specified code point is a space character
+ */
+
+public static boolean isSpaceChar(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a titlecase character.
+ * UnicodeData only contains case mappings for code points where they are
+ * one-to-one mappings; it also omits information about context-sensitive
+ * case mappings.<br>
+ * For more information about Unicode case mapping please refer to the
+ * <a href=http://www.unicode.org/unicode/reports/tr21/>
+ * Technical report #21</a>.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isTitleCase().
+ * @param ch code point to determine if it is in title case
+ * @return true if the specified code point is a titlecase character
+ */
+
+public static boolean isTitleCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point may be any part of a Unicode
+ * identifier other than the starting character.
+ * A code point may be part of a Unicode identifier if and only if it is
+ * one of the following:
+ * <ul>
+ * <li> Lu Uppercase letter
+ * <li> Ll Lowercase letter
+ * <li> Lt Titlecase letter
+ * <li> Lm Modifier letter
+ * <li> Lo Other letter
+ * <li> Nl Letter number
+ * <li> Pc Connecting punctuation character
+ * <li> Nd decimal number
+ * <li> Mc Spacing combining mark
+ * <li> Mn Non-spacing mark
+ * <li> Cf formatting code
+ * </ul>
+ * Up-to-date Unicode implementation of
+ * java.lang.Character.isUnicodeIdentifierPart().<br>
+ * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+ * @param ch code point to determine if is can be part of a Unicode
+ *        identifier
+ * @return true if code point is any character belonging a unicode
+ *         identifier suffix after the first character
+ */
+
+public static boolean isUnicodeIdentifierPart(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is permissible as the first
+ * character in a Unicode identifier.
+ * A code point may start a Unicode identifier if it is of type either
+ * <ul>
+ * <li> Lu Uppercase letter
+ * <li> Ll Lowercase letter
+ * <li> Lt Titlecase letter
+ * <li> Lm Modifier letter
+ * <li> Lo Other letter
+ * <li> Nl Letter number
+ * </ul>
+ * Up-to-date Unicode implementation of
+ * java.lang.Character.isUnicodeIdentifierStart().<br>
+ * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+ * @param ch code point to determine if it can start a Unicode identifier
+ * @return true if code point is the first character belonging a unicode
+ *              identifier
+ */
+
+public static boolean isUnicodeIdentifierStart(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point should be regarded as an
+ * ignorable character in a Java identifier.
+ * A character is Java-identifier-ignorable if it has the general category
+ * Cf Formatting Control, or it is a non-Java-whitespace ISO control:
+ * U+0000..U+0008, U+000E..U+001B, U+007F..U+009F.<br>
+ * Up-to-date Unicode implementation of
+ * java.lang.Character.isIdentifierIgnorable().<br>
+ * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+ * <p>Note that Unicode just recommends to ignore Cf (format controls).
+ * @param ch code point to be determined if it can be ignored in a Unicode
+ *        identifier.
+ * @return true if the code point is ignorable
+ */
+
+public static boolean isIdentifierIgnorable(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is an uppercase character.
+ * UnicodeData only contains case mappings for code point where they are
+ * one-to-one mappings; it also omits information about context-sensitive
+ * case mappings.<br>
+ * For language specific case conversion behavior, use
+ * toUpperCase(locale, str). <br>
+ * For example, the case conversion for dot-less i and dotted I in Turkish,
+ * or for final sigma in Greek.
+ * For more information about Unicode case mapping please refer to the
+ * <a href=http://www.unicode.org/unicode/reports/tr21/>
+ * Technical report #21</a>.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isUpperCase().
+ * @param ch code point to determine if it is in uppercase
+ * @return true if the code point is an uppercase character
+ */
+
+public static boolean isUpperCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The given code point is mapped to its lowercase equivalent; if the code
+ * point has no lowercase equivalent, the code point itself is returned.
+ * Up-to-date Unicode implementation of java.lang.Character.toLowerCase()
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They take into account the string context and the language and can map
+ * to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch code point whose lowercase equivalent is to be retrieved
+ * @return the lowercase equivalent code point
+ */
+
+public static int toLowerCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts argument code point and returns a String object representing
+ * the code point's value in UTF-16 format.
+ * The result is a string whose length is 1 for BMP code points, 2 for supplementary ones.
+ *
+ * <p>Up-to-date Unicode implementation of java.lang.Character.toString().
+ *
+ * @param ch code point
+ * @return string representation of the code point, null if code point is not
+ *         defined in unicode
+ */
+
+public static java.lang.String toString(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the code point argument to titlecase.
+ * If no titlecase is available, the uppercase is returned. If no uppercase
+ * is available, the code point itself is returned.
+ * Up-to-date Unicode implementation of java.lang.Character.toTitleCase()
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They take into account the string context and the language and can map
+ * to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch code point  whose title case is to be retrieved
+ * @return titlecase code point
+ */
+
+public static int toTitleCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the character argument to uppercase.
+ * If no uppercase is available, the character itself is returned.
+ * Up-to-date Unicode implementation of java.lang.Character.toUpperCase()
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They take into account the string context and the language and can map
+ * to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch code point whose uppercase is to be retrieved
+ * @return uppercase code point
+ */
+
+public static int toUpperCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines if the code point is a supplementary character.
+ * A code point is a supplementary character if and only if it is greater
+ * than <a href=#SUPPLEMENTARY_MIN_VALUE>SUPPLEMENTARY_MIN_VALUE</a>
+ * @param ch code point to be determined if it is in the supplementary
+ *        plane
+ * @return true if code point is a supplementary character
+ */
+
+public static boolean isSupplementary(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines if the code point is in the BMP plane.
+ * @param ch code point to be determined if it is not a supplementary
+ *        character
+ * @return true if code point is not a supplementary character
+ */
+
+public static boolean isBMP(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines whether the specified code point is a printable character
+ * according to the Unicode standard.
+ * @param ch code point to be determined if it is printable
+ * @return true if the code point is a printable character
+ */
+
+public static boolean isPrintable(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines whether the specified code point is of base form.
+ * A code point of base form does not graphically combine with preceding
+ * characters, and is neither a control nor a format character.
+ * @param ch code point to be determined if it is of base form
+ * @return true if the code point is of base form
+ */
+
+public static boolean isBaseForm(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the Bidirection property of a code point.
+ * For example, 0x0041 (letter A) has the LEFT_TO_RIGHT directional
+ * property.<br>
+ * Result returned belongs to the interface
+ * <a href=UCharacterDirection.html>UCharacterDirection</a>
+ * @param ch the code point to be determined its direction
+ * @return direction constant from UCharacterDirection.
+ */
+
+public static int getDirection(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether the code point has the "mirrored" property.
+ * This property is set for characters that are commonly used in
+ * Right-To-Left contexts and need to be displayed with a "mirrored"
+ * glyph.
+ * @param ch code point whose mirror is to be determined
+ * @return true if the code point has the "mirrored" property
+ */
+
+public static boolean isMirrored(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Maps the specified code point to a "mirror-image" code point.
+ * For code points with the "mirrored" property, implementations sometimes
+ * need a "poor man's" mapping to another code point such that the default
+ * glyph may serve as the mirror-image of the default glyph of the
+ * specified code point.<br>
+ * This is useful for text conversion to and from codepages with visual
+ * order, and for displays without glyph selection capabilities.
+ * @param ch code point whose mirror is to be retrieved
+ * @return another code point that may serve as a mirror-image substitute,
+ *         or ch itself if there is no such mapping or ch does not have the
+ *         "mirrored" property
+ */
+
+public static int getMirror(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Maps the specified character to its paired bracket character.
+ * For Bidi_Paired_Bracket_Type!=None, this is the same as getMirror(int).
+ * Otherwise c itself is returned.
+ * See http://www.unicode.org/reports/tr9/
+ *
+ * @param c the code point to be mapped
+ * @return the paired bracket code point,
+ *         or c itself if there is no such mapping
+ *         (Bidi_Paired_Bracket_Type=None)
+ *
+ * @see android.icu.lang.UProperty#BIDI_PAIRED_BRACKET
+ * @see android.icu.lang.UProperty#BIDI_PAIRED_BRACKET_TYPE
+ * @see #getMirror(int)
+ */
+
+public static int getBidiPairedBracket(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the combining class of the argument codepoint
+ * @param ch code point whose combining is to be retrieved
+ * @return the combining class of the codepoint
+ */
+
+public static int getCombiningClass(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> A code point is illegal if and only if
+ * <ul>
+ * <li> Out of bounds, less than 0 or greater than UCharacter.MAX_VALUE
+ * <li> A surrogate value, 0xD800 to 0xDFFF
+ * <li> Not-a-character, having the form 0x xxFFFF or 0x xxFFFE
+ * </ul>
+ * Note: legal does not mean that it is assigned in this version of Unicode.
+ * @param ch code point to determine if it is a legal code point by itself
+ * @return true if and only if legal.
+ */
+
+public static boolean isLegal(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> A string is legal iff all its code points are legal.
+ * A code point is illegal if and only if
+ * <ul>
+ * <li> Out of bounds, less than 0 or greater than UCharacter.MAX_VALUE
+ * <li> A surrogate value, 0xD800 to 0xDFFF
+ * <li> Not-a-character, having the form 0x xxFFFF or 0x xxFFFE
+ * </ul>
+ * Note: legal does not mean that it is assigned in this version of Unicode.
+ * @param str containing code points to examin
+ * @return true if and only if legal.
+ */
+
+public static boolean isLegal(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the version of Unicode data used.
+ * @return the unicode version number used
+ */
+
+public static android.icu.util.VersionInfo getUnicodeVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the most current Unicode name of the argument code point, or
+ * null if the character is unassigned or outside the range
+ * UCharacter.MIN_VALUE and UCharacter.MAX_VALUE or does not have a name.
+ * <br>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param ch the code point for which to get the name
+ * @return most current Unicode name
+ */
+
+public static java.lang.String getName(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the names for each of the characters in a string
+ * @param s string to format
+ * @param separator string to go between names
+ * @return string of names
+ */
+
+public static java.lang.String getName(java.lang.String s, java.lang.String separator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a name for a valid codepoint. Unlike, getName(int) and
+ * getName1_0(int), this method will return a name even for codepoints that
+ * are not assigned a name in UnicodeData.txt.
+ *
+ * <p>The names are returned in the following order.
+ * <ul>
+ * <li> Most current Unicode name if there is any
+ * <li> Unicode 1.0 name if there is any
+ * <li> Extended name in the form of
+ *      "&lt;codepoint_type-codepoint_hex_digits&gt;". E.g., &lt;noncharacter-fffe&gt;
+ * </ul>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param ch the code point for which to get the name
+ * @return a name for the argument codepoint
+ */
+
+public static java.lang.String getExtendedName(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the corrected name from NameAliases.txt if there is one.
+ * Returns null if the character is unassigned or outside the range
+ * UCharacter.MIN_VALUE and UCharacter.MAX_VALUE or does not have a name.
+ * <br>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param ch the code point for which to get the name alias
+ * @return Unicode name alias, or null
+ */
+
+public static java.lang.String getNameAlias(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Finds a Unicode code point by its most current Unicode name and
+ * return its code point value. All Unicode names are in uppercase.
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param name most current Unicode character name whose code point is to
+ *        be returned
+ * @return code point or -1 if name is not found
+ */
+
+public static int getCharFromName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Find a Unicode character by either its name and return its code
+ * point value. All Unicode names are in uppercase.
+ * Extended names are all lowercase except for numbers and are contained
+ * within angle brackets.
+ * The names are searched in the following order
+ * <ul>
+ * <li> Most current Unicode name if there is any
+ * <li> Unicode 1.0 name if there is any
+ * <li> Extended name in the form of
+ *      "&lt;codepoint_type-codepoint_hex_digits&gt;". E.g. &lt;noncharacter-FFFE&gt;
+ * </ul>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param name codepoint name
+ * @return code point associated with the name or -1 if the name is not
+ *         found.
+ */
+
+public static int getCharFromExtendedName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Find a Unicode character by its corrected name alias and return
+ * its code point value. All Unicode names are in uppercase.
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param name Unicode name alias whose code point is to be returned
+ * @return code point or -1 if name is not found
+ */
+
+public static int getCharFromNameAlias(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the Unicode name for a given property, as given in the
+ * Unicode database file PropertyAliases.txt.  Most properties
+ * have more than one name.  The nameChoice determines which one
+ * is returned.
+ *
+ * In addition, this function maps the property
+ * UProperty.GENERAL_CATEGORY_MASK to the synthetic names "gcm" /
+ * "General_Category_Mask".  These names are not in
+ * PropertyAliases.txt.
+ *
+ * @param property UProperty selector.
+ *
+ * @param nameChoice UProperty.NameChoice selector for which name
+ * to get.  All properties have a long name.  Most have a short
+ * name, but some do not.  Unicode allows for additional names; if
+ * present these will be returned by UProperty.NameChoice.LONG + i,
+ * where i=1, 2,...
+ *
+ * @return a name, or null if Unicode explicitly defines no name
+ * ("n/a") for a given property/nameChoice.  If a given nameChoice
+ * throws an exception, then all larger values of nameChoice will
+ * throw an exception.  If null is returned for a given
+ * nameChoice, then other nameChoice values may return non-null
+ * results.
+ *
+ * @exception java.lang.IllegalArgumentException thrown if property or
+ * nameChoice are invalid.
+ *
+ * @see android.icu.lang.UProperty
+ * @see android.icu.lang.UProperty.NameChoice
+ */
+
+public static java.lang.String getPropertyName(int property, int nameChoice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the UProperty selector for a given property name, as
+ * specified in the Unicode database file PropertyAliases.txt.
+ * Short, long, and any other variants are recognized.
+ *
+ * In addition, this function maps the synthetic names "gcm" /
+ * "General_Category_Mask" to the property
+ * UProperty.GENERAL_CATEGORY_MASK.  These names are not in
+ * PropertyAliases.txt.
+ *
+ * @param propertyAlias the property name to be matched.  The name
+ * is compared using "loose matching" as described in
+ * PropertyAliases.txt.
+ *
+ * @return a UProperty enum.
+ *
+ * @exception java.lang.IllegalArgumentException thrown if propertyAlias
+ * is not recognized.
+ *
+ * @see android.icu.lang.UProperty
+ */
+
+public static int getPropertyEnum(java.lang.CharSequence propertyAlias) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the Unicode name for a given property value, as given in
+ * the Unicode database file PropertyValueAliases.txt.  Most
+ * values have more than one name.  The nameChoice determines
+ * which one is returned.
+ *
+ * Note: Some of the names in PropertyValueAliases.txt can only be
+ * retrieved using UProperty.GENERAL_CATEGORY_MASK, not
+ * UProperty.GENERAL_CATEGORY.  These include: "C" / "Other", "L" /
+ * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P"
+ * / "Punctuation", "S" / "Symbol", and "Z" / "Separator".
+ *
+ * @param property UProperty selector constant.
+ * UProperty.INT_START &lt;= property &lt; UProperty.INT_LIMIT or
+ * UProperty.BINARY_START &lt;= property &lt; UProperty.BINARY_LIMIT or
+ * UProperty.MASK_START &lt; = property &lt; UProperty.MASK_LIMIT.
+ * If out of range, null is returned.
+ *
+ * @param value selector for a value for the given property.  In
+ * general, valid values range from 0 up to some maximum.  There
+ * are a few exceptions: (1.) UProperty.BLOCK values begin at the
+ * non-zero value BASIC_LATIN.getID().  (2.)
+ * UProperty.CANONICAL_COMBINING_CLASS values are not contiguous
+ * and range from 0..240.  (3.)  UProperty.GENERAL_CATEGORY_MASK values
+ * are mask values produced by left-shifting 1 by
+ * UCharacter.getType().  This allows grouped categories such as
+ * [:L:] to be represented.  Mask values are non-contiguous.
+ *
+ * @param nameChoice UProperty.NameChoice selector for which name
+ * to get.  All values have a long name.  Most have a short name,
+ * but some do not.  Unicode allows for additional names; if
+ * present these will be returned by UProperty.NameChoice.LONG + i,
+ * where i=1, 2,...
+ *
+ * @return a name, or null if Unicode explicitly defines no name
+ * ("n/a") for a given property/value/nameChoice.  If a given
+ * nameChoice throws an exception, then all larger values of
+ * nameChoice will throw an exception.  If null is returned for a
+ * given nameChoice, then other nameChoice values may return
+ * non-null results.
+ *
+ * @exception java.lang.IllegalArgumentException thrown if property, value,
+ * or nameChoice are invalid.
+ *
+ * @see android.icu.lang.UProperty
+ * @see android.icu.lang.UProperty.NameChoice
+ */
+
+public static java.lang.String getPropertyValueName(int property, int value, int nameChoice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the property value integer for a given value name, as
+ * specified in the Unicode database file PropertyValueAliases.txt.
+ * Short, long, and any other variants are recognized.
+ *
+ * Note: Some of the names in PropertyValueAliases.txt will only be
+ * recognized with UProperty.GENERAL_CATEGORY_MASK, not
+ * UProperty.GENERAL_CATEGORY.  These include: "C" / "Other", "L" /
+ * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P"
+ * / "Punctuation", "S" / "Symbol", and "Z" / "Separator".
+ *
+ * @param property UProperty selector constant.
+ * UProperty.INT_START &lt;= property &lt; UProperty.INT_LIMIT or
+ * UProperty.BINARY_START &lt;= property &lt; UProperty.BINARY_LIMIT or
+ * UProperty.MASK_START &lt; = property &lt; UProperty.MASK_LIMIT.
+ * Only these properties can be enumerated.
+ *
+ * @param valueAlias the value name to be matched.  The name is
+ * compared using "loose matching" as described in
+ * PropertyValueAliases.txt.
+ *
+ * @return a value integer.  Note: UProperty.GENERAL_CATEGORY
+ * values are mask values produced by left-shifting 1 by
+ * UCharacter.getType().  This allows grouped categories such as
+ * [:L:] to be represented.
+ *
+ * @see android.icu.lang.UProperty
+ * @throws java.lang.IllegalArgumentException if property is not a valid UProperty
+ *         selector or valueAlias is not a value of this property
+ */
+
+public static int getPropertyValueEnum(int property, java.lang.CharSequence valueAlias) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a code point corresponding to the two surrogate code units.
+ *
+ * @param lead the lead char
+ * @param trail the trail char
+ * @return code point if surrogate characters are valid.
+ * @exception java.lang.IllegalArgumentException thrown when the code units do
+ *            not form a valid code point
+ */
+
+public static int getCodePoint(char lead, char trail) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the code point corresponding to the BMP code point.
+ *
+ * @param char16 the BMP code point
+ * @return code point if argument is a valid character.
+ * @exception java.lang.IllegalArgumentException thrown when char16 is not a valid
+ *            code point
+ */
+
+public static int getCodePoint(char char16) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the uppercase version of the argument string.
+ * Casing is dependent on the default locale and context-sensitive.
+ * @param str source string to be performed on
+ * @return uppercase version of the argument string
+ */
+
+public static java.lang.String toUpperCase(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowercase version of the argument string.
+ * Casing is dependent on the default locale and context-sensitive
+ * @param str source string to be performed on
+ * @return lowercase version of the argument string
+ */
+
+public static java.lang.String toLowerCase(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the default locale and context-sensitive
+ * @param str source string to be performed on
+ * @param breakiter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @return titlecase version of the argument string
+ */
+
+public static java.lang.String toTitleCase(java.lang.String str, android.icu.text.BreakIterator breakiter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the uppercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive.
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return uppercase version of the argument string
+ */
+
+public static java.lang.String toUpperCase(java.util.Locale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the uppercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive.
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return uppercase version of the argument string
+ */
+
+public static java.lang.String toUpperCase(android.icu.util.ULocale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return lowercase version of the argument string
+ */
+
+public static java.lang.String toLowerCase(java.util.Locale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return lowercase version of the argument string
+ */
+
+public static java.lang.String toLowerCase(android.icu.util.ULocale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param breakiter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @return titlecase version of the argument string
+ */
+
+public static java.lang.String toTitleCase(java.util.Locale locale, java.lang.String str, android.icu.text.BreakIterator breakiter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param titleIter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @return titlecase version of the argument string
+ */
+
+public static java.lang.String toTitleCase(android.icu.util.ULocale locale, java.lang.String str, android.icu.text.BreakIterator titleIter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param titleIter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @param options bit set to modify the titlecasing operation
+ * @return titlecase version of the argument string
+ * @see #TITLECASE_NO_LOWERCASE
+ * @see #TITLECASE_NO_BREAK_ADJUSTMENT
+ */
+
+public static java.lang.String toTitleCase(android.icu.util.ULocale locale, java.lang.String str, android.icu.text.BreakIterator titleIter, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param titleIter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @param options bit set to modify the titlecasing operation
+ * @return titlecase version of the argument string
+ * @see #TITLECASE_NO_LOWERCASE
+ * @see #TITLECASE_NO_BREAK_ADJUSTMENT
+ */
+
+public static java.lang.String toTitleCase(java.util.Locale locale, java.lang.String str, android.icu.text.BreakIterator titleIter, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given character is mapped to its case folding equivalent according
+ * to UnicodeData.txt and CaseFolding.txt; if the character has no case
+ * folding equivalent, the character itself is returned.
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They can map to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch             the character to be converted
+ * @param defaultmapping Indicates whether the default mappings defined in
+ *                       CaseFolding.txt are to be used, otherwise the
+ *                       mappings for dotted I and dotless i marked with
+ *                       'T' in CaseFolding.txt are included.
+ * @return               the case folding equivalent of the character, if
+ *                       any; otherwise the character itself.
+ * @see                  #foldCase(String, boolean)
+ */
+
+public static int foldCase(int ch, boolean defaultmapping) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given string is mapped to its case folding equivalent according to
+ * UnicodeData.txt and CaseFolding.txt; if any character has no case
+ * folding equivalent, the character itself is returned.
+ * "Full", multiple-code point case folding mappings are returned here.
+ * For "simple" single-code point mappings use the API
+ * foldCase(int ch, boolean defaultmapping).
+ * @param str            the String to be converted
+ * @param defaultmapping Indicates whether the default mappings defined in
+ *                       CaseFolding.txt are to be used, otherwise the
+ *                       mappings for dotted I and dotless i marked with
+ *                       'T' in CaseFolding.txt are included.
+ * @return               the case folding equivalent of the character, if
+ *                       any; otherwise the character itself.
+ * @see                  #foldCase(int, boolean)
+ */
+
+public static java.lang.String foldCase(java.lang.String str, boolean defaultmapping) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given character is mapped to its case folding equivalent according
+ * to UnicodeData.txt and CaseFolding.txt; if the character has no case
+ * folding equivalent, the character itself is returned.
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They can map to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch the character to be converted
+ * @param options A bit set for special processing. Currently the recognised options
+ * are FOLD_CASE_EXCLUDE_SPECIAL_I and FOLD_CASE_DEFAULT
+ * @return the case folding equivalent of the character, if any; otherwise the
+ * character itself.
+ * @see #foldCase(String, boolean)
+ */
+
+public static int foldCase(int ch, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given string is mapped to its case folding equivalent according to
+ * UnicodeData.txt and CaseFolding.txt; if any character has no case
+ * folding equivalent, the character itself is returned.
+ * "Full", multiple-code point case folding mappings are returned here.
+ * For "simple" single-code point mappings use the API
+ * foldCase(int ch, boolean defaultmapping).
+ * @param str the String to be converted
+ * @param options A bit set for special processing. Currently the recognised options
+ *                are FOLD_CASE_EXCLUDE_SPECIAL_I and FOLD_CASE_DEFAULT
+ * @return the case folding equivalent of the character, if any; otherwise the
+ *         character itself.
+ * @see #foldCase(int, boolean)
+ */
+
+public static java.lang.String foldCase(java.lang.String str, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the numeric value of a Han character.
+ *
+ * <p>This returns the value of Han 'numeric' code points,
+ * including those for zero, ten, hundred, thousand, ten thousand,
+ * and hundred million.
+ * This includes both the standard and 'checkwriting'
+ * characters, the 'big circle' zero character, and the standard
+ * zero character.
+ *
+ * <p>Note: The Unicode Standard has numeric values for more
+ * Han characters recognized by this method
+ * (see {@link #getNumericValue(int)} and the UCD file DerivedNumericValues.txt),
+ * and a {@link android.icu.text.NumberFormat} can be used with
+ * a Chinese {@link android.icu.text.NumberingSystem}.
+ *
+ * @param ch code point to query
+ * @return value if it is a Han 'numeric character,' otherwise return -1.
+ */
+
+public static int getHanNumericValue(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns an iterator for character types, iterating over codepoints.
+ * <p>Example of use:<br>
+ * <pre>
+ * RangeValueIterator iterator = UCharacter.getTypeIterator();
+ * RangeValueIterator.Element element = new RangeValueIterator.Element();
+ * while (iterator.next(element)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(element.start) +
+ *                        " to codepoint \\u" +
+ *                        Integer.toHexString(element.limit - 1) +
+ *                        " has the character type " +
+ *                        element.value);
+ * }
+ * </pre>
+ * @return an iterator
+ */
+
+public static android.icu.util.RangeValueIterator getTypeIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns an iterator for character names, iterating over codepoints.
+ * <p>This API only gets the iterator for the modern, most up-to-date
+ * Unicode names. For older 1.0 Unicode names use get1_0NameIterator() or
+ * for extended names use getExtendedNameIterator().
+ * <p>Example of use:<br>
+ * <pre>
+ * ValueIterator iterator = UCharacter.getNameIterator();
+ * ValueIterator.Element element = new ValueIterator.Element();
+ * while (iterator.next(element)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(element.codepoint) +
+ *                        " has the name " + (String)element.value);
+ * }
+ * </pre>
+ * <p>The maximal range which the name iterator iterates is from
+ * UCharacter.MIN_VALUE to UCharacter.MAX_VALUE.
+ * @return an iterator
+ */
+
+public static android.icu.util.ValueIterator getNameIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns an iterator for character names, iterating over codepoints.
+ * <p>This API only gets the iterator for the extended names.
+ * For modern, most up-to-date Unicode names use getNameIterator() or
+ * for older 1.0 Unicode names use get1_0NameIterator().
+ * <p>Example of use:<br>
+ * <pre>
+ * ValueIterator iterator = UCharacter.getExtendedNameIterator();
+ * ValueIterator.Element element = new ValueIterator.Element();
+ * while (iterator.next(element)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(element.codepoint) +
+ *                        " has the name " + (String)element.value);
+ * }
+ * </pre>
+ * <p>The maximal range which the name iterator iterates is from
+ * @return an iterator
+ */
+
+public static android.icu.util.ValueIterator getExtendedNameIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the "age" of the code point.
+ * <p>The "age" is the Unicode version when the code point was first
+ * designated (as a non-character or for Private Use) or assigned a
+ * character.
+ * <p>This can be useful to avoid emitting code points to receiving
+ * processes that do not accept newer characters.
+ * <p>The data is from the UCD file DerivedAge.txt.
+ * @param ch The code point.
+ * @return the Unicode version number
+ */
+
+public static android.icu.util.VersionInfo getAge(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Check a binary Unicode property for a code point.
+ * <p>Unicode, especially in version 3.2, defines many more properties
+ * than the original set in UnicodeData.txt.
+ * <p>This API is intended to reflect Unicode properties as defined in
+ * the Unicode Character Database (UCD) and Unicode Technical Reports
+ * (UTR).
+ * <p>For details about the properties see
+ * <a href=http://www.unicode.org/>http://www.unicode.org/</a>.
+ * <p>For names of Unicode properties see the UCD file
+ * PropertyAliases.txt.
+ * <p>This API does not check the validity of the codepoint.
+ * <p>Important: If ICU is built with UCD files from Unicode versions
+ * below 3.2, then properties marked with "new" are not or
+ * not fully available.
+ * @param ch code point to test.
+ * @param property selector constant from android.icu.lang.UProperty,
+ *        identifies which binary property to check.
+ * @return true or false according to the binary Unicode property value
+ *         for ch. Also false if property is out of bounds or if the
+ *         Unicode version does not have data for the property at all, or
+ *         not for this code point.
+ * @see android.icu.lang.UProperty
+ */
+
+public static boolean hasBinaryProperty(int ch, int property) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the Alphabetic Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.ALPHABETIC).
+ * <p>Different from UCharacter.isLetter(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isUAlphabetic(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the Lowercase Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.LOWERCASE).
+ * <p>This is different from UCharacter.isLowerCase(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isULowercase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the Uppercase Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.UPPERCASE).
+ * <p>This is different from UCharacter.isUpperCase(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isUUppercase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the White_Space Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.WHITE_SPACE).
+ * <p>This is different from both UCharacter.isSpace(ch) and
+ * UCharacter.isWhitespace(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isUWhiteSpace(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the property value for a Unicode property type of a code point.
+ * Also returns binary and mask property values.
+ * <p>Unicode, especially in version 3.2, defines many more properties than
+ * the original set in UnicodeData.txt.
+ * <p>The properties APIs are intended to reflect Unicode properties as
+ * defined in the Unicode Character Database (UCD) and Unicode Technical
+ * Reports (UTR). For details about the properties see
+ * http://www.unicode.org/.
+ * <p>For names of Unicode properties see the UCD file PropertyAliases.txt.
+ *
+ * <pre>
+ * Sample usage:
+ * int ea = UCharacter.getIntPropertyValue(c, UProperty.EAST_ASIAN_WIDTH);
+ * int ideo = UCharacter.getIntPropertyValue(c, UProperty.IDEOGRAPHIC);
+ * boolean b = (ideo == 1) ? true : false;
+ * </pre>
+ * @param ch code point to test.
+ * @param type UProperty selector constant, identifies which binary
+ *        property to check. Must be
+ *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
+ *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT or
+ *        UProperty.MASK_START &lt;= type &lt; UProperty.MASK_LIMIT.
+ * @return numeric value that is directly the property value or,
+ *         for enumerated properties, corresponds to the numeric value of
+ *         the enumerated constant of the respective property value type
+ *         ({@link android.icu.lang.UCharacterEnums.ECharacterCategory ECharacterCategory}, {@link android.icu.lang.UCharacterEnums.ECharacterDirection ECharacterDirection},
+ *         {@link android.icu.lang.UCharacter.DecompositionType DecompositionType}, etc.).
+ *         Returns 0 or 1 (for false / true) for binary Unicode properties.
+ *         Returns a bit-mask for mask properties.
+ *         Returns 0 if 'type' is out of bounds or if the Unicode version
+ *         does not have data for the property at all, or not for this code
+ *         point.
+ * @see android.icu.lang.UProperty
+ * @see #hasBinaryProperty
+ * @see #getIntPropertyMinValue
+ * @see #getIntPropertyMaxValue
+ * @see #getUnicodeVersion
+ */
+
+public static int getIntPropertyValue(int ch, int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the minimum value for an integer/binary Unicode property type.
+ * Can be used together with UCharacter.getIntPropertyMaxValue(int)
+ * to allocate arrays of android.icu.text.UnicodeSet or similar.
+ * @param type UProperty selector constant, identifies which binary
+ *        property to check. Must be
+ *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
+ *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT.
+ * @return Minimum value returned by UCharacter.getIntPropertyValue(int)
+ *         for a Unicode property. 0 if the property
+ *         selector 'type' is out of range.
+ * @see android.icu.lang.UProperty
+ * @see #hasBinaryProperty
+ * @see #getUnicodeVersion
+ * @see #getIntPropertyMaxValue
+ * @see #getIntPropertyValue
+ */
+
+public static int getIntPropertyMinValue(int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the maximum value for an integer/binary Unicode property.
+ * Can be used together with UCharacter.getIntPropertyMinValue(int)
+ * to allocate arrays of android.icu.text.UnicodeSet or similar.
+ * Examples for min/max values (for Unicode 3.2):
+ * <ul>
+ * <li> UProperty.BIDI_CLASS:    0/18
+ * (UCharacterDirection.LEFT_TO_RIGHT/UCharacterDirection.BOUNDARY_NEUTRAL)
+ * <li> UProperty.SCRIPT:        0/45 (UScript.COMMON/UScript.TAGBANWA)
+ * <li> UProperty.IDEOGRAPHIC:   0/1  (false/true)
+ * </ul>
+ * For undefined UProperty constant values, min/max values will be 0/-1.
+ * @param type UProperty selector constant, identifies which binary
+ *        property to check. Must be
+ *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
+ *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT.
+ * @return Maximum value returned by u_getIntPropertyValue for a Unicode
+ *         property. &lt;= 0 if the property selector 'type' is out of range.
+ * @see android.icu.lang.UProperty
+ * @see #hasBinaryProperty
+ * @see #getUnicodeVersion
+ * @see #getIntPropertyMaxValue
+ * @see #getIntPropertyValue
+ */
+
+public static int getIntPropertyMaxValue(int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provide the java.lang.Character forDigit API, for convenience.
+ */
+
+public static char forDigit(int digit, int radix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to {@link java.lang.Character#isValidCodePoint Character#isValidCodePoint}.
+ *
+ * @param cp the code point to check
+ * @return true if cp is a valid code point
+ */
+
+public static boolean isValidCodePoint(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isSupplementaryCodePoint Character#isSupplementaryCodePoint}.
+ *
+ * @param cp the code point to check
+ * @return true if cp is a supplementary code point
+ */
+
+public static boolean isSupplementaryCodePoint(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isHighSurrogate Character#isHighSurrogate}.
+ *
+ * @param ch the char to check
+ * @return true if ch is a high (lead) surrogate
+ */
+
+public static boolean isHighSurrogate(char ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isLowSurrogate Character#isLowSurrogate}.
+ *
+ * @param ch the char to check
+ * @return true if ch is a low (trail) surrogate
+ */
+
+public static boolean isLowSurrogate(char ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isSurrogatePair Character#isSurrogatePair}.
+ *
+ * @param high the high (lead) char
+ * @param low the low (trail) char
+ * @return true if high, low form a surrogate pair
+ */
+
+public static boolean isSurrogatePair(char high, char low) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#charCount Character#charCount}.
+ * Returns the number of chars needed to represent the code point (1 or 2).
+ * This does not check the code point for validity.
+ *
+ * @param cp the code point to check
+ * @return the number of chars needed to represent the code point
+ */
+
+public static int charCount(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#toCodePoint Character#toCodePoint}.
+ * Returns the code point represented by the two surrogate code units.
+ * This does not check the surrogate pair for validity.
+ *
+ * @param high the high (lead) surrogate
+ * @param low the low (trail) surrogate
+ * @return the code point formed by the surrogate pair
+ */
+
+public static int toCodePoint(char high, char low) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointAt(java.lang.CharSequence,int) Character#codePointAt(CharSequence, int)}.
+ * Returns the code point at index.
+ * This examines only the characters at index and index+1.
+ *
+ * @param seq the characters to check
+ * @param index the index of the first or only char forming the code point
+ * @return the code point at the index
+ */
+
+public static int codePointAt(java.lang.CharSequence seq, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointAt(char[],int) Character#codePointAt(char[], int)}.
+ * Returns the code point at index.
+ * This examines only the characters at index and index+1.
+ *
+ * @param text the characters to check
+ * @param index the index of the first or only char forming the code point
+ * @return the code point at the index
+ */
+
+public static int codePointAt(char[] text, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointAt(char[],int,int) Character#codePointAt(char[], int, int)}.
+ * Returns the code point at index.
+ * This examines only the characters at index and index+1.
+ *
+ * @param text the characters to check
+ * @param index the index of the first or only char forming the code point
+ * @param limit the limit of the valid text
+ * @return the code point at the index
+ */
+
+public static int codePointAt(char[] text, int index, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointBefore(java.lang.CharSequence,int) Character#codePointBefore(CharSequence, int)}.
+ * Return the code point before index.
+ * This examines only the characters at index-1 and index-2.
+ *
+ * @param seq the characters to check
+ * @param index the index after the last or only char forming the code point
+ * @return the code point before the index
+ */
+
+public static int codePointBefore(java.lang.CharSequence seq, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointBefore(char[],int) Character#codePointBefore(char[], int)}.
+ * Returns the code point before index.
+ * This examines only the characters at index-1 and index-2.
+ *
+ * @param text the characters to check
+ * @param index the index after the last or only char forming the code point
+ * @return the code point before the index
+ */
+
+public static int codePointBefore(char[] text, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointBefore(char[],int,int) Character#codePointBefore(char[], int, int)}.
+ * Return the code point before index.
+ * This examines only the characters at index-1 and index-2.
+ *
+ * @param text the characters to check
+ * @param index the index after the last or only char forming the code point
+ * @param limit the start of the valid text
+ * @return the code point before the index
+ */
+
+public static int codePointBefore(char[] text, int index, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#toChars(int,char[],int) Character#toChars(int, char[], int)}.
+ * Writes the chars representing the
+ * code point into the destination at the given index.
+ *
+ * @param cp the code point to convert
+ * @param dst the destination array into which to put the char(s) representing the code point
+ * @param dstIndex the index at which to put the first (or only) char
+ * @return the count of the number of chars written (1 or 2)
+ * @throws java.lang.IllegalArgumentException if cp is not a valid code point
+ */
+
+public static int toChars(int cp, char[] dst, int dstIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#toChars(int) Character#toChars(int)}.
+ * Returns a char array representing the code point.
+ *
+ * @param cp the code point to convert
+ * @return an array containing the char(s) representing the code point
+ * @throws java.lang.IllegalArgumentException if cp is not a valid code point
+ */
+
+public static char[] toChars(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#getDirectionality(char) Character#getDirectionality(char)} method, for
+ * convenience. Returns a byte representing the directionality of the
+ * character.
+ *
+ * <strong>[icu] Note:</strong> Unlike {@link java.lang.Character#getDirectionality(char) Character#getDirectionality(char)}, this returns
+ * DIRECTIONALITY_LEFT_TO_RIGHT for undefined or out-of-bounds characters.
+ *
+ * <strong>[icu] Note:</strong> The return value must be tested using the constants defined in {@link android.icu.lang.UCharacterDirection UCharacterDirection} and its interface {@link android.icu.lang.UCharacterEnums.ECharacterDirection UCharacterEnums.ECharacterDirection} since the values are different from the ones
+ * defined by <code>java.lang.Character</code>.
+ * @param cp the code point to check
+ * @return the directionality of the code point
+ * @see #getDirection
+ */
+
+public static byte getDirectionality(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#codePointCount(java.lang.CharSequence,int,int) Character#codePointCount(CharSequence, int, int)}
+ * method, for convenience.  Counts the number of code points in the range
+ * of text.
+ * @param text the characters to check
+ * @param start the start of the range
+ * @param limit the limit of the range
+ * @return the number of code points in the range
+ */
+
+public static int codePointCount(java.lang.CharSequence text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#codePointCount(char[],int,int) Character#codePointCount(char[], int, int)} method, for
+ * convenience. Counts the number of code points in the range of text.
+ * @param text the characters to check
+ * @param start the start of the range
+ * @param limit the limit of the range
+ * @return the number of code points in the range
+ */
+
+public static int codePointCount(char[] text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#offsetByCodePoints(java.lang.CharSequence,int,int) Character#offsetByCodePoints(CharSequence, int, int)}
+ * method, for convenience.  Adjusts the char index by a code point offset.
+ * @param text the characters to check
+ * @param index the index to adjust
+ * @param codePointOffset the number of code points by which to offset the index
+ * @return the adjusted index
+ */
+
+public static int offsetByCodePoints(java.lang.CharSequence text, int index, int codePointOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the
+ * {@link java.lang.Character#offsetByCodePoints(char[],int,int,int,int) Character#offsetByCodePoints(char[], int, int, int, int)}
+ * method, for convenience.  Adjusts the char index by a code point offset.
+ * @param text the characters to check
+ * @param start the start of the range to check
+ * @param count the length of the range to check
+ * @param index the index to adjust
+ * @param codePointOffset the number of code points by which to offset the index
+ * @return the adjusted index
+ */
+
+public static int offsetByCodePoints(char[] text, int start, int count, int index, int codePointOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Option value for case folding: use default mappings defined in
+ * CaseFolding.txt.
+ */
+
+public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Option value for case folding:
+ * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I
+ * and dotless i appropriately for Turkic languages (tr, az).
+ *
+ * <p>Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that
+ * are to be included for default mappings and
+ * excluded for the Turkic-specific mappings.
+ *
+ * <p>Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that
+ * are to be excluded for default mappings and
+ * included for the Turkic-specific mappings.
+ */
+
+public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+
+/**
+ * Constant U+10FFFF, same as {@link java.lang.Character#MAX_CODE_POINT Character#MAX_CODE_POINT}.
+ */
+
+public static final int MAX_CODE_POINT = 1114111; // 0x10ffff
+
+/**
+ * Constant U+DBFF, same as {@link java.lang.Character#MAX_HIGH_SURROGATE Character#MAX_HIGH_SURROGATE}.
+ */
+
+public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff'
+
+/**
+ * Constant U+DFFF, same as {@link java.lang.Character#MAX_LOW_SURROGATE Character#MAX_LOW_SURROGATE}.
+ */
+
+public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff'
+
+/**
+ * Compatibility constant for Java Character's MAX_RADIX.
+ */
+
+public static final int MAX_RADIX = 36; // 0x24
+
+/**
+ * Constant U+DFFF, same as {@link java.lang.Character#MAX_SURROGATE Character#MAX_SURROGATE}.
+ */
+
+public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff'
+
+/**
+ * The highest Unicode code point value (scalar value), constant U+10FFFF (uses 21 bits).
+ * Same as {@link java.lang.Character#MAX_CODE_POINT Character#MAX_CODE_POINT}.
+ *
+ * <p>Up-to-date Unicode implementation of {@link java.lang.Character#MAX_VALUE Character#MAX_VALUE}
+ * which is still a char with the value U+FFFF.
+ */
+
+public static final int MAX_VALUE = 1114111; // 0x10ffff
+
+/**
+ * Constant U+0000, same as {@link java.lang.Character#MIN_CODE_POINT Character#MIN_CODE_POINT}.
+ */
+
+public static final int MIN_CODE_POINT = 0; // 0x0
+
+/**
+ * Constant U+D800, same as {@link java.lang.Character#MIN_HIGH_SURROGATE Character#MIN_HIGH_SURROGATE}.
+ */
+
+public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800'
+
+/**
+ * Constant U+DC00, same as {@link java.lang.Character#MIN_LOW_SURROGATE Character#MIN_LOW_SURROGATE}.
+ */
+
+public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00'
+
+/**
+ * Compatibility constant for Java Character's MIN_RADIX.
+ */
+
+public static final int MIN_RADIX = 2; // 0x2
+
+/**
+ * Constant U+10000, same as {@link java.lang.Character#MIN_SUPPLEMENTARY_CODE_POINT Character#MIN_SUPPLEMENTARY_CODE_POINT}.
+ */
+
+public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000
+
+/**
+ * Constant U+D800, same as {@link java.lang.Character#MIN_SURROGATE Character#MIN_SURROGATE}.
+ */
+
+public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800'
+
+/**
+ * The lowest Unicode code point value, constant 0.
+ * Same as {@link java.lang.Character#MIN_CODE_POINT Character#MIN_CODE_POINT}, same integer value as {@link java.lang.Character#MIN_VALUE Character#MIN_VALUE}.
+ */
+
+public static final int MIN_VALUE = 0; // 0x0
+
+/**
+ * Special value that is returned by getUnicodeNumericValue(int) when no
+ * numeric value is defined for a code point.
+ * @see #getUnicodeNumericValue
+ */
+
+public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+
+/**
+ * Unicode value used when translating into Unicode encoding form and there
+ * is no existing character.
+ */
+
+public static final int REPLACEMENT_CHAR = 65533; // 0xfffd
+
+/**
+ * The minimum value for Supplementary code points, constant U+10000.
+ * Same as {@link java.lang.Character#MIN_SUPPLEMENTARY_CODE_POINT Character#MIN_SUPPLEMENTARY_CODE_POINT}.
+ */
+
+public static final int SUPPLEMENTARY_MIN_VALUE = 65536; // 0x10000
+
+/**
+ * Do not adjust the titlecasing indexes from BreakIterator::next() indexes;
+ * titlecase exactly the characters at breaks from the iterator.
+ * Option bit for titlecasing APIs that take an options bit set.
+ *
+ * By default, titlecasing will take each break iterator index,
+ * adjust it by looking for the next cased character, and titlecase that one.
+ * Other characters are lowercased.
+ *
+ * This follows Unicode 4 &amp; 5 section 3.13 Default Case Operations:
+ *
+ * R3  toTitlecase(X): Find the word boundaries based on Unicode Standard Annex
+ * #29, "Text Boundaries." Between each pair of word boundaries, find the first
+ * cased character F. If F exists, map F to default_title(F); then map each
+ * subsequent character C to default_lower(C).
+ *
+ * @see #toTitleCase
+ * @see #TITLECASE_NO_LOWERCASE
+ */
+
+public static final int TITLECASE_NO_BREAK_ADJUSTMENT = 512; // 0x200
+
+/**
+ * Do not lowercase non-initial parts of words when titlecasing.
+ * Option bit for titlecasing APIs that take an options bit set.
+ *
+ * By default, titlecasing will titlecase the first cased character
+ * of a word and lowercase all other characters.
+ * With this option, the other characters will not be modified.
+ *
+ * @see #toTitleCase
+ */
+
+public static final int TITLECASE_NO_LOWERCASE = 256; // 0x100
+/**
+ * Bidi Paired Bracket Type constants.
+ *
+ * @see android.icu.lang.UProperty#BIDI_PAIRED_BRACKET_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface BidiPairedBracketType {
+
+/**
+ * Close paired bracket.
+ */
+
+public static final int CLOSE = 2; // 0x2
+
+/**
+ * Not a paired bracket.
+ */
+
+public static final int NONE = 0; // 0x0
+
+/**
+ * Open paired bracket.
+ */
+
+public static final int OPEN = 1; // 0x1
+}
+
+/**
+ * Decomposition Type constants.
+ * @see android.icu.lang.UProperty#DECOMPOSITION_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface DecompositionType {
+
+/**
+ */
+
+public static final int CANONICAL = 1; // 0x1
+
+/**
+ */
+
+public static final int CIRCLE = 3; // 0x3
+
+/**
+ */
+
+public static final int COMPAT = 2; // 0x2
+
+/**
+ */
+
+public static final int FINAL = 4; // 0x4
+
+/**
+ */
+
+public static final int FONT = 5; // 0x5
+
+/**
+ */
+
+public static final int FRACTION = 6; // 0x6
+
+/**
+ */
+
+public static final int INITIAL = 7; // 0x7
+
+/**
+ */
+
+public static final int ISOLATED = 8; // 0x8
+
+/**
+ */
+
+public static final int MEDIAL = 9; // 0x9
+
+/**
+ */
+
+public static final int NARROW = 10; // 0xa
+
+/**
+ */
+
+public static final int NOBREAK = 11; // 0xb
+
+/**
+ */
+
+public static final int NONE = 0; // 0x0
+
+/**
+ */
+
+public static final int SMALL = 12; // 0xc
+
+/**
+ */
+
+public static final int SQUARE = 13; // 0xd
+
+/**
+ */
+
+public static final int SUB = 14; // 0xe
+
+/**
+ */
+
+public static final int SUPER = 15; // 0xf
+
+/**
+ */
+
+public static final int VERTICAL = 16; // 0x10
+
+/**
+ */
+
+public static final int WIDE = 17; // 0x11
+}
+
+/**
+ * East Asian Width constants.
+ * @see android.icu.lang.UProperty#EAST_ASIAN_WIDTH
+ * @see android.icu.lang.UCharacter#getIntPropertyValue
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface EastAsianWidth {
+
+/**
+ */
+
+public static final int AMBIGUOUS = 1; // 0x1
+
+/**
+ */
+
+public static final int FULLWIDTH = 3; // 0x3
+
+/**
+ */
+
+public static final int HALFWIDTH = 2; // 0x2
+
+/**
+ */
+
+public static final int NARROW = 4; // 0x4
+
+/**
+ */
+
+public static final int NEUTRAL = 0; // 0x0
+
+/**
+ */
+
+public static final int WIDE = 5; // 0x5
+}
+
+/**
+ * Grapheme Cluster Break constants.
+ * @see android.icu.lang.UProperty#GRAPHEME_CLUSTER_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface GraphemeClusterBreak {
+
+/**
+ */
+
+public static final int CONTROL = 1; // 0x1
+
+/**
+ */
+
+public static final int CR = 2; // 0x2
+
+/**
+ */
+
+public static final int EXTEND = 3; // 0x3
+
+/***/
+
+public static final int E_BASE = 13; // 0xd
+
+/***/
+
+public static final int E_BASE_GAZ = 14; // 0xe
+
+/***/
+
+public static final int E_MODIFIER = 15; // 0xf
+
+/***/
+
+public static final int GLUE_AFTER_ZWJ = 16; // 0x10
+
+/**
+ */
+
+public static final int L = 4; // 0x4
+
+/**
+ */
+
+public static final int LF = 5; // 0x5
+
+/**
+ */
+
+public static final int LV = 6; // 0x6
+
+/**
+ */
+
+public static final int LVT = 7; // 0x7
+
+/**
+ */
+
+public static final int OTHER = 0; // 0x0
+
+/**
+ */
+
+public static final int PREPEND = 11; // 0xb
+
+/***/
+
+public static final int REGIONAL_INDICATOR = 12; // 0xc
+
+/**
+ */
+
+public static final int SPACING_MARK = 10; // 0xa
+
+/**
+ */
+
+public static final int T = 8; // 0x8
+
+/**
+ */
+
+public static final int V = 9; // 0x9
+
+/***/
+
+public static final int ZWJ = 17; // 0x11
+}
+
+/**
+ * Hangul Syllable Type constants.
+ *
+ * @see android.icu.lang.UProperty#HANGUL_SYLLABLE_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface HangulSyllableType {
+
+/**
+ */
+
+public static final int LEADING_JAMO = 1; // 0x1
+
+/**
+ */
+
+public static final int LVT_SYLLABLE = 5; // 0x5
+
+/**
+ */
+
+public static final int LV_SYLLABLE = 4; // 0x4
+
+/**
+ */
+
+public static final int NOT_APPLICABLE = 0; // 0x0
+
+/**
+ */
+
+public static final int TRAILING_JAMO = 3; // 0x3
+
+/**
+ */
+
+public static final int VOWEL_JAMO = 2; // 0x2
+}
+
+/**
+ * Indic Positional Category constants.
+ *
+ * @see android.icu.lang.UProperty#INDIC_POSITIONAL_CATEGORY
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface IndicPositionalCategory {
+
+/***/
+
+public static final int BOTTOM = 1; // 0x1
+
+/***/
+
+public static final int BOTTOM_AND_LEFT = 2; // 0x2
+
+/***/
+
+public static final int BOTTOM_AND_RIGHT = 3; // 0x3
+
+/***/
+
+public static final int LEFT = 4; // 0x4
+
+/***/
+
+public static final int LEFT_AND_RIGHT = 5; // 0x5
+
+/***/
+
+public static final int NA = 0; // 0x0
+
+/***/
+
+public static final int OVERSTRUCK = 6; // 0x6
+
+/***/
+
+public static final int RIGHT = 7; // 0x7
+
+/***/
+
+public static final int TOP = 8; // 0x8
+
+/***/
+
+public static final int TOP_AND_BOTTOM = 9; // 0x9
+
+/***/
+
+public static final int TOP_AND_BOTTOM_AND_LEFT = 15; // 0xf
+
+/***/
+
+public static final int TOP_AND_BOTTOM_AND_RIGHT = 10; // 0xa
+
+/***/
+
+public static final int TOP_AND_LEFT = 11; // 0xb
+
+/***/
+
+public static final int TOP_AND_LEFT_AND_RIGHT = 12; // 0xc
+
+/***/
+
+public static final int TOP_AND_RIGHT = 13; // 0xd
+
+/***/
+
+public static final int VISUAL_ORDER_LEFT = 14; // 0xe
+}
+
+/**
+ * Indic Syllabic Category constants.
+ *
+ * @see android.icu.lang.UProperty#INDIC_SYLLABIC_CATEGORY
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface IndicSyllabicCategory {
+
+/***/
+
+public static final int AVAGRAHA = 1; // 0x1
+
+/***/
+
+public static final int BINDU = 2; // 0x2
+
+/***/
+
+public static final int BRAHMI_JOINING_NUMBER = 3; // 0x3
+
+/***/
+
+public static final int CANTILLATION_MARK = 4; // 0x4
+
+/***/
+
+public static final int CONSONANT = 5; // 0x5
+
+/***/
+
+public static final int CONSONANT_DEAD = 6; // 0x6
+
+/***/
+
+public static final int CONSONANT_FINAL = 7; // 0x7
+
+/***/
+
+public static final int CONSONANT_HEAD_LETTER = 8; // 0x8
+
+/***/
+
+public static final int CONSONANT_INITIAL_POSTFIXED = 9; // 0x9
+
+/***/
+
+public static final int CONSONANT_KILLER = 10; // 0xa
+
+/***/
+
+public static final int CONSONANT_MEDIAL = 11; // 0xb
+
+/***/
+
+public static final int CONSONANT_PLACEHOLDER = 12; // 0xc
+
+/***/
+
+public static final int CONSONANT_PRECEDING_REPHA = 13; // 0xd
+
+/***/
+
+public static final int CONSONANT_PREFIXED = 14; // 0xe
+
+/***/
+
+public static final int CONSONANT_SUBJOINED = 15; // 0xf
+
+/***/
+
+public static final int CONSONANT_SUCCEEDING_REPHA = 16; // 0x10
+
+/***/
+
+public static final int CONSONANT_WITH_STACKER = 17; // 0x11
+
+/***/
+
+public static final int GEMINATION_MARK = 18; // 0x12
+
+/***/
+
+public static final int INVISIBLE_STACKER = 19; // 0x13
+
+/***/
+
+public static final int JOINER = 20; // 0x14
+
+/***/
+
+public static final int MODIFYING_LETTER = 21; // 0x15
+
+/***/
+
+public static final int NON_JOINER = 22; // 0x16
+
+/***/
+
+public static final int NUKTA = 23; // 0x17
+
+/***/
+
+public static final int NUMBER = 24; // 0x18
+
+/***/
+
+public static final int NUMBER_JOINER = 25; // 0x19
+
+/***/
+
+public static final int OTHER = 0; // 0x0
+
+/***/
+
+public static final int PURE_KILLER = 26; // 0x1a
+
+/***/
+
+public static final int REGISTER_SHIFTER = 27; // 0x1b
+
+/***/
+
+public static final int SYLLABLE_MODIFIER = 28; // 0x1c
+
+/***/
+
+public static final int TONE_LETTER = 29; // 0x1d
+
+/***/
+
+public static final int TONE_MARK = 30; // 0x1e
+
+/***/
+
+public static final int VIRAMA = 31; // 0x1f
+
+/***/
+
+public static final int VISARGA = 32; // 0x20
+
+/***/
+
+public static final int VOWEL = 33; // 0x21
+
+/***/
+
+public static final int VOWEL_DEPENDENT = 34; // 0x22
+
+/***/
+
+public static final int VOWEL_INDEPENDENT = 35; // 0x23
+}
+
+/**
+ * Joining Group constants.
+ * @see android.icu.lang.UProperty#JOINING_GROUP
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface JoiningGroup {
+
+/***/
+
+public static final int AFRICAN_FEH = 86; // 0x56
+
+/***/
+
+public static final int AFRICAN_NOON = 87; // 0x57
+
+/***/
+
+public static final int AFRICAN_QAF = 88; // 0x58
+
+/**
+ */
+
+public static final int AIN = 1; // 0x1
+
+/**
+ */
+
+public static final int ALAPH = 2; // 0x2
+
+/**
+ */
+
+public static final int ALEF = 3; // 0x3
+
+/**
+ */
+
+public static final int BEH = 4; // 0x4
+
+/**
+ */
+
+public static final int BETH = 5; // 0x5
+
+/**
+ */
+
+public static final int BURUSHASKI_YEH_BARREE = 54; // 0x36
+
+/**
+ */
+
+public static final int DAL = 6; // 0x6
+
+/**
+ */
+
+public static final int DALATH_RISH = 7; // 0x7
+
+/**
+ */
+
+public static final int E = 8; // 0x8
+
+/***/
+
+public static final int FARSI_YEH = 55; // 0x37
+
+/**
+ */
+
+public static final int FE = 51; // 0x33
+
+/**
+ */
+
+public static final int FEH = 9; // 0x9
+
+/**
+ */
+
+public static final int FINAL_SEMKATH = 10; // 0xa
+
+/**
+ */
+
+public static final int GAF = 11; // 0xb
+
+/**
+ */
+
+public static final int GAMAL = 12; // 0xc
+
+/**
+ */
+
+public static final int HAH = 13; // 0xd
+
+/**
+ */
+
+public static final int HAMZA_ON_HEH_GOAL = 14; // 0xe
+
+/***/
+
+public static final int HANIFI_ROHINGYA_KINNA_YA = 100; // 0x64
+
+/***/
+
+public static final int HANIFI_ROHINGYA_PA = 101; // 0x65
+
+/**
+ */
+
+public static final int HE = 15; // 0xf
+
+/**
+ */
+
+public static final int HEH = 16; // 0x10
+
+/**
+ */
+
+public static final int HEH_GOAL = 17; // 0x11
+
+/**
+ */
+
+public static final int HETH = 18; // 0x12
+
+/**
+ */
+
+public static final int KAF = 19; // 0x13
+
+/**
+ */
+
+public static final int KAPH = 20; // 0x14
+
+/**
+ */
+
+public static final int KHAPH = 52; // 0x34
+
+/**
+ */
+
+public static final int KNOTTED_HEH = 21; // 0x15
+
+/**
+ */
+
+public static final int LAM = 22; // 0x16
+
+/**
+ */
+
+public static final int LAMADH = 23; // 0x17
+
+/***/
+
+public static final int MALAYALAM_BHA = 89; // 0x59
+
+/***/
+
+public static final int MALAYALAM_JA = 90; // 0x5a
+
+/***/
+
+public static final int MALAYALAM_LLA = 91; // 0x5b
+
+/***/
+
+public static final int MALAYALAM_LLLA = 92; // 0x5c
+
+/***/
+
+public static final int MALAYALAM_NGA = 93; // 0x5d
+
+/***/
+
+public static final int MALAYALAM_NNA = 94; // 0x5e
+
+/***/
+
+public static final int MALAYALAM_NNNA = 95; // 0x5f
+
+/***/
+
+public static final int MALAYALAM_NYA = 96; // 0x60
+
+/***/
+
+public static final int MALAYALAM_RA = 97; // 0x61
+
+/***/
+
+public static final int MALAYALAM_SSA = 98; // 0x62
+
+/***/
+
+public static final int MALAYALAM_TTA = 99; // 0x63
+
+/***/
+
+public static final int MANICHAEAN_ALEPH = 58; // 0x3a
+
+/***/
+
+public static final int MANICHAEAN_AYIN = 59; // 0x3b
+
+/***/
+
+public static final int MANICHAEAN_BETH = 60; // 0x3c
+
+/***/
+
+public static final int MANICHAEAN_DALETH = 61; // 0x3d
+
+/***/
+
+public static final int MANICHAEAN_DHAMEDH = 62; // 0x3e
+
+/***/
+
+public static final int MANICHAEAN_FIVE = 63; // 0x3f
+
+/***/
+
+public static final int MANICHAEAN_GIMEL = 64; // 0x40
+
+/***/
+
+public static final int MANICHAEAN_HETH = 65; // 0x41
+
+/***/
+
+public static final int MANICHAEAN_HUNDRED = 66; // 0x42
+
+/***/
+
+public static final int MANICHAEAN_KAPH = 67; // 0x43
+
+/***/
+
+public static final int MANICHAEAN_LAMEDH = 68; // 0x44
+
+/***/
+
+public static final int MANICHAEAN_MEM = 69; // 0x45
+
+/***/
+
+public static final int MANICHAEAN_NUN = 70; // 0x46
+
+/***/
+
+public static final int MANICHAEAN_ONE = 71; // 0x47
+
+/***/
+
+public static final int MANICHAEAN_PE = 72; // 0x48
+
+/***/
+
+public static final int MANICHAEAN_QOPH = 73; // 0x49
+
+/***/
+
+public static final int MANICHAEAN_RESH = 74; // 0x4a
+
+/***/
+
+public static final int MANICHAEAN_SADHE = 75; // 0x4b
+
+/***/
+
+public static final int MANICHAEAN_SAMEKH = 76; // 0x4c
+
+/***/
+
+public static final int MANICHAEAN_TAW = 77; // 0x4d
+
+/***/
+
+public static final int MANICHAEAN_TEN = 78; // 0x4e
+
+/***/
+
+public static final int MANICHAEAN_TETH = 79; // 0x4f
+
+/***/
+
+public static final int MANICHAEAN_THAMEDH = 80; // 0x50
+
+/***/
+
+public static final int MANICHAEAN_TWENTY = 81; // 0x51
+
+/***/
+
+public static final int MANICHAEAN_WAW = 82; // 0x52
+
+/***/
+
+public static final int MANICHAEAN_YODH = 83; // 0x53
+
+/***/
+
+public static final int MANICHAEAN_ZAYIN = 84; // 0x54
+
+/**
+ */
+
+public static final int MEEM = 24; // 0x18
+
+/**
+ */
+
+public static final int MIM = 25; // 0x19
+
+/**
+ */
+
+public static final int NOON = 26; // 0x1a
+
+/**
+ */
+
+public static final int NO_JOINING_GROUP = 0; // 0x0
+
+/**
+ */
+
+public static final int NUN = 27; // 0x1b
+
+/***/
+
+public static final int NYA = 56; // 0x38
+
+/**
+ */
+
+public static final int PE = 28; // 0x1c
+
+/**
+ */
+
+public static final int QAF = 29; // 0x1d
+
+/**
+ */
+
+public static final int QAPH = 30; // 0x1e
+
+/**
+ */
+
+public static final int REH = 31; // 0x1f
+
+/**
+ */
+
+public static final int REVERSED_PE = 32; // 0x20
+
+/***/
+
+public static final int ROHINGYA_YEH = 57; // 0x39
+
+/**
+ */
+
+public static final int SAD = 33; // 0x21
+
+/**
+ */
+
+public static final int SADHE = 34; // 0x22
+
+/**
+ */
+
+public static final int SEEN = 35; // 0x23
+
+/**
+ */
+
+public static final int SEMKATH = 36; // 0x24
+
+/**
+ */
+
+public static final int SHIN = 37; // 0x25
+
+/***/
+
+public static final int STRAIGHT_WAW = 85; // 0x55
+
+/**
+ */
+
+public static final int SWASH_KAF = 38; // 0x26
+
+/**
+ */
+
+public static final int SYRIAC_WAW = 39; // 0x27
+
+/**
+ */
+
+public static final int TAH = 40; // 0x28
+
+/**
+ */
+
+public static final int TAW = 41; // 0x29
+
+/**
+ */
+
+public static final int TEH_MARBUTA = 42; // 0x2a
+
+/***/
+
+public static final int TEH_MARBUTA_GOAL = 14; // 0xe
+
+/**
+ */
+
+public static final int TETH = 43; // 0x2b
+
+/**
+ */
+
+public static final int WAW = 44; // 0x2c
+
+/**
+ */
+
+public static final int YEH = 45; // 0x2d
+
+/**
+ */
+
+public static final int YEH_BARREE = 46; // 0x2e
+
+/**
+ */
+
+public static final int YEH_WITH_TAIL = 47; // 0x2f
+
+/**
+ */
+
+public static final int YUDH = 48; // 0x30
+
+/**
+ */
+
+public static final int YUDH_HE = 49; // 0x31
+
+/**
+ */
+
+public static final int ZAIN = 50; // 0x32
+
+/**
+ */
+
+public static final int ZHAIN = 53; // 0x35
+}
+
+/**
+ * Joining Type constants.
+ * @see android.icu.lang.UProperty#JOINING_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface JoiningType {
+
+/**
+ */
+
+public static final int DUAL_JOINING = 2; // 0x2
+
+/**
+ */
+
+public static final int JOIN_CAUSING = 1; // 0x1
+
+/**
+ */
+
+public static final int LEFT_JOINING = 3; // 0x3
+
+/**
+ */
+
+public static final int NON_JOINING = 0; // 0x0
+
+/**
+ */
+
+public static final int RIGHT_JOINING = 4; // 0x4
+
+/**
+ */
+
+public static final int TRANSPARENT = 5; // 0x5
+}
+
+/**
+ * Line Break constants.
+ * @see android.icu.lang.UProperty#LINE_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface LineBreak {
+
+/**
+ */
+
+public static final int ALPHABETIC = 2; // 0x2
+
+/**
+ */
+
+public static final int AMBIGUOUS = 1; // 0x1
+
+/**
+ */
+
+public static final int BREAK_AFTER = 4; // 0x4
+
+/**
+ */
+
+public static final int BREAK_BEFORE = 5; // 0x5
+
+/**
+ */
+
+public static final int BREAK_BOTH = 3; // 0x3
+
+/**
+ */
+
+public static final int BREAK_SYMBOLS = 27; // 0x1b
+
+/**
+ */
+
+public static final int CARRIAGE_RETURN = 10; // 0xa
+
+/***/
+
+public static final int CLOSE_PARENTHESIS = 36; // 0x24
+
+/**
+ */
+
+public static final int CLOSE_PUNCTUATION = 8; // 0x8
+
+/**
+ */
+
+public static final int COMBINING_MARK = 9; // 0x9
+
+/**
+ */
+
+public static final int COMPLEX_CONTEXT = 24; // 0x18
+
+/***/
+
+public static final int CONDITIONAL_JAPANESE_STARTER = 37; // 0x25
+
+/**
+ */
+
+public static final int CONTINGENT_BREAK = 7; // 0x7
+
+/**
+ */
+
+public static final int EXCLAMATION = 11; // 0xb
+
+/***/
+
+public static final int E_BASE = 40; // 0x28
+
+/***/
+
+public static final int E_MODIFIER = 41; // 0x29
+
+/**
+ */
+
+public static final int GLUE = 12; // 0xc
+
+/**
+ */
+
+public static final int H2 = 31; // 0x1f
+
+/**
+ */
+
+public static final int H3 = 32; // 0x20
+
+/***/
+
+public static final int HEBREW_LETTER = 38; // 0x26
+
+/**
+ */
+
+public static final int HYPHEN = 13; // 0xd
+
+/**
+ */
+
+public static final int IDEOGRAPHIC = 14; // 0xe
+
+/**
+ */
+
+public static final int INFIX_NUMERIC = 16; // 0x10
+
+/**
+ * Renamed from the misspelled "inseperable" in Unicode 4.0.1.
+ */
+
+public static final int INSEPARABLE = 15; // 0xf
+
+/**
+ * @see #INSEPARABLE
+ */
+
+public static final int INSEPERABLE = 15; // 0xf
+
+/**
+ */
+
+public static final int JL = 33; // 0x21
+
+/**
+ */
+
+public static final int JT = 34; // 0x22
+
+/**
+ */
+
+public static final int JV = 35; // 0x23
+
+/**
+ */
+
+public static final int LINE_FEED = 17; // 0x11
+
+/**
+ */
+
+public static final int MANDATORY_BREAK = 6; // 0x6
+
+/**
+ */
+
+public static final int NEXT_LINE = 29; // 0x1d
+
+/**
+ */
+
+public static final int NONSTARTER = 18; // 0x12
+
+/**
+ */
+
+public static final int NUMERIC = 19; // 0x13
+
+/**
+ */
+
+public static final int OPEN_PUNCTUATION = 20; // 0x14
+
+/**
+ */
+
+public static final int POSTFIX_NUMERIC = 21; // 0x15
+
+/**
+ */
+
+public static final int PREFIX_NUMERIC = 22; // 0x16
+
+/**
+ */
+
+public static final int QUOTATION = 23; // 0x17
+
+/***/
+
+public static final int REGIONAL_INDICATOR = 39; // 0x27
+
+/**
+ */
+
+public static final int SPACE = 26; // 0x1a
+
+/**
+ */
+
+public static final int SURROGATE = 25; // 0x19
+
+/**
+ */
+
+public static final int UNKNOWN = 0; // 0x0
+
+/**
+ */
+
+public static final int WORD_JOINER = 30; // 0x1e
+
+/***/
+
+public static final int ZWJ = 42; // 0x2a
+
+/**
+ */
+
+public static final int ZWSPACE = 28; // 0x1c
+}
+
+/**
+ * Numeric Type constants.
+ * @see android.icu.lang.UProperty#NUMERIC_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface NumericType {
+
+/**
+ */
+
+public static final int DECIMAL = 1; // 0x1
+
+/**
+ */
+
+public static final int DIGIT = 2; // 0x2
+
+/**
+ */
+
+public static final int NONE = 0; // 0x0
+
+/**
+ */
+
+public static final int NUMERIC = 3; // 0x3
+}
+
+/**
+ * Sentence Break constants.
+ * @see android.icu.lang.UProperty#SENTENCE_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface SentenceBreak {
+
+/**
+ */
+
+public static final int ATERM = 1; // 0x1
+
+/**
+ */
+
+public static final int CLOSE = 2; // 0x2
+
+/**
+ */
+
+public static final int CR = 11; // 0xb
+
+/**
+ */
+
+public static final int EXTEND = 12; // 0xc
+
+/**
+ */
+
+public static final int FORMAT = 3; // 0x3
+
+/**
+ */
+
+public static final int LF = 13; // 0xd
+
+/**
+ */
+
+public static final int LOWER = 4; // 0x4
+
+/**
+ */
+
+public static final int NUMERIC = 5; // 0x5
+
+/**
+ */
+
+public static final int OLETTER = 6; // 0x6
+
+/**
+ */
+
+public static final int OTHER = 0; // 0x0
+
+/**
+ */
+
+public static final int SCONTINUE = 14; // 0xe
+
+/**
+ */
+
+public static final int SEP = 7; // 0x7
+
+/**
+ */
+
+public static final int SP = 8; // 0x8
+
+/**
+ */
+
+public static final int STERM = 9; // 0x9
+
+/**
+ */
+
+public static final int UPPER = 10; // 0xa
+}
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.lang.Character.UnicodeBlock}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * A family of character subsets representing the character blocks in the
+ * Unicode specification, generated from Unicode Data file Blocks.txt.
+ * Character blocks generally define characters used for a specific script
+ * or purpose. A character is contained by at most one Unicode block.
+ *
+ * <strong>[icu] Note:</strong> All fields named XXX_ID are specific to ICU.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class UnicodeBlock extends java.lang.Character.Subset {
+
+private UnicodeBlock() { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the only instance of the UnicodeBlock with the argument ID.
+ * If no such ID exists, a INVALID_CODE UnicodeBlock will be returned.
+ * @param id UnicodeBlock ID
+ * @return the only instance of the UnicodeBlock with the argument ID
+ *         if it exists, otherwise a INVALID_CODE UnicodeBlock will be
+ *         returned.
+ */
+
+public static android.icu.lang.UCharacter.UnicodeBlock getInstance(int id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Unicode allocation block that contains the code point,
+ * or null if the code point is not a member of a defined block.
+ * @param ch code point to be tested
+ * @return the Unicode allocation block that contains the code point
+ */
+
+public static android.icu.lang.UCharacter.UnicodeBlock of(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Alternative to the {@link java.lang.Character.UnicodeBlock#forName(String)} method.
+ * Returns the Unicode block with the given name. <strong>[icu] Note:</strong> Unlike
+ * {@link java.lang.Character.UnicodeBlock#forName(String)}, this only matches
+ * against the official UCD name and the Java block name
+ * (ignoring case).
+ * @param blockName the name of the block to match
+ * @return the UnicodeBlock with that name
+ * @throws java.lang.IllegalArgumentException if the blockName could not be matched
+ */
+
+public static android.icu.lang.UCharacter.UnicodeBlock forName(java.lang.String blockName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {icu} Returns the type ID of this Unicode block
+ * @return integer type ID of this Unicode block
+ */
+
+public int getID() { throw new RuntimeException("Stub!"); }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ADLAM;
+static { ADLAM = null; }
+
+/***/
+
+public static final int ADLAM_ID = 263; // 0x107
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock AEGEAN_NUMBERS;
+static { AEGEAN_NUMBERS = null; }
+
+/**
+ */
+
+public static final int AEGEAN_NUMBERS_ID = 119; // 0x77
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock AHOM;
+static { AHOM = null; }
+
+/***/
+
+public static final int AHOM_ID = 253; // 0xfd
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ALCHEMICAL_SYMBOLS;
+static { ALCHEMICAL_SYMBOLS = null; }
+
+/***/
+
+public static final int ALCHEMICAL_SYMBOLS_ID = 208; // 0xd0
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS;
+static { ALPHABETIC_PRESENTATION_FORMS = null; }
+
+/**
+ */
+
+public static final int ALPHABETIC_PRESENTATION_FORMS_ID = 80; // 0x50
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANATOLIAN_HIEROGLYPHS;
+static { ANATOLIAN_HIEROGLYPHS = null; }
+
+/***/
+
+public static final int ANATOLIAN_HIEROGLYPHS_ID = 254; // 0xfe
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION;
+static { ANCIENT_GREEK_MUSICAL_NOTATION = null; }
+
+/**
+ */
+
+public static final int ANCIENT_GREEK_MUSICAL_NOTATION_ID = 126; // 0x7e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_NUMBERS;
+static { ANCIENT_GREEK_NUMBERS = null; }
+
+/**
+ */
+
+public static final int ANCIENT_GREEK_NUMBERS_ID = 127; // 0x7f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_SYMBOLS;
+static { ANCIENT_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int ANCIENT_SYMBOLS_ID = 165; // 0xa5
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC;
+static { ARABIC = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_EXTENDED_A;
+static { ARABIC_EXTENDED_A = null; }
+
+/***/
+
+public static final int ARABIC_EXTENDED_A_ID = 210; // 0xd2
+
+/**
+ */
+
+public static final int ARABIC_ID = 12; // 0xc
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS;
+static { ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS = null; }
+
+/***/
+
+public static final int ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS_ID = 211; // 0xd3
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_A;
+static { ARABIC_PRESENTATION_FORMS_A = null; }
+
+/**
+ */
+
+public static final int ARABIC_PRESENTATION_FORMS_A_ID = 81; // 0x51
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_B;
+static { ARABIC_PRESENTATION_FORMS_B = null; }
+
+/**
+ */
+
+public static final int ARABIC_PRESENTATION_FORMS_B_ID = 85; // 0x55
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_SUPPLEMENT;
+static { ARABIC_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int ARABIC_SUPPLEMENT_ID = 128; // 0x80
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARMENIAN;
+static { ARMENIAN = null; }
+
+/**
+ */
+
+public static final int ARMENIAN_ID = 10; // 0xa
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARROWS;
+static { ARROWS = null; }
+
+/**
+ */
+
+public static final int ARROWS_ID = 46; // 0x2e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock AVESTAN;
+static { AVESTAN = null; }
+
+/***/
+
+public static final int AVESTAN_ID = 188; // 0xbc
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BALINESE;
+static { BALINESE = null; }
+
+/**
+ */
+
+public static final int BALINESE_ID = 147; // 0x93
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM;
+static { BAMUM = null; }
+
+/***/
+
+public static final int BAMUM_ID = 177; // 0xb1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM_SUPPLEMENT;
+static { BAMUM_SUPPLEMENT = null; }
+
+/***/
+
+public static final int BAMUM_SUPPLEMENT_ID = 202; // 0xca
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BASIC_LATIN;
+static { BASIC_LATIN = null; }
+
+/**
+ */
+
+public static final int BASIC_LATIN_ID = 1; // 0x1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BASSA_VAH;
+static { BASSA_VAH = null; }
+
+/***/
+
+public static final int BASSA_VAH_ID = 221; // 0xdd
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BATAK;
+static { BATAK = null; }
+
+/***/
+
+public static final int BATAK_ID = 199; // 0xc7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BENGALI;
+static { BENGALI = null; }
+
+/**
+ */
+
+public static final int BENGALI_ID = 16; // 0x10
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BHAIKSUKI;
+static { BHAIKSUKI = null; }
+
+/***/
+
+public static final int BHAIKSUKI_ID = 264; // 0x108
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BLOCK_ELEMENTS;
+static { BLOCK_ELEMENTS = null; }
+
+/**
+ */
+
+public static final int BLOCK_ELEMENTS_ID = 53; // 0x35
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO;
+static { BOPOMOFO = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO_EXTENDED;
+static { BOPOMOFO_EXTENDED = null; }
+
+/**
+ */
+
+public static final int BOPOMOFO_EXTENDED_ID = 67; // 0x43
+
+/**
+ */
+
+public static final int BOPOMOFO_ID = 64; // 0x40
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BOX_DRAWING;
+static { BOX_DRAWING = null; }
+
+/**
+ */
+
+public static final int BOX_DRAWING_ID = 52; // 0x34
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BRAHMI;
+static { BRAHMI = null; }
+
+/***/
+
+public static final int BRAHMI_ID = 201; // 0xc9
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BRAILLE_PATTERNS;
+static { BRAILLE_PATTERNS = null; }
+
+/**
+ */
+
+public static final int BRAILLE_PATTERNS_ID = 57; // 0x39
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BUGINESE;
+static { BUGINESE = null; }
+
+/**
+ */
+
+public static final int BUGINESE_ID = 129; // 0x81
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BUHID;
+static { BUHID = null; }
+
+/**
+ */
+
+public static final int BUHID_ID = 100; // 0x64
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS;
+static { BYZANTINE_MUSICAL_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int BYZANTINE_MUSICAL_SYMBOLS_ID = 91; // 0x5b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CARIAN;
+static { CARIAN = null; }
+
+/**
+ */
+
+public static final int CARIAN_ID = 168; // 0xa8
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CAUCASIAN_ALBANIAN;
+static { CAUCASIAN_ALBANIAN = null; }
+
+/***/
+
+public static final int CAUCASIAN_ALBANIAN_ID = 222; // 0xde
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHAKMA;
+static { CHAKMA = null; }
+
+/***/
+
+public static final int CHAKMA_ID = 212; // 0xd4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHAM;
+static { CHAM = null; }
+
+/**
+ */
+
+public static final int CHAM_ID = 164; // 0xa4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE;
+static { CHEROKEE = null; }
+
+/**
+ */
+
+public static final int CHEROKEE_ID = 32; // 0x20
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE_SUPPLEMENT;
+static { CHEROKEE_SUPPLEMENT = null; }
+
+/***/
+
+public static final int CHEROKEE_SUPPLEMENT_ID = 255; // 0xff
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHESS_SYMBOLS;
+static { CHESS_SYMBOLS = null; }
+
+/***/
+
+public static final int CHESS_SYMBOLS_ID = 281; // 0x119
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHORASMIAN;
+static { CHORASMIAN = null; }
+
+/***/
+
+public static final int CHORASMIAN_ID = 301; // 0x12d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY;
+static { CJK_COMPATIBILITY = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_FORMS;
+static { CJK_COMPATIBILITY_FORMS = null; }
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_FORMS_ID = 83; // 0x53
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_ID = 69; // 0x45
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS;
+static { CJK_COMPATIBILITY_IDEOGRAPHS = null; }
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_IDEOGRAPHS_ID = 79; // 0x4f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
+static { CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT_ID = 95; // 0x5f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_RADICALS_SUPPLEMENT;
+static { CJK_RADICALS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int CJK_RADICALS_SUPPLEMENT_ID = 58; // 0x3a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_STROKES;
+static { CJK_STROKES = null; }
+
+/**
+ */
+
+public static final int CJK_STROKES_ID = 130; // 0x82
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION;
+static { CJK_SYMBOLS_AND_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int CJK_SYMBOLS_AND_PUNCTUATION_ID = 61; // 0x3d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS;
+static { CJK_UNIFIED_IDEOGRAPHS = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A = null; }
+
+/**
+ */
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A_ID = 70; // 0x46
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B = null; }
+
+/**
+ */
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B_ID = 94; // 0x5e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C_ID = 197; // 0xc5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D_ID = 209; // 0xd1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID = 256; // 0x100
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID = 274; // 0x112
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G_ID = 302; // 0x12e
+
+/**
+ */
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_ID = 71; // 0x47
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS;
+static { COMBINING_DIACRITICAL_MARKS = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED;
+static { COMBINING_DIACRITICAL_MARKS_EXTENDED = null; }
+
+/***/
+
+public static final int COMBINING_DIACRITICAL_MARKS_EXTENDED_ID = 224; // 0xe0
+
+/**
+ */
+
+public static final int COMBINING_DIACRITICAL_MARKS_ID = 7; // 0x7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT;
+static { COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int COMBINING_DIACRITICAL_MARKS_SUPPLEMENT_ID = 131; // 0x83
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_HALF_MARKS;
+static { COMBINING_HALF_MARKS = null; }
+
+/**
+ */
+
+public static final int COMBINING_HALF_MARKS_ID = 82; // 0x52
+
+/**
+ * Unicode 3.2 renames this block to "Combining Diacritical Marks for
+ * Symbols".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS;
+static { COMBINING_MARKS_FOR_SYMBOLS = null; }
+
+/**
+ * Unicode 3.2 renames this block to "Combining Diacritical Marks for
+ * Symbols".
+ */
+
+public static final int COMBINING_MARKS_FOR_SYMBOLS_ID = 43; // 0x2b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMMON_INDIC_NUMBER_FORMS;
+static { COMMON_INDIC_NUMBER_FORMS = null; }
+
+/***/
+
+public static final int COMMON_INDIC_NUMBER_FORMS_ID = 178; // 0xb2
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CONTROL_PICTURES;
+static { CONTROL_PICTURES = null; }
+
+/**
+ */
+
+public static final int CONTROL_PICTURES_ID = 49; // 0x31
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC;
+static { COPTIC = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC_EPACT_NUMBERS;
+static { COPTIC_EPACT_NUMBERS = null; }
+
+/***/
+
+public static final int COPTIC_EPACT_NUMBERS_ID = 223; // 0xdf
+
+/**
+ */
+
+public static final int COPTIC_ID = 132; // 0x84
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COUNTING_ROD_NUMERALS;
+static { COUNTING_ROD_NUMERALS = null; }
+
+/**
+ */
+
+public static final int COUNTING_ROD_NUMERALS_ID = 154; // 0x9a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM;
+static { CUNEIFORM = null; }
+
+/**
+ */
+
+public static final int CUNEIFORM_ID = 152; // 0x98
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION;
+static { CUNEIFORM_NUMBERS_AND_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int CUNEIFORM_NUMBERS_AND_PUNCTUATION_ID = 153; // 0x99
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CURRENCY_SYMBOLS;
+static { CURRENCY_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int CURRENCY_SYMBOLS_ID = 42; // 0x2a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYPRIOT_SYLLABARY;
+static { CYPRIOT_SYLLABARY = null; }
+
+/**
+ */
+
+public static final int CYPRIOT_SYLLABARY_ID = 123; // 0x7b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC;
+static { CYRILLIC = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_A;
+static { CYRILLIC_EXTENDED_A = null; }
+
+/**
+ */
+
+public static final int CYRILLIC_EXTENDED_A_ID = 158; // 0x9e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_B;
+static { CYRILLIC_EXTENDED_B = null; }
+
+/**
+ */
+
+public static final int CYRILLIC_EXTENDED_B_ID = 160; // 0xa0
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_C;
+static { CYRILLIC_EXTENDED_C = null; }
+
+/***/
+
+public static final int CYRILLIC_EXTENDED_C_ID = 265; // 0x109
+
+/**
+ */
+
+public static final int CYRILLIC_ID = 9; // 0x9
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENT;
+static { CYRILLIC_SUPPLEMENT = null; }
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENTARY;
+static { CYRILLIC_SUPPLEMENTARY = null; }
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final int CYRILLIC_SUPPLEMENTARY_ID = 97; // 0x61
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final int CYRILLIC_SUPPLEMENT_ID = 97; // 0x61
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DESERET;
+static { DESERET = null; }
+
+/**
+ */
+
+public static final int DESERET_ID = 90; // 0x5a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI;
+static { DEVANAGARI = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI_EXTENDED;
+static { DEVANAGARI_EXTENDED = null; }
+
+/***/
+
+public static final int DEVANAGARI_EXTENDED_ID = 179; // 0xb3
+
+/**
+ */
+
+public static final int DEVANAGARI_ID = 15; // 0xf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DINGBATS;
+static { DINGBATS = null; }
+
+/**
+ */
+
+public static final int DINGBATS_ID = 56; // 0x38
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DIVES_AKURU;
+static { DIVES_AKURU = null; }
+
+/***/
+
+public static final int DIVES_AKURU_ID = 303; // 0x12f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DOGRA;
+static { DOGRA = null; }
+
+/***/
+
+public static final int DOGRA_ID = 282; // 0x11a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DOMINO_TILES;
+static { DOMINO_TILES = null; }
+
+/**
+ */
+
+public static final int DOMINO_TILES_ID = 171; // 0xab
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DUPLOYAN;
+static { DUPLOYAN = null; }
+
+/***/
+
+public static final int DUPLOYAN_ID = 225; // 0xe1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EARLY_DYNASTIC_CUNEIFORM;
+static { EARLY_DYNASTIC_CUNEIFORM = null; }
+
+/***/
+
+public static final int EARLY_DYNASTIC_CUNEIFORM_ID = 257; // 0x101
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPHS;
+static { EGYPTIAN_HIEROGLYPHS = null; }
+
+/***/
+
+public static final int EGYPTIAN_HIEROGLYPHS_ID = 194; // 0xc2
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS;
+static { EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS = null; }
+
+/***/
+
+public static final int EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS_ID = 292; // 0x124
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ELBASAN;
+static { ELBASAN = null; }
+
+/***/
+
+public static final int ELBASAN_ID = 226; // 0xe2
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ELYMAIC;
+static { ELYMAIC = null; }
+
+/***/
+
+public static final int ELYMAIC_ID = 293; // 0x125
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EMOTICONS;
+static { EMOTICONS = null; }
+
+/***/
+
+public static final int EMOTICONS_ID = 206; // 0xce
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERICS;
+static { ENCLOSED_ALPHANUMERICS = null; }
+
+/**
+ */
+
+public static final int ENCLOSED_ALPHANUMERICS_ID = 51; // 0x33
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT;
+static { ENCLOSED_ALPHANUMERIC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int ENCLOSED_ALPHANUMERIC_SUPPLEMENT_ID = 195; // 0xc3
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS;
+static { ENCLOSED_CJK_LETTERS_AND_MONTHS = null; }
+
+/**
+ */
+
+public static final int ENCLOSED_CJK_LETTERS_AND_MONTHS_ID = 68; // 0x44
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT;
+static { ENCLOSED_IDEOGRAPHIC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int ENCLOSED_IDEOGRAPHIC_SUPPLEMENT_ID = 196; // 0xc4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC;
+static { ETHIOPIC = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED;
+static { ETHIOPIC_EXTENDED = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED_A;
+static { ETHIOPIC_EXTENDED_A = null; }
+
+/***/
+
+public static final int ETHIOPIC_EXTENDED_A_ID = 200; // 0xc8
+
+/**
+ */
+
+public static final int ETHIOPIC_EXTENDED_ID = 133; // 0x85
+
+/**
+ */
+
+public static final int ETHIOPIC_ID = 31; // 0x1f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_SUPPLEMENT;
+static { ETHIOPIC_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int ETHIOPIC_SUPPLEMENT_ID = 134; // 0x86
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GENERAL_PUNCTUATION;
+static { GENERAL_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int GENERAL_PUNCTUATION_ID = 40; // 0x28
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES;
+static { GEOMETRIC_SHAPES = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES_EXTENDED;
+static { GEOMETRIC_SHAPES_EXTENDED = null; }
+
+/***/
+
+public static final int GEOMETRIC_SHAPES_EXTENDED_ID = 227; // 0xe3
+
+/**
+ */
+
+public static final int GEOMETRIC_SHAPES_ID = 54; // 0x36
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN;
+static { GEORGIAN = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_EXTENDED;
+static { GEORGIAN_EXTENDED = null; }
+
+/***/
+
+public static final int GEORGIAN_EXTENDED_ID = 283; // 0x11b
+
+/**
+ */
+
+public static final int GEORGIAN_ID = 29; // 0x1d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_SUPPLEMENT;
+static { GEORGIAN_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int GEORGIAN_SUPPLEMENT_ID = 135; // 0x87
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC;
+static { GLAGOLITIC = null; }
+
+/**
+ */
+
+public static final int GLAGOLITIC_ID = 136; // 0x88
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC_SUPPLEMENT;
+static { GLAGOLITIC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int GLAGOLITIC_SUPPLEMENT_ID = 266; // 0x10a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GOTHIC;
+static { GOTHIC = null; }
+
+/**
+ */
+
+public static final int GOTHIC_ID = 89; // 0x59
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GRANTHA;
+static { GRANTHA = null; }
+
+/***/
+
+public static final int GRANTHA_ID = 228; // 0xe4
+
+/**
+ * Unicode 3.2 renames this block to "Greek and Coptic".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GREEK;
+static { GREEK = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GREEK_EXTENDED;
+static { GREEK_EXTENDED = null; }
+
+/**
+ */
+
+public static final int GREEK_EXTENDED_ID = 39; // 0x27
+
+/**
+ * Unicode 3.2 renames this block to "Greek and Coptic".
+ */
+
+public static final int GREEK_ID = 8; // 0x8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GUJARATI;
+static { GUJARATI = null; }
+
+/**
+ */
+
+public static final int GUJARATI_ID = 18; // 0x12
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GUNJALA_GONDI;
+static { GUNJALA_GONDI = null; }
+
+/***/
+
+public static final int GUNJALA_GONDI_ID = 284; // 0x11c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GURMUKHI;
+static { GURMUKHI = null; }
+
+/**
+ */
+
+public static final int GURMUKHI_ID = 17; // 0x11
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS;
+static { HALFWIDTH_AND_FULLWIDTH_FORMS = null; }
+
+/**
+ */
+
+public static final int HALFWIDTH_AND_FULLWIDTH_FORMS_ID = 87; // 0x57
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_COMPATIBILITY_JAMO;
+static { HANGUL_COMPATIBILITY_JAMO = null; }
+
+/**
+ */
+
+public static final int HANGUL_COMPATIBILITY_JAMO_ID = 65; // 0x41
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO;
+static { HANGUL_JAMO = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_A;
+static { HANGUL_JAMO_EXTENDED_A = null; }
+
+/***/
+
+public static final int HANGUL_JAMO_EXTENDED_A_ID = 180; // 0xb4
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_B;
+static { HANGUL_JAMO_EXTENDED_B = null; }
+
+/***/
+
+public static final int HANGUL_JAMO_EXTENDED_B_ID = 185; // 0xb9
+
+/**
+ */
+
+public static final int HANGUL_JAMO_ID = 30; // 0x1e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_SYLLABLES;
+static { HANGUL_SYLLABLES = null; }
+
+/**
+ */
+
+public static final int HANGUL_SYLLABLES_ID = 74; // 0x4a
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANIFI_ROHINGYA;
+static { HANIFI_ROHINGYA = null; }
+
+/***/
+
+public static final int HANIFI_ROHINGYA_ID = 285; // 0x11d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANUNOO;
+static { HANUNOO = null; }
+
+/**
+ */
+
+public static final int HANUNOO_ID = 99; // 0x63
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HATRAN;
+static { HATRAN = null; }
+
+/***/
+
+public static final int HATRAN_ID = 258; // 0x102
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HEBREW;
+static { HEBREW = null; }
+
+/**
+ */
+
+public static final int HEBREW_ID = 11; // 0xb
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES;
+static { HIGH_PRIVATE_USE_SURROGATES = null; }
+
+/**
+ */
+
+public static final int HIGH_PRIVATE_USE_SURROGATES_ID = 76; // 0x4c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_SURROGATES;
+static { HIGH_SURROGATES = null; }
+
+/**
+ */
+
+public static final int HIGH_SURROGATES_ID = 75; // 0x4b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HIRAGANA;
+static { HIRAGANA = null; }
+
+/**
+ */
+
+public static final int HIRAGANA_ID = 62; // 0x3e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS;
+static { IDEOGRAPHIC_DESCRIPTION_CHARACTERS = null; }
+
+/**
+ */
+
+public static final int IDEOGRAPHIC_DESCRIPTION_CHARACTERS_ID = 60; // 0x3c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION;
+static { IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION = null; }
+
+/***/
+
+public static final int IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION_ID = 267; // 0x10b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IMPERIAL_ARAMAIC;
+static { IMPERIAL_ARAMAIC = null; }
+
+/***/
+
+public static final int IMPERIAL_ARAMAIC_ID = 186; // 0xba
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INDIC_SIYAQ_NUMBERS;
+static { INDIC_SIYAQ_NUMBERS = null; }
+
+/***/
+
+public static final int INDIC_SIYAQ_NUMBERS_ID = 286; // 0x11e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PAHLAVI;
+static { INSCRIPTIONAL_PAHLAVI = null; }
+
+/***/
+
+public static final int INSCRIPTIONAL_PAHLAVI_ID = 190; // 0xbe
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PARTHIAN;
+static { INSCRIPTIONAL_PARTHIAN = null; }
+
+/***/
+
+public static final int INSCRIPTIONAL_PARTHIAN_ID = 189; // 0xbd
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INVALID_CODE;
+static { INVALID_CODE = null; }
+
+/**
+ */
+
+public static final int INVALID_CODE_ID = -1; // 0xffffffff
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IPA_EXTENSIONS;
+static { IPA_EXTENSIONS = null; }
+
+/**
+ */
+
+public static final int IPA_EXTENSIONS_ID = 5; // 0x5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock JAVANESE;
+static { JAVANESE = null; }
+
+/***/
+
+public static final int JAVANESE_ID = 181; // 0xb5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KAITHI;
+static { KAITHI = null; }
+
+/***/
+
+public static final int KAITHI_ID = 193; // 0xc1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANA_EXTENDED_A;
+static { KANA_EXTENDED_A = null; }
+
+/***/
+
+public static final int KANA_EXTENDED_A_ID = 275; // 0x113
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANA_SUPPLEMENT;
+static { KANA_SUPPLEMENT = null; }
+
+/***/
+
+public static final int KANA_SUPPLEMENT_ID = 203; // 0xcb
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANBUN;
+static { KANBUN = null; }
+
+/**
+ */
+
+public static final int KANBUN_ID = 66; // 0x42
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANGXI_RADICALS;
+static { KANGXI_RADICALS = null; }
+
+/**
+ */
+
+public static final int KANGXI_RADICALS_ID = 59; // 0x3b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANNADA;
+static { KANNADA = null; }
+
+/**
+ */
+
+public static final int KANNADA_ID = 22; // 0x16
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA;
+static { KATAKANA = null; }
+
+/**
+ */
+
+public static final int KATAKANA_ID = 63; // 0x3f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS;
+static { KATAKANA_PHONETIC_EXTENSIONS = null; }
+
+/**
+ */
+
+public static final int KATAKANA_PHONETIC_EXTENSIONS_ID = 107; // 0x6b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KAYAH_LI;
+static { KAYAH_LI = null; }
+
+/**
+ */
+
+public static final int KAYAH_LI_ID = 162; // 0xa2
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHAROSHTHI;
+static { KHAROSHTHI = null; }
+
+/**
+ */
+
+public static final int KHAROSHTHI_ID = 137; // 0x89
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHITAN_SMALL_SCRIPT;
+static { KHITAN_SMALL_SCRIPT = null; }
+
+/***/
+
+public static final int KHITAN_SMALL_SCRIPT_ID = 304; // 0x130
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHMER;
+static { KHMER = null; }
+
+/**
+ */
+
+public static final int KHMER_ID = 36; // 0x24
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHMER_SYMBOLS;
+static { KHMER_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int KHMER_SYMBOLS_ID = 113; // 0x71
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHOJKI;
+static { KHOJKI = null; }
+
+/***/
+
+public static final int KHOJKI_ID = 229; // 0xe5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHUDAWADI;
+static { KHUDAWADI = null; }
+
+/***/
+
+public static final int KHUDAWADI_ID = 230; // 0xe6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LAO;
+static { LAO = null; }
+
+/**
+ */
+
+public static final int LAO_ID = 26; // 0x1a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_1_SUPPLEMENT;
+static { LATIN_1_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int LATIN_1_SUPPLEMENT_ID = 2; // 0x2
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_A;
+static { LATIN_EXTENDED_A = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_ADDITIONAL;
+static { LATIN_EXTENDED_ADDITIONAL = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_ADDITIONAL_ID = 38; // 0x26
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_A_ID = 3; // 0x3
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_B;
+static { LATIN_EXTENDED_B = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_B_ID = 4; // 0x4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_C;
+static { LATIN_EXTENDED_C = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_C_ID = 148; // 0x94
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_D;
+static { LATIN_EXTENDED_D = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_D_ID = 149; // 0x95
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_E;
+static { LATIN_EXTENDED_E = null; }
+
+/***/
+
+public static final int LATIN_EXTENDED_E_ID = 231; // 0xe7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LEPCHA;
+static { LEPCHA = null; }
+
+/**
+ */
+
+public static final int LEPCHA_ID = 156; // 0x9c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LETTERLIKE_SYMBOLS;
+static { LETTERLIKE_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int LETTERLIKE_SYMBOLS_ID = 44; // 0x2c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LIMBU;
+static { LIMBU = null; }
+
+/**
+ */
+
+public static final int LIMBU_ID = 111; // 0x6f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_A;
+static { LINEAR_A = null; }
+
+/***/
+
+public static final int LINEAR_A_ID = 232; // 0xe8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_IDEOGRAMS;
+static { LINEAR_B_IDEOGRAMS = null; }
+
+/**
+ */
+
+public static final int LINEAR_B_IDEOGRAMS_ID = 118; // 0x76
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_SYLLABARY;
+static { LINEAR_B_SYLLABARY = null; }
+
+/**
+ */
+
+public static final int LINEAR_B_SYLLABARY_ID = 117; // 0x75
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LISU;
+static { LISU = null; }
+
+/***/
+
+public static final int LISU_ID = 176; // 0xb0
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LISU_SUPPLEMENT;
+static { LISU_SUPPLEMENT = null; }
+
+/***/
+
+public static final int LISU_SUPPLEMENT_ID = 305; // 0x131
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LOW_SURROGATES;
+static { LOW_SURROGATES = null; }
+
+/**
+ */
+
+public static final int LOW_SURROGATES_ID = 77; // 0x4d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LYCIAN;
+static { LYCIAN = null; }
+
+/**
+ */
+
+public static final int LYCIAN_ID = 167; // 0xa7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LYDIAN;
+static { LYDIAN = null; }
+
+/**
+ */
+
+public static final int LYDIAN_ID = 169; // 0xa9
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAHAJANI;
+static { MAHAJANI = null; }
+
+/***/
+
+public static final int MAHAJANI_ID = 233; // 0xe9
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAHJONG_TILES;
+static { MAHJONG_TILES = null; }
+
+/**
+ */
+
+public static final int MAHJONG_TILES_ID = 170; // 0xaa
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAKASAR;
+static { MAKASAR = null; }
+
+/***/
+
+public static final int MAKASAR_ID = 287; // 0x11f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MALAYALAM;
+static { MALAYALAM = null; }
+
+/**
+ */
+
+public static final int MALAYALAM_ID = 23; // 0x17
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MANDAIC;
+static { MANDAIC = null; }
+
+/***/
+
+public static final int MANDAIC_ID = 198; // 0xc6
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MANICHAEAN;
+static { MANICHAEAN = null; }
+
+/***/
+
+public static final int MANICHAEAN_ID = 234; // 0xea
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MARCHEN;
+static { MARCHEN = null; }
+
+/***/
+
+public static final int MARCHEN_ID = 268; // 0x10c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MASARAM_GONDI;
+static { MASARAM_GONDI = null; }
+
+/***/
+
+public static final int MASARAM_GONDI_ID = 276; // 0x114
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS;
+static { MATHEMATICAL_ALPHANUMERIC_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int MATHEMATICAL_ALPHANUMERIC_SYMBOLS_ID = 93; // 0x5d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_OPERATORS;
+static { MATHEMATICAL_OPERATORS = null; }
+
+/**
+ */
+
+public static final int MATHEMATICAL_OPERATORS_ID = 47; // 0x2f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAYAN_NUMERALS;
+static { MAYAN_NUMERALS = null; }
+
+/***/
+
+public static final int MAYAN_NUMERALS_ID = 288; // 0x120
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEDEFAIDRIN;
+static { MEDEFAIDRIN = null; }
+
+/***/
+
+public static final int MEDEFAIDRIN_ID = 289; // 0x121
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK;
+static { MEETEI_MAYEK = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK_EXTENSIONS;
+static { MEETEI_MAYEK_EXTENSIONS = null; }
+
+/***/
+
+public static final int MEETEI_MAYEK_EXTENSIONS_ID = 213; // 0xd5
+
+/***/
+
+public static final int MEETEI_MAYEK_ID = 184; // 0xb8
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MENDE_KIKAKUI;
+static { MENDE_KIKAKUI = null; }
+
+/***/
+
+public static final int MENDE_KIKAKUI_ID = 235; // 0xeb
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_CURSIVE;
+static { MEROITIC_CURSIVE = null; }
+
+/***/
+
+public static final int MEROITIC_CURSIVE_ID = 214; // 0xd6
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_HIEROGLYPHS;
+static { MEROITIC_HIEROGLYPHS = null; }
+
+/***/
+
+public static final int MEROITIC_HIEROGLYPHS_ID = 215; // 0xd7
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MIAO;
+static { MIAO = null; }
+
+/***/
+
+public static final int MIAO_ID = 216; // 0xd8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A;
+static { MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A_ID = 102; // 0x66
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B;
+static { MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B_ID = 105; // 0x69
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS;
+static { MISCELLANEOUS_SYMBOLS = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS;
+static { MISCELLANEOUS_SYMBOLS_AND_ARROWS = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_SYMBOLS_AND_ARROWS_ID = 115; // 0x73
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS;
+static { MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS = null; }
+
+/***/
+
+public static final int MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS_ID = 205; // 0xcd
+
+/**
+ */
+
+public static final int MISCELLANEOUS_SYMBOLS_ID = 55; // 0x37
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_TECHNICAL;
+static { MISCELLANEOUS_TECHNICAL = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_TECHNICAL_ID = 48; // 0x30
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MODI;
+static { MODI = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MODIFIER_TONE_LETTERS;
+static { MODIFIER_TONE_LETTERS = null; }
+
+/**
+ */
+
+public static final int MODIFIER_TONE_LETTERS_ID = 138; // 0x8a
+
+/***/
+
+public static final int MODI_ID = 236; // 0xec
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN;
+static { MONGOLIAN = null; }
+
+/**
+ */
+
+public static final int MONGOLIAN_ID = 37; // 0x25
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN_SUPPLEMENT;
+static { MONGOLIAN_SUPPLEMENT = null; }
+
+/***/
+
+public static final int MONGOLIAN_SUPPLEMENT_ID = 269; // 0x10d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MRO;
+static { MRO = null; }
+
+/***/
+
+public static final int MRO_ID = 237; // 0xed
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MULTANI;
+static { MULTANI = null; }
+
+/***/
+
+public static final int MULTANI_ID = 259; // 0x103
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MUSICAL_SYMBOLS;
+static { MUSICAL_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int MUSICAL_SYMBOLS_ID = 92; // 0x5c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR;
+static { MYANMAR = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_A;
+static { MYANMAR_EXTENDED_A = null; }
+
+/***/
+
+public static final int MYANMAR_EXTENDED_A_ID = 182; // 0xb6
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_B;
+static { MYANMAR_EXTENDED_B = null; }
+
+/***/
+
+public static final int MYANMAR_EXTENDED_B_ID = 238; // 0xee
+
+/**
+ */
+
+public static final int MYANMAR_ID = 28; // 0x1c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NABATAEAN;
+static { NABATAEAN = null; }
+
+/***/
+
+public static final int NABATAEAN_ID = 239; // 0xef
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NANDINAGARI;
+static { NANDINAGARI = null; }
+
+/***/
+
+public static final int NANDINAGARI_ID = 294; // 0x126
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NEWA;
+static { NEWA = null; }
+
+/***/
+
+public static final int NEWA_ID = 270; // 0x10e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NEW_TAI_LUE;
+static { NEW_TAI_LUE = null; }
+
+/**
+ */
+
+public static final int NEW_TAI_LUE_ID = 139; // 0x8b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NKO;
+static { NKO = null; }
+
+/**
+ */
+
+public static final int NKO_ID = 146; // 0x92
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NO_BLOCK;
+static { NO_BLOCK = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NUMBER_FORMS;
+static { NUMBER_FORMS = null; }
+
+/**
+ */
+
+public static final int NUMBER_FORMS_ID = 45; // 0x2d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NUSHU;
+static { NUSHU = null; }
+
+/***/
+
+public static final int NUSHU_ID = 277; // 0x115
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NYIAKENG_PUACHUE_HMONG;
+static { NYIAKENG_PUACHUE_HMONG = null; }
+
+/***/
+
+public static final int NYIAKENG_PUACHUE_HMONG_ID = 295; // 0x127
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OGHAM;
+static { OGHAM = null; }
+
+/**
+ */
+
+public static final int OGHAM_ID = 34; // 0x22
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_HUNGARIAN;
+static { OLD_HUNGARIAN = null; }
+
+/***/
+
+public static final int OLD_HUNGARIAN_ID = 260; // 0x104
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_ITALIC;
+static { OLD_ITALIC = null; }
+
+/**
+ */
+
+public static final int OLD_ITALIC_ID = 88; // 0x58
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_NORTH_ARABIAN;
+static { OLD_NORTH_ARABIAN = null; }
+
+/***/
+
+public static final int OLD_NORTH_ARABIAN_ID = 240; // 0xf0
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERMIC;
+static { OLD_PERMIC = null; }
+
+/***/
+
+public static final int OLD_PERMIC_ID = 241; // 0xf1
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERSIAN;
+static { OLD_PERSIAN = null; }
+
+/**
+ */
+
+public static final int OLD_PERSIAN_ID = 140; // 0x8c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOGDIAN;
+static { OLD_SOGDIAN = null; }
+
+/***/
+
+public static final int OLD_SOGDIAN_ID = 290; // 0x122
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOUTH_ARABIAN;
+static { OLD_SOUTH_ARABIAN = null; }
+
+/***/
+
+public static final int OLD_SOUTH_ARABIAN_ID = 187; // 0xbb
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_TURKIC;
+static { OLD_TURKIC = null; }
+
+/***/
+
+public static final int OLD_TURKIC_ID = 191; // 0xbf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OL_CHIKI;
+static { OL_CHIKI = null; }
+
+/**
+ */
+
+public static final int OL_CHIKI_ID = 157; // 0x9d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION;
+static { OPTICAL_CHARACTER_RECOGNITION = null; }
+
+/**
+ */
+
+public static final int OPTICAL_CHARACTER_RECOGNITION_ID = 50; // 0x32
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ORIYA;
+static { ORIYA = null; }
+
+/**
+ */
+
+public static final int ORIYA_ID = 19; // 0x13
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ORNAMENTAL_DINGBATS;
+static { ORNAMENTAL_DINGBATS = null; }
+
+/***/
+
+public static final int ORNAMENTAL_DINGBATS_ID = 242; // 0xf2
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OSAGE;
+static { OSAGE = null; }
+
+/***/
+
+public static final int OSAGE_ID = 271; // 0x10f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OSMANYA;
+static { OSMANYA = null; }
+
+/**
+ */
+
+public static final int OSMANYA_ID = 122; // 0x7a
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OTTOMAN_SIYAQ_NUMBERS;
+static { OTTOMAN_SIYAQ_NUMBERS = null; }
+
+/***/
+
+public static final int OTTOMAN_SIYAQ_NUMBERS_ID = 296; // 0x128
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PAHAWH_HMONG;
+static { PAHAWH_HMONG = null; }
+
+/***/
+
+public static final int PAHAWH_HMONG_ID = 243; // 0xf3
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PALMYRENE;
+static { PALMYRENE = null; }
+
+/***/
+
+public static final int PALMYRENE_ID = 244; // 0xf4
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PAU_CIN_HAU;
+static { PAU_CIN_HAU = null; }
+
+/***/
+
+public static final int PAU_CIN_HAU_ID = 245; // 0xf5
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHAGS_PA;
+static { PHAGS_PA = null; }
+
+/**
+ */
+
+public static final int PHAGS_PA_ID = 150; // 0x96
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHAISTOS_DISC;
+static { PHAISTOS_DISC = null; }
+
+/**
+ */
+
+public static final int PHAISTOS_DISC_ID = 166; // 0xa6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHOENICIAN;
+static { PHOENICIAN = null; }
+
+/**
+ */
+
+public static final int PHOENICIAN_ID = 151; // 0x97
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS;
+static { PHONETIC_EXTENSIONS = null; }
+
+/**
+ */
+
+public static final int PHONETIC_EXTENSIONS_ID = 114; // 0x72
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT;
+static { PHONETIC_EXTENSIONS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int PHONETIC_EXTENSIONS_SUPPLEMENT_ID = 141; // 0x8d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PLAYING_CARDS;
+static { PLAYING_CARDS = null; }
+
+/***/
+
+public static final int PLAYING_CARDS_ID = 204; // 0xcc
+
+/**
+ * Same as public static final int PRIVATE_USE_AREA.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE;
+static { PRIVATE_USE = null; }
+
+/**
+ * Same as public static final int PRIVATE_USE.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE_AREA;
+static { PRIVATE_USE_AREA = null; }
+
+/**
+ * Same as public static final int PRIVATE_USE.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final int PRIVATE_USE_AREA_ID = 78; // 0x4e
+
+/**
+ * Same as public static final int PRIVATE_USE_AREA.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final int PRIVATE_USE_ID = 78; // 0x4e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PSALTER_PAHLAVI;
+static { PSALTER_PAHLAVI = null; }
+
+/***/
+
+public static final int PSALTER_PAHLAVI_ID = 246; // 0xf6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock REJANG;
+static { REJANG = null; }
+
+/**
+ */
+
+public static final int REJANG_ID = 163; // 0xa3
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock RUMI_NUMERAL_SYMBOLS;
+static { RUMI_NUMERAL_SYMBOLS = null; }
+
+/***/
+
+public static final int RUMI_NUMERAL_SYMBOLS_ID = 192; // 0xc0
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock RUNIC;
+static { RUNIC = null; }
+
+/**
+ */
+
+public static final int RUNIC_ID = 35; // 0x23
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SAMARITAN;
+static { SAMARITAN = null; }
+
+/***/
+
+public static final int SAMARITAN_ID = 172; // 0xac
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SAURASHTRA;
+static { SAURASHTRA = null; }
+
+/**
+ */
+
+public static final int SAURASHTRA_ID = 161; // 0xa1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SHARADA;
+static { SHARADA = null; }
+
+/***/
+
+public static final int SHARADA_ID = 217; // 0xd9
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SHAVIAN;
+static { SHAVIAN = null; }
+
+/**
+ */
+
+public static final int SHAVIAN_ID = 121; // 0x79
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SHORTHAND_FORMAT_CONTROLS;
+static { SHORTHAND_FORMAT_CONTROLS = null; }
+
+/***/
+
+public static final int SHORTHAND_FORMAT_CONTROLS_ID = 247; // 0xf7
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SIDDHAM;
+static { SIDDHAM = null; }
+
+/***/
+
+public static final int SIDDHAM_ID = 248; // 0xf8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA;
+static { SINHALA = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA_ARCHAIC_NUMBERS;
+static { SINHALA_ARCHAIC_NUMBERS = null; }
+
+/***/
+
+public static final int SINHALA_ARCHAIC_NUMBERS_ID = 249; // 0xf9
+
+/**
+ */
+
+public static final int SINHALA_ID = 24; // 0x18
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_FORM_VARIANTS;
+static { SMALL_FORM_VARIANTS = null; }
+
+/**
+ */
+
+public static final int SMALL_FORM_VARIANTS_ID = 84; // 0x54
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_KANA_EXTENSION;
+static { SMALL_KANA_EXTENSION = null; }
+
+/***/
+
+public static final int SMALL_KANA_EXTENSION_ID = 297; // 0x129
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SOGDIAN;
+static { SOGDIAN = null; }
+
+/***/
+
+public static final int SOGDIAN_ID = 291; // 0x123
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SORA_SOMPENG;
+static { SORA_SOMPENG = null; }
+
+/***/
+
+public static final int SORA_SOMPENG_ID = 218; // 0xda
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SOYOMBO;
+static { SOYOMBO = null; }
+
+/***/
+
+public static final int SOYOMBO_ID = 278; // 0x116
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SPACING_MODIFIER_LETTERS;
+static { SPACING_MODIFIER_LETTERS = null; }
+
+/**
+ */
+
+public static final int SPACING_MODIFIER_LETTERS_ID = 6; // 0x6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SPECIALS;
+static { SPECIALS = null; }
+
+/**
+ */
+
+public static final int SPECIALS_ID = 86; // 0x56
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE;
+static { SUNDANESE = null; }
+
+/**
+ */
+
+public static final int SUNDANESE_ID = 155; // 0x9b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE_SUPPLEMENT;
+static { SUNDANESE_SUPPLEMENT = null; }
+
+/***/
+
+public static final int SUNDANESE_SUPPLEMENT_ID = 219; // 0xdb
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS;
+static { SUPERSCRIPTS_AND_SUBSCRIPTS = null; }
+
+/**
+ */
+
+public static final int SUPERSCRIPTS_AND_SUBSCRIPTS_ID = 41; // 0x29
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_A;
+static { SUPPLEMENTAL_ARROWS_A = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_ARROWS_A_ID = 103; // 0x67
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_B;
+static { SUPPLEMENTAL_ARROWS_B = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_ARROWS_B_ID = 104; // 0x68
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_C;
+static { SUPPLEMENTAL_ARROWS_C = null; }
+
+/***/
+
+public static final int SUPPLEMENTAL_ARROWS_C_ID = 250; // 0xfa
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS;
+static { SUPPLEMENTAL_MATHEMATICAL_OPERATORS = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_MATHEMATICAL_OPERATORS_ID = 106; // 0x6a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_PUNCTUATION;
+static { SUPPLEMENTAL_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_PUNCTUATION_ID = 142; // 0x8e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS;
+static { SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS = null; }
+
+/***/
+
+public static final int SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS_ID = 261; // 0x105
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A;
+static { SUPPLEMENTARY_PRIVATE_USE_AREA_A = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_A_ID = 109; // 0x6d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B;
+static { SUPPLEMENTARY_PRIVATE_USE_AREA_B = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_B_ID = 110; // 0x6e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUTTON_SIGNWRITING;
+static { SUTTON_SIGNWRITING = null; }
+
+/***/
+
+public static final int SUTTON_SIGNWRITING_ID = 262; // 0x106
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYLOTI_NAGRI;
+static { SYLOTI_NAGRI = null; }
+
+/**
+ */
+
+public static final int SYLOTI_NAGRI_ID = 143; // 0x8f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A;
+static { SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A = null; }
+
+/***/
+
+public static final int SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A_ID = 298; // 0x12a
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_FOR_LEGACY_COMPUTING;
+static { SYMBOLS_FOR_LEGACY_COMPUTING = null; }
+
+/***/
+
+public static final int SYMBOLS_FOR_LEGACY_COMPUTING_ID = 306; // 0x132
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC;
+static { SYRIAC = null; }
+
+/**
+ */
+
+public static final int SYRIAC_ID = 13; // 0xd
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC_SUPPLEMENT;
+static { SYRIAC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int SYRIAC_SUPPLEMENT_ID = 279; // 0x117
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAGALOG;
+static { TAGALOG = null; }
+
+/**
+ */
+
+public static final int TAGALOG_ID = 98; // 0x62
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAGBANWA;
+static { TAGBANWA = null; }
+
+/**
+ */
+
+public static final int TAGBANWA_ID = 101; // 0x65
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAGS;
+static { TAGS = null; }
+
+/**
+ */
+
+public static final int TAGS_ID = 96; // 0x60
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_LE;
+static { TAI_LE = null; }
+
+/**
+ */
+
+public static final int TAI_LE_ID = 112; // 0x70
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_THAM;
+static { TAI_THAM = null; }
+
+/***/
+
+public static final int TAI_THAM_ID = 174; // 0xae
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_VIET;
+static { TAI_VIET = null; }
+
+/***/
+
+public static final int TAI_VIET_ID = 183; // 0xb7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_XUAN_JING_SYMBOLS;
+static { TAI_XUAN_JING_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int TAI_XUAN_JING_SYMBOLS_ID = 124; // 0x7c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAKRI;
+static { TAKRI = null; }
+
+/***/
+
+public static final int TAKRI_ID = 220; // 0xdc
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL;
+static { TAMIL = null; }
+
+/**
+ */
+
+public static final int TAMIL_ID = 20; // 0x14
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL_SUPPLEMENT;
+static { TAMIL_SUPPLEMENT = null; }
+
+/***/
+
+public static final int TAMIL_SUPPLEMENT_ID = 299; // 0x12b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT;
+static { TANGUT = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_COMPONENTS;
+static { TANGUT_COMPONENTS = null; }
+
+/***/
+
+public static final int TANGUT_COMPONENTS_ID = 273; // 0x111
+
+/***/
+
+public static final int TANGUT_ID = 272; // 0x110
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_SUPPLEMENT;
+static { TANGUT_SUPPLEMENT = null; }
+
+/***/
+
+public static final int TANGUT_SUPPLEMENT_ID = 307; // 0x133
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TELUGU;
+static { TELUGU = null; }
+
+/**
+ */
+
+public static final int TELUGU_ID = 21; // 0x15
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock THAANA;
+static { THAANA = null; }
+
+/**
+ */
+
+public static final int THAANA_ID = 14; // 0xe
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock THAI;
+static { THAI = null; }
+
+/**
+ */
+
+public static final int THAI_ID = 25; // 0x19
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TIBETAN;
+static { TIBETAN = null; }
+
+/**
+ */
+
+public static final int TIBETAN_ID = 27; // 0x1b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TIFINAGH;
+static { TIFINAGH = null; }
+
+/**
+ */
+
+public static final int TIFINAGH_ID = 144; // 0x90
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TIRHUTA;
+static { TIRHUTA = null; }
+
+/***/
+
+public static final int TIRHUTA_ID = 251; // 0xfb
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS;
+static { TRANSPORT_AND_MAP_SYMBOLS = null; }
+
+/***/
+
+public static final int TRANSPORT_AND_MAP_SYMBOLS_ID = 207; // 0xcf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock UGARITIC;
+static { UGARITIC = null; }
+
+/**
+ */
+
+public static final int UGARITIC_ID = 120; // 0x78
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS;
+static { UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED;
+static { UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED = null; }
+
+/***/
+
+public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_ID = 173; // 0xad
+
+/**
+ */
+
+public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_ID = 33; // 0x21
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VAI;
+static { VAI = null; }
+
+/**
+ */
+
+public static final int VAI_ID = 159; // 0x9f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS;
+static { VARIATION_SELECTORS = null; }
+
+/**
+ */
+
+public static final int VARIATION_SELECTORS_ID = 108; // 0x6c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT;
+static { VARIATION_SELECTORS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int VARIATION_SELECTORS_SUPPLEMENT_ID = 125; // 0x7d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VEDIC_EXTENSIONS;
+static { VEDIC_EXTENSIONS = null; }
+
+/***/
+
+public static final int VEDIC_EXTENSIONS_ID = 175; // 0xaf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VERTICAL_FORMS;
+static { VERTICAL_FORMS = null; }
+
+/**
+ */
+
+public static final int VERTICAL_FORMS_ID = 145; // 0x91
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock WANCHO;
+static { WANCHO = null; }
+
+/***/
+
+public static final int WANCHO_ID = 300; // 0x12c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock WARANG_CITI;
+static { WARANG_CITI = null; }
+
+/***/
+
+public static final int WARANG_CITI_ID = 252; // 0xfc
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YEZIDI;
+static { YEZIDI = null; }
+
+/***/
+
+public static final int YEZIDI_ID = 308; // 0x134
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS;
+static { YIJING_HEXAGRAM_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int YIJING_HEXAGRAM_SYMBOLS_ID = 116; // 0x74
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YI_RADICALS;
+static { YI_RADICALS = null; }
+
+/**
+ */
+
+public static final int YI_RADICALS_ID = 73; // 0x49
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YI_SYLLABLES;
+static { YI_SYLLABLES = null; }
+
+/**
+ */
+
+public static final int YI_SYLLABLES_ID = 72; // 0x48
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ZANABAZAR_SQUARE;
+static { ZANABAZAR_SQUARE = null; }
+
+/***/
+
+public static final int ZANABAZAR_SQUARE_ID = 280; // 0x118
+}
+
+/**
+ * Vertical Orientation constants.
+ *
+ * @see android.icu.lang.UProperty#VERTICAL_ORIENTATION
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface VerticalOrientation {
+
+/***/
+
+public static final int ROTATED = 0; // 0x0
+
+/***/
+
+public static final int TRANSFORMED_ROTATED = 1; // 0x1
+
+/***/
+
+public static final int TRANSFORMED_UPRIGHT = 2; // 0x2
+
+/***/
+
+public static final int UPRIGHT = 3; // 0x3
+}
+
+/**
+ * Word Break constants.
+ * @see android.icu.lang.UProperty#WORD_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface WordBreak {
+
+/**
+ */
+
+public static final int ALETTER = 1; // 0x1
+
+/**
+ */
+
+public static final int CR = 8; // 0x8
+
+/***/
+
+public static final int DOUBLE_QUOTE = 16; // 0x10
+
+/**
+ */
+
+public static final int EXTEND = 9; // 0x9
+
+/**
+ */
+
+public static final int EXTENDNUMLET = 7; // 0x7
+
+/***/
+
+public static final int E_BASE = 17; // 0x11
+
+/***/
+
+public static final int E_BASE_GAZ = 18; // 0x12
+
+/***/
+
+public static final int E_MODIFIER = 19; // 0x13
+
+/**
+ */
+
+public static final int FORMAT = 2; // 0x2
+
+/***/
+
+public static final int GLUE_AFTER_ZWJ = 20; // 0x14
+
+/***/
+
+public static final int HEBREW_LETTER = 14; // 0xe
+
+/**
+ */
+
+public static final int KATAKANA = 3; // 0x3
+
+/**
+ */
+
+public static final int LF = 10; // 0xa
+
+/**
+ */
+
+public static final int MIDLETTER = 4; // 0x4
+
+/**
+ */
+
+public static final int MIDNUM = 5; // 0x5
+
+/**
+ */
+
+public static final int MIDNUMLET = 11; // 0xb
+
+/**
+ */
+
+public static final int NEWLINE = 12; // 0xc
+
+/**
+ */
+
+public static final int NUMERIC = 6; // 0x6
+
+/**
+ */
+
+public static final int OTHER = 0; // 0x0
+
+/***/
+
+public static final int REGIONAL_INDICATOR = 13; // 0xd
+
+/***/
+
+public static final int SINGLE_QUOTE = 15; // 0xf
+
+/***/
+
+public static final int WSEGSPACE = 22; // 0x16
+
+/***/
+
+public static final int ZWJ = 21; // 0x15
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterCategory.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterCategory.java
new file mode 100644
index 0000000..6bc1a80
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterCategory.java
@@ -0,0 +1,45 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 1996-2004, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+
+/**
+ * Enumerated Unicode category types from the UnicodeData.txt file.
+ * Used as return results from <a href=UCharacter.html>UCharacter</a>
+ * Equivalent to icu's UCharCategory.
+ * Refer to <a href="http://www.unicode.org/Public/UNIDATA/UCD.html">
+ * Unicode Consortium</a> for more information about UnicodeData.txt.
+ * <p>
+ * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with
+ * those returned by java.lang.Character.getType.  UCharacterCategory values
+ * match the ones used in ICU4C, while java.lang.Character type
+ * values, though similar, skip the value 17.</p>
+ * <p>
+ * This class is not subclassable
+ * </p>
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UCharacterCategory implements android.icu.lang.UCharacterEnums.ECharacterCategory {
+
+private UCharacterCategory() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the name of the argument category
+ * @param category to retrieve name
+ * @return category name
+ */
+
+public static java.lang.String toString(int category) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterDirection.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterDirection.java
new file mode 100644
index 0000000..ea575c1
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterDirection.java
@@ -0,0 +1,37 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2013, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+
+package android.icu.lang;
+
+
+/**
+ * Enumerated Unicode character linguistic direction constants.
+ * Used as return results from <a href=UCharacter.html>UCharacter</a>
+ * <p>
+ * This class is not subclassable
+ * </p>
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UCharacterDirection implements android.icu.lang.UCharacterEnums.ECharacterDirection {
+
+private UCharacterDirection() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the name of the argument direction
+ * @param dir direction type to retrieve name
+ * @return directional name
+ */
+
+public static java.lang.String toString(int dir) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterEnums.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterEnums.java
new file mode 100644
index 0000000..48d4d7a
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterEnums.java
@@ -0,0 +1,546 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 2004-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+
+/**
+ * A container for the different 'enumerated types' used by UCharacter.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UCharacterEnums {
+
+private UCharacterEnums() { throw new RuntimeException("Stub!"); }
+/**
+ * 'Enum' for the CharacterCategory constants.  These constants are
+ * compatible in name <b>but not in value</b> with those defined in
+ * {@link java.lang.Character}.
+ * @see android.icu.lang.UCharacterCategory
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface ECharacterCategory {
+
+/**
+ * Character type Mc
+ */
+
+public static final byte COMBINING_SPACING_MARK = 8; // 0x8
+
+/**
+ * Character type Pc
+ */
+
+public static final byte CONNECTOR_PUNCTUATION = 22; // 0x16
+
+/**
+ * Character type Cc
+ */
+
+public static final byte CONTROL = 15; // 0xf
+
+/**
+ * Character type Sc
+ */
+
+public static final byte CURRENCY_SYMBOL = 25; // 0x19
+
+/**
+ * Character type Pd
+ */
+
+public static final byte DASH_PUNCTUATION = 19; // 0x13
+
+/**
+ * Character type Nd
+ */
+
+public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9
+
+/**
+ * Character type Me
+ */
+
+public static final byte ENCLOSING_MARK = 7; // 0x7
+
+/**
+ * Character type Pe
+ */
+
+public static final byte END_PUNCTUATION = 21; // 0x15
+
+/**
+ * Character type Pf
+ * @see #FINAL_QUOTE_PUNCTUATION
+ */
+
+public static final byte FINAL_PUNCTUATION = 29; // 0x1d
+
+/**
+ * Character type Pf
+ * This name is compatible with java.lang.Character's name for this type.
+ * @see #FINAL_PUNCTUATION
+ */
+
+public static final byte FINAL_QUOTE_PUNCTUATION = 29; // 0x1d
+
+/**
+ * Character type Cf
+ */
+
+public static final byte FORMAT = 16; // 0x10
+
+/**
+ * Character type Cn
+ * Not Assigned (no characters in [UnicodeData.txt] have this property)
+ */
+
+public static final byte GENERAL_OTHER_TYPES = 0; // 0x0
+
+/**
+ * Character type Pi
+ * @see #INITIAL_QUOTE_PUNCTUATION
+ */
+
+public static final byte INITIAL_PUNCTUATION = 28; // 0x1c
+
+/**
+ * Character type Pi
+ * This name is compatible with java.lang.Character's name for this type.
+ * @see #INITIAL_PUNCTUATION
+ */
+
+public static final byte INITIAL_QUOTE_PUNCTUATION = 28; // 0x1c
+
+/**
+ * Character type Nl
+ */
+
+public static final byte LETTER_NUMBER = 10; // 0xa
+
+/**
+ * Character type Zl
+ */
+
+public static final byte LINE_SEPARATOR = 13; // 0xd
+
+/**
+ * Character type Ll
+ */
+
+public static final byte LOWERCASE_LETTER = 2; // 0x2
+
+/**
+ * Character type Sm
+ */
+
+public static final byte MATH_SYMBOL = 24; // 0x18
+
+/**
+ * Character type Lm
+ */
+
+public static final byte MODIFIER_LETTER = 4; // 0x4
+
+/**
+ * Character type Sk
+ */
+
+public static final byte MODIFIER_SYMBOL = 26; // 0x1a
+
+/**
+ * Character type Mn
+ */
+
+public static final byte NON_SPACING_MARK = 6; // 0x6
+
+/**
+ * Character type Lo
+ */
+
+public static final byte OTHER_LETTER = 5; // 0x5
+
+/**
+ * Character type No
+ */
+
+public static final byte OTHER_NUMBER = 11; // 0xb
+
+/**
+ * Character type Po
+ */
+
+public static final byte OTHER_PUNCTUATION = 23; // 0x17
+
+/**
+ * Character type So
+ */
+
+public static final byte OTHER_SYMBOL = 27; // 0x1b
+
+/**
+ * Character type Zp
+ */
+
+public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe
+
+/**
+ * Character type Co
+ */
+
+public static final byte PRIVATE_USE = 17; // 0x11
+
+/**
+ * Character type Zs
+ */
+
+public static final byte SPACE_SEPARATOR = 12; // 0xc
+
+/**
+ * Character type Ps
+ */
+
+public static final byte START_PUNCTUATION = 20; // 0x14
+
+/**
+ * Character type Cs
+ */
+
+public static final byte SURROGATE = 18; // 0x12
+
+/**
+ * Character type Lt
+ */
+
+public static final byte TITLECASE_LETTER = 3; // 0x3
+
+/**
+ * Unassigned character type
+ */
+
+public static final byte UNASSIGNED = 0; // 0x0
+
+/**
+ * Character type Lu
+ */
+
+public static final byte UPPERCASE_LETTER = 1; // 0x1
+}
+
+/**
+ * 'Enum' for the CharacterDirection constants. Some constants are
+ * compatible in name <b>but not in value</b> with those defined in
+ * {@link java.lang.Character}.
+ * @see android.icu.lang.UCharacterDirection
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface ECharacterDirection {
+
+/**
+ * Directional type AN
+ */
+
+public static final int ARABIC_NUMBER = 5; // 0x5
+
+/**
+ * Directional type B
+ */
+
+public static final int BLOCK_SEPARATOR = 7; // 0x7
+
+/**
+ * Directional type BN
+ */
+
+public static final int BOUNDARY_NEUTRAL = 18; // 0x12
+
+/**
+ * Directional type CS
+ */
+
+public static final int COMMON_NUMBER_SEPARATOR = 6; // 0x6
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_ARABIC_NUMBER}.
+ * Synonym of {@link #ARABIC_NUMBER}.
+ */
+
+public static final byte DIRECTIONALITY_ARABIC_NUMBER = 5; // 0x5
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_BOUNDARY_NEUTRAL}.
+ * Synonym of {@link #BOUNDARY_NEUTRAL}.
+ */
+
+public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 18; // 0x12
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR}.
+ * Synonym of {@link #COMMON_NUMBER_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 6; // 0x6
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER}.
+ * Synonym of {@link #EUROPEAN_NUMBER}.
+ */
+
+public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 2; // 0x2
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR}.
+ * Synonym of {@link #EUROPEAN_NUMBER_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR}.
+ * Synonym of {@link #EUROPEAN_NUMBER_TERMINATOR}.
+ */
+
+public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT}.
+ * Synonym of {@link #LEFT_TO_RIGHT}.
+ */
+
+public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING}.
+ * Synonym of {@link #LEFT_TO_RIGHT_EMBEDDING}.
+ */
+
+public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE}.
+ * Synonym of {@link #LEFT_TO_RIGHT_OVERRIDE}.
+ */
+
+public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_NONSPACING_MARK}.
+ * Synonym of {@link #DIR_NON_SPACING_MARK}.
+ */
+
+public static final byte DIRECTIONALITY_NONSPACING_MARK = 17; // 0x11
+
+/**
+ * Equivalent to {@link java.lang.Character#DIRECTIONALITY_OTHER_NEUTRALS}.
+ * Synonym of {@link #OTHER_NEUTRAL}.
+ */
+
+public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 10; // 0xa
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR}.
+ * Synonym of {@link #BLOCK_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 7; // 0x7
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT}.
+ * Synonym of {@link #POP_DIRECTIONAL_FORMAT}.
+ */
+
+public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 16; // 0x10
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT}.
+ * Synonym of {@link #RIGHT_TO_LEFT}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC}.
+ * Synonym of {@link #RIGHT_TO_LEFT_ARABIC}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING}.
+ * Synonym of {@link #RIGHT_TO_LEFT_EMBEDDING}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE}.
+ * Synonym of {@link #RIGHT_TO_LEFT_OVERRIDE}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_SEGMENT_SEPARATOR}.
+ * Synonym of {@link #SEGMENT_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 8; // 0x8
+
+/**
+ * Undefined bidirectional character type. Undefined <code>char</code>
+ * values have undefined directionality in the Unicode specification.
+ */
+
+public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff
+
+/**
+ * Equivalent to {@link java.lang.Character#DIRECTIONALITY_WHITESPACE}.
+ * Synonym of {@link #WHITE_SPACE_NEUTRAL}.
+ */
+
+public static final byte DIRECTIONALITY_WHITESPACE = 9; // 0x9
+
+/**
+ * Directional type NSM
+ */
+
+public static final int DIR_NON_SPACING_MARK = 17; // 0x11
+
+/**
+ * Directional type EN
+ */
+
+public static final int EUROPEAN_NUMBER = 2; // 0x2
+
+/**
+ * Directional type ES
+ */
+
+public static final int EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+
+/**
+ * Directional type ET
+ */
+
+public static final int EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+
+/**
+ * Directional type FSI
+ */
+
+public static final byte FIRST_STRONG_ISOLATE = 19; // 0x13
+
+/**
+ * Directional type L
+ */
+
+public static final int LEFT_TO_RIGHT = 0; // 0x0
+
+/**
+ * Directional type LRE
+ */
+
+public static final int LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+
+/**
+ * Directional type LRI
+ */
+
+public static final byte LEFT_TO_RIGHT_ISOLATE = 20; // 0x14
+
+/**
+ * Directional type LRO
+ */
+
+public static final int LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+
+/**
+ * Directional type ON
+ */
+
+public static final int OTHER_NEUTRAL = 10; // 0xa
+
+/**
+ * Directional type PDF
+ */
+
+public static final int POP_DIRECTIONAL_FORMAT = 16; // 0x10
+
+/**
+ * Directional type PDI
+ */
+
+public static final byte POP_DIRECTIONAL_ISOLATE = 22; // 0x16
+
+/**
+ * Directional type R
+ */
+
+public static final int RIGHT_TO_LEFT = 1; // 0x1
+
+/**
+ * Directional type AL
+ */
+
+public static final int RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+
+/**
+ * Directional type RLE
+ */
+
+public static final int RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+
+/**
+ * Directional type RLI
+ */
+
+public static final byte RIGHT_TO_LEFT_ISOLATE = 21; // 0x15
+
+/**
+ * Directional type RLO
+ */
+
+public static final int RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+
+/**
+ * Directional type S
+ */
+
+public static final int SEGMENT_SEPARATOR = 8; // 0x8
+
+/**
+ * Directional type WS
+ */
+
+public static final int WHITE_SPACE_NEUTRAL = 9; // 0x9
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UProperty.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UProperty.java
new file mode 100644
index 0000000..46fbcad
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UProperty.java
@@ -0,0 +1,940 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+
+package android.icu.lang;
+
+
+/**
+ * <p>Selection constants for Unicode properties.
+ * <p>These constants are used in functions like
+ * UCharacter.hasBinaryProperty(int) to select one of the Unicode properties.
+ *
+ * <p>The properties APIs are intended to reflect Unicode properties as
+ * defined in the Unicode Character Database (UCD) and Unicode Technical
+ * Reports (UTR).
+ * <p>For details about the properties see
+ * <a href="http://www.unicode.org/reports/tr44/">UAX #44: Unicode Character Database</a>.
+ *
+ * <p>Important: If ICU is built with UCD files from Unicode versions below
+ * 3.2, then properties marked with "new" are not or not fully
+ * available. Check UCharacter.getUnicodeVersion() to be sure.
+ * @author Syn Wee Quek
+ * @see android.icu.lang.UCharacter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface UProperty {
+
+/**
+ * String property Age.
+ * Corresponds to UCharacter.getAge(int).
+ */
+
+public static final int AGE = 16384; // 0x4000
+
+/**
+ * <p>Binary property Alphabetic.
+ * <p>Property for UCharacter.isUAlphabetic(), different from the property
+ * in UCharacter.isalpha().
+ * <p>Lu + Ll + Lt + Lm + Lo + Nl + Other_Alphabetic.
+ */
+
+public static final int ALPHABETIC = 0; // 0x0
+
+/**
+ * Binary property ASCII_Hex_Digit (0-9 A-F a-f).
+ */
+
+public static final int ASCII_HEX_DIGIT = 1; // 0x1
+
+/**
+ * Enumerated property Bidi_Class.
+ * Same as UCharacter.getDirection(int), returns UCharacterDirection values.
+ */
+
+public static final int BIDI_CLASS = 4096; // 0x1000
+
+/**
+ * <p>Binary property Bidi_Control.
+ * <p>Format controls which have specific functions in the Bidi Algorithm.
+ */
+
+public static final int BIDI_CONTROL = 2; // 0x2
+
+/**
+ * <p>Binary property Bidi_Mirrored.
+ * <p>Characters that may change display in RTL text.
+ * <p>Property for UCharacter.isMirrored().
+ * <p>See Bidi Algorithm; UTR 9.
+ */
+
+public static final int BIDI_MIRRORED = 3; // 0x3
+
+/**
+ * String property Bidi_Mirroring_Glyph.
+ * Corresponds to UCharacter.getMirror(int).
+ */
+
+public static final int BIDI_MIRRORING_GLYPH = 16385; // 0x4001
+
+/**
+ * String property Bidi_Paired_Bracket (new in Unicode 6.3).
+ * Corresponds to UCharacter.getBidiPairedBracket.
+ */
+
+public static final int BIDI_PAIRED_BRACKET = 16397; // 0x400d
+
+/**
+ * Enumerated property Bidi_Paired_Bracket_Type (new in Unicode 6.3).
+ * Used in UAX #9: Unicode Bidirectional Algorithm
+ * (http://www.unicode.org/reports/tr9/)
+ * Returns UCharacter.BidiPairedBracketType values.
+ */
+
+public static final int BIDI_PAIRED_BRACKET_TYPE = 4117; // 0x1015
+
+/**
+ * First constant for binary Unicode properties.
+ */
+
+public static final int BINARY_START = 0; // 0x0
+
+/**
+ * Enumerated property Block.
+ * Same as UCharacter.UnicodeBlock.of(int), returns UCharacter.UnicodeBlock
+ * values.
+ */
+
+public static final int BLOCK = 4097; // 0x1001
+
+/**
+ * Enumerated property Canonical_Combining_Class.
+ * Same as UCharacter.getCombiningClass(int), returns 8-bit numeric values.
+ */
+
+public static final int CANONICAL_COMBINING_CLASS = 4098; // 0x1002
+
+/**
+ * Binary property Cased.
+ * For Lowercase, Uppercase and Titlecase characters.
+ */
+
+public static final int CASED = 49; // 0x31
+
+/**
+ * String property Case_Folding.
+ * Corresponds to UCharacter.foldCase(String, boolean).
+ */
+
+public static final int CASE_FOLDING = 16386; // 0x4002
+
+/**
+ * Binary property Case_Ignorable.
+ * Used in context-sensitive case mappings.
+ */
+
+public static final int CASE_IGNORABLE = 50; // 0x32
+
+/**
+ * <p>Binary property Case_Sensitive.
+ * <p>Either the source of a case
+ * mapping or _in_ the target of a case mapping. Not the same as
+ * the general category Cased_Letter.
+ */
+
+public static final int CASE_SENSITIVE = 34; // 0x22
+
+/**
+ * Binary property Changes_When_Casefolded.
+ */
+
+public static final int CHANGES_WHEN_CASEFOLDED = 54; // 0x36
+
+/**
+ * Binary property Changes_When_Casemapped.
+ */
+
+public static final int CHANGES_WHEN_CASEMAPPED = 55; // 0x37
+
+/**
+ * Binary property Changes_When_Lowercased.
+ */
+
+public static final int CHANGES_WHEN_LOWERCASED = 51; // 0x33
+
+/**
+ * Binary property Changes_When_NFKC_Casefolded.
+ */
+
+public static final int CHANGES_WHEN_NFKC_CASEFOLDED = 56; // 0x38
+
+/**
+ * Binary property Changes_When_Titlecased.
+ */
+
+public static final int CHANGES_WHEN_TITLECASED = 53; // 0x35
+
+/**
+ * Binary property Changes_When_Uppercased.
+ */
+
+public static final int CHANGES_WHEN_UPPERCASED = 52; // 0x34
+
+/**
+ * <p>Binary property Dash.
+ * <p>Variations of dashes.
+ */
+
+public static final int DASH = 4; // 0x4
+
+/**
+ * Enumerated property Decomposition_Type.
+ * Returns UCharacter.DecompositionType values.
+ */
+
+public static final int DECOMPOSITION_TYPE = 4099; // 0x1003
+
+/**
+ * <p>Binary property Default_Ignorable_Code_Point (new).
+ *
+ * <p>Property that indicates codepoint is ignorable in most processing.
+ *
+ * <p>Codepoints (2060..206F, FFF0..FFFB, E0000..E0FFF) +
+ * Other_Default_Ignorable_Code_Point + (Cf + Cc + Cs - White_Space)
+ */
+
+public static final int DEFAULT_IGNORABLE_CODE_POINT = 5; // 0x5
+
+/**
+ * <p>Binary property Deprecated (new).
+ * <p>The usage of deprecated characters is strongly discouraged.
+ */
+
+public static final int DEPRECATED = 6; // 0x6
+
+/**
+ * <p>Binary property Diacritic.
+ * <p>Characters that linguistically modify the meaning of another
+ * character to which they apply.
+ */
+
+public static final int DIACRITIC = 7; // 0x7
+
+/**
+ * First constant for double Unicode properties.
+ */
+
+public static final int DOUBLE_START = 12288; // 0x3000
+
+/**
+ * Enumerated property East_Asian_Width.
+ * See http://www.unicode.org/reports/tr11/
+ * Returns UCharacter.EastAsianWidth values.
+ */
+
+public static final int EAST_ASIAN_WIDTH = 4100; // 0x1004
+
+/**
+ * Binary property Emoji.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI = 57; // 0x39
+
+/**
+ * Binary property Emoji_Component.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_COMPONENT = 61; // 0x3d
+
+/**
+ * Binary property Emoji_Modifier.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_MODIFIER = 59; // 0x3b
+
+/**
+ * Binary property Emoji_Modifier_Base.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_MODIFIER_BASE = 60; // 0x3c
+
+/**
+ * Binary property Emoji_Presentation.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_PRESENTATION = 58; // 0x3a
+
+/**
+ * Binary property Extended_Pictographic.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EXTENDED_PICTOGRAPHIC = 64; // 0x40
+
+/**
+ * <p>Binary property Extender.
+ * <p>Extend the value or shape of a preceding alphabetic character, e.g.
+ * length and iteration marks.
+ */
+
+public static final int EXTENDER = 8; // 0x8
+
+/**
+ * <p>Binary property Full_Composition_Exclusion.
+ * <p>CompositionExclusions.txt + Singleton Decompositions +
+ * Non-Starter Decompositions.
+ */
+
+public static final int FULL_COMPOSITION_EXCLUSION = 9; // 0x9
+
+/**
+ * Enumerated property General_Category.
+ * Same as UCharacter.getType(int), returns UCharacterCategory values.
+ */
+
+public static final int GENERAL_CATEGORY = 4101; // 0x1005
+
+/**
+ * Bitmask property General_Category_Mask.
+ * This is the General_Category property returned as a bit mask.
+ * When used in UCharacter.getIntPropertyValue(c),
+ * returns bit masks for UCharacterCategory values where exactly one bit is set.
+ * When used with UCharacter.getPropertyValueName() and UCharacter.getPropertyValueEnum(),
+ * a multi-bit mask is used for sets of categories like "Letters".
+ */
+
+public static final int GENERAL_CATEGORY_MASK = 8192; // 0x2000
+
+/**
+ * <p>Binary property Grapheme_Base (new).
+ * <p>For programmatic determination of grapheme cluster boundaries.
+ * [0..10FFFF]-Cc-Cf-Cs-Co-Cn-Zl-Zp-Grapheme_Link-Grapheme_Extend-CGJ
+ */
+
+public static final int GRAPHEME_BASE = 10; // 0xa
+
+/**
+ * Enumerated property Grapheme_Cluster_Break (new in Unicode 4.1).
+ * Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ * Returns UCharacter.GraphemeClusterBreak values.
+ */
+
+public static final int GRAPHEME_CLUSTER_BREAK = 4114; // 0x1012
+
+/**
+ * <p>Binary property Grapheme_Extend (new).
+ * <p>For programmatic determination of grapheme cluster boundaries.
+ * <p>Me+Mn+Mc+Other_Grapheme_Extend-Grapheme_Link-CGJ
+ */
+
+public static final int GRAPHEME_EXTEND = 11; // 0xb
+
+/**
+ * <p>Binary property Grapheme_Link (new).
+ * <p>For programmatic determination of grapheme cluster boundaries.
+ */
+
+public static final int GRAPHEME_LINK = 12; // 0xc
+
+/**
+ * Enumerated property Hangul_Syllable_Type, new in Unicode 4.
+ * Returns UCharacter.HangulSyllableType values.
+ */
+
+public static final int HANGUL_SYLLABLE_TYPE = 4107; // 0x100b
+
+/**
+ * <p>Binary property Hex_Digit.
+ * <p>Characters commonly used for hexadecimal numbers.
+ */
+
+public static final int HEX_DIGIT = 13; // 0xd
+
+/**
+ * <p>Binary property Hyphen.
+ * <p>Dashes used to mark connections between pieces of words, plus the
+ * Katakana middle dot.
+ */
+
+public static final int HYPHEN = 14; // 0xe
+
+/**
+ * <p>Binary property Ideographic.
+ * <p>CJKV ideographs.
+ */
+
+public static final int IDEOGRAPHIC = 17; // 0x11
+
+/**
+ * <p>Binary property IDS_Binary_Operator (new).
+ * <p>For programmatic determination of Ideographic Description Sequences.
+ */
+
+public static final int IDS_BINARY_OPERATOR = 18; // 0x12
+
+/**
+ * <p>Binary property IDS_Trinary_Operator (new).
+ * <p>For programmatic determination of Ideographic Description
+ * Sequences.
+ */
+
+public static final int IDS_TRINARY_OPERATOR = 19; // 0x13
+
+/**
+ * <p>Binary property ID_Continue.
+ * <p>Characters that can continue an identifier.
+ * <p>ID_Start+Mn+Mc+Nd+Pc
+ */
+
+public static final int ID_CONTINUE = 15; // 0xf
+
+/**
+ * <p>Binary property ID_Start.
+ * <p>Characters that can start an identifier.
+ * <p>Lu+Ll+Lt+Lm+Lo+Nl
+ */
+
+public static final int ID_START = 16; // 0x10
+
+/**
+ * Enumerated property Indic_Positional_Category.
+ * New in Unicode 6.0 as provisional property Indic_Matra_Category;
+ * renamed and changed to informative in Unicode 8.0.
+ * See http://www.unicode.org/reports/tr44/#IndicPositionalCategory.txt
+ */
+
+public static final int INDIC_POSITIONAL_CATEGORY = 4118; // 0x1016
+
+/**
+ * Enumerated property Indic_Syllabic_Category.
+ * New in Unicode 6.0 as provisional; informative since Unicode 8.0.
+ * See http://www.unicode.org/reports/tr44/#IndicSyllabicCategory.txt
+ */
+
+public static final int INDIC_SYLLABIC_CATEGORY = 4119; // 0x1017
+
+/**
+ * First constant for enumerated/integer Unicode properties.
+ */
+
+public static final int INT_START = 4096; // 0x1000
+
+/**
+ * Enumerated property Joining_Group.
+ * Returns UCharacter.JoiningGroup values.
+ */
+
+public static final int JOINING_GROUP = 4102; // 0x1006
+
+/**
+ * Enumerated property Joining_Type.
+ * Returns UCharacter.JoiningType values.
+ */
+
+public static final int JOINING_TYPE = 4103; // 0x1007
+
+/**
+ * <p>Binary property Join_Control.
+ * <p>Format controls for cursive joining and ligation.
+ */
+
+public static final int JOIN_CONTROL = 20; // 0x14
+
+/**
+ * Enumerated property Lead_Canonical_Combining_Class.
+ * ICU-specific property for the ccc of the first code point
+ * of the decomposition, or lccc(c)=ccc(NFD(c)[0]).
+ * Useful for checking for canonically ordered text;
+ * see Normalizer.FCD and http://www.unicode.org/notes/tn5/#FCD .
+ * Returns 8-bit numeric values like CANONICAL_COMBINING_CLASS.
+ */
+
+public static final int LEAD_CANONICAL_COMBINING_CLASS = 4112; // 0x1010
+
+/**
+ * Enumerated property Line_Break.
+ * Returns UCharacter.LineBreak values.
+ */
+
+public static final int LINE_BREAK = 4104; // 0x1008
+
+/**
+ * <p>Binary property Logical_Order_Exception (new).
+ * <p>Characters that do not use logical order and require special
+ * handling in most processing.
+ */
+
+public static final int LOGICAL_ORDER_EXCEPTION = 21; // 0x15
+
+/**
+ * <p>Binary property Lowercase.
+ * <p>Same as UCharacter.isULowercase(), different from
+ * UCharacter.islower().
+ * <p>Ll+Other_Lowercase
+ */
+
+public static final int LOWERCASE = 22; // 0x16
+
+/**
+ * String property Lowercase_Mapping.
+ * Corresponds to UCharacter.toLowerCase(String).
+ */
+
+public static final int LOWERCASE_MAPPING = 16388; // 0x4004
+
+/**
+ * First constant for bit-mask Unicode properties.
+ */
+
+public static final int MASK_START = 8192; // 0x2000
+
+/** <p>Binary property Math.
+ * <p>Sm+Other_Math
+ */
+
+public static final int MATH = 23; // 0x17
+
+/**
+ * String property Name.
+ * Corresponds to UCharacter.getName(int).
+ */
+
+public static final int NAME = 16389; // 0x4005
+
+/**
+ * Binary property NFC_Inert.
+ * ICU-specific property for characters that are inert under NFC,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ * @see #NFD_INERT
+ */
+
+public static final int NFC_INERT = 39; // 0x27
+
+/**
+ * Enumerated property NFC_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFC_QUICK_CHECK = 4110; // 0x100e
+
+/**
+ * Binary property NFD_Inert.
+ * ICU-specific property for characters that are inert under NFD,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ *
+ * There is one such property per normalization form.
+ * These properties are computed as follows - an inert character is:
+ * a) unassigned, or ALL of the following:
+ * b) of combining class 0.
+ * c) not decomposed by this normalization form.
+ * AND if NFC or NFKC,
+ * d) can never compose with a previous character.
+ * e) can never compose with a following character.
+ * f) can never change if another character is added.
+ * Example: a-breve might satisfy all but f, but if you
+ * add an ogonek it changes to a-ogonek + breve
+ *
+ * See also com.ibm.text.UCD.NFSkippable in the ICU4J repository,
+ * and icu/source/common/unormimp.h .
+ */
+
+public static final int NFD_INERT = 37; // 0x25
+
+/**
+ * Enumerated property NFD_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFD_QUICK_CHECK = 4108; // 0x100c
+
+/**
+ * Binary property NFKC_Inert.
+ * ICU-specific property for characters that are inert under NFKC,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ * @see #NFD_INERT
+ */
+
+public static final int NFKC_INERT = 40; // 0x28
+
+/**
+ * Enumerated property NFKC_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFKC_QUICK_CHECK = 4111; // 0x100f
+
+/**
+ * Binary property NFKD_Inert.
+ * ICU-specific property for characters that are inert under NFKD,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ * @see #NFD_INERT
+ */
+
+public static final int NFKD_INERT = 38; // 0x26
+
+/**
+ * Enumerated property NFKD_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFKD_QUICK_CHECK = 4109; // 0x100d
+
+/**
+ * <p>Binary property Noncharacter_Code_Point.
+ * <p>Code points that are explicitly defined as illegal for the encoding
+ * of characters.
+ */
+
+public static final int NONCHARACTER_CODE_POINT = 24; // 0x18
+
+/**
+ * Enumerated property Numeric_Type.
+ * Returns UCharacter.NumericType values.
+ */
+
+public static final int NUMERIC_TYPE = 4105; // 0x1009
+
+/**
+ * Double property Numeric_Value.
+ * Corresponds to UCharacter.getUnicodeNumericValue(int).
+ */
+
+public static final int NUMERIC_VALUE = 12288; // 0x3000
+
+/**
+ * First constant for Unicode properties with unusual value types.
+ */
+
+public static final int OTHER_PROPERTY_START = 28672; // 0x7000
+
+/**
+ * Binary property Pattern_Syntax (new in Unicode 4.1).
+ * See UAX #31 Identifier and Pattern Syntax
+ * (http://www.unicode.org/reports/tr31/)
+ */
+
+public static final int PATTERN_SYNTAX = 42; // 0x2a
+
+/**
+ * Binary property Pattern_White_Space (new in Unicode 4.1).
+ * See UAX #31 Identifier and Pattern Syntax
+ * (http://www.unicode.org/reports/tr31/)
+ */
+
+public static final int PATTERN_WHITE_SPACE = 43; // 0x2b
+
+/**
+ * Binary property alnum (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_ALNUM = 44; // 0x2c
+
+/**
+ * Binary property blank (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_BLANK = 45; // 0x2d
+
+/**
+ * Binary property graph (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_GRAPH = 46; // 0x2e
+
+/**
+ * Binary property print (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_PRINT = 47; // 0x2f
+
+/**
+ * Binary property xdigit (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_XDIGIT = 48; // 0x30
+
+/**
+ * Binary property Prepended_Concatenation_Mark.
+ */
+
+public static final int PREPENDED_CONCATENATION_MARK = 63; // 0x3f
+
+/**
+ * <p>Binary property Quotation_Mark.
+ */
+
+public static final int QUOTATION_MARK = 25; // 0x19
+
+/**
+ * <p>Binary property Radical (new).
+ * <p>For programmatic determination of Ideographic Description
+ * Sequences.
+ */
+
+public static final int RADICAL = 26; // 0x1a
+
+/**
+ * Binary property Regional_Indicator.
+ */
+
+public static final int REGIONAL_INDICATOR = 62; // 0x3e
+
+/**
+ * Enumerated property Script.
+ * Same as UScript.getScript(int), returns UScript values.
+ */
+
+public static final int SCRIPT = 4106; // 0x100a
+
+/**
+ * Miscellaneous property Script_Extensions (new in Unicode 6.0).
+ * Some characters are commonly used in multiple scripts.
+ * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
+ * Corresponds to UScript.hasScript and UScript.getScriptExtensions.
+ */
+
+public static final int SCRIPT_EXTENSIONS = 28672; // 0x7000
+
+/**
+ * Binary Property Segment_Starter.
+ * ICU-specific property for characters that are starters in terms of
+ * Unicode normalization and combining character sequences.
+ * They have ccc=0 and do not occur in non-initial position of the
+ * canonical decomposition of any character
+ * (like " in NFD(a-umlaut) and a Jamo T in an NFD(Hangul LVT)).
+ * ICU uses this property for segmenting a string for generating a set of
+ * canonically equivalent strings, e.g. for canonical closure while
+ * processing collation tailoring rules.
+ */
+
+public static final int SEGMENT_STARTER = 41; // 0x29
+
+/**
+ * Enumerated property Sentence_Break (new in Unicode 4.1).
+ * Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ * Returns UCharacter.SentenceBreak values.
+ */
+
+public static final int SENTENCE_BREAK = 4115; // 0x1013
+
+/**
+ * String property Simple_Case_Folding.
+ * Corresponds to UCharacter.foldCase(int, boolean).
+ */
+
+public static final int SIMPLE_CASE_FOLDING = 16390; // 0x4006
+
+/**
+ * String property Simple_Lowercase_Mapping.
+ * Corresponds to UCharacter.toLowerCase(int).
+ */
+
+public static final int SIMPLE_LOWERCASE_MAPPING = 16391; // 0x4007
+
+/**
+ * String property Simple_Titlecase_Mapping.
+ * Corresponds to UCharacter.toTitleCase(int).
+ */
+
+public static final int SIMPLE_TITLECASE_MAPPING = 16392; // 0x4008
+
+/**
+ * String property Simple_Uppercase_Mapping.
+ * Corresponds to UCharacter.toUpperCase(int).
+ */
+
+public static final int SIMPLE_UPPERCASE_MAPPING = 16393; // 0x4009
+
+/**
+ * <p>Binary property Soft_Dotted (new).
+ * <p>Characters with a "soft dot", like i or j.
+ * <p>An accent placed on these characters causes the dot to disappear.
+ */
+
+public static final int SOFT_DOTTED = 27; // 0x1b
+
+/**
+ * First constant for string Unicode properties.
+ */
+
+public static final int STRING_START = 16384; // 0x4000
+
+/**
+ * Binary property STerm (new in Unicode 4.0.1).
+ * Sentence Terminal. Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ */
+
+public static final int S_TERM = 35; // 0x23
+
+/**
+ * <p>Binary property Terminal_Punctuation.
+ * <p>Punctuation characters that generally mark the end of textual
+ * units.
+ */
+
+public static final int TERMINAL_PUNCTUATION = 28; // 0x1c
+
+/**
+ * String property Titlecase_Mapping.
+ * Corresponds to UCharacter.toTitleCase(String).
+ */
+
+public static final int TITLECASE_MAPPING = 16394; // 0x400a
+
+/**
+ * Enumerated property Trail_Canonical_Combining_Class.
+ * ICU-specific property for the ccc of the last code point
+ * of the decomposition, or lccc(c)=ccc(NFD(c)[last]).
+ * Useful for checking for canonically ordered text;
+ * see Normalizer.FCD and http://www.unicode.org/notes/tn5/#FCD .
+ * Returns 8-bit numeric values like CANONICAL_COMBINING_CLASS.
+ */
+
+public static final int TRAIL_CANONICAL_COMBINING_CLASS = 4113; // 0x1011
+
+/**
+ * <p>Binary property Unified_Ideograph (new).
+ * <p>For programmatic determination of Ideographic Description
+ * Sequences.
+ */
+
+public static final int UNIFIED_IDEOGRAPH = 29; // 0x1d
+
+/**
+ * <p>Binary property Uppercase.
+ * <p>Same as UCharacter.isUUppercase(), different from
+ * UCharacter.isUpperCase().
+ * <p>Lu+Other_Uppercase
+ */
+
+public static final int UPPERCASE = 30; // 0x1e
+
+/**
+ * String property Uppercase_Mapping.
+ * Corresponds to UCharacter.toUpperCase(String).
+ */
+
+public static final int UPPERCASE_MAPPING = 16396; // 0x400c
+
+/**
+ * Binary property Variation_Selector (new in Unicode 4.0.1).
+ * Indicates all those characters that qualify as Variation Selectors.
+ * For details on the behavior of these characters,
+ * see StandardizedVariants.html and 15.6 Variation Selectors.
+ */
+
+public static final int VARIATION_SELECTOR = 36; // 0x24
+
+/**
+ * Enumerated property Vertical_Orientation.
+ * Used for UAX #50 Unicode Vertical Text Layout (https://www.unicode.org/reports/tr50/).
+ * New as a UCD property in Unicode 10.0.
+ */
+
+public static final int VERTICAL_ORIENTATION = 4120; // 0x1018
+
+/**
+ * <p>Binary property White_Space.
+ * <p>Same as UCharacter.isUWhiteSpace(), different from
+ * UCharacter.isSpace() and UCharacter.isWhitespace().
+ * Space characters+TAB+CR+LF-ZWSP-ZWNBSP
+ */
+
+public static final int WHITE_SPACE = 31; // 0x1f
+
+/**
+ * Enumerated property Word_Break (new in Unicode 4.1).
+ * Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ * Returns UCharacter.WordBreak values.
+ */
+
+public static final int WORD_BREAK = 4116; // 0x1014
+
+/**
+ * <p>Binary property XID_Continue.
+ * <p>ID_Continue modified to allow closure under normalization forms
+ * NFKC and NFKD.
+ */
+
+public static final int XID_CONTINUE = 32; // 0x20
+
+/**
+ * <p>Binary property XID_Start.
+ * <p>ID_Start modified to allow closure under normalization forms NFKC
+ * and NFKD.
+ */
+
+public static final int XID_START = 33; // 0x21
+/**
+ * Selector constants for UCharacter.getPropertyName() and
+ * UCharacter.getPropertyValueName().  These selectors are used to
+ * choose which name is returned for a given property or value.
+ * All properties and values have a long name.  Most have a short
+ * name, but some do not.  Unicode allows for additional names,
+ * beyond the long and short name, which would be indicated by
+ * LONG + i, where i=1, 2,...
+ *
+ * @see android.icu.lang.UCharacter#getPropertyName
+ * @see android.icu.lang.UCharacter#getPropertyValueName
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface NameChoice {
+
+/**
+ * Selector for the long name of a property or value.  All
+ * properties and values have a long name.
+ */
+
+public static final int LONG = 1; // 0x1
+
+/**
+ * Selector for the abbreviated name of a property or value.
+ * Most properties and values have a short name; those that do
+ * not return null.
+ */
+
+public static final int SHORT = 0; // 0x0
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UScript.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UScript.java
new file mode 100644
index 0000000..36c59aa
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/lang/UScript.java
@@ -0,0 +1,1448 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 2001-2016 International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import java.util.BitSet;
+
+/**
+ * Constants for ISO 15924 script codes, and related functions.
+ *
+ * <p>The current set of script code constants supports at least all scripts
+ * that are encoded in the version of Unicode which ICU currently supports.
+ * The names of the constants are usually derived from the
+ * Unicode script property value aliases.
+ * See UAX #24 Unicode Script Property (http://www.unicode.org/reports/tr24/)
+ * and http://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt .
+ *
+ * <p>In addition, constants for many ISO 15924 script codes
+ * are included, for use with language tags, CLDR data, and similar.
+ * Some of those codes are not used in the Unicode Character Database (UCD).
+ * For example, there are no characters that have a UCD script property value of
+ * Hans or Hant. All Han ideographs have the Hani script property value in Unicode.
+ *
+ * <p>Private-use codes Qaaa..Qabx are not included, except as used in the UCD or in CLDR.
+ *
+ * <p>Starting with ICU 55, script codes are only added when their scripts
+ * have been or will certainly be encoded in Unicode,
+ * and have been assigned Unicode script property value aliases,
+ * to ensure that their script names are stable and match the names of the constants.
+ * Script codes like Latf and Aran that are not subject to separate encoding
+ * may be added at any time.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UScript {
+
+private UScript() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a script codes associated with the given locale or ISO 15924 abbreviation or name.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ * Returns LATIN given "en" OR "en_US"
+ * @param locale Locale
+ * @return The script codes array. null if the the code cannot be found.
+ */
+
+public static int[] getCode(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a script codes associated with the given locale or ISO 15924 abbreviation or name.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ * Returns LATIN given "en" OR "en_US"
+ * @param locale ULocale
+ * @return The script codes array. null if the the code cannot be found.
+ */
+
+public static int[] getCode(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the script codes associated with the given locale or ISO 15924 abbreviation or name.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ * Returns LATIN given "en" OR "en_US"
+ *
+ * <p>Note: To search by short or long script alias only, use
+ * {@link #getCodeFromName(java.lang.String)} instead.
+ * That does a fast lookup with no access of the locale data.
+ *
+ * @param nameOrAbbrOrLocale name of the script or ISO 15924 code or locale
+ * @return The script codes array. null if the the code cannot be found.
+ */
+
+public static int[] getCode(java.lang.String nameOrAbbrOrLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script code associated with the given Unicode script property alias
+ * (name or abbreviation).
+ * Short aliases are ISO 15924 script codes.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ *
+ * @param nameOrAbbr name of the script or ISO 15924 code
+ * @return The script code value, or INVALID_CODE if the code cannot be found.
+ */
+
+public static int getCodeFromName(java.lang.String nameOrAbbr) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the script code associated with the given codepoint.
+ * Returns UScript.MALAYAM given 0x0D02
+ * @param codepoint UChar32 codepoint
+ * @return The script code
+ */
+
+public static int getScript(int codepoint) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Do the Script_Extensions of code point c contain script sc?
+ * If c does not have explicit Script_Extensions, then this tests whether
+ * c has the Script property value sc.
+ *
+ * <p>Some characters are commonly used in multiple scripts.
+ * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
+ *
+ * @param c code point
+ * @param sc script code
+ * @return true if sc is in Script_Extensions(c)
+ */
+
+public static boolean hasScript(int c, int sc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets code point c's Script_Extensions as script code integers into the output BitSet.
+ * <ul>
+ * <li>If c does have Script_Extensions, then the return value is
+ * the negative number of Script_Extensions codes (= -set.cardinality());
+ * in this case, the Script property value
+ * (normally Common or Inherited) is not included in the set.
+ * <li>If c does not have Script_Extensions, then the one Script code is put into the set
+ * and also returned.
+ * <li>If c is not a valid code point, then the one {@link #UNKNOWN} code is put into the set
+ * and also returned.
+ * </ul>
+ * In other words, if the return value is non-negative, it is c's single Script code
+ * and the set contains exactly this Script code.
+ * If the return value is -n, then the set contains c's n&gt;=2 Script_Extensions script codes.
+ *
+ * <p>Some characters are commonly used in multiple scripts.
+ * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
+ *
+ * @param c code point
+ * @param set set of script code integers; will be cleared, then bits are set
+ *            corresponding to c's Script_Extensions
+ * @return negative number of script codes in c's Script_Extensions,
+ *         or the non-negative single Script value
+ */
+
+public static int getScriptExtensions(int c, java.util.BitSet set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the long Unicode script name, if there is one.
+ * Otherwise returns the 4-letter ISO 15924 script code.
+ * Returns "Malayam" given MALAYALAM.
+ *
+ * @param scriptCode int script code
+ * @return long script name as given in PropertyValueAliases.txt, or the 4-letter code
+ * @throws java.lang.IllegalArgumentException if the script code is not valid
+ */
+
+public static java.lang.String getName(int scriptCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the 4-letter ISO 15924 script code,
+ * which is the same as the short Unicode script name if Unicode has names for the script.
+ * Returns "Mlym" given MALAYALAM.
+ *
+ * @param scriptCode int script code
+ * @return short script name (4-letter code)
+ * @throws java.lang.IllegalArgumentException if the script code is not valid
+ */
+
+public static java.lang.String getShortName(int scriptCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script sample character string.
+ * This string normally consists of one code point but might be longer.
+ * The string is empty if the script is not encoded.
+ *
+ * @param script script code
+ * @return the sample character string
+ */
+
+public static java.lang.String getSampleString(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script usage according to UAX #31 Unicode Identifier and Pattern Syntax.
+ * Returns {@link android.icu.lang.UScript.ScriptUsage#NOT_ENCODED ScriptUsage#NOT_ENCODED} if the script is not encoded in Unicode.
+ *
+ * @param script script code
+ * @return script usage
+ * @see android.icu.lang.UScript.ScriptUsage
+ */
+
+public static android.icu.lang.UScript.ScriptUsage getUsage(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the script is written right-to-left.
+ * For example, Arab and Hebr.
+ *
+ * @param script script code
+ * @return true if the script is right-to-left
+ */
+
+public static boolean isRightToLeft(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the script allows line breaks between letters (excluding hyphenation).
+ * Such a script typically requires dictionary-based line breaking.
+ * For example, Hani and Thai.
+ *
+ * @param script script code
+ * @return true if the script allows line breaks between letters
+ */
+
+public static boolean breaksBetweenLetters(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if in modern (or most recent) usage of the script case distinctions are customary.
+ * For example, Latn and Cyrl.
+ *
+ * @param script script code
+ * @return true if the script is cased
+ */
+
+public static boolean isCased(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ADLAM = 167; // 0xa7
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int AFAKA = 147; // 0x93
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int AHOM = 161; // 0xa1
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ANATOLIAN_HIEROGLYPHS = 156; // 0x9c
+
+/**
+ * Arabic
+ */
+
+public static final int ARABIC = 2; // 0x2
+
+/**
+ * Armenian
+ */
+
+public static final int ARMENIAN = 3; // 0x3
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int AVESTAN = 117; // 0x75
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BALINESE = 62; // 0x3e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BAMUM = 130; // 0x82
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BASSA_VAH = 134; // 0x86
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BATAK = 63; // 0x3f
+
+/**
+ * Bengali
+ */
+
+public static final int BENGALI = 4; // 0x4
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BHAIKSUKI = 168; // 0xa8
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BLISSYMBOLS = 64; // 0x40
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BOOK_PAHLAVI = 124; // 0x7c
+
+/**
+ * Bopomofo
+ */
+
+public static final int BOPOMOFO = 5; // 0x5
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BRAHMI = 65; // 0x41
+
+/**
+ * Braille
+ * Script in Unicode 4
+ *
+ */
+
+public static final int BRAILLE = 46; // 0x2e
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int BUGINESE = 55; // 0x37
+
+/**
+ * Buhid
+ */
+
+public static final int BUHID = 44; // 0x2c
+
+/**
+ * Unified Canadian Aboriginal Symbols
+ */
+
+public static final int CANADIAN_ABORIGINAL = 40; // 0x28
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CARIAN = 104; // 0x68
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CAUCASIAN_ALBANIAN = 159; // 0x9f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CHAKMA = 118; // 0x76
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CHAM = 66; // 0x42
+
+/**
+ * Cherokee
+ */
+
+public static final int CHEROKEE = 6; // 0x6
+
+/***/
+
+public static final int CHORASMIAN = 189; // 0xbd
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CIRTH = 67; // 0x43
+
+/**
+ * Common
+ */
+
+public static final int COMMON = 0; // 0x0
+
+/**
+ * Coptic
+ */
+
+public static final int COPTIC = 7; // 0x7
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CUNEIFORM = 101; // 0x65
+
+/**
+ * Cypriot
+ * Script in Unicode 4
+ *
+ */
+
+public static final int CYPRIOT = 47; // 0x2f
+
+/**
+ * Cyrillic
+ */
+
+public static final int CYRILLIC = 8; // 0x8
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int DEMOTIC_EGYPTIAN = 69; // 0x45
+
+/**
+ * Deseret
+ */
+
+public static final int DESERET = 9; // 0x9
+
+/**
+ * Devanagari
+ */
+
+public static final int DEVANAGARI = 10; // 0xa
+
+/***/
+
+public static final int DIVES_AKURU = 190; // 0xbe
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int DOGRA = 178; // 0xb2
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int DUPLOYAN = 135; // 0x87
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int EASTERN_SYRIAC = 97; // 0x61
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int EGYPTIAN_HIEROGLYPHS = 71; // 0x47
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ELBASAN = 136; // 0x88
+
+/***/
+
+public static final int ELYMAIC = 185; // 0xb9
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ESTRANGELO_SYRIAC = 95; // 0x5f
+
+/**
+ * Ethiopic
+ */
+
+public static final int ETHIOPIC = 11; // 0xb
+
+/**
+ * Georgian
+ */
+
+public static final int GEORGIAN = 12; // 0xc
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int GLAGOLITIC = 56; // 0x38
+
+/**
+ * Gothic
+ */
+
+public static final int GOTHIC = 13; // 0xd
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int GRANTHA = 137; // 0x89
+
+/**
+ * Greek
+ */
+
+public static final int GREEK = 14; // 0xe
+
+/**
+ * Gujarati
+ */
+
+public static final int GUJARATI = 15; // 0xf
+
+/***/
+
+public static final int GUNJALA_GONDI = 179; // 0xb3
+
+/**
+ * Gurmukhi
+ */
+
+public static final int GURMUKHI = 16; // 0x10
+
+/**
+ * Han
+ */
+
+public static final int HAN = 17; // 0x11
+
+/**
+ * Hangul
+ */
+
+public static final int HANGUL = 18; // 0x12
+
+/***/
+
+public static final int HANIFI_ROHINGYA = 182; // 0xb6
+
+/**
+ * Hanunooo
+ */
+
+public static final int HANUNOO = 43; // 0x2b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HAN_WITH_BOPOMOFO = 172; // 0xac
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HARAPPAN_INDUS = 77; // 0x4d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HATRAN = 162; // 0xa2
+
+/**
+ * Hebrew
+ */
+
+public static final int HEBREW = 19; // 0x13
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HIERATIC_EGYPTIAN = 70; // 0x46
+
+/**
+ * Hiragana
+ */
+
+public static final int HIRAGANA = 20; // 0x14
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int IMPERIAL_ARAMAIC = 116; // 0x74
+
+/**
+ * Inherited
+ */
+
+public static final int INHERITED = 1; // 0x1
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int INSCRIPTIONAL_PAHLAVI = 122; // 0x7a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int INSCRIPTIONAL_PARTHIAN = 125; // 0x7d
+
+/**
+ * Invalid code
+ */
+
+public static final int INVALID_CODE = -1; // 0xffffffff
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JAMO = 173; // 0xad
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JAPANESE = 105; // 0x69
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JAVANESE = 78; // 0x4e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JURCHEN = 148; // 0x94
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KAITHI = 120; // 0x78
+
+/**
+ * Kannada
+ */
+
+public static final int KANNADA = 21; // 0x15
+
+/**
+ * Katakana
+ */
+
+public static final int KATAKANA = 22; // 0x16
+
+/**
+ * Script in Unicode 4.0.1
+ */
+
+public static final int KATAKANA_OR_HIRAGANA = 54; // 0x36
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KAYAH_LI = 79; // 0x4f
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int KHAROSHTHI = 57; // 0x39
+
+/***/
+
+public static final int KHITAN_SMALL_SCRIPT = 191; // 0xbf
+
+/**
+ * Khmer
+ */
+
+public static final int KHMER = 23; // 0x17
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KHOJKI = 157; // 0x9d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KHUDAWADI = 145; // 0x91
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KHUTSURI = 72; // 0x48
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KOREAN = 119; // 0x77
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KPELLE = 138; // 0x8a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LANNA = 106; // 0x6a
+
+/**
+ * Lao
+ */
+
+public static final int LAO = 24; // 0x18
+
+/**
+ * Latin
+ */
+
+public static final int LATIN = 25; // 0x19
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LATIN_FRAKTUR = 80; // 0x50
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LATIN_GAELIC = 81; // 0x51
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LEPCHA = 82; // 0x52
+
+/**
+ * Limbu
+ * Script in Unicode 4
+ *
+ */
+
+public static final int LIMBU = 48; // 0x30
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LINEAR_A = 83; // 0x53
+
+/**
+ * Linear B
+ * Script in Unicode 4
+ *
+ */
+
+public static final int LINEAR_B = 49; // 0x31
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LISU = 131; // 0x83
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LOMA = 139; // 0x8b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LYCIAN = 107; // 0x6b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LYDIAN = 108; // 0x6c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MAHAJANI = 160; // 0xa0
+
+/***/
+
+public static final int MAKASAR = 180; // 0xb4
+
+/**
+ * Malayalam
+ */
+
+public static final int MALAYALAM = 26; // 0x1a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MANDAEAN = 84; // 0x54
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MANDAIC = 84; // 0x54
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MANICHAEAN = 121; // 0x79
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MARCHEN = 169; // 0xa9
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MASARAM_GONDI = 175; // 0xaf
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MATHEMATICAL_NOTATION = 128; // 0x80
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MAYAN_HIEROGLYPHS = 85; // 0x55
+
+/***/
+
+public static final int MEDEFAIDRIN = 181; // 0xb5
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEITEI_MAYEK = 115; // 0x73
+
+/**
+ * Mende Kikakui
+ * ISO 15924 script code
+ */
+
+public static final int MENDE = 140; // 0x8c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEROITIC = 86; // 0x56
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEROITIC_CURSIVE = 141; // 0x8d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEROITIC_HIEROGLYPHS = 86; // 0x56
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MIAO = 92; // 0x5c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MODI = 163; // 0xa3
+
+/**
+ * Mangolian
+ */
+
+public static final int MONGOLIAN = 27; // 0x1b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MOON = 114; // 0x72
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MRO = 149; // 0x95
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MULTANI = 164; // 0xa4
+
+/**
+ * Myammar
+ */
+
+public static final int MYANMAR = 28; // 0x1c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NABATAEAN = 143; // 0x8f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NAKHI_GEBA = 132; // 0x84
+
+/***/
+
+public static final int NANDINAGARI = 187; // 0xbb
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NEWA = 170; // 0xaa
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int NEW_TAI_LUE = 59; // 0x3b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NKO = 87; // 0x57
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NUSHU = 150; // 0x96
+
+/***/
+
+public static final int NYIAKENG_PUACHUE_HMONG = 186; // 0xba
+
+/**
+ * Ogham
+ */
+
+public static final int OGHAM = 29; // 0x1d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_CHURCH_SLAVONIC_CYRILLIC = 68; // 0x44
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_HUNGARIAN = 76; // 0x4c
+
+/**
+ * Old Itallic
+ */
+
+public static final int OLD_ITALIC = 30; // 0x1e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_NORTH_ARABIAN = 142; // 0x8e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_PERMIC = 89; // 0x59
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int OLD_PERSIAN = 61; // 0x3d
+
+/***/
+
+public static final int OLD_SOGDIAN = 184; // 0xb8
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_SOUTH_ARABIAN = 133; // 0x85
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OL_CHIKI = 109; // 0x6d
+
+/**
+ * Oriya
+ */
+
+public static final int ORIYA = 31; // 0x1f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ORKHON = 88; // 0x58
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OSAGE = 171; // 0xab
+
+/**
+ * Osmanya
+ * Script in Unicode 4
+ *
+ */
+
+public static final int OSMANYA = 50; // 0x32
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PAHAWH_HMONG = 75; // 0x4b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PALMYRENE = 144; // 0x90
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PAU_CIN_HAU = 165; // 0xa5
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PHAGS_PA = 90; // 0x5a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PHOENICIAN = 91; // 0x5b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PHONETIC_POLLARD = 92; // 0x5c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PSALTER_PAHLAVI = 123; // 0x7b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int REJANG = 110; // 0x6e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int RONGORONGO = 93; // 0x5d
+
+/**
+ * Runic
+ */
+
+public static final int RUNIC = 32; // 0x20
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SAMARITAN = 126; // 0x7e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SARATI = 94; // 0x5e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SAURASHTRA = 111; // 0x6f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SHARADA = 151; // 0x97
+
+/**
+ * Shavian
+ * Script in Unicode 4
+ *
+ */
+
+public static final int SHAVIAN = 51; // 0x33
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SIDDHAM = 166; // 0xa6
+
+/**
+ * ISO 15924 script code for Sutton SignWriting
+ */
+
+public static final int SIGN_WRITING = 112; // 0x70
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SIMPLIFIED_HAN = 73; // 0x49
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SINDHI = 145; // 0x91
+
+/**
+ * Sinhala
+ */
+
+public static final int SINHALA = 33; // 0x21
+
+/***/
+
+public static final int SOGDIAN = 183; // 0xb7
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SORA_SOMPENG = 152; // 0x98
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SOYOMBO = 176; // 0xb0
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SUNDANESE = 113; // 0x71
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int SYLOTI_NAGRI = 58; // 0x3a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SYMBOLS = 129; // 0x81
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SYMBOLS_EMOJI = 174; // 0xae
+
+/**
+ * Syriac
+ */
+
+public static final int SYRIAC = 34; // 0x22
+
+/**
+ * Tagalog
+ */
+
+public static final int TAGALOG = 42; // 0x2a
+
+/**
+ * Tagbanwa
+ */
+
+public static final int TAGBANWA = 45; // 0x2d
+
+/**
+ * Tai Le
+ * Script in Unicode 4
+ *
+ */
+
+public static final int TAI_LE = 52; // 0x34
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TAI_VIET = 127; // 0x7f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TAKRI = 153; // 0x99
+
+/**
+ * Tamil
+ */
+
+public static final int TAMIL = 35; // 0x23
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TANGUT = 154; // 0x9a
+
+/**
+ * Telugu
+ */
+
+public static final int TELUGU = 36; // 0x24
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TENGWAR = 98; // 0x62
+
+/**
+ * Thana
+ */
+
+public static final int THAANA = 37; // 0x25
+
+/**
+ * Thai
+ */
+
+public static final int THAI = 38; // 0x26
+
+/**
+ * Tibetan
+ */
+
+public static final int TIBETAN = 39; // 0x27
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int TIFINAGH = 60; // 0x3c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TIRHUTA = 158; // 0x9e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TRADITIONAL_HAN = 74; // 0x4a
+
+/**
+ * Unified Canadian Aboriginal Symbols (alias)
+ */
+
+public static final int UCAS = 40; // 0x28
+
+/**
+ * Ugaritic
+ * Script in Unicode 4
+ *
+ */
+
+public static final int UGARITIC = 53; // 0x35
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int UNKNOWN = 103; // 0x67
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int UNWRITTEN_LANGUAGES = 102; // 0x66
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int VAI = 99; // 0x63
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int VISIBLE_SPEECH = 100; // 0x64
+
+/***/
+
+public static final int WANCHO = 188; // 0xbc
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int WARANG_CITI = 146; // 0x92
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int WESTERN_SYRIAC = 96; // 0x60
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int WOLEAI = 155; // 0x9b
+
+/***/
+
+public static final int YEZIDI = 192; // 0xc0
+
+/**
+ * Yi syllables
+ */
+
+public static final int YI = 41; // 0x29
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ZANABAZAR_SQUARE = 177; // 0xb1
+/**
+ * Script usage constants.
+ * See UAX #31 Unicode Identifier and Pattern Syntax.
+ * http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Exclusion_from_Identifiers
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ScriptUsage {
+/**
+ * Not encoded in Unicode.
+ */
+
+NOT_ENCODED,
+/**
+ * Unknown script usage.
+ */
+
+UNKNOWN,
+/**
+ * Candidate for Exclusion from Identifiers.
+ */
+
+EXCLUDED,
+/**
+ * Limited Use script.
+ */
+
+LIMITED_USE,
+/**
+ * Aspirational Use script.
+ */
+
+ASPIRATIONAL,
+/**
+ * Recommended script.
+ */
+
+RECOMMENDED;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/math/BigDecimal.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/math/BigDecimal.java
new file mode 100644
index 0000000..e6f7cf2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/math/BigDecimal.java
@@ -0,0 +1,1291 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/* Generated from 'BigDecimal.nrx' 8 Sep 2000 11:10:50 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
+
+package android.icu.math;
+
+import java.math.BigInteger;
+
+/**
+ * The <code>BigDecimal</code> class implements immutable arbitrary-precision decimal numbers. The methods of the
+ * <code>BigDecimal</code> class provide operations for fixed and floating point arithmetic, comparison, format
+ * conversions, and hashing.
+ * <p>
+ * As the numbers are decimal, there is an exact correspondence between an instance of a <code>BigDecimal</code> object
+ * and its <code>String</code> representation; the <code>BigDecimal</code> class provides direct conversions to and from
+ * <code>String</code> and character array (<code>char[]</code>) objects, as well as conversions to and from the Java
+ * primitive types (which may not be exact) and <code>BigInteger</code>.
+ * <p>
+ * In the descriptions of constructors and methods in this documentation, the value of a <code>BigDecimal</code> number
+ * object is shown as the result of invoking the <code>toString()</code> method on the object. The internal
+ * representation of a decimal number is neither defined nor exposed, and is not permitted to affect the result of any
+ * operation.
+ * <p>
+ * The floating point arithmetic provided by this class is defined by the ANSI X3.274-1996 standard, and is also
+ * documented at <code>http://www2.hursley.ibm.com/decimal</code> <br>
+ * <i>[This URL will change.]</i>
+ *
+ * <h3>Operator methods</h3>
+ * <p>
+ * Operations on <code>BigDecimal</code> numbers are controlled by a {@link android.icu.math.MathContext MathContext} object, which provides the
+ * context (precision and other information) for the operation. Methods that can take a <code>MathContext</code>
+ * parameter implement the standard arithmetic operators for <code>BigDecimal</code> objects and are known as
+ * <i>operator methods</i>. The default settings provided by the constant {@link android.icu.math.MathContext#DEFAULT MathContext#DEFAULT} (<code>digits=9,
+ * form=SCIENTIFIC, lostDigits=false, roundingMode=ROUND_HALF_UP</code>) perform general-purpose floating point
+ * arithmetic to nine digits of precision. The <code>MathContext</code> parameter must not be <code>null</code>.
+ * <p>
+ * Each operator method also has a version provided which does not take a <code>MathContext</code> parameter. For this
+ * version of each method, the context settings used are <code>digits=0,
+ * form=PLAIN, lostDigits=false, roundingMode=ROUND_HALF_UP</code>; these settings perform fixed point arithmetic with
+ * unlimited precision, as defined for the original BigDecimal class in Java 1.1 and Java 1.2.
+ * <p>
+ * For monadic operators, only the optional <code>MathContext</code> parameter is present; the operation acts upon the
+ * current object.
+ * <p>
+ * For dyadic operators, a <code>BigDecimal</code> parameter is always present; it must not be <code>null</code>. The
+ * operation acts with the current object being the left-hand operand and the <code>BigDecimal</code> parameter being
+ * the right-hand operand.
+ * <p>
+ * For example, adding two <code>BigDecimal</code> objects referred to by the names <code>award</code> and
+ * <code>extra</code> could be written as any of:
+ * <p>
+ * <code>
+ *     award.add(extra)
+ * <br>award.add(extra, MathContext.DEFAULT)
+ * <br>award.add(extra, acontext)
+ * </code>
+ * <p>
+ * (where <code>acontext</code> is a <code>MathContext</code> object), which would return a <code>BigDecimal</code>
+ * object whose value is the result of adding <code>award</code> and <code>extra</code> under the appropriate context
+ * settings.
+ * <p>
+ * When a <code>BigDecimal</code> operator method is used, a set of rules define what the result will be (and, by
+ * implication, how the result would be represented as a character string). These rules are defined in the BigDecimal
+ * arithmetic documentation (see the URL above), but in summary:
+ * <ul>
+ * <li>Results are normally calculated with up to some maximum number of significant digits. For example, if the
+ * <code>MathContext</code> parameter for an operation were <code>MathContext.DEFAULT</code> then the result would be
+ * rounded to 9 digits; the division of 2 by 3 would then result in 0.666666667. <br>
+ * You can change the default of 9 significant digits by providing the method with a suitable <code>MathContext</code>
+ * object. This lets you calculate using as many digits as you need -- thousands, if necessary. Fixed point (scaled)
+ * arithmetic is indicated by using a <code>digits</code> setting of 0 (or omitting the <code>MathContext</code>
+ * parameter). <br>
+ * Similarly, you can change the algorithm used for rounding from the default "classic" algorithm.
+ * <li>
+ * In standard arithmetic (that is, when the <code>form</code> setting is not <code>PLAIN</code>), a zero result is
+ * always expressed as the single digit <code>'0'</code> (that is, with no sign, decimal point, or exponent part).
+ * <li>
+ * Except for the division and power operators in standard arithmetic, trailing zeros are preserved (this is in contrast
+ * to binary floating point operations and most electronic calculators, which lose the information about trailing zeros
+ * in the fractional part of results). <br>
+ * So, for example:
+ * <p>
+ * <code>
+ *     new BigDecimal("2.40").add(     new BigDecimal("2"))      =&gt; "4.40"
+ * <br>new BigDecimal("2.40").subtract(new BigDecimal("2"))      =&gt; "0.40"
+ * <br>new BigDecimal("2.40").multiply(new BigDecimal("2"))      =&gt; "4.80"
+ * <br>new BigDecimal("2.40").divide(  new BigDecimal("2"), def) =&gt; "1.2"
+ * </code>
+ * <p>
+ * where the value on the right of the <code>=&gt;</code> would be the result of the operation, expressed as a
+ * <code>String</code>, and <code>def</code> (in this and following examples) refers to <code>MathContext.DEFAULT</code>
+ * ). This preservation of trailing zeros is desirable for most calculations (including financial calculations). If
+ * necessary, trailing zeros may be easily removed using division by 1.
+ * <li>
+ * In standard arithmetic, exponential form is used for a result depending on its value and the current setting of
+ * <code>digits</code> (the default is 9 digits). If the number of places needed before the decimal point exceeds the
+ * <code>digits</code> setting, or the absolute value of the number is less than <code>0.000001</code>, then the number
+ * will be expressed in exponential notation; thus
+ * <p>
+ * <code>
+ *   new BigDecimal("1e+6").multiply(new BigDecimal("1e+6"), def)
+ * </code>
+ * <p>
+ * results in <code>1E+12</code> instead of <code>1000000000000</code>, and
+ * <p>
+ * <code>
+ *   new BigDecimal("1").divide(new BigDecimal("3E+10"), def)
+ * </code>
+ * <p>
+ * results in <code>3.33333333E-11</code> instead of <code>0.0000000000333333333</code>.
+ * <p>
+ * The form of the exponential notation (scientific or engineering) is determined by the <code>form</code> setting.
+ * </ul>
+ * <p>
+ * The names of methods in this class follow the conventions established by <code>java.lang.Number</code>,
+ * <code>java.math.BigInteger</code>, and <code>java.math.BigDecimal</code> in Java 1.1 and Java 1.2.
+ *
+ * @see android.icu.math.MathContext
+ * @author Mike Cowlishaw
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BigDecimal extends java.lang.Number implements java.io.Serializable, java.lang.Comparable<android.icu.math.BigDecimal> {
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>java.math.BigDecimal</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> as though the parameter had been represented as a <code>String</code> (using
+ * its <code>toString</code> method) and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
+ * The parameter must not be <code>null</code>.
+ * <p>
+ * <i>(Note: this constructor is provided only in the <code>android.icu.math</code> version of the BigDecimal class.
+ * It would not be present in a <code>java.math</code> version.)</i>
+ *
+ * @param bd The <code>BigDecimal</code> to be translated.
+ */
+
+public BigDecimal(java.math.BigDecimal bd) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>BigInteger</code>, with scale 0.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the <code>BigInteger</code>,
+ * with a scale of zero. The value of the <code>BigDecimal</code> is identical to the value of the <code>BigInteger
+ * </code>. The parameter must not be <code>null</code>.
+ * <p>
+ * The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus sign (hyphen) if the
+ * <code>BigInteger</code> is negative. A leading zero will be present only if the <code>BigInteger</code> is zero.
+ *
+ * @param bi The <code>BigInteger</code> to be converted.
+ */
+
+public BigDecimal(java.math.BigInteger bi) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>BigInteger</code> and a scale.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the <code>BigInteger</code>,
+ * scaled by the second parameter, which may not be negative. The value of the <code>BigDecimal</code> is the <code>
+ * BigInteger</code> divided by ten to the power of the scale. The <code>BigInteger</code> parameter must not be
+ * <code>null</code>.
+ * <p>
+ * The <code>BigDecimal</code> will contain only decimal digits, (with an embedded decimal point followed by <code>
+ * scale</code> decimal digits if the scale is positive), prefixed with a leading minus sign (hyphen) if the <code>
+ * BigInteger</code> is negative. A leading zero will be present only if the <code>BigInteger</code> is zero.
+ *
+ * @param bi The <code>BigInteger</code> to be converted.
+ * @param scale The <code>int</code> specifying the scale.
+ * @throws java.lang.NumberFormatException If the scale is negative.
+ */
+
+public BigDecimal(java.math.BigInteger bi, int scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from an array of characters.
+ * <p>
+ * Constructs a <code>BigDecimal</code> as though a <code>String</code> had been constructed from the character
+ * array and the {@link #BigDecimal(java.lang.String)} constructor had then been used. The parameter must not be
+ * <code>null</code>.
+ * <p>
+ * Using this constructor is faster than using the <code>BigDecimal(String)</code> constructor if the string is
+ * already available in character array form.
+ *
+ * @param inchars The <code>char[]</code> array containing the number to be converted.
+ * @throws java.lang.NumberFormatException If the parameter is not a valid number.
+ */
+
+public BigDecimal(char[] inchars) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from an array of characters.
+ * <p>
+ * Constructs a <code>BigDecimal</code> as though a <code>String</code> had been constructed from the character
+ * array (or a subarray of that array) and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
+ * The first parameter must not be <code>null</code>, and the subarray must be wholly contained within it.
+ * <p>
+ * Using this constructor is faster than using the <code>BigDecimal(String)</code> constructor if the string is
+ * already available within a character array.
+ *
+ * @param inchars The <code>char[]</code> array containing the number to be converted.
+ * @param offset The <code>int</code> offset into the array of the start of the number to be converted.
+ * @param length The <code>int</code> length of the number.
+ * @throws java.lang.NumberFormatException If the parameter is not a valid number for any reason.
+ */
+
+public BigDecimal(char[] inchars, int offset, int length) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object directly from a <code>double</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 64-bit signed binary
+ * floating point parameter.
+ * <p>
+ * Note that this constructor it an exact conversion; it does not give the same result as converting <code>num
+ * </code> to a <code>String</code> using the <code>Double.toString()</code> method and then using the
+ * {@link #BigDecimal(java.lang.String)} constructor. To get that result, use the static {@link #valueOf(double)}
+ * method to construct a <code>BigDecimal</code> from a <code>double</code>.
+ *
+ * @param num The <code>double</code> to be converted.
+ * @throws java.lang.NumberFormatException If the parameter is infinite or not a number.
+ */
+
+public BigDecimal(double num) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object directly from a <code>int</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 32-bit signed binary
+ * integer parameter. The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus
+ * sign (hyphen) if the parameter is negative. A leading zero will be present only if the parameter is zero.
+ *
+ * @param num The <code>int</code> to be converted.
+ */
+
+public BigDecimal(int num) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object directly from a <code>long</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 64-bit signed binary
+ * integer parameter. The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus
+ * sign (hyphen) if the parameter is negative. A leading zero will be present only if the parameter is zero.
+ *
+ * @param num The <code>long</code> to be converted.
+ */
+
+public BigDecimal(long num) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>String</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> from the parameter, which must not be <code>null</code> and must represent a
+ * valid <i>number</i>, as described formally in the documentation referred to {@link android.icu.math.BigDecimal above}.
+ * <p>
+ * In summary, numbers in <code>String</code> form must have at least one digit, may have a leading sign, may have a
+ * decimal point, and exponential notation may be used. They follow conventional syntax, and may not contain blanks.
+ * <p>
+ * Some valid strings from which a <code>BigDecimal</code> might be constructed are:
+ *
+ * <pre>
+ *
+ * "0" -- Zero "12" -- A whole number "-76" -- A signed whole number "12.70" -- Some decimal places "+0.003" -- Plus
+ * sign is allowed "17." -- The same as 17 ".5" -- The same as 0.5 "4E+9" -- Exponential notation "0.73e-7" --
+ * Exponential notation
+ *
+ * </pre>
+ * <p>
+ * (Exponential notation means that the number includes an optional sign and a power of ten following an
+ * '<code>E</code>' that indicates how the decimal point will be shifted. Thus the <code>"4E+9"</code> above is
+ * just a short way of writing <code>4000000000</code>, and the <code>"0.73e-7"</code> is short for <code>
+ * 0.000000073</code>.)
+ * <p>
+ * The <code>BigDecimal</code> constructed from the String is in a standard form, with no blanks, as though the
+ * {@link #add(android.icu.math.BigDecimal)} method had been used to add zero to the number with unlimited precision. If the string
+ * uses exponential notation (that is, includes an <code>e</code> or an <code>E</code>), then the <code>BigDecimal
+ * </code> number will be expressed in scientific notation (where the power of ten is adjusted so there is a single
+ * non-zero digit to the left of the decimal point); in this case if the number is zero then it will be expressed as
+ * the single digit 0, and if non-zero it will have an exponent unless that exponent would be 0. The exponent must
+ * fit in nine digits both before and after it is expressed in scientific notation.
+ * <p>
+ * Any digits in the parameter must be decimal; that is, <code>Character.digit(c, 10)</code> (where <code>c</code>
+ * is the character in question) would not return -1.
+ *
+ * @param string The <code>String</code> to be converted.
+ * @throws java.lang.NumberFormatException If the parameter is not a valid number.
+ */
+
+public BigDecimal(java.lang.String string) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ * <p>
+ * The same as {@link #abs(android.icu.math.MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be <code>this.scale()</code>
+ *
+ * @return A <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ */
+
+public android.icu.math.BigDecimal abs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ * <p>
+ * If the current object is zero or positive, then the same result as invoking the {@link #plus(android.icu.math.MathContext)} method
+ * with the same parameter is returned. Otherwise, the same result as invoking the {@link #negate(android.icu.math.MathContext)}
+ * method with the same parameter is returned.
+ *
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ */
+
+public android.icu.math.BigDecimal abs(android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this+rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #add(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the maximum of the scales of the two operands.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the addition.
+ * @return A <code>BigDecimal</code> whose value is <code>this+rhs</code>, using fixed point arithmetic.
+ */
+
+public android.icu.math.BigDecimal add(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this+rhs</code>.
+ * <p>
+ * Implements the addition (<b><code>+</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the addition.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this+rhs</code>.
+ */
+
+public android.icu.math.BigDecimal add(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this <code>BigDecimal</code> to another, using unlimited precision.
+ * <p>
+ * The same as {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @return An <code>int</code> whose value is -1, 0, or 1 as <code>this</code> is numerically less than, equal to,
+ *         or greater than <code>rhs</code>.
+ */
+
+public int compareTo(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this <code>BigDecimal</code> to another.
+ * <p>
+ * Implements numeric comparison, (as defined in the decimal documentation, see {@link android.icu.math.BigDecimal class header}),
+ * and returns a result of type <code>int</code>.
+ * <p>
+ * The result will be:
+ * <table cellpadding=2>
+ * <tr>
+ * <td align=right><b>-1</b></td> <td>if the current object is less than the first parameter</td>
+ * </tr>
+ * <tr>
+ * <td align=right><b>0</b></td> <td>if the current object is equal to the first parameter</td>
+ * </tr>
+ * <tr>
+ * <td align=right><b>1</b></td> <td>if the current object is greater than the first parameter.</td>
+ * </tr>
+ * </table>
+ * <p>
+ * A {@link #compareTo(android.icu.math.BigDecimal)} method is also provided.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return An <code>int</code> whose value is -1, 0, or 1 as <code>this</code> is numerically less than, equal to,
+ *         or greater than <code>rhs</code>.
+ */
+
+public int compareTo(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #divide(android.icu.math.BigDecimal,int)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * rounding mode is {@link android.icu.math.MathContext#ROUND_HALF_UP MathContext#ROUND_HALF_UP}.
+ *
+ * The length of the decimal part (the scale) of the result will be the same as the scale of the current object, if
+ * the latter were formatted without exponential notation.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic.
+ * @throws java.lang.ArithmeticException If <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and a
+ * rounding mode.
+ * <p>
+ * The same as {@link #divide(android.icu.math.BigDecimal,int,int)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * second parameter is <code>this.scale()</code>, and the third is <code>round</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will therefore be the same as the scale of the current
+ * object, if the latter were formatted without exponential notation.
+ * <p>
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @param round The <code>int</code> rounding mode to be used for the division (see the {@link android.icu.math.MathContext MathContext} class).
+ * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and
+ *         the specified rounding mode.
+ * @throws java.lang.IllegalArgumentException if <code>round</code> is not a valid rounding mode.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException if <code>round</code> is {@link android.icu.math.MathContext#ROUND_UNNECESSARY MathContext#ROUND_UNNECESSARY} and <code>this.scale()</code> is insufficient to represent the result exactly.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs, int round) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and a
+ * given scale and rounding mode.
+ * <p>
+ * The same as {@link #divide(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * <code>new MathContext(0, MathContext.PLAIN, false, round)</code>, except that the length of the decimal part (the
+ * scale) to be used for the result is explicit rather than being taken from <code>this</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the same as the scale of the current object, if
+ * the latter were formatted without exponential notation.
+ * <p>
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @param scale The <code>int</code> scale to be used for the result.
+ * @param round The <code>int</code> rounding mode to be used for the division (see the {@link android.icu.math.MathContext MathContext} class).
+ * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and
+ *         the specified rounding mode.
+ * @throws java.lang.IllegalArgumentException if <code>round</code> is not a valid rounding mode.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException if <code>scale</code> is negative.
+ * @throws java.lang.ArithmeticException if <code>round</code> is {@link android.icu.math.MathContext#ROUND_UNNECESSARY MathContext#ROUND_UNNECESSARY} and <code>scale</code> is insufficient
+ *             to represent the result exactly.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs, int scale, int round) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this/rhs</code>.
+ * <p>
+ * Implements the division (<b><code>/</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this/rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * <p>
+ * The same as {@link #divideInteger(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs
+ * </code>, and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the integer division.
+ * @return A <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * <p>
+ * Implements the integer division operator (as defined in the decimal documentation, see {@link android.icu.math.BigDecimal  header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the integer division.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException if the result will not fit in the number of digits specified for the context.
+ */
+
+public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * The same as {@link #max(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @return A <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal max(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * Returns the larger of the current object and the first parameter.
+ * <p>
+ * If calling the {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)} method with the same parameters would return <code>1
+ * </code> or <code>0</code>, then the result of calling the {@link #plus(android.icu.math.MathContext)} method on the current object
+ * (using the same <code>MathContext</code> parameter) is returned. Otherwise, the result of calling the
+ * {@link #plus(android.icu.math.MathContext)} method on the first parameter object (using the same <code>MathContext</code>
+ * parameter) is returned.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal max(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * The same as {@link #min(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @return A <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal min(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * Returns the smaller of the current object and the first parameter.
+ * <p>
+ * If calling the {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)} method with the same parameters would return <code>-1
+ * </code> or <code>0</code>, then the result of calling the {@link #plus(android.icu.math.MathContext)} method on the current object
+ * (using the same <code>MathContext</code> parameter) is returned. Otherwise, the result of calling the
+ * {@link #plus(android.icu.math.MathContext)} method on the first parameter object (using the same <code>MathContext</code>
+ * parameter) is returned.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal min(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this*rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #add(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the sum of the scales of the operands, if they
+ * were formatted without exponential notation.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the multiplication.
+ * @return A <code>BigDecimal</code> whose value is <code>this*rhs</code>, using fixed point arithmetic.
+ */
+
+public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this*rhs</code>.
+ * <p>
+ * Implements the multiplication (<b><code>&#42;</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the multiplication.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this*rhs</code>.
+ */
+
+public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>-this</code>.
+ * <p>
+ * The same as {@link #negate(android.icu.math.MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>
+ * .
+ * <p>
+ * The length of the decimal part (the scale) of the result will be be <code>this.scale()</code>
+ *
+ *
+ * @return A <code>BigDecimal</code> whose value is <code>-this</code>.
+ */
+
+public android.icu.math.BigDecimal negate() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>-this</code>.
+ * <p>
+ * Implements the negation (Prefix <b><code>-</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>-this</code>.
+ */
+
+public android.icu.math.BigDecimal negate(android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>+this</code>. Note that <code>this</code> is not
+ * necessarily a plain <code>BigDecimal</code>, but the result will always be.
+ * <p>
+ * The same as {@link #plus(android.icu.math.MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be be <code>this.scale()</code>
+ *
+ * @return A <code>BigDecimal</code> whose value is <code>+this</code>.
+ */
+
+public android.icu.math.BigDecimal plus() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>+this</code>.
+ * <p>
+ * Implements the plus (Prefix <b><code>+</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ * <p>
+ * This method is useful for rounding or otherwise applying a context to a decimal value.
+ *
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>+this</code>.
+ */
+
+public android.icu.math.BigDecimal plus(android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this**rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #pow(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The parameter is the power to which the <code>this</code> will be raised; it must be in the range 0 through
+ * 999999999, and must have a decimal part of zero. Note that these restrictions may be removed in the future, so
+ * they should not be used as a test for a whole number.
+ * <p>
+ * In addition, the power must not be negative, as no <code>MathContext</code> is used and so the result would then
+ * always be 0.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the operation (the power).
+ * @return A <code>BigDecimal</code> whose value is <code>this**rhs</code>, using fixed point arithmetic.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is out of range or is not a whole number.
+ */
+
+public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this**rhs</code>.
+ * <p>
+ * Implements the power (<b><code>^</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ * <p>
+ * The first parameter is the power to which the <code>this</code> will be raised; it must be in the range
+ * -999999999 through 999999999, and must have a decimal part of zero. Note that these restrictions may be removed
+ * in the future, so they should not be used as a test for a whole number.
+ * <p>
+ * If the <code>digits</code> setting of the <code>MathContext</code> parameter is 0, the power must be zero or
+ * positive.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the operation (the power).
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this**rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is out of range or is not a whole number.
+ */
+
+public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>, using fixed point
+ * arithmetic.
+ * <p>
+ * The same as {@link #remainder(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * This is not the modulo operator -- the result may be negative.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the remainder operation.
+ * @return A <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>, using fixed point
+ *         arithmetic.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>.
+ * <p>
+ * Implements the remainder operator (as defined in the decimal documentation, see {@link android.icu.math.BigDecimal class header}),
+ * and returns the result as a <code>BigDecimal</code> object.
+ * <p>
+ * This is not the modulo operator -- the result may be negative.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the remainder operation.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the remainder of <code>this+rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException  if the integer part of the result will not fit in the number of digits specified for the context.
+ */
+
+public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this-rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #subtract(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the maximum of the scales of the two operands.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the subtraction.
+ * @return A <code>BigDecimal</code> whose value is <code>this-rhs</code>, using fixed point arithmetic.
+ */
+
+public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this-rhs</code>.
+ * <p>
+ * Implements the subtraction (<b><code>-</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the subtraction.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this-rhs</code>.
+ */
+
+public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>byte</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for a <code>byte</code> (8-bit signed integer) result then an <code>
+ * ArithmeticException</code> is thrown.
+ *
+ * @return A <code>byte</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>byte</code>.
+ */
+
+public byte byteValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>double</code>. If the <code>BigDecimal</code> is out of the
+ * possible range for a <code>double</code> (64-bit signed floating point) result then an <code>ArithmeticException
+ * </code> is thrown.
+ * <p>
+ * The double produced is identical to result of expressing the <code>BigDecimal</code> as a <code>String</code> and
+ * then converting it using the <code>Double(String)</code> constructor; this can result in values of <code>
+ * Double.NEGATIVE_INFINITY</code> or <code>Double.POSITIVE_INFINITY</code>.
+ *
+ * @return A <code>double</code> corresponding to <code>this</code>.
+ */
+
+public double doubleValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this <code>BigDecimal</code> with <code>rhs</code> for equality.
+ * <p>
+ * If the parameter is <code>null</code>, or is not an instance of the BigDecimal type, or is not exactly equal to
+ * the current <code>BigDecimal</code> object, then <i>false</i> is returned. Otherwise, <i>true</i> is returned.
+ * <p>
+ * "Exactly equal", here, means that the <code>String</code> representations of the <code>BigDecimal</code> numbers
+ * are identical (they have the same characters in the same sequence).
+ * <p>
+ * The {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)} method should be used for more general comparisons.
+ *
+ * @param obj The <code>Object</code> for the right hand side of the comparison.
+ * @return A <code>boolean</code> whose value <i>true</i> if and only if the operands have identical string
+ *         representations.
+ * @throws java.lang.ClassCastException if <code>rhs</code> cannot be cast to a <code>BigDecimal</code> object.
+ * @see #compareTo(BigDecimal)
+ * @see #compareTo(BigDecimal, MathContext)
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>float</code>. If the <code>BigDecimal</code> is out of the
+ * possible range for a <code>float</code> (32-bit signed floating point) result then an <code>ArithmeticException
+ * </code> is thrown.
+ * <p>
+ * The float produced is identical to result of expressing the <code>BigDecimal</code> as a <code>String</code> and
+ * then converting it using the <code>Float(String)</code> constructor; this can result in values of <code>
+ * Float.NEGATIVE_INFINITY</code> or <code>Float.POSITIVE_INFINITY</code>.
+ *
+ * @return A <code>float</code> corresponding to <code>this</code>.
+ */
+
+public float floatValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>String</code> representation of this <code>BigDecimal</code>, modified by layout parameters.
+ * <p>
+ * <i>This method is provided as a primitive for use by more sophisticated classes, such as <code>DecimalFormat
+ * </code>, that can apply locale-sensitive editing of the result. The level of formatting that it provides is a
+ * necessary part of the BigDecimal class as it is sensitive to and must follow the calculation and rounding rules
+ * for BigDecimal arithmetic. However, if the function is provided elsewhere, it may be removed from this class.
+ * </i>
+ * <p>
+ * The parameters, for both forms of the <code>format</code> method are all of type <code>int</code>. A value of -1
+ * for any parameter indicates that the default action or value for that parameter should be used.
+ * <p>
+ * The parameters, <code>before</code> and <code>after</code>, specify the number of characters to be used for the
+ * integer part and decimal part of the result respectively. Exponential notation is not used. If either parameter
+ * is -1 (which indicates the default action), the number of characters used will be exactly as many as are needed
+ * for that part.
+ * <p>
+ * <code>before</code> must be a positive number; if it is larger than is needed to contain the integer part, that
+ * part is padded on the left with blanks to the requested length. If <code>before</code> is not large enough to
+ * contain the integer part of the number (including the sign, for negative numbers) an exception is thrown.
+ * <p>
+ * <code>after</code> must be a non-negative number; if it is not the same size as the decimal part of the number,
+ * the number will be rounded (or extended with zeros) to fit. Specifying 0 for <code>after</code> will cause the
+ * number to be rounded to an integer (that is, it will have no decimal part or decimal point). The rounding method
+ * will be the default, <code>MathContext.ROUND_HALF_UP</code>.
+ * <p>
+ * Other rounding methods, and the use of exponential notation, can be selected by using
+ * {@link #format(int,int,int,int,int,int)}. Using the two-parameter form of the method has exactly the same effect
+ * as using the six-parameter form with the final four parameters all being -1.
+ *
+ * @param before The <code>int</code> specifying the number of places before the decimal point. Use -1 for 'as many as are needed'.
+ * @param after The <code>int</code> specifying the number of places after the decimal point. Use -1 for 'as many as are needed'.
+ * @return A <code>String</code> representing this <code>BigDecimal</code>, laid out according to the specified parameters
+ * @throws java.lang.ArithmeticException if the number cannot be laid out as requested.
+ * @throws java.lang.IllegalArgumentException if a parameter is out of range.
+ * @see #toString
+ * @see #toCharArray
+ */
+
+public java.lang.String format(int before, int after) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>String</code> representation of this <code>BigDecimal</code>, modified by layout parameters and
+ * allowing exponential notation.
+ * <p>
+ * <i>This method is provided as a primitive for use by more sophisticated classes, such as <code>DecimalFormat
+ * </code>, that can apply locale-sensitive editing of the result. The level of formatting that it provides is a
+ * necessary part of the BigDecimal class as it is sensitive to and must follow the calculation and rounding rules
+ * for BigDecimal arithmetic. However, if the function is provided elsewhere, it may be removed from this class.
+ * </i>
+ * <p>
+ * The parameters are all of type <code>int</code>. A value of -1 for any parameter indicates that the default
+ * action or value for that parameter should be used.
+ * <p>
+ * The first two parameters (<code>before</code> and <code>after</code>) specify the number of characters to be used
+ * for the integer part and decimal part of the result respectively, as defined for {@link #format(int,int)}. If
+ * either of these is -1 (which indicates the default action), the number of characters used will be exactly as many
+ * as are needed for that part.
+ * <p>
+ * The remaining parameters control the use of exponential notation and rounding. Three (<code>explaces</code>,
+ * <code>exdigits</code>, and <code>exform</code>) control the exponent part of the result. As before, the default
+ * action for any of these parameters may be selected by using the value -1.
+ * <p>
+ * <code>explaces</code> must be a positive number; it sets the number of places (digits after the sign of the
+ * exponent) to be used for any exponent part, the default (when <code>explaces</code> is -1) being to use as many
+ * as are needed. If <code>explaces</code> is not -1, space is always reserved for an exponent; if one is not needed
+ * (for example, if the exponent will be 0) then <code>explaces</code>+2 blanks are appended to the result.
+ * (This preserves vertical alignment of similarly formatted numbers in a monospace font.) If <code>explaces
+ * </code> is not -1 and is not large enough to contain the exponent, an exception is thrown.
+ * <p>
+ * <code>exdigits</code> sets the trigger point for use of exponential notation. If, before any rounding, the number
+ * of places needed before the decimal point exceeds <code>exdigits</code>, or if the absolute value of the result
+ * is less than <code>0.000001</code>, then exponential form will be used, provided that <code>exdigits</code> was
+ * specified. When <code>exdigits</code> is -1, exponential notation will never be used. If 0 is specified for
+ * <code>exdigits</code>, exponential notation is always used unless the exponent would be 0.
+ * <p>
+ * <code>exform</code> sets the form for exponential notation (if needed). It may be either
+ * {@link android.icu.math.MathContext#SCIENTIFIC MathContext#SCIENTIFIC} or {@link android.icu.math.MathContext#ENGINEERING MathContext#ENGINEERING}. If the latter, engineering, form is requested,
+ * up to three digits (plus sign, if negative) may be needed for the integer part of the result (<code>before</code>
+ * ). Otherwise, only one digit (plus sign, if negative) is needed.
+ * <p>
+ * Finally, the sixth argument, <code>exround</code>, selects the rounding algorithm to be used, and must be one of
+ * the values indicated by a public constant in the {@link android.icu.math.MathContext MathContext} class whose name starts with <code>ROUND_
+ * </code>. The default (<code>ROUND_HALF_UP</code>) may also be selected by using the value -1, as before.
+ * <p>
+ * The special value <code>MathContext.ROUND_UNNECESSARY</code> may be used to detect whether non-zero digits are
+ * discarded -- if <code>exround</code> has this value than if non-zero digits would be discarded (rounded) during
+ * formatting then an <code>ArithmeticException</code> is thrown.
+ *
+ * @param before The <code>int</code> specifying the number of places before the decimal point. Use -1 for 'as many as
+ *            are needed'.
+ * @param after The <code>int</code> specifying the number of places after the decimal point. Use -1 for 'as many as
+ *            are needed'.
+ * @param explaces The <code>int</code> specifying the number of places to be used for any exponent. Use -1 for 'as many
+ *            as are needed'.
+ * @param exdigits The <code>int</code> specifying the trigger (digits before the decimal point) which if exceeded causes
+ *            exponential notation to be used. Use 0 to force exponential notation. Use -1 to force plain notation
+ *            (no exponential notation).
+ * @param exformint The <code>int</code> specifying the form of exponential notation to be used (
+ *            {@link android.icu.math.MathContext#SCIENTIFIC MathContext#SCIENTIFIC} or {@link android.icu.math.MathContext#ENGINEERING MathContext#ENGINEERING}).
+ * @param exround The <code>int</code> specifying the rounding mode to use. Use -1 for the default,
+ *            {@link android.icu.math.MathContext#ROUND_HALF_UP MathContext#ROUND_HALF_UP}.
+ * @return A <code>String</code> representing this <code>BigDecimal</code>, laid out according to the specified
+ *         parameters
+ * @throws java.lang.ArithmeticException if the number cannot be laid out as requested.
+ * @throws java.lang.IllegalArgumentException if a parameter is out of range.
+ * @see #toString
+ * @see #toCharArray
+ */
+
+public java.lang.String format(int before, int after, int explaces, int exdigits, int exformint, int exround) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hashcode for this <code>BigDecimal</code>. This hashcode is suitable for use by the <code>
+ * java.util.Hashtable</code> class.
+ * <p>
+ * Note that two <code>BigDecimal</code> objects are only guaranteed to produce the same hashcode if they are
+ * exactly equal (that is, the <code>String</code> representations of the <code>BigDecimal</code> numbers are
+ * identical -- they have the same characters in the same sequence).
+ *
+ * @return An <code>int</code> that is the hashcode for <code>this</code>.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to an <code>int</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part it is discarded. If the <code>BigDecimal</code> is out of the possible range for an <code>int</code>
+ * (32-bit signed integer) result then only the low-order 32 bits are used. (That is, the number may be
+ * <i>decapitated</i>.) To avoid unexpected errors when these conditions occur, use the {@link #intValueExact}
+ * method.
+ *
+ * @return An <code>int</code> converted from <code>this</code>, truncated and decapitated if necessary.
+ */
+
+public int intValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to an <code>int</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for an <code>int</code> (32-bit signed integer) result then an
+ * <code>ArithmeticException</code> is thrown.
+ *
+ * @return An <code>int</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in an <code>int</code>.
+ */
+
+public int intValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>long</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part it is discarded. If the <code>BigDecimal</code> is out of the possible range for a <code>long</code>
+ * (64-bit signed integer) result then only the low-order 64 bits are used. (That is, the number may be
+ * <i>decapitated</i>.) To avoid unexpected errors when these conditions occur, use the {@link #longValueExact}
+ * method.
+ *
+ * @return A <code>long</code> converted from <code>this</code>, truncated and decapitated if necessary.
+ */
+
+public long longValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>long</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for a <code>long</code> (64-bit signed integer) result then an
+ * <code>ArithmeticException</code> is thrown.
+ *
+ * @return A <code>long</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>long</code>.
+ */
+
+public long longValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose decimal point has been moved to the left by a specified number of
+ * positions. The parameter, <code>n</code>, specifies the number of positions to move the decimal point. That is,
+ * if <code>n</code> is 0 or positive, the number returned is given by:
+ * <p>
+ * <code> this.multiply(TEN.pow(new BigDecimal(-n))) </code>
+ * <p>
+ * <code>n</code> may be negative, in which case the method returns the same result as <code>movePointRight(-n)
+ * </code>.
+ *
+ * @param n The <code>int</code> specifying the number of places to move the decimal point leftwards.
+ * @return A <code>BigDecimal</code> derived from <code>this</code>, with the decimal point moved <code>n</code>
+ *         places to the left.
+ */
+
+public android.icu.math.BigDecimal movePointLeft(int n) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose decimal point has been moved to the right by a specified number of
+ * positions. The parameter, <code>n</code>, specifies the number of positions to move the decimal point. That is,
+ * if <code>n</code> is 0 or positive, the number returned is given by:
+ * <p>
+ * <code> this.multiply(TEN.pow(new BigDecimal(n))) </code>
+ * <p>
+ * <code>n</code> may be negative, in which case the method returns the same result as <code>movePointLeft(-n)
+ * </code>.
+ *
+ * @param n The <code>int</code> specifying the number of places to move the decimal point rightwards.
+ * @return A <code>BigDecimal</code> derived from <code>this</code>, with the decimal point moved <code>n</code>
+ *         places to the right.
+ */
+
+public android.icu.math.BigDecimal movePointRight(int n) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the scale of this <code>BigDecimal</code>. Returns a non-negative <code>int</code> which is the scale of
+ * the number. The scale is the number of digits in the decimal part of the number if the number were formatted
+ * without exponential notation.
+ *
+ * @return An <code>int</code> whose value is the scale of this <code>BigDecimal</code>.
+ */
+
+public int scale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> with a given scale.
+ * <p>
+ * If the given scale (which must be zero or positive) is the same as or greater than the length of the decimal part
+ * (the scale) of this <code>BigDecimal</code> then trailing zeros will be added to the decimal part as necessary.
+ * <p>
+ * If the given scale is less than the length of the decimal part (the scale) of this <code>BigDecimal</code> then
+ * trailing digits will be removed, and in this case an <code>ArithmeticException</code> is thrown if any discarded
+ * digits are non-zero.
+ * <p>
+ * The same as {@link #setScale(int,int)}, where the first parameter is the scale, and the second is <code>
+ * MathContext.ROUND_UNNECESSARY</code>.
+ *
+ * @param scale The <code>int</code> specifying the scale of the resulting <code>BigDecimal</code>.
+ * @return A plain <code>BigDecimal</code> with the given scale.
+ * @throws java.lang.ArithmeticException if <code>scale</code> is negative.
+ * @throws java.lang.ArithmeticException if reducing scale would discard non-zero digits.
+ */
+
+public android.icu.math.BigDecimal setScale(int scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> with a given scale.
+ * <p>
+ * If the given scale (which must be zero or positive) is the same as or greater than the length of the decimal part
+ * (the scale) of this <code>BigDecimal</code> then trailing zeros will be added to the decimal part as necessary.
+ * <p>
+ * If the given scale is less than the length of the decimal part (the scale) of this <code>BigDecimal</code> then
+ * trailing digits will be removed, and the rounding mode given by the second parameter is used to determine if the
+ * remaining digits are affected by a carry. In this case, an <code>IllegalArgumentException</code> is thrown if
+ * <code>round</code> is not a valid rounding mode.
+ * <p>
+ * If <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>, an <code>ArithmeticException</code> is
+ * thrown if any discarded digits are non-zero.
+ *
+ * @param scale The <code>int</code> specifying the scale of the resulting <code>BigDecimal</code>.
+ * @param round The <code>int</code> rounding mode to be used for the division (see the {@link android.icu.math.MathContext MathContext} class).
+ * @return A plain <code>BigDecimal</code> with the given scale.
+ * @throws java.lang.IllegalArgumentException if <code>round</code> is not a valid rounding mode.
+ * @throws java.lang.ArithmeticException if <code>scale</code> is negative.
+ * @throws java.lang.ArithmeticException if <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>, and reducing scale would discard
+ *             non-zero digits.
+ */
+
+public android.icu.math.BigDecimal setScale(int scale, int round) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>short</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for a <code>short</code> (16-bit signed integer) result then an
+ * <code>ArithmeticException</code> is thrown.
+ *
+ * @return A <code>short</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>short</code>.
+ */
+
+public short shortValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the sign of this <code>BigDecimal</code>, as an <code>int</code>. This returns the <i>signum</i> function
+ * value that represents the sign of this <code>BigDecimal</code>. That is, -1 if the <code>BigDecimal</code> is
+ * negative, 0 if it is numerically equal to zero, or 1 if it is positive.
+ *
+ * @return An <code>int</code> which is -1 if the <code>BigDecimal</code> is negative, 0 if it is numerically equal
+ *         to zero, or 1 if it is positive.
+ */
+
+public int signum() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>java.math.BigDecimal</code>.
+ * <p>
+ * This is an exact conversion; the result is the same as if the <code>BigDecimal</code> were formatted as a plain
+ * number without any rounding or exponent and then the <code>java.math.BigDecimal(java.lang.String)</code>
+ * constructor were used to construct the result.
+ * <p>
+ * <i>(Note: this method is provided only in the <code>android.icu.math</code> version of the BigDecimal class. It
+ * would not be present in a <code>java.math</code> version.)</i>
+ *
+ * @return The <code>java.math.BigDecimal</code> equal in value to this <code>BigDecimal</code>.
+ */
+
+public java.math.BigDecimal toBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>java.math.BigInteger</code>.
+ * <p>
+ * Any decimal part is truncated (discarded). If an exception is desired should the decimal part be non-zero, use
+ * {@link #toBigIntegerExact()}.
+ *
+ * @return The <code>java.math.BigInteger</code> equal in value to the integer part of this <code>BigDecimal</code>.
+ */
+
+public java.math.BigInteger toBigInteger() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>java.math.BigInteger</code>.
+ * <p>
+ * An exception is thrown if the decimal part (if any) is non-zero.
+ *
+ * @return The <code>java.math.BigInteger</code> equal in value to the integer part of this <code>BigDecimal</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part.
+ */
+
+public java.math.BigInteger toBigIntegerExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>BigDecimal</code> as a character array. The result of this method is the same as using the
+ * sequence <code>toString().toCharArray()</code>, but avoids creating the intermediate <code>String</code> and
+ * <code>char[]</code> objects.
+ *
+ * @return The <code>char[]</code> array corresponding to this <code>BigDecimal</code>.
+ */
+
+public char[] toCharArray() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>BigDecimal</code> as a <code>String</code>. This returns a <code>String</code> that exactly
+ * represents this <code>BigDecimal</code>, as defined in the decimal documentation (see {@link android.icu.math.BigDecimal  header}).
+ * <p>
+ * By definition, using the {@link #BigDecimal(java.lang.String)} constructor on the result <code>String</code> will create a
+ * <code>BigDecimal</code> that is exactly equal to the original <code>BigDecimal</code>.
+ *
+ * @return The <code>String</code> exactly corresponding to this <code>BigDecimal</code>.
+ * @see #format(int, int)
+ * @see #format(int, int, int, int, int, int)
+ * @see #toCharArray()
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number as a <code>BigInteger</code> after removing the scale. That is, the number is expressed as a
+ * plain number, any decimal point is then removed (retaining the digits of any decimal part), and the result is
+ * then converted to a <code>BigInteger</code>.
+ *
+ * @return The <code>java.math.BigInteger</code> equal in value to this <code>BigDecimal</code> multiplied by ten to
+ *         the power of <code>this.scale()</code>.
+ */
+
+public java.math.BigInteger unscaledValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Translates a <code>double</code> to a <code>BigDecimal</code>.
+ * <p>
+ * Returns a <code>BigDecimal</code> which is the decimal representation of the 64-bit signed binary floating point
+ * parameter. If the parameter is infinite, or is not a number (NaN), a <code>NumberFormatException</code> is
+ * thrown.
+ * <p>
+ * The number is constructed as though <code>num</code> had been converted to a <code>String</code> using the <code>
+ * Double.toString()</code> method and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
+ * This is typically not an exact conversion.
+ *
+ * @param dub The <code>double</code> to be translated.
+ * @return The <code>BigDecimal</code> equal in value to <code>dub</code>.
+ * @throws java.lang.NumberFormatException if the parameter is infinite or not a number.
+ */
+
+public static android.icu.math.BigDecimal valueOf(double dub) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Translates a <code>long</code> to a <code>BigDecimal</code>. That is, returns a plain <code>BigDecimal</code>
+ * whose value is equal to the given <code>long</code>.
+ *
+ * @param lint The <code>long</code> to be translated.
+ * @return The <code>BigDecimal</code> equal in value to <code>lint</code>.
+ */
+
+public static android.icu.math.BigDecimal valueOf(long lint) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Translates a <code>long</code> to a <code>BigDecimal</code> with a given scale. That is, returns a plain <code>
+ * BigDecimal</code> whose unscaled value is equal to the given <code>long</code>, adjusted by the second parameter,
+ * <code>scale</code>.
+ * <p>
+ * The result is given by:
+ * <p>
+ * <code> (new BigDecimal(lint)).divide(TEN.pow(new BigDecimal(scale))) </code>
+ * <p>
+ * A <code>NumberFormatException</code> is thrown if <code>scale</code> is negative.
+ *
+ * @param lint The <code>long</code> to be translated.
+ * @param scale The <code>int</code> scale to be applied.
+ * @return The <code>BigDecimal</code> equal in value to <code>lint</code>.
+ * @throws java.lang.NumberFormatException if the scale is negative.
+ */
+
+public static android.icu.math.BigDecimal valueOf(long lint, int scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The <code>BigDecimal</code> constant "1".
+ *
+ * @see #TEN
+ * @see #ZERO
+ */
+
+public static final android.icu.math.BigDecimal ONE;
+static { ONE = null; }
+
+/**
+ * Rounding mode to round to a more positive number.
+ *
+ * @see android.icu.math.MathContext#ROUND_CEILING
+ */
+
+public static final int ROUND_CEILING = 2; // 0x2
+
+/**
+ * Rounding mode to round towards zero.
+ *
+ * @see android.icu.math.MathContext#ROUND_DOWN
+ */
+
+public static final int ROUND_DOWN = 1; // 0x1
+
+/**
+ * Rounding mode to round to a more negative number.
+ *
+ * @see android.icu.math.MathContext#ROUND_FLOOR
+ */
+
+public static final int ROUND_FLOOR = 3; // 0x3
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant value is rounded down.
+ *
+ * @see android.icu.math.MathContext#ROUND_HALF_DOWN
+ */
+
+public static final int ROUND_HALF_DOWN = 5; // 0x5
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant value is rounded to the nearest even neighbor.
+ *
+ * @see android.icu.math.MathContext#ROUND_HALF_EVEN
+ */
+
+public static final int ROUND_HALF_EVEN = 6; // 0x6
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant value is rounded up.
+ *
+ * @see android.icu.math.MathContext#ROUND_HALF_UP
+ */
+
+public static final int ROUND_HALF_UP = 4; // 0x4
+
+/**
+ * Rounding mode to assert that no rounding is necessary.
+ *
+ * @see android.icu.math.MathContext#ROUND_UNNECESSARY
+ */
+
+public static final int ROUND_UNNECESSARY = 7; // 0x7
+
+/**
+ * Rounding mode to round away from zero.
+ *
+ * @see android.icu.math.MathContext#ROUND_UP
+ */
+
+public static final int ROUND_UP = 0; // 0x0
+
+/**
+ * The <code>BigDecimal</code> constant "10".
+ *
+ * @see #ONE
+ * @see #ZERO
+ */
+
+public static final android.icu.math.BigDecimal TEN;
+static { TEN = null; }
+
+/**
+ * The <code>BigDecimal</code> constant "0".
+ *
+ * @see #ONE
+ * @see #TEN
+ */
+
+public static final android.icu.math.BigDecimal ZERO;
+static { ZERO = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/math/MathContext.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/math/MathContext.java
new file mode 100644
index 0000000..880de88
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/math/MathContext.java
@@ -0,0 +1,387 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/* Generated from 'MathContext.nrx' 8 Sep 2000 11:07:48 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
+
+package android.icu.math;
+
+
+/**
+ * The <code>MathContext</code> immutable class encapsulates the
+ * settings understood by the operator methods of the {@link android.icu.math.BigDecimal BigDecimal}
+ * class (and potentially other classes).  Operator methods are those
+ * that effect an operation on a number or a pair of numbers.
+ * <p>
+ * The settings, which are not base-dependent, comprise:
+ * <ol>
+ * <li><code>digits</code>:
+ * the number of digits (precision) to be used for an operation
+ * <li><code>form</code>:
+ * the form of any exponent that results from the operation
+ * <li><code>lostDigits</code>:
+ * whether checking for lost digits is enabled
+ * <li><code>roundingMode</code>:
+ * the algorithm to be used for rounding.
+ * </ol>
+ * <p>
+ * When provided, a <code>MathContext</code> object supplies the
+ * settings for an operation directly.
+ * <p>
+ * When <code>MathContext.DEFAULT</code> is provided for a
+ * <code>MathContext</code> parameter then the default settings are used
+ * (<code>9, SCIENTIFIC, false, ROUND_HALF_UP</code>).
+ * <p>
+ * In the <code>BigDecimal</code> class, all methods which accept a
+ * <code>MathContext</code> object defaults) also have a version of the
+ * method which does not accept a MathContext parameter.  These versions
+ * carry out unlimited precision fixed point arithmetic (as though the
+ * settings were (<code>0, PLAIN, false, ROUND_HALF_UP</code>).
+ * <p>
+ * The instance variables are shared with default access (so they are
+ * directly accessible to the <code>BigDecimal</code> class), but must
+ * never be changed.
+ * <p>
+ * The rounding mode constants have the same names and values as the
+ * constants of the same name in <code>java.math.BigDecimal</code>, to
+ * maintain compatibility with earlier versions of
+ * <code>BigDecimal</code>.
+ *
+ * @see     android.icu.math.BigDecimal
+ * @author  Mike Cowlishaw
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class MathContext implements java.io.Serializable {
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision.
+ * The other settings are set to the default values
+ * (see {@link #DEFAULT}).
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999).
+ *
+ * @param setdigits     The <code>int</code> digits setting
+ *                      for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision and form.
+ * The other settings are set to the default values
+ * (see {@link #DEFAULT}).
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999), or if the value given for the
+ * <code>setform</code> parameter is not one of the appropriate
+ * constants.
+ *
+ * @param setdigits     The <code>int</code> digits setting
+ *                      for this <code>MathContext</code>.
+ * @param setform       The <code>int</code> form setting
+ *                      for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits, int setform) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision, form, and lostDigits setting.
+ * The roundingMode setting is set to its default value
+ * (see {@link #DEFAULT}).
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999), or if the value given for the
+ * <code>setform</code> parameter is not one of the appropriate
+ * constants.
+ *
+ * @param setdigits     The <code>int</code> digits setting
+ *                      for this <code>MathContext</code>.
+ * @param setform       The <code>int</code> form setting
+ *                      for this <code>MathContext</code>.
+ * @param setlostdigits The <code>boolean</code> lostDigits
+ *                      setting for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits, int setform, boolean setlostdigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision, form, lostDigits, and roundingMode setting.
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999), or if the value given for the
+ * <code>setform</code> or <code>setroundingmode</code> parameters is
+ * not one of the appropriate constants.
+ *
+ * @param setdigits       The <code>int</code> digits setting
+ *                        for this <code>MathContext</code>.
+ * @param setform         The <code>int</code> form setting
+ *                        for this <code>MathContext</code>.
+ * @param setlostdigits   The <code>boolean</code> lostDigits
+ *                        setting for this <code>MathContext</code>.
+ * @param setroundingmode The <code>int</code> roundingMode setting
+ *                        for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits, int setform, boolean setlostdigits, int setroundingmode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the digits setting.
+ * This value is always non-negative.
+ *
+ * @return an <code>int</code> which is the value of the digits
+ *         setting
+ */
+
+public int getDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the form setting.
+ * This will be one of
+ * {@link #ENGINEERING},
+ * {@link #PLAIN}, or
+ * {@link #SCIENTIFIC}.
+ *
+ * @return an <code>int</code> which is the value of the form setting
+ */
+
+public int getForm() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lostDigits setting.
+ * This will be either <code>true</code> (enabled) or
+ * <code>false</code> (disabled).
+ *
+ * @return a <code>boolean</code> which is the value of the lostDigits
+ *           setting
+ */
+
+public boolean getLostDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the roundingMode setting.
+ * This will be one of
+ * {@link  #ROUND_CEILING},
+ * {@link  #ROUND_DOWN},
+ * {@link  #ROUND_FLOOR},
+ * {@link  #ROUND_HALF_DOWN},
+ * {@link  #ROUND_HALF_EVEN},
+ * {@link  #ROUND_HALF_UP},
+ * {@link  #ROUND_UNNECESSARY}, or
+ * {@link  #ROUND_UP}.
+ *
+ * @return an <code>int</code> which is the value of the roundingMode
+ *         setting
+ */
+
+public int getRoundingMode() { throw new RuntimeException("Stub!"); }
+
+/** Returns the <code>MathContext</code> as a readable string.
+ * The <code>String</code> returned represents the settings of the
+ * <code>MathContext</code> object as four blank-delimited words
+ * separated by a single blank and with no leading or trailing blanks,
+ * as follows:
+ * <ol>
+ * <li>
+ * <code>digits=</code>, immediately followed by
+ * the value of the digits setting as a numeric word.
+ * <li>
+ * <code>form=</code>, immediately followed by
+ * the value of the form setting as an uppercase word
+ * (one of <code>SCIENTIFIC</code>, <code>PLAIN</code>, or
+ * <code>ENGINEERING</code>).
+ * <li>
+ * <code>lostDigits=</code>, immediately followed by
+ * the value of the lostDigits setting
+ * (<code>1</code> if enabled, <code>0</code> if disabled).
+ * <li>
+ * <code>roundingMode=</code>, immediately followed by
+ * the value of the roundingMode setting as a word.
+ * This word will be the same as the name of the corresponding public
+ * constant.
+ * </ol>
+ * <p>
+ * For example:
+ * <br><code>
+ * digits=9 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP
+ * </code>
+ * <p>
+ * Additional words may be appended to the result of
+ * <code>toString</code> in the future if more properties are added
+ * to the class.
+ *
+ * @return a <code>String</code> representing the context settings.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * A <code>MathContext</code> object initialized to the default
+ * settings for general-purpose arithmetic.  That is,
+ * <code>digits=9 form=SCIENTIFIC lostDigits=false
+ * roundingMode=ROUND_HALF_UP</code>.
+ *
+ * @see #SCIENTIFIC
+ * @see #ROUND_HALF_UP
+ */
+
+public static final android.icu.math.MathContext DEFAULT;
+static { DEFAULT = null; }
+
+/**
+ * Standard floating point notation (with engineering exponential
+ * format, where the power of ten is a multiple of 3).
+ * Used as a setting to control the form of the result of a
+ * <code>BigDecimal</code> operation.
+ * A zero result in plain form may have a decimal part of one or
+ * more zeros.
+ *
+ * @see #PLAIN
+ * @see #SCIENTIFIC
+ */
+
+public static final int ENGINEERING = 2; // 0x2
+
+/**
+ * Plain (fixed point) notation, without any exponent.
+ * Used as a setting to control the form of the result of a
+ * <code>BigDecimal</code> operation.
+ * A zero result in plain form may have a decimal part of one or
+ * more zeros.
+ *
+ * @see #ENGINEERING
+ * @see #SCIENTIFIC
+ */
+
+public static final int PLAIN = 0; // 0x0
+
+/**
+ * Rounding mode to round to a more positive number.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If any of the discarded digits are non-zero then the result
+ * should be rounded towards the next more positive digit.
+ */
+
+public static final int ROUND_CEILING = 2; // 0x2
+
+/**
+ * Rounding mode to round towards zero.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * All discarded digits are ignored (truncated).  The result is
+ * neither incremented nor decremented.
+ */
+
+public static final int ROUND_DOWN = 1; // 0x1
+
+/**
+ * Rounding mode to round to a more negative number.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If any of the discarded digits are non-zero then the result
+ * should be rounded towards the next more negative digit.
+ */
+
+public static final int ROUND_FLOOR = 3; // 0x3
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant
+ * value is rounded down.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If the discarded digits represent greater than half (0.5 times)
+ * the value of a one in the next position then the result should be
+ * rounded up (away from zero).  Otherwise the discarded digits are
+ * ignored.
+ */
+
+public static final int ROUND_HALF_DOWN = 5; // 0x5
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant
+ * value is rounded to the nearest even neighbor.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If the discarded digits represent greater than half (0.5 times)
+ * the value of a one in the next position then the result should be
+ * rounded up (away from zero).  If they represent less than half,
+ * then the result should be rounded down.
+ * <p>
+ * Otherwise (they represent exactly half) the result is rounded
+ * down if its rightmost digit is even, or rounded up if its
+ * rightmost digit is odd (to make an even digit).
+ */
+
+public static final int ROUND_HALF_EVEN = 6; // 0x6
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant
+ * value is rounded up.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If the discarded digits represent greater than or equal to half
+ * (0.5 times) the value of a one in the next position then the result
+ * should be rounded up (away from zero).  Otherwise the discarded
+ * digits are ignored.
+ */
+
+public static final int ROUND_HALF_UP = 4; // 0x4
+
+/**
+ * Rounding mode to assert that no rounding is necessary.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * Rounding (potential loss of information) is not permitted.
+ * If any of the discarded digits are non-zero then an
+ * <code>ArithmeticException</code> should be thrown.
+ */
+
+public static final int ROUND_UNNECESSARY = 7; // 0x7
+
+/**
+ * Rounding mode to round away from zero.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If any of the discarded digits are non-zero then the result will
+ * be rounded up (away from zero).
+ */
+
+public static final int ROUND_UP = 0; // 0x0
+
+/**
+ * Standard floating point notation (with scientific exponential
+ * format, where there is one digit before any decimal point).
+ * Used as a setting to control the form of the result of a
+ * <code>BigDecimal</code> operation.
+ * A zero result in plain form may have a decimal part of one or
+ * more zeros.
+ *
+ * @see #ENGINEERING
+ * @see #PLAIN
+ */
+
+public static final int SCIENTIFIC = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/CompactNotation.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/CompactNotation.java
new file mode 100644
index 0000000..8c251b7
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/CompactNotation.java
@@ -0,0 +1,24 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the scientific notation style to be used when formatting numbers in
+ * NumberFormatter.
+ *
+ * <p>
+ * This class exposes no public functionality. To create a CompactNotation, use one of the factory
+ * methods in {@link android.icu.number.Notation Notation}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CompactNotation extends android.icu.number.Notation {
+
+CompactNotation() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/CurrencyPrecision.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/CurrencyPrecision.java
new file mode 100644
index 0000000..baf1994
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/CurrencyPrecision.java
@@ -0,0 +1,45 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.Currency;
+
+/**
+ * A class that defines a rounding strategy parameterized by a currency to be used when formatting
+ * numbers in NumberFormatter.
+ *
+ * <p>
+ * To create a CurrencyPrecision, use one of the factory methods on Precision.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class CurrencyPrecision extends android.icu.number.Precision {
+
+CurrencyPrecision() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Associates a currency with this rounding strategy.
+ *
+ * <p>
+ * <strong>Calling this method is <em>not required</em></strong>, because the currency specified in
+ * unit() or via a CurrencyAmount passed into format(Measure) is automatically applied to currency
+ * rounding strategies. However, this method enables you to override that automatic association.
+ *
+ * <p>
+ * This method also enables numbers to be formatted using currency rounding rules without explicitly
+ * using a currency format.
+ *
+ * @param currency
+ *            The currency to associate with this rounding strategy.
+ * @return A Precision for chaining or passing to the NumberFormatter rounding() setter.
+ * @throws java.lang.IllegalArgumentException for null Currency
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.Precision withCurrency(android.icu.util.Currency currency) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumber.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumber.java
new file mode 100644
index 0000000..642f098
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumber.java
@@ -0,0 +1,77 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * The result of a number formatting operation. This class allows the result to be exported in several
+ * data types, including a String, an AttributedCharacterIterator, and a BigDecimal.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class FormattedNumber implements android.icu.text.FormattedValue {
+
+FormattedNumber() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Export the formatted number as a BigDecimal. This endpoint is useful for obtaining the exact
+ * number being printed after scaling and rounding have been applied by the number formatting
+ * pipeline.
+ *
+ * @return A BigDecimal representation of the formatted number.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public java.math.BigDecimal toBigDecimal() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumberRange.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumberRange.java
new file mode 100644
index 0000000..5edc325
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumberRange.java
@@ -0,0 +1,113 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * The result of a number range formatting operation. This class allows the result to be exported in several data types,
+ * including a String, an AttributedCharacterIterator, and a BigDecimal.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class FormattedNumberRange implements android.icu.text.FormattedValue {
+
+FormattedNumberRange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Export the first formatted number as a BigDecimal. This endpoint is useful for obtaining the exact number being
+ * printed after scaling and rounding have been applied by the number range formatting pipeline.
+ *
+ * @return A BigDecimal representation of the first formatted number.
+ * @see android.icu.number.NumberRangeFormatter
+ * @see #getSecondBigDecimal
+ */
+
+public java.math.BigDecimal getFirstBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Export the second formatted number as a BigDecimal. This endpoint is useful for obtaining the exact number being
+ * printed after scaling and rounding have been applied by the number range formatting pipeline.
+ *
+ * @return A BigDecimal representation of the second formatted number.
+ * @see android.icu.number.NumberRangeFormatter
+ * @see #getFirstBigDecimal
+ */
+
+public java.math.BigDecimal getSecondBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the pair of numbers was successfully formatted as a range or whether an identity fallback was
+ * used. For example, if the first and second number were the same either before or after rounding occurred, an
+ * identity fallback was used.
+ *
+ * @return A RangeIdentityType indicating the resulting identity situation in the formatted number range.
+ * @see android.icu.number.NumberRangeFormatter
+ * @see android.icu.number.NumberRangeFormatter.RangeIdentityFallback
+ */
+
+public android.icu.number.NumberRangeFormatter.RangeIdentityResult getIdentityResult() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FractionPrecision.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FractionPrecision.java
new file mode 100644
index 0000000..93faf7c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/FractionPrecision.java
@@ -0,0 +1,65 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines a rounding strategy based on a number of fraction places and optionally
+ * significant digits to be used when formatting numbers in NumberFormatter.
+ *
+ * <p>
+ * To create a FractionPrecision, use one of the factory methods on Precision.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class FractionPrecision extends android.icu.number.Precision {
+
+FractionPrecision() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ensure that no less than this number of significant digits are retained when rounding according to
+ * fraction rules.
+ *
+ * <p>
+ * For example, with integer rounding, the number 3.141 becomes "3". However, with minimum figures
+ * set to 2, 3.141 becomes "3.1" instead.
+ *
+ * <p>
+ * This setting does not affect the number of trailing zeros. For example, 3.01 would print as "3",
+ * not "3.0".
+ *
+ * @param minSignificantDigits
+ *            The number of significant figures to guarantee.
+ * @return A Precision for chaining or passing to the NumberFormatter rounding() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.Precision withMinDigits(int minSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ensure that no more than this number of significant digits are retained when rounding according to
+ * fraction rules.
+ *
+ * <p>
+ * For example, with integer rounding, the number 123.4 becomes "123". However, with maximum figures
+ * set to 2, 123.4 becomes "120" instead.
+ *
+ * <p>
+ * This setting does not affect the number of trailing zeros. For example, with fixed fraction of 2,
+ * 123.4 would become "120.00".
+ *
+ * @param maxSignificantDigits
+ *            Round the number to no more than this number of significant figures.
+ * @return A Precision for chaining or passing to the NumberFormatter rounding() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.Precision withMaxDigits(int maxSignificantDigits) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/IntegerWidth.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/IntegerWidth.java
new file mode 100644
index 0000000..477dba1
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/IntegerWidth.java
@@ -0,0 +1,53 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the strategy for padding and truncating integers before the decimal separator.
+ *
+ * <p>
+ * To create an IntegerWidth, use one of the factory methods.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IntegerWidth {
+
+private IntegerWidth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Pad numbers at the beginning with zeros to guarantee a certain number of numerals before the
+ * decimal separator.
+ *
+ * <p>
+ * For example, with minInt=3, the number 55 will get printed as "055".
+ *
+ * @param minInt
+ *            The minimum number of places before the decimal separator.
+ * @return An IntegerWidth for chaining or passing to the NumberFormatter integerWidth() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.IntegerWidth zeroFillTo(int minInt) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Truncate numbers exceeding a certain number of numerals before the decimal separator.
+ *
+ * For example, with maxInt=3, the number 1234 will get printed as "234".
+ *
+ * @param maxInt
+ *            The maximum number of places before the decimal separator. maxInt == -1 means no
+ *            truncation.
+ * @return An IntegerWidth for passing to the NumberFormatter integerWidth() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than -1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.IntegerWidth truncateAt(int maxInt) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberFormatter.java
new file mode 100644
index 0000000..6130644
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberFormatter.java
@@ -0,0 +1,93 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.text.Format;
+import java.math.BigInteger;
+import android.icu.math.BigDecimal;
+import android.icu.util.Measure;
+import android.icu.util.CurrencyAmount;
+
+/**
+ * A NumberFormatter that has a locale associated with it; this means .format() methods are available.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class LocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.LocalizedNumberFormatter> {
+
+LocalizedNumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given byte, short, int, or long to a string using the settings specified in the
+ * NumberFormatter fluent setting chain.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(long input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given float or double to a string using the settings specified in the NumberFormatter
+ * fluent setting chain.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(double input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given {@link java.math.BigInteger BigInteger}, {@link android.icu.math.BigDecimal BigDecimal}, or other {@link java.lang.Number Number} to a string using
+ * the settings specified in the NumberFormatter fluent setting chain.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(java.lang.Number input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given {@link android.icu.util.Measure Measure} or {@link android.icu.util.CurrencyAmount CurrencyAmount} to a string using the settings
+ * specified in the NumberFormatter fluent setting chain.
+ *
+ * <p>
+ * The unit specified here overrides any unit that may have been specified in the setter chain. This
+ * method is intended for cases when each input to the number formatter has a different unit.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(android.icu.util.Measure input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a representation of this LocalizedNumberFormat as a {@link java.text.Format}, enabling the
+ * use of this number formatter with APIs that need an object of that type, such as MessageFormat.
+ * <p>
+ * This API is not intended to be used other than for enabling API compatibility. The {@link #format}
+ * methods should normally be used when formatting numbers, not the Format object returned by this
+ * method.
+ *
+ * @return A Format wrapping this LocalizedNumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public java.text.Format toFormat() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberRangeFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberRangeFormatter.java
new file mode 100644
index 0000000..6d13b54
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberRangeFormatter.java
@@ -0,0 +1,65 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A NumberRangeFormatter that has a locale associated with it; this means .formatRange() methods are available.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class LocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.LocalizedNumberRangeFormatter> {
+
+LocalizedNumberRangeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given integers to a string using the settings specified in the NumberRangeFormatter fluent setting
+ * chain.
+ *
+ * @param first
+ *            The first number in the range, usually to the left in LTR locales.
+ * @param second
+ *            The second number in the range, usually to the right in LTR locales.
+ * @return A FormattedNumberRange object; call .toString() to get the string.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public android.icu.number.FormattedNumberRange formatRange(int first, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given doubles to a string using the settings specified in the NumberRangeFormatter fluent setting
+ * chain.
+ *
+ * @param first
+ *            The first number in the range, usually to the left in LTR locales.
+ * @param second
+ *            The second number in the range, usually to the right in LTR locales.
+ * @return A FormattedNumberRange object; call .toString() to get the string.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public android.icu.number.FormattedNumberRange formatRange(double first, double second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given Numbers to a string using the settings specified in the NumberRangeFormatter fluent setting
+ * chain.
+ *
+ * @param first
+ *            The first number in the range, usually to the left in LTR locales.
+ * @param second
+ *            The second number in the range, usually to the right in LTR locales.
+ * @return A FormattedNumberRange object; call .toString() to get the string.
+ * @throws java.lang.IllegalArgumentException if first or second is null
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public android.icu.number.FormattedNumberRange formatRange(java.lang.Number first, java.lang.Number second) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Notation.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Notation.java
new file mode 100644
index 0000000..c9f2c44
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Notation.java
@@ -0,0 +1,169 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the notation style to be used when formatting numbers in NumberFormatter.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Notation {
+
+Notation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using scientific notation (also known as scientific form, standard index form, or
+ * standard form in the UK). The format for scientific notation varies by locale; for example, many
+ * Western locales display the number in the form "#E0", where the number is displayed with one digit
+ * before the decimal separator, zero or more digits after the decimal separator, and the
+ * corresponding power of 10 displayed after the "E".
+ *
+ * <p>
+ * Example outputs in <em>en-US</em> when printing 8.765E4 through 8.765E-3:
+ *
+ * <pre>
+ * 8.765E4
+ * 8.765E3
+ * 8.765E2
+ * 8.765E1
+ * 8.765E0
+ * 8.765E-1
+ * 8.765E-2
+ * 8.765E-3
+ * 0E0
+ * </pre>
+ *
+ * @return A ScientificNotation for chaining or passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.ScientificNotation scientific() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using engineering notation, a variant of scientific notation in which the
+ * exponent must be divisible by 3.
+ *
+ * <p>
+ * Example outputs in <em>en-US</em> when printing 8.765E4 through 8.765E-3:
+ *
+ * <pre>
+ * 87.65E3
+ * 8.765E3
+ * 876.5E0
+ * 87.65E0
+ * 8.765E0
+ * 876.5E-3
+ * 87.65E-3
+ * 8.765E-3
+ * 0E0
+ * </pre>
+ *
+ * @return A ScientificNotation for chaining or passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.ScientificNotation engineering() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using short-form compact notation.
+ *
+ * <p>
+ * <em>Compact notation</em>, defined in Unicode Technical Standard #35 Part 3 Section 2.4.1, prints
+ * numbers with localized prefixes or suffixes corresponding to different powers of ten. Compact
+ * notation is similar to engineering notation in how it scales numbers.
+ *
+ * <p>
+ * Compact notation is ideal for displaying large numbers (over ~1000) to humans while at the same
+ * time minimizing screen real estate.
+ *
+ * <p>
+ * In short form, the powers of ten are abbreviated. In <em>en-US</em>, the abbreviations are "K" for
+ * thousands, "M" for millions, "B" for billions, and "T" for trillions. Example outputs in
+ * <em>en-US</em> when printing 8.765E7 through 8.765E0:
+ *
+ * <pre>
+ * 88M
+ * 8.8M
+ * 876K
+ * 88K
+ * 8.8K
+ * 876
+ * 88
+ * 8.8
+ * </pre>
+ *
+ * <p>
+ * When compact notation is specified without an explicit rounding strategy, numbers are rounded off
+ * to the closest integer after scaling the number by the corresponding power of 10, but with a digit
+ * shown after the decimal separator if there is only one digit before the decimal separator. The
+ * default compact notation rounding strategy is equivalent to:
+ *
+ * <pre>
+ * Rounder.integer().withMinDigits(2)
+ * </pre>
+ *
+ * @return A CompactNotation for passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.CompactNotation compactShort() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using long-form compact notation. For more information on compact notation, see
+ * {@link #compactShort}.
+ *
+ * <p>
+ * In long form, the powers of ten are spelled out fully. Example outputs in <em>en-US</em> when
+ * printing 8.765E7 through 8.765E0:
+ *
+ * <pre>
+ * 88 million
+ * 8.8 million
+ * 876 thousand
+ * 88 thousand
+ * 8.8 thousand
+ * 876
+ * 88
+ * 8.8
+ * </pre>
+ *
+ * @return A CompactNotation for passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.CompactNotation compactLong() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using simple notation without any scaling by powers of ten. This is the default
+ * behavior.
+ *
+ * <p>
+ * Since this is the default behavior, this method needs to be called only when it is necessary to
+ * override a previous setting.
+ *
+ * <p>
+ * Example outputs in <em>en-US</em> when printing 8.765E7 through 8.765E0:
+ *
+ * <pre>
+ * 87,650,000
+ * 8,765,000
+ * 876,500
+ * 87,650
+ * 8,765
+ * 876.5
+ * 87.65
+ * 8.765
+ * </pre>
+ *
+ * @return A SimpleNotation for passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.SimpleNotation simple() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatter.java
new file mode 100644
index 0000000..34a1430
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatter.java
@@ -0,0 +1,401 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.ULocale;
+import java.util.Locale;
+
+/**
+ * The main entrypoint to the localized number formatting library introduced in ICU 60. Basic usage
+ * examples:
+ *
+ * <pre>
+ * // Most basic usage:
+ * NumberFormatter.withLocale(...).format(123).toString();  // 1,234 in en-US
+ *
+ * // Custom notation, unit, and rounding strategy:
+ * NumberFormatter.with()
+ *     .notation(Notation.compactShort())
+ *     .unit(Currency.getInstance("EUR"))
+ *     .precision(Precision.maxDigits(2))
+ *     .locale(...)
+ *     .format(1234)
+ *     .toString();  // ?1.2K in en-US
+ *
+ * // Create a formatter in a private static final field:
+ * private static final LocalizedNumberFormatter formatter = NumberFormatter.withLocale(...)
+ *     .unit(NoUnit.PERCENT)
+ *     .precision(Precision.fixedFraction(3));
+ * formatter.format(5.9831).toString();  // 5.983% in en-US
+ *
+ * // Create a "template" in a private static final field but without setting a locale until the call site:
+ * private static final UnlocalizedNumberFormatter template = NumberFormatter.with()
+ *     .sign(SignDisplay.ALWAYS)
+ *     .unitWidth(UnitWidth.FULL_NAME);
+ * template.locale(...).format(new Measure(1234, MeasureUnit.METER)).toString();  // +1,234 meters in en-US
+ * </pre>
+ *
+ * <p>
+ * This API offers more features than {@link android.icu.text.DecimalFormat} and is geared toward new
+ * users of ICU.
+ *
+ * <p>
+ * NumberFormatter instances (i.e., LocalizedNumberFormatter and UnlocalizedNumberFormatter)
+ * are immutable and thread safe. This means that invoking a configuration
+ * method has no effect on the receiving instance; you must store and use the new number formatter
+ * instance it returns instead.
+ *
+ * <pre>
+ * UnlocalizedNumberFormatter formatter = UnlocalizedNumberFormatter.with()
+ *         .notation(Notation.scientific());
+ * formatter.precision(Precision.maxFraction(2)); // does nothing!
+ * formatter.locale(ULocale.ENGLISH).format(9.8765).toString(); // prints "9.8765E0", not "9.88E0"
+ * </pre>
+ *
+ * <p>
+ * This API is based on the <em>fluent</em> design pattern popularized by libraries such as Google's
+ * Guava. For extensive details on the design of this API, read <a href="https://goo.gl/szi5VB">the
+ * design doc</a>.
+ *
+ * @author Shane Carr
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class NumberFormatter {
+
+private NumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is not
+ * currently known at the call site.
+ *
+ * @return An {@link android.icu.number.UnlocalizedNumberFormatter UnlocalizedNumberFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.UnlocalizedNumberFormatter with() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known
+ * at the call site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number formatting.
+ * @return A {@link android.icu.number.LocalizedNumberFormatter LocalizedNumberFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberFormatter withLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known
+ * at the call site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number formatting.
+ * @return A {@link android.icu.number.LocalizedNumberFormatter LocalizedNumberFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberFormatter withLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+/**
+ * An enum declaring how to render the decimal separator. Example outputs when formatting 1 and 1.1
+ * in <em>en-US</em>:
+ *
+ * <ul>
+ * <li>AUTO: "1" and "1.1"
+ * <li>ALWAYS: "1." and "1.1"
+ * </ul>
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DecimalSeparatorDisplay {
+/**
+ * Show the decimal separator when there are one or more digits to display after the separator,
+ * and do not show it otherwise. This is the default behavior.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+AUTO,
+/**
+ * Always show the decimal separator, even if there are no digits to display after the separator.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ALWAYS;
+}
+
+/**
+ * An enum declaring the strategy for when and how to display grouping separators (i.e., the
+ * separator, often a comma or period, after every 2-3 powers of ten). The choices are several
+ * pre-built strategies for different use cases that employ locale data whenever possible. Example
+ * outputs for 1234 and 1234567 in <em>en-IN</em>:
+ *
+ * <ul>
+ * <li>OFF: 1234 and 12345
+ * <li>MIN2: 1234 and 12,34,567
+ * <li>AUTO: 1,234 and 12,34,567
+ * <li>ON_ALIGNED: 1,234 and 12,34,567
+ * <li>THOUSANDS: 1,234 and 1,234,567
+ * </ul>
+ *
+ * <p>
+ * The default is AUTO, which displays grouping separators unless the locale data says that grouping
+ * is not customary. To force grouping for all numbers greater than 1000 consistently across locales,
+ * use ON_ALIGNED. On the other hand, to display grouping less frequently than the default, use MIN2
+ * or OFF. See the docs of each option for details.
+ *
+ * <p>
+ * Note: This enum specifies the strategy for grouping sizes. To set which character to use as the
+ * grouping separator, use the "symbols" setter.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum GroupingStrategy {
+/**
+ * Do not display grouping separators in any locale.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+OFF,
+/**
+ * Display grouping using locale defaults, except do not show grouping on values smaller than
+ * 10000 (such that there is a <em>minimum of two digits</em> before the first separator).
+ *
+ * <p>
+ * Note that locales may restrict grouping separators to be displayed only on 1 million or
+ * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
+ *
+ * <p>
+ * Locale data is used to determine whether to separate larger numbers into groups of 2
+ * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+MIN2,
+/**
+ * Display grouping using the default strategy for all locales. This is the default behavior.
+ *
+ * <p>
+ * Note that locales may restrict grouping separators to be displayed only on 1 million or
+ * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
+ *
+ * <p>
+ * Locale data is used to determine whether to separate larger numbers into groups of 2
+ * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+AUTO,
+/**
+ * Always display the grouping separator on values of at least 1000.
+ *
+ * <p>
+ * This option ignores the locale data that restricts or disables grouping, described in MIN2 and
+ * AUTO. This option may be useful to normalize the alignment of numbers, such as in a
+ * spreadsheet.
+ *
+ * <p>
+ * Locale data is used to determine whether to separate larger numbers into groups of 2
+ * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ON_ALIGNED,
+/**
+ * Use the Western defaults: groups of 3 and enabled for all numbers 1000 or greater. Do not use
+ * locale data for determining the grouping strategy.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+THOUSANDS;
+}
+
+/**
+ * An enum declaring how to denote positive and negative numbers. Example outputs when formatting
+ * 123, 0, and -123 in <em>en-US</em>:
+ *
+ * <ul>
+ * <li>AUTO: "123", "0", and "-123"
+ * <li>ALWAYS: "+123", "+0", and "-123"
+ * <li>NEVER: "123", "0", and "123"
+ * <li>ACCOUNTING: "$123", "$0", and "($123)"
+ * <li>ACCOUNTING_ALWAYS: "+$123", "+$0", and "($123)"
+ * <li>EXCEPT_ZERO: "+123", "0", and "-123"
+ * <li>ACCOUNTING_EXCEPT_ZERO: "+$123", "$0", and "($123)"
+ * </ul>
+ *
+ * <p>
+ * The exact format, including the position and the code point of the sign, differ by locale.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum SignDisplay {
+/**
+ * Show the minus sign on negative numbers, and do not show the sign on positive numbers. This is
+ * the default behavior.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+AUTO,
+/**
+ * Show the minus sign on negative numbers and the plus sign on positive numbers, including zero.
+ * To hide the sign on zero, see {@link #EXCEPT_ZERO}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ALWAYS,
+/**
+ * Do not show the sign on positive or negative numbers.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+NEVER,
+/**
+ * Use the locale-dependent accounting format on negative numbers, and do not show the sign on
+ * positive numbers.
+ *
+ * <p>
+ * The accounting format is defined in CLDR and varies by locale; in many Western locales, the
+ * format is a pair of parentheses around the number.
+ *
+ * <p>
+ * Note: Since CLDR defines the accounting format in the monetary context only, this option falls
+ * back to the AUTO sign display strategy when formatting without a currency unit. This
+ * limitation may be lifted in the future.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ACCOUNTING,
+/**
+ * Use the locale-dependent accounting format on negative numbers, and show the plus sign on
+ * positive numbers, including zero. For more information on the accounting format, see the
+ * ACCOUNTING sign display strategy. To hide the sign on zero, see
+ * {@link #ACCOUNTING_EXCEPT_ZERO}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ACCOUNTING_ALWAYS,
+/**
+ * Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a
+ * sign on zero, numbers that round to zero, or NaN.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+EXCEPT_ZERO,
+/**
+ * Use the locale-dependent accounting format on negative numbers, and show the plus sign on
+ * positive numbers. Do not show a sign on zero, numbers that round to zero, or NaN. For more
+ * information on the accounting format, see the ACCOUNTING sign display strategy.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ACCOUNTING_EXCEPT_ZERO;
+}
+
+/**
+ * An enum declaring how to render units, including currencies. Example outputs when formatting 123
+ * USD and 123 meters in <em>en-CA</em>:
+ *
+ * <ul>
+ * <li>NARROW: "$123.00" and "123 m"
+ * <li>SHORT: "US$?123.00" and "123 m"
+ * <li>FULL_NAME: "123.00 US dollars" and "123 meters"
+ * <li>ISO_CODE: "USD?123.00" and undefined behavior
+ * <li>HIDDEN: "123.00" and "123"
+ * </ul>
+ *
+ * <p>
+ * This enum is similar to {@link android.icu.text.MeasureFormat.FormatWidth}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum UnitWidth {
+/**
+ * Print an abbreviated version of the unit name. Similar to SHORT, but always use the shortest
+ * available abbreviation or symbol. This option can be used when the context hints at the
+ * identity of the unit. For more information on the difference between NARROW and SHORT, see
+ * SHORT.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the "Narrow" format for measure units and the "?????"
+ * placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+NARROW,
+/**
+ * Print an abbreviated version of the unit name. Similar to NARROW, but use a slightly wider
+ * abbreviation or symbol when there may be ambiguity. This is the default behavior.
+ *
+ * <p>
+ * For example, in <em>es-US</em>, the SHORT form for Fahrenheit is "{0} ?F", but the NARROW form
+ * is "{0}?", since Fahrenheit is the customary unit for temperature in that locale.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the "Short" format for measure units and the "?"
+ * placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+SHORT,
+/**
+ * Print the full name of the unit, without any abbreviations.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the default format for measure units and the "???"
+ * placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+FULL_NAME,
+/**
+ * Use the three-digit ISO XXX code in place of the symbol for displaying currencies.
+ *
+ * <p>
+ * Behavior of this option with non-currency units is not defined at this time.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the "??" placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ISO_CODE,
+/**
+ * Format the number according to the specified unit, but do not display the unit. For
+ * currencies, apply monetary symbols and formats as with SHORT, but omit the currency symbol.
+ * For measure units, the behavior is equivalent to not specifying the unit at all.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+HIDDEN;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatterSettings.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatterSettings.java
new file mode 100644
index 0000000..6afc668
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatterSettings.java
@@ -0,0 +1,440 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.MeasureUnit;
+import android.icu.util.Currency;
+import android.icu.util.Measure;
+import android.icu.number.NumberFormatter.GroupingStrategy;
+import android.icu.util.ULocale;
+import android.icu.text.DecimalFormatSymbols;
+import android.icu.text.NumberingSystem;
+import android.icu.number.NumberFormatter.UnitWidth;
+import android.icu.number.NumberFormatter.SignDisplay;
+import android.icu.number.NumberFormatter.DecimalSeparatorDisplay;
+
+/**
+ * An abstract base class for specifying settings related to number formatting. This class is implemented
+ * by {@link android.icu.number.UnlocalizedNumberFormatter UnlocalizedNumberFormatter} and {@link android.icu.number.LocalizedNumberFormatter LocalizedNumberFormatter}. This class is not intended
+ * for public subclassing.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberFormatterSettings<T extends android.icu.number.NumberFormatterSettings<?>> {
+
+NumberFormatterSettings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the notation style (simple, scientific, or compact) for rendering numbers.
+ *
+ * <ul>
+ * <li>Simple notation: "12,300"
+ * <li>Scientific notation: "1.23E4"
+ * <li>Compact notation: "12K"
+ * </ul>
+ *
+ * <p>
+ * All notation styles will be properly localized with locale data, and all notation styles are
+ * compatible with units, rounding strategies, and other number formatter settings.
+ *
+ * <p>
+ * Pass this method the return value of a {@link android.icu.number.Notation Notation} factory method. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().notation(Notation.compactShort())
+ * </pre>
+ *
+ * The default is to use simple notation.
+ *
+ * @param notation
+ *            The notation strategy to use.
+ * @return The fluent chain.
+ * @see android.icu.number.Notation
+ */
+
+public T notation(android.icu.number.Notation notation) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the unit (unit of measure, currency, or percent) to associate with rendered numbers.
+ *
+ * <ul>
+ * <li>Unit of measure: "12.3 meters"
+ * <li>Currency: "$12.30"
+ * <li>Percent: "12.3%"
+ * </ul>
+ *
+ * <p>
+ * <strong>Note:</strong> The unit can also be specified by passing a {@link android.icu.util.Measure Measure} to
+ * {@link android.icu.number.LocalizedNumberFormatter#format(android.icu.util.Measure) LocalizedNumberFormatter#format(Measure)}. Units specified via the format method take
+ * precedence over units specified here. This setter is designed for situations when the unit is
+ * constant for the duration of the number formatting process.
+ *
+ * <p>
+ * All units will be properly localized with locale data, and all units are compatible with notation
+ * styles, rounding strategies, and other number formatter settings.
+ *
+ * <p>
+ * Pass this method any instance of {@link android.icu.util.MeasureUnit MeasureUnit}. For units of measure:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(MeasureUnit.METER)
+ * </pre>
+ *
+ * Currency:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(Currency.getInstance("USD"))
+ * </pre>
+ *
+ * <p>
+ * See {@link #perUnit} for information on how to format strings like "5 meters per second".
+ *
+ * <p>
+ * If the input usage is correctly set the output unit <b>will change</b>
+ * according to `usage`, `locale` and `unit` value.
+ * </p>
+ *
+ * @param unit
+ *            The unit to render.
+ * @return The fluent chain.
+ * @see android.icu.util.MeasureUnit
+ * @see android.icu.util.Currency
+ * @see #perUnit
+ */
+
+public T unit(android.icu.util.MeasureUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a unit to be used in the denominator. For example, to format "3 m/s", pass METER to the unit
+ * and SECOND to the perUnit.
+ *
+ * <p>
+ * Pass this method any instance of {@link android.icu.util.MeasureUnit MeasureUnit}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(MeasureUnit.METER).perUnit(MeasureUnit.SECOND)
+ * </pre>
+ *
+ * <p>
+ * The default is not to display any unit in the denominator.
+ *
+ * <p>
+ * If a per-unit is specified without a primary unit via {@link #unit}, the behavior is undefined.
+ *
+ * @param perUnit
+ *            The unit to render in the denominator.
+ * @return The fluent chain
+ * @see #unit
+ */
+
+public T perUnit(android.icu.util.MeasureUnit perUnit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the rounding precision to use when formatting numbers.
+ *
+ * <ul>
+ * <li>Round to 3 decimal places: "3.142"
+ * <li>Round to 3 significant figures: "3.14"
+ * <li>Round to the closest nickel: "3.15"
+ * <li>Do not perform rounding: "3.1415926..."
+ * </ul>
+ *
+ * <p>
+ * Pass this method the return value of one of the factory methods on {@link android.icu.number.Precision Precision}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().precision(Precision.fixedFraction(2))
+ * </pre>
+ *
+ * <p>
+ * In most cases, the default rounding precision is to round to 6 fraction places; i.e.,
+ * <code>Precision.maxFraction(6)</code>. The exceptions are if compact notation is being used, then
+ * the compact notation rounding precision is used (see {@link android.icu.number.Notation#compactShort Notation#compactShort} for details), or
+ * if the unit is a currency, then standard currency rounding is used, which varies from currency to
+ * currency (see {@link android.icu.number.Precision#currency Precision#currency} for details).
+ *
+ * @param precision
+ *            The rounding precision to use.
+ * @return The fluent chain.
+ * @see android.icu.number.Precision
+ */
+
+public T precision(android.icu.number.Precision precision) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies how to determine the direction to round a number when it has more digits than fit in the
+ * desired precision.  When formatting 1.235:
+ *
+ * <ul>
+ * <li>Ceiling rounding mode with integer precision: "2"
+ * <li>Half-down rounding mode with 2 fixed fraction digits: "1.23"
+ * <li>Half-up rounding mode with 2 fixed fraction digits: "1.24"
+ * </ul>
+ *
+ * The default is HALF_EVEN. For more information on rounding mode, see the ICU userguide here:
+ *
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes
+ *
+ * @param roundingMode
+ *            The rounding mode to use.
+ * @return The fluent chain.
+ * @see android.icu.number.Precision
+ */
+
+public T roundingMode(java.math.RoundingMode roundingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the grouping strategy to use when formatting numbers.
+ *
+ * <ul>
+ * <li>Default grouping: "12,300" and "1,230"
+ * <li>Grouping with at least 2 digits: "12,300" and "1230"
+ * <li>No grouping: "12300" and "1230"
+ * </ul>
+ *
+ * <p>
+ * The exact grouping widths will be chosen based on the locale.
+ *
+ * <p>
+ * Pass this method an element from the {@link android.icu.number.NumberFormatter.GroupingStrategy GroupingStrategy} enum. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().grouping(GroupingStrategy.MIN2)
+ * </pre>
+ *
+ * The default is to perform grouping according to locale data; most locales, but not all locales,
+ * enable it by default.
+ *
+ * @param strategy
+ *            The grouping strategy to use.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter.GroupingStrategy
+ */
+
+public T grouping(android.icu.number.NumberFormatter.GroupingStrategy strategy) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the minimum and maximum number of digits to render before the decimal mark.
+ *
+ * <ul>
+ * <li>Zero minimum integer digits: ".08"
+ * <li>One minimum integer digit: "0.08"
+ * <li>Two minimum integer digits: "00.08"
+ * </ul>
+ *
+ * <p>
+ * Pass this method the return value of {@link android.icu.number.IntegerWidth#zeroFillTo(int) IntegerWidth#zeroFillTo(int)}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().integerWidth(IntegerWidth.zeroFillTo(2))
+ * </pre>
+ *
+ * The default is to have one minimum integer digit.
+ *
+ * @param style
+ *            The integer width to use.
+ * @return The fluent chain.
+ * @see android.icu.number.IntegerWidth
+ */
+
+public T integerWidth(android.icu.number.IntegerWidth style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the symbols (decimal separator, grouping separator, percent sign, numerals, etc.) to use
+ * when rendering numbers.
+ *
+ * <ul>
+ * <li><em>en_US</em> symbols: "12,345.67"
+ * <li><em>fr_FR</em> symbols: "12&nbsp;345,67"
+ * <li><em>de_CH</em> symbols: "12?345.67"
+ * <li><em>my_MY</em> symbols: "??,???.??"
+ * </ul>
+ *
+ * <p>
+ * Pass this method an instance of {@link android.icu.text.DecimalFormatSymbols DecimalFormatSymbols}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().symbols(DecimalFormatSymbols.getInstance(new ULocale("de_CH")))
+ * </pre>
+ *
+ * <p>
+ * <strong>Note:</strong> DecimalFormatSymbols automatically chooses the best numbering system based
+ * on the locale. In the examples above, the first three are using the Latin numbering system, and
+ * the fourth is using the Myanmar numbering system.
+ *
+ * <p>
+ * <strong>Note:</strong> The instance of DecimalFormatSymbols will be copied: changes made to the
+ * symbols object after passing it into the fluent chain will not be seen.
+ *
+ * <p>
+ * <strong>Note:</strong> Calling this method will override the NumberingSystem previously specified
+ * in {@link #symbols(android.icu.text.NumberingSystem)}.
+ *
+ * <p>
+ * The default is to choose the symbols based on the locale specified in the fluent chain.
+ *
+ * @param symbols
+ *            The DecimalFormatSymbols to use.
+ * @return The fluent chain.
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public T symbols(android.icu.text.DecimalFormatSymbols symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies that the given numbering system should be used when fetching symbols.
+ *
+ * <ul>
+ * <li>Latin numbering system: "12,345"
+ * <li>Myanmar numbering system: "??,???"
+ * <li>Math Sans Bold numbering system: "??,???"
+ * </ul>
+ *
+ * <p>
+ * Pass this method an instance of {@link android.icu.text.NumberingSystem NumberingSystem}. For example, to force the locale to
+ * always use the Latin alphabet numbering system (ASCII digits):
+ *
+ * <pre>
+ * NumberFormatter.with().symbols(NumberingSystem.LATIN)
+ * </pre>
+ *
+ * <p>
+ * <strong>Note:</strong> Calling this method will override the DecimalFormatSymbols previously
+ * specified in {@link #symbols(android.icu.text.DecimalFormatSymbols)}.
+ *
+ * <p>
+ * The default is to choose the best numbering system for the locale.
+ *
+ * @param ns
+ *            The NumberingSystem to use.
+ * @return The fluent chain.
+ * @see android.icu.text.NumberingSystem
+ */
+
+public T symbols(android.icu.text.NumberingSystem ns) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the width of the unit (measure unit or currency). Most common values:
+ *
+ * <ul>
+ * <li>Short: "$12.00", "12 m"
+ * <li>ISO Code: "USD 12.00"
+ * <li>Full name: "12.00 US dollars", "12 meters"
+ * </ul>
+ *
+ * <p>
+ * Pass an element from the {@link android.icu.number.NumberFormatter.UnitWidth UnitWidth} enum to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().unitWidth(UnitWidth.FULL_NAME)
+ * </pre>
+ *
+ * <p>
+ * The default is the SHORT width.
+ *
+ * @param style
+ *            The width to use when rendering numbers.
+ * @return The fluent chain
+ * @see android.icu.number.NumberFormatter.UnitWidth
+ */
+
+public T unitWidth(android.icu.number.NumberFormatter.UnitWidth style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the plus/minus sign display strategy. Most common values:
+ *
+ * <ul>
+ * <li>Auto: "123", "-123"
+ * <li>Always: "+123", "-123"
+ * <li>Accounting: "$123", "($123)"
+ * </ul>
+ *
+ * <p>
+ * Pass an element from the {@link android.icu.number.NumberFormatter.SignDisplay SignDisplay} enum to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().sign(SignDisplay.ALWAYS)
+ * </pre>
+ *
+ * <p>
+ * The default is AUTO sign display.
+ *
+ * @param style
+ *            The sign display strategy to use when rendering numbers.
+ * @return The fluent chain
+ * @see android.icu.number.NumberFormatter.SignDisplay
+ */
+
+public T sign(android.icu.number.NumberFormatter.SignDisplay style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decimal separator display strategy. This affects integer numbers with no fraction part.
+ * Most common values:
+ *
+ * <ul>
+ * <li>Auto: "1"
+ * <li>Always: "1."
+ * </ul>
+ *
+ * <p>
+ * Pass an element from the {@link android.icu.number.NumberFormatter.DecimalSeparatorDisplay DecimalSeparatorDisplay} enum to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().decimal(DecimalSeparatorDisplay.ALWAYS)
+ * </pre>
+ *
+ * <p>
+ * The default is AUTO decimal separator display.
+ *
+ * @param style
+ *            The decimal separator display strategy to use when rendering numbers.
+ * @return The fluent chain
+ * @see android.icu.number.NumberFormatter.DecimalSeparatorDisplay
+ */
+
+public T decimal(android.icu.number.NumberFormatter.DecimalSeparatorDisplay style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a scale (multiplier) to be used to scale the number by an arbitrary amount before formatting.
+ * Most common values:
+ *
+ * <ul>
+ * <li>Multiply by 100: useful for percentages.
+ * <li>Multiply by an arbitrary value: useful for unit conversions.
+ * </ul>
+ *
+ * <p>
+ * Pass an element from a {@link android.icu.number.Scale Scale} factory method to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().scale(Scale.powerOfTen(2))
+ * </pre>
+ *
+ * <p>
+ * The default is to not apply any multiplier.
+ *
+ * @param scale
+ *            An amount to be multiplied against numbers before formatting.
+ * @return The fluent chain
+ * @see android.icu.number.Scale
+ */
+
+public T scale(android.icu.number.Scale scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatter.java
new file mode 100644
index 0000000..42d8ad2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatter.java
@@ -0,0 +1,185 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.ULocale;
+
+/**
+ * The main entrypoint to the formatting of ranges of numbers, including currencies and other units of measurement.
+ * <p>
+ * Usage example:
+ * <pre>
+ * NumberRangeFormatter.with()
+ *         .identityFallback(RangeIdentityFallback.APPROXIMATELY_OR_SINGLE_VALUE)
+ *         .numberFormatterFirst(NumberFormatter.with().unit(MeasureUnit.METER))
+ *         .numberFormatterSecond(NumberFormatter.with().unit(MeasureUnit.KILOMETER))
+ *         .locale(ULocale.UK)
+ *         .formatRange(750, 1.2)
+ *         .toString();
+ * // => "750 m - 1.2 km"
+ * </pre>
+ * <p>
+ * Like NumberFormatter, NumberRangeFormatter instances (i.e., LocalizedNumberRangeFormatter
+ * and UnlocalizedNumberRangeFormatter) are immutable and thread-safe. This API is based on the
+ * <em>fluent</em> design pattern popularized by libraries such as Google's Guava.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberRangeFormatter {
+
+private NumberRangeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is not currently
+ * known at the call site.
+ *
+ * @return An {@link android.icu.number.UnlocalizedNumberRangeFormatter UnlocalizedNumberRangeFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.UnlocalizedNumberRangeFormatter with() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is known at the call
+ * site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number range formatting.
+ * @return A {@link android.icu.number.LocalizedNumberRangeFormatter LocalizedNumberRangeFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberRangeFormatter withLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is known at the call
+ * site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number range formatting.
+ * @return A {@link android.icu.number.LocalizedNumberRangeFormatter LocalizedNumberRangeFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberRangeFormatter withLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+/**
+ * Defines how to merge fields that are identical across the range sign.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RangeCollapse {
+/**
+ * Use locale data and heuristics to determine how much of the string to collapse. Could end up collapsing none,
+ * some, or all repeated pieces in a locale-sensitive way.
+ * <p>
+ * The heuristics used for this option are subject to change over time.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+AUTO,
+/**
+ * Do not collapse any part of the number. Example: "3.2 thousand kilograms ? 5.3 thousand kilograms"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+NONE,
+/**
+ * Collapse the unit part of the number, but not the notation, if present. Example: "3.2 thousand ? 5.3 thousand
+ * kilograms"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+UNIT,
+/**
+ * Collapse any field that is equal across the range sign. May introduce ambiguity on the magnitude of the
+ * number. Example: "3.2 ? 5.3 thousand kilograms"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+ALL;
+}
+
+/**
+ * Defines the behavior when the two numbers in the range are identical after rounding. To programmatically detect
+ * when the identity fallback is used, compare the lower and upper BigDecimals via FormattedNumber.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RangeIdentityFallback {
+/**
+ * Show the number as a single value rather than a range. Example: "$5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+SINGLE_VALUE,
+/**
+ * Show the number using a locale-sensitive approximation pattern. If the numbers were the same before rounding,
+ * show the single value. Example: "~$5" or "$5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+APPROXIMATELY_OR_SINGLE_VALUE,
+/**
+ * Show the number using a locale-sensitive approximation pattern. Use the range pattern always, even if the
+ * inputs are the same. Example: "~$5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+APPROXIMATELY,
+/**
+ * Show the number as the range of two equal values. Use the range pattern always, even if the inputs are the
+ * same. Example (with RangeCollapse.NONE): "$5 ? $5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+RANGE;
+}
+
+/**
+ * Used in the result class FormattedNumberRange to indicate to the user whether the numbers formatted in the range
+ * were equal or not, and whether or not the identity fallback was applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RangeIdentityResult {
+/**
+ * Used to indicate that the two numbers in the range were equal, even before any rounding rules were applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+EQUAL_BEFORE_ROUNDING,
+/**
+ * Used to indicate that the two numbers in the range were equal, but only after rounding rules were applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+EQUAL_AFTER_ROUNDING,
+/**
+ * Used to indicate that the two numbers in the range were not equal, even after rounding rules were applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+NOT_EQUAL;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatterSettings.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatterSettings.java
new file mode 100644
index 0000000..efd5250
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatterSettings.java
@@ -0,0 +1,121 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * An abstract base class for specifying settings related to number formatting. This class is implemented by
+ * {@link android.icu.number.UnlocalizedNumberRangeFormatter UnlocalizedNumberRangeFormatter} and {@link android.icu.number.LocalizedNumberRangeFormatter LocalizedNumberRangeFormatter}. This class is not intended for
+ * public subclassing.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberRangeFormatterSettings<T extends android.icu.number.NumberRangeFormatterSettings<?>> {
+
+NumberRangeFormatterSettings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the NumberFormatter instance to use for the numbers in the range. The same formatter is applied to both
+ * sides of the range.
+ * <p>
+ * The NumberFormatter instances must not have a locale applied yet; the locale specified on the
+ * NumberRangeFormatter will be used.
+ *
+ * @param formatter
+ *            The formatter to use for both numbers in the range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T numberFormatterBoth(android.icu.number.UnlocalizedNumberFormatter formatter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the NumberFormatter instance to use for the first number in the range.
+ * <p>
+ * The NumberFormatter instance must not have a locale applied yet; the locale specified on the
+ * NumberRangeFormatter will be used.
+ *
+ * @param formatterFirst
+ *            The formatter to use for the first number in the range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T numberFormatterFirst(android.icu.number.UnlocalizedNumberFormatter formatterFirst) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the NumberFormatter instances to use for the second number in the range.
+ * <p>
+ * The NumberFormatter instance must not have a locale applied yet; the locale specified on the
+ * NumberRangeFormatter will be used.
+ *
+ * @param formatterSecond
+ *            The formatter to use for the second number in the range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T numberFormatterSecond(android.icu.number.UnlocalizedNumberFormatter formatterSecond) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the aggressiveness of "collapsing" fields across the range separator. Possible values:
+ * <ul>
+ * <li>ALL: "3-5K miles"</li>
+ * <li>UNIT: "3K - 5K miles"</li>
+ * <li>NONE: "3K miles - 5K miles"</li>
+ * <li>AUTO: usually UNIT or NONE, depending on the locale and formatter settings</li>
+ * </ul>
+ * <p>
+ * The default value is AUTO.
+ *
+ * @param collapse
+ *            The collapsing strategy to use for this range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T collapse(android.icu.number.NumberRangeFormatter.RangeCollapse collapse) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the behavior when the two sides of the range are the same. This could happen if the same two numbers are
+ * passed to the formatRange function, or if different numbers are passed to the function but they become the same
+ * after rounding rules are applied. Possible values:
+ * <ul>
+ * <li>SINGLE_VALUE: "5 miles"</li>
+ * <li>APPROXIMATELY_OR_SINGLE_VALUE: "~5 miles" or "5 miles", depending on whether the number was the same before
+ * rounding was applied</li>
+ * <li>APPROXIMATELY: "~5 miles"</li>
+ * <li>RANGE: "5-5 miles" (with collapse=UNIT)</li>
+ * </ul>
+ * <p>
+ * The default value is APPROXIMATELY.
+ *
+ * @param identityFallback
+ *            The strategy to use when formatting two numbers that end up being the same.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T identityFallback(android.icu.number.NumberRangeFormatter.RangeIdentityFallback identityFallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Precision.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Precision.java
new file mode 100644
index 0000000..f1c1377
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Precision.java
@@ -0,0 +1,245 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+
+/**
+ * A class that defines the rounding precision to be used when formatting numbers in NumberFormatter.
+ *
+ * <p>
+ * To create a Precision, use one of the factory methods.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Precision {
+
+Precision() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show all available digits to full precision.
+ *
+ * <p>
+ * <strong>NOTE:</strong> When formatting a <em>double</em>, this method, along with
+ * {@link #minFraction} and {@link #minSignificantDigits}, will trigger complex algorithm similar to
+ * <em>Dragon4</em> to determine the low-order digits and the number of digits to display based on
+ * the value of the double. If the number of fraction places or significant digits can be bounded,
+ * consider using {@link #maxFraction} or {@link #maxSignificantDigits} instead to maximize performance.
+ * For more information, read the following blog post.
+ *
+ * <p>
+ * http://www.serpentine.com/blog/2011/06/29/here-be-dragons-advances-in-problems-you-didnt-even-know-you-had/
+ *
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision unlimited() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to the nearest integer.
+ *
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision integer() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of fraction places (numerals after the
+ * decimal separator). Additionally, pad with zeros to ensure that this number of places are always
+ * shown.
+ *
+ * <p>
+ * Example output with minMaxFractionPlaces = 3:
+ *
+ * <p>
+ * 87,650.000<br>
+ * 8,765.000<br>
+ * 876.500<br>
+ * 87.650<br>
+ * 8.765<br>
+ * 0.876<br>
+ * 0.088<br>
+ * 0.009<br>
+ * 0.000 (zero)
+ *
+ * <p>
+ * This method is equivalent to {@link #minMaxFraction} with both arguments equal.
+ *
+ * @param minMaxFractionPlaces
+ *            The minimum and maximum number of numerals to display after the decimal separator
+ *            (rounding if too long or padding with zeros if too short).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision fixedFraction(int minMaxFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Always show at least a certain number of fraction places after the decimal separator, padding with
+ * zeros if necessary. Do not perform rounding (display numbers to their full precision).
+ *
+ * <p>
+ * <strong>NOTE:</strong> If you are formatting <em>doubles</em>, see the performance note in
+ * {@link #unlimited}.
+ *
+ * @param minFractionPlaces
+ *            The minimum number of numerals to display after the decimal separator (padding with
+ *            zeros if necessary).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision minFraction(int minFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of fraction places (numerals after the
+ * decimal separator). Unlike the other fraction rounding strategies, this strategy does <em>not</em>
+ * pad zeros to the end of the number.
+ *
+ * @param maxFractionPlaces
+ *            The maximum number of numerals to display after the decimal mark (rounding if
+ *            necessary).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision maxFraction(int maxFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of fraction places (numerals after the
+ * decimal separator); in addition, always show at least a certain number of places after the decimal
+ * separator, padding with zeros if necessary.
+ *
+ * @param minFractionPlaces
+ *            The minimum number of numerals to display after the decimal separator (padding with
+ *            zeros if necessary).
+ * @param maxFractionPlaces
+ *            The maximum number of numerals to display after the decimal separator (rounding if
+ *            necessary).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision minMaxFraction(int minFractionPlaces, int maxFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of significant digits or significant
+ * figures. Additionally, pad with zeros to ensure that this number of significant digits/figures are
+ * always shown.
+ *
+ * <p>
+ * This method is equivalent to {@link #minMaxSignificantDigits} with both arguments equal.
+ *
+ * @param minMaxSignificantDigits
+ *            The minimum and maximum number of significant digits to display (rounding if too long
+ *            or padding with zeros if too short).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision fixedSignificantDigits(int minMaxSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Always show at least a certain number of significant digits/figures, padding with zeros if
+ * necessary. Do not perform rounding (display numbers to their full precision).
+ *
+ * <p>
+ * <strong>NOTE:</strong> If you are formatting <em>doubles</em>, see the performance note in
+ * {@link #unlimited}.
+ *
+ * @param minSignificantDigits
+ *            The minimum number of significant digits to display (padding with zeros if too short).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision minSignificantDigits(int minSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of significant digits/figures.
+ *
+ * @param maxSignificantDigits
+ *            The maximum number of significant digits to display (rounding if too long).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision maxSignificantDigits(int maxSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of significant digits/figures; in addition,
+ * always show at least a certain number of significant digits, padding with zeros if necessary.
+ *
+ * @param minSignificantDigits
+ *            The minimum number of significant digits to display (padding with zeros if necessary).
+ * @param maxSignificantDigits
+ *            The maximum number of significant digits to display (rounding if necessary).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision minMaxSignificantDigits(int minSignificantDigits, int maxSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to the closest multiple of a certain rounding increment. For
+ * example, if the rounding increment is 0.5, then round 1.2 to 1 and round 1.3 to 1.5.
+ *
+ * <p>
+ * In order to ensure that numbers are padded to the appropriate number of fraction places, set the
+ * scale on the rounding increment BigDecimal. For example, to round to the nearest 0.5 and always
+ * display 2 numerals after the decimal separator (to display 1.2 as "1.00" and 1.3 as "1.50"), you
+ * can run:
+ *
+ * <pre>
+ * Precision.increment(new BigDecimal("0.50"))
+ * </pre>
+ *
+ * <p>
+ * For more information on the scale of Java BigDecimal, see {@link java.math.BigDecimal#scale()}.
+ *
+ * @param roundingIncrement
+ *            The increment to which to round numbers.
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the rounding increment is null or non-positive.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision increment(java.math.BigDecimal roundingIncrement) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded and padded according to the rules for the currency unit. The most common
+ * rounding precision settings for currencies include <code>Precision.fixedFraction(2)</code>,
+ * <code>Precision.integer()</code>, and <code>Precision.increment(0.05)</code> for cash transactions
+ * ("nickel rounding").
+ *
+ * <p>
+ * The exact rounding details will be resolved at runtime based on the currency unit specified in the
+ * NumberFormatter chain. To round according to the rules for one currency while displaying the
+ * symbol for another currency, the withCurrency() method can be called on the return value of this
+ * method.
+ *
+ * @param currencyUsage
+ *            Either STANDARD (for digital transactions) or CASH (for transactions where the rounding
+ *            increment may be limited by the available denominations of cash or coins).
+ * @return A CurrencyPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if currencyUsage is null.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.CurrencyPrecision currency(android.icu.util.Currency.CurrencyUsage currencyUsage) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Scale.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Scale.java
new file mode 100644
index 0000000..404e7c0
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/Scale.java
@@ -0,0 +1,76 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+
+/**
+ * A class that defines a quantity by which a number should be multiplied when formatting.
+ *
+ * <p>
+ * To create a Multiplier, use one of the factory methods.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Scale {
+
+private Scale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Do not change the value of numbers when formatting or parsing.
+ *
+ * @return A Multiplier to prevent any multiplication.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale none() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply numbers by 100 before formatting. Useful for combining with a percent unit:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(NoUnit.PERCENT).multiplier(Multiplier.powerOfTen(2))
+ * </pre>
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale powerOfTen(int power) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply numbers by an arbitrary value before formatting. Useful for unit conversions.
+ * <p>
+ * This method takes a BigDecimal; also see the version that takes a double.
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale byBigDecimal(java.math.BigDecimal multiplicand) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply numbers by an arbitrary value before formatting. Useful for unit conversions.
+ * <p>
+ * This method takes a double; also see the version that takes a BigDecimal.
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale byDouble(double multiplicand) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply a number by both a power of ten and by an arbitrary double value before formatting.
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale byDoubleAndPowerOfTen(double multiplicand, int power) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/ScientificNotation.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/ScientificNotation.java
new file mode 100644
index 0000000..6266044
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/ScientificNotation.java
@@ -0,0 +1,56 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the scientific notation style to be used when formatting numbers in
+ * NumberFormatter.
+ *
+ * <p>
+ * To create a ScientificNotation, use one of the factory methods in {@link android.icu.number.Notation Notation}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ScientificNotation extends android.icu.number.Notation {
+
+ScientificNotation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the minimum number of digits to show in the exponent of scientific notation, padding with
+ * zeros if necessary. Useful for fixed-width display.
+ *
+ * <p>
+ * For example, with minExponentDigits=2, the number 123 will be printed as "1.23E02" in
+ * <em>en-US</em> instead of the default "1.23E2".
+ *
+ * @param minExponentDigits
+ *            The minimum number of digits to show in the exponent.
+ * @return A ScientificNotation, for chaining.
+ * @throws java.lang.IllegalArgumentException if minExponentDigits is too big or smaller than 1
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.ScientificNotation withMinExponentDigits(int minExponentDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether to show the sign on positive and negative exponents in scientific notation. The
+ * default is AUTO, showing the minus sign but not the plus sign.
+ *
+ * <p>
+ * For example, with exponentSignDisplay=ALWAYS, the number 123 will be printed as "1.23E+2" in
+ * <em>en-US</em> instead of the default "1.23E2".
+ *
+ * @param exponentSignDisplay
+ *            The strategy for displaying the sign in the exponent.
+ * @return A ScientificNotation, for chaining.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.ScientificNotation withExponentSignDisplay(android.icu.number.NumberFormatter.SignDisplay exponentSignDisplay) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/SimpleNotation.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/SimpleNotation.java
new file mode 100644
index 0000000..9a4e91d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/SimpleNotation.java
@@ -0,0 +1,23 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the simple notation style to be used when formatting numbers in NumberFormatter.
+ *
+ * <p>
+ * This class exposes no public functionality. To create a SimpleNotation, use one of the factory methods
+ * in {@link android.icu.number.Notation Notation}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class SimpleNotation extends android.icu.number.Notation {
+
+SimpleNotation() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberFormatter.java
new file mode 100644
index 0000000..26da43f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberFormatter.java
@@ -0,0 +1,53 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+
+/**
+ * A NumberFormatter that does not yet have a locale. In order to format numbers, a locale must be
+ * specified.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnlocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.UnlocalizedNumberFormatter> {
+
+UnlocalizedNumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Associate the given locale with the number formatter. The locale is used for picking the
+ * appropriate symbols, formats, and other data for number display.
+ *
+ * <p>
+ * To use the Java default locale, call Locale.getDefault():
+ *
+ * <pre>
+ * NumberFormatter.with(). ... .locale(Locale.getDefault())
+ * </pre>
+ *
+ * @param locale
+ *            The locale to use when loading data for number formatting.
+ * @return The fluent chain
+ */
+
+public android.icu.number.LocalizedNumberFormatter locale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ULocale version of the {@link #locale(java.util.Locale)} setter above.
+ *
+ * @param locale
+ *            The locale to use when loading data for number formatting.
+ * @return The fluent chain
+ * @see #locale(Locale)
+ */
+
+public android.icu.number.LocalizedNumberFormatter locale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberRangeFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberRangeFormatter.java
new file mode 100644
index 0000000..97f67f8
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberRangeFormatter.java
@@ -0,0 +1,53 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+
+/**
+ * A NumberRangeFormatter that does not yet have a locale. In order to format, a locale must be specified.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnlocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.UnlocalizedNumberRangeFormatter> {
+
+UnlocalizedNumberRangeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Associate the given locale with the number range formatter. The locale is used for picking the
+ * appropriate symbols, formats, and other data for number display.
+ *
+ * <p>
+ * To use the Java default locale, call Locale.getDefault():
+ *
+ * <pre>
+ * NumberFormatter.with(). ... .locale(Locale.getDefault())
+ * </pre>
+ *
+ * @param locale
+ *            The locale to use when loading data for number range formatting.
+ * @return The fluent chain
+ */
+
+public android.icu.number.LocalizedNumberRangeFormatter locale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ULocale version of the {@link #locale(java.util.Locale)} setter above.
+ *
+ * @param locale
+ *            The locale to use when loading data for number range formatting.
+ * @return The fluent chain
+ * @see #locale(Locale)
+ */
+
+public android.icu.number.LocalizedNumberRangeFormatter locale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/AlphabeticIndex.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/AlphabeticIndex.java
new file mode 100644
index 0000000..be6db6e
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/AlphabeticIndex.java
@@ -0,0 +1,503 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2008-2016, Google Inc, International Business Machines Corporation
+ * and others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.text.AlphabeticIndex.Bucket;
+import java.util.Iterator;
+
+/**
+ * AlphabeticIndex supports the creation of a UI index appropriate for a given language.
+ * It can support either direct use, or use with a client that doesn't support localized collation.
+ * The following is an example of what an index might look like in a UI:
+ *
+ * <pre>
+ *  <b>... A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  ...</b>
+ *
+ *  <b>A</b>
+ *     Addison
+ *     Albertson
+ *     Azensky
+ *  <b>B</b>
+ *     Baecker
+ *  ...
+ * </pre>
+ *
+ * The class can generate a list of labels for use as a UI "index", that is, a list of
+ * clickable characters (or character sequences) that allow the user to see a segment
+ * (bucket) of a larger "target" list. That is, each label corresponds to a bucket in
+ * the target list, where everything in the bucket is greater than or equal to the character
+ * (according to the locale's collation). Strings can be added to the index;
+ * they will be in sorted order in the right bucket.
+ * <p>
+ * The class also supports having buckets for strings before the first (underflow),
+ * after the last (overflow), and between scripts (inflow). For example, if the index
+ * is constructed with labels for Russian and English, Greek characters would fall
+ * into an inflow bucket between the other two scripts.
+ *
+ * <p><em>Note:</em> If you expect to have a lot of ASCII or Latin characters
+ * as well as characters from the user's language,
+ * then it is a good idea to call addLabels(ULocale.English).
+ *
+ * <h2>Direct Use</h2>
+ * <p>The following shows an example of building an index directly.
+ *  The "show..." methods below are just to illustrate usage.
+ *
+ * <pre>
+ * // Create a simple index where the values for the strings are Integers, and add the strings
+ *
+ * AlphabeticIndex&lt;Integer&gt; index = new AlphabeticIndex&lt;Integer&gt;(desiredLocale).addLabels(additionalLocale);
+ * int counter = 0;
+ * for (String item : test) {
+ *     index.addRecord(item, counter++);
+ * }
+ * ...
+ * // Show index at top. We could skip or gray out empty buckets
+ *
+ * for (AlphabeticIndex.Bucket&lt;Integer&gt; bucket : index) {
+ *     if (showAll || bucket.size() != 0) {
+ *         showLabelAtTop(UI, bucket.getLabel());
+ *     }
+ * }
+ *  ...
+ * // Show the buckets with their contents, skipping empty buckets
+ *
+ * for (AlphabeticIndex.Bucket&lt;Integer&gt; bucket : index) {
+ *     if (bucket.size() != 0) {
+ *         showLabelInList(UI, bucket.getLabel());
+ *         for (AlphabeticIndex.Record&lt;Integer&gt; item : bucket) {
+ *             showIndexedItem(UI, item.getName(), item.getData());
+ *         }
+ * </pre>
+ *
+ * The caller can build different UIs using this class.
+ * For example, an index character could be omitted or grayed-out
+ * if its bucket is empty. Small buckets could also be combined based on size, such as:
+ *
+ * <pre>
+ * <b>... A-F G-N O-Z ...</b>
+ * </pre>
+ *
+ * <h2>Client Support</h2>
+ * <p>Callers can also use the {@link android.icu.text.AlphabeticIndex.ImmutableIndex AlphabeticIndex.ImmutableIndex}, or the AlphabeticIndex itself,
+ * to support sorting on a client that doesn't support AlphabeticIndex functionality.
+ *
+ * <p>The ImmutableIndex is both immutable and thread-safe.
+ * The corresponding AlphabeticIndex methods are not thread-safe because
+ * they "lazily" build the index buckets.
+ * <ul>
+ * <li>ImmutableIndex.getBucket(index) provides random access to all
+ *     buckets and their labels and label types.
+ * <li>AlphabeticIndex.getBucketLabels() or the bucket iterator on either class
+ *     can be used to get a list of the labels,
+ *     such as "...", "A", "B",..., and send that list to the client.
+ * <li>When the client has a new name, it sends that name to the server.
+ * The server needs to call the following methods,
+ * and communicate the bucketIndex and collationKey back to the client.
+ *
+ * <pre>
+ * int bucketIndex = index.getBucketIndex(name);
+ * String label = immutableIndex.getBucket(bucketIndex).getLabel();  // optional
+ * RawCollationKey collationKey = collator.getRawCollationKey(name, null);
+ * </pre>
+ *
+ * <li>The client would put the name (and associated information) into its bucket for bucketIndex. The collationKey is a
+ * sequence of bytes that can be compared with a binary compare, and produce the right localized result.</li>
+ * </ul>
+ *
+ * @author Mark Davis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class AlphabeticIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+
+/**
+ * Create the index object.
+ *
+ * @param locale
+ *            The locale for the index.
+ */
+
+public AlphabeticIndex(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create the index object.
+ *
+ * @param locale
+ *            The locale for the index.
+ */
+
+public AlphabeticIndex(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create an AlphabeticIndex that uses a specific collator.
+ *
+ * <p>The index will be created with no labels; the addLabels() function must be called
+ * after creation to add the desired labels to the index.
+ *
+ * <p>The index will work directly with the supplied collator. If the caller will need to
+ * continue working with the collator it should be cloned first, so that the
+ * collator provided to the AlphabeticIndex remains unchanged after creation of the index.
+ *
+ * @param collator The collator to use to order the contents of this index.
+ */
+
+public AlphabeticIndex(android.icu.text.RuleBasedCollator collator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add more index characters (aside from what are in the locale)
+ * @param additions additional characters to add to the index, such as A-Z.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.text.UnicodeSet additions) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add more index characters (aside from what are in the locale)
+ * @param additions additional characters to add to the index, such as those in Swedish.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.util.ULocale... additions) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add more index characters (aside from what are in the locale)
+ * @param additions additional characters to add to the index, such as those in Swedish.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addLabels(java.util.Locale... additions) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the overflow label
+ * @param overflowLabel see class description
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setOverflowLabel(java.lang.String overflowLabel) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the default label used in the IndexCharacters' locale for underflow, eg the last item in: X Y Z ...
+ *
+ * @return underflow label
+ */
+
+public java.lang.String getUnderflowLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the underflowLabel label
+ * @param underflowLabel see class description
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(java.lang.String underflowLabel) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the default label used in the IndexCharacters' locale for overflow, eg the first item in: ... A B C
+ *
+ * @return overflow label
+ */
+
+public java.lang.String getOverflowLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the inflowLabel label
+ * @param inflowLabel see class description
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setInflowLabel(java.lang.String inflowLabel) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the default label used for abbreviated buckets <i>between</i> other labels. For example, consider the labels
+ * for Latin and Greek are used: X Y Z ... &#x0391; &#x0392; &#x0393;.
+ *
+ * @return inflow label
+ */
+
+public java.lang.String getInflowLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the limit on the number of labels in the index. The number of buckets can be slightly larger: see getBucketCount().
+ *
+ * @return maxLabelCount maximum number of labels.
+ */
+
+public int getMaxLabelCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a limit on the number of labels in the index. The number of buckets can be slightly larger: see
+ * getBucketCount().
+ *
+ * @param maxLabelCount Set the maximum number of labels. Currently, if the number is exceeded, then every
+ *         nth item is removed to bring the count down. A more sophisticated mechanism may be available in the
+ *         future.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setMaxLabelCount(int maxLabelCount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Builds an immutable, thread-safe version of this instance, without data records.
+ *
+ * @return an immutable index instance
+ */
+
+public android.icu.text.AlphabeticIndex.ImmutableIndex<V> buildImmutableIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the labels.
+ *
+ * @return The list of bucket labels, after processing.
+ */
+
+public java.util.List<java.lang.String> getBucketLabels() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a clone of the collator used internally. Note that for performance reasons, the clone is only done once, and
+ * then stored. The next time it is accessed, the same instance is returned.
+ * <p>
+ * <b><i>Don't use this method across threads if you are changing the settings on the collator, at least not without
+ * synchronizing.</i></b>
+ *
+ * @return a clone of the collator used internally
+ */
+
+public android.icu.text.RuleBasedCollator getCollator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a record (name and data) to the index. The name will be used to sort the items into buckets, and to sort
+ * within the bucket. Two records may have the same name. When they do, the sort order is according to the order added:
+ * the first added comes first.
+ *
+ * @param name
+ *            Name, such as a name
+ * @param data
+ *            Data, such as an address or link
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addRecord(java.lang.CharSequence name, V data) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the bucket number for the given name. This routine permits callers to implement their own bucket handling
+ * mechanisms, including client-server handling. For example, when a new name is created on the client, it can ask
+ * the server for the bucket for that name, and the sortkey (using getCollator). Once the client has that
+ * information, it can put the name into the right bucket, and sort it within that bucket, without having access to
+ * the index or collator.
+ * <p>
+ * Note that the bucket number (and sort key) are only valid for the settings of the current AlphabeticIndex; if
+ * those are changed, then the bucket number and sort key must be regenerated.
+ *
+ * @param name
+ *            Name, such as a name
+ * @return the bucket index for the name
+ */
+
+public int getBucketIndex(java.lang.CharSequence name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clear the index.
+ *
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> clearRecords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of buckets in the index. This will be the same as the number of labels, plus buckets for the underflow, overflow, and inflow(s).
+ *
+ * @return number of buckets
+ */
+
+public int getBucketCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of records in the index: that is, the total number of distinct &lt;name,data&gt; pairs added with addRecord(...), over all the buckets.
+ *
+ * @return total number of records in buckets
+ */
+
+public int getRecordCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return an iterator over the buckets.
+ *
+ * @return iterator over buckets.
+ */
+
+public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator() { throw new RuntimeException("Stub!"); }
+/**
+ * An index "bucket" with a label string and type.
+ * It is referenced by {@link android.icu.text.AlphabeticIndex#getBucketIndex(java.lang.CharSequence) AlphabeticIndex#getBucketIndex(CharSequence)}
+ * and {@link android.icu.text.AlphabeticIndex.ImmutableIndex#getBucketIndex(java.lang.CharSequence) AlphabeticIndex.ImmutableIndex#getBucketIndex(CharSequence)},
+ * returned by {@link android.icu.text.AlphabeticIndex.ImmutableIndex#getBucket(int) AlphabeticIndex.ImmutableIndex#getBucket(int)},
+ * and {@link android.icu.text.AlphabeticIndex#addRecord(java.lang.CharSequence,java.lang.Object) AlphabeticIndex#addRecord(CharSequence, Object)} adds a record
+ * into a bucket according to the record's name.
+ *
+ * @param <V>
+ *            Data type
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Bucket<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Record<V>> {
+
+private Bucket() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the label
+ *
+ * @return label for the bucket
+ */
+
+public java.lang.String getLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is a normal, underflow, overflow, or inflow bucket
+ *
+ * @return is an underflow, overflow, or inflow bucket
+ */
+
+public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the number of records in the bucket.
+ *
+ * @return number of records in bucket
+ */
+
+public int size() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iterator over the records in the bucket
+ */
+
+public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Standard toString()
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+/**
+ * Type of the label
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum LabelType {
+/**
+ * Normal
+ */
+
+NORMAL,
+/**
+ * Underflow (before the first)
+ */
+
+UNDERFLOW,
+/**
+ * Inflow (between scripts)
+ */
+
+INFLOW,
+/**
+ * Overflow (after the last)
+ */
+
+OVERFLOW;
+}
+
+}
+
+/**
+ * Immutable, thread-safe version of {@link android.icu.text.AlphabeticIndex AlphabeticIndex}.
+ * This class provides thread-safe methods for bucketing,
+ * and random access to buckets and their properties,
+ * but does not offer adding records to the index.
+ *
+ * @param <V> The Record value type is unused. It can be omitted for this class
+ * if it was omitted for the AlphabeticIndex that built it.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class ImmutableIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+
+private ImmutableIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of index buckets and labels, including underflow/inflow/overflow.
+ *
+ * @return the number of index buckets
+ */
+
+public int getBucketCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Finds the index bucket for the given name and returns the number of that bucket.
+ * Use {@link #getBucket(int)} to get the bucket's properties.
+ *
+ * @param name the string to be sorted into an index bucket
+ * @return the bucket number for the name
+ */
+
+public int getBucketIndex(java.lang.CharSequence name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index-th bucket. Returns null if the index is out of range.
+ *
+ * @param index bucket number
+ * @return the index-th bucket
+ */
+
+public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * A (name, data) pair, to be sorted by name into one of the index buckets.
+ * The user data is not used by the index implementation.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Record<V> {
+
+private Record() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the name
+ *
+ * @return the name
+ */
+
+public java.lang.CharSequence getName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the data
+ *
+ * @return the data
+ */
+
+public V getData() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Standard toString()
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Bidi.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Bidi.java
new file mode 100644
index 0000000..34d2a04
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Bidi.java
@@ -0,0 +1,2517 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 2001-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+/* FOOD FOR THOUGHT: currently the reordering modes are a mixture of
+ * algorithm for direct BiDi, algorithm for inverse Bidi and the bizarre
+ * concept of RUNS_ONLY which is a double operation.
+ * It could be advantageous to divide this into 3 concepts:
+ * a) Operation: direct / inverse / RUNS_ONLY
+ * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_L
+ * c) Inverse algorithm: default / INVERSE_LIKE_DIRECT / NUMBERS_SPECIAL
+ * This would allow combinations not possible today like RUNS_ONLY with
+ * NUMBERS_SPECIAL.
+ * Also allow to set INSERT_MARKS for the direct step of RUNS_ONLY and
+ * REMOVE_CONTROLS for the inverse step.
+ * Not all combinations would be supported, and probably not all do make sense.
+ * This would need to document which ones are supported and what are the
+ * fallbacks for unsupported combinations.
+ */
+
+//TODO: make sample program do something simple but real and complete
+
+
+package android.icu.text;
+
+import android.icu.lang.UCharacter;
+import android.icu.lang.UProperty;
+
+/**
+ *
+ * <h2>Bidi algorithm for ICU</h2>
+ *
+ * This is an implementation of the Unicode Bidirectional Algorithm. The
+ * algorithm is defined in the <a
+ * href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Annex #9</a>.
+ * <p>
+ *
+ * Note: Libraries that perform a bidirectional algorithm and reorder strings
+ * accordingly are sometimes called "Storage Layout Engines". ICU's Bidi and
+ * shaping (ArabicShaping) classes can be used at the core of such "Storage
+ * Layout Engines".
+ *
+ * <h3>General remarks about the API:</h3>
+ *
+ * The &quot;limit&quot; of a sequence of characters is the position just after
+ * their last character, i.e., one more than that position.
+ * <p>
+ *
+ * Some of the API methods provide access to &quot;runs&quot;. Such a
+ * &quot;run&quot; is defined as a sequence of characters that are at the same
+ * embedding level after performing the Bidi algorithm.
+ *
+ * <h3>Basic concept: paragraph</h3>
+ * A piece of text can be divided into several paragraphs by characters
+ * with the Bidi class <code>Block Separator</code>. For handling of
+ * paragraphs, see:
+ * <ul>
+ * <li>{@link #countParagraphs}
+ * <li>{@link #getParaLevel}
+ * <li>{@link #getParagraph}
+ * <li>{@link #getParagraphByIndex}
+ * </ul>
+ *
+ * <h3>Basic concept: text direction</h3>
+ * The direction of a piece of text may be:
+ * <ul>
+ * <li>{@link #LTR}
+ * <li>{@link #RTL}
+ * <li>{@link #MIXED}
+ * <li>{@link #NEUTRAL}
+ * </ul>
+ *
+ * <h3>Basic concept: levels</h3>
+ *
+ * Levels in this API represent embedding levels according to the Unicode
+ * Bidirectional Algorithm.
+ * Their low-order bit (even/odd value) indicates the visual direction.<p>
+ *
+ * Levels can be abstract values when used for the
+ * <code>paraLevel</code> and <code>embeddingLevels</code>
+ * arguments of <code>setPara()</code>; there:
+ * <ul>
+ * <li>the high-order bit of an <code>embeddingLevels[]</code>
+ * value indicates whether the using application is
+ * specifying the level of a character to <i>override</i> whatever the
+ * Bidi implementation would resolve it to.</li>
+ * <li><code>paraLevel</code> can be set to the
+ * pseudo-level values <code>LEVEL_DEFAULT_LTR</code>
+ * and <code>LEVEL_DEFAULT_RTL</code>.</li>
+ * </ul>
+ *
+ * <p>The related constants are not real, valid level values.
+ * <code>DEFAULT_XXX</code> can be used to specify
+ * a default for the paragraph level for
+ * when the <code>setPara()</code> method
+ * shall determine it but there is no
+ * strongly typed character in the input.<p>
+ *
+ * Note that the value for <code>LEVEL_DEFAULT_LTR</code> is even
+ * and the one for <code>LEVEL_DEFAULT_RTL</code> is odd,
+ * just like with normal LTR and RTL level values -
+ * these special values are designed that way. Also, the implementation
+ * assumes that MAX_EXPLICIT_LEVEL is odd.
+ *
+ * <p>Note: The numeric values of the related constants will not change:
+ * They are tied to the use of 7-bit byte values (plus the override bit)
+ * and of the byte data type in this API.
+ *
+ * <p><b>See Also:</b>
+ * <ul>
+ * <li>{@link #LEVEL_DEFAULT_LTR}
+ * <li>{@link #LEVEL_DEFAULT_RTL}
+ * <li>{@link #LEVEL_OVERRIDE}
+ * <li>{@link #MAX_EXPLICIT_LEVEL}
+ * <li>{@link #setPara}
+ * </ul>
+ *
+ * <h3>Basic concept: Reordering Mode</h3>
+ * Reordering mode values indicate which variant of the Bidi algorithm to
+ * use.
+ *
+ * <b>See Also:</b>
+ * <ul>
+ * <li>{@link #setReorderingMode}
+ * <li>{@link #REORDER_DEFAULT}
+ * <li>{@link #REORDER_NUMBERS_SPECIAL}
+ * <li>{@link #REORDER_GROUP_NUMBERS_WITH_R}
+ * <li>{@link #REORDER_RUNS_ONLY}
+ * <li>{@link #REORDER_INVERSE_NUMBERS_AS_L}
+ * <li>{@link #REORDER_INVERSE_LIKE_DIRECT}
+ * <li>{@link #REORDER_INVERSE_FOR_NUMBERS_SPECIAL}
+ * </ul>
+ *
+ * <h3>Basic concept: Reordering Options</h3>
+ * Reordering options can be applied during Bidi text transformations.
+ *
+ * <b>See Also:</b>
+ * <ul>
+ * <li>{@link #setReorderingOptions}
+ * <li>{@link #OPTION_DEFAULT}
+ * <li>{@link #OPTION_INSERT_MARKS}
+ * <li>{@link #OPTION_REMOVE_CONTROLS}
+ * <li>{@link #OPTION_STREAMING}
+ * </ul>
+ *
+ * <h4> Sample code for the ICU Bidi API </h4>
+ *
+ * <h5>Rendering a paragraph with the ICU Bidi API</h5>
+ *
+ * This is (hypothetical) sample code that illustrates how the ICU Bidi API
+ * could be used to render a paragraph of text. Rendering code depends highly on
+ * the graphics system, therefore this sample code must make a lot of
+ * assumptions, which may or may not match any existing graphics system's
+ * properties.
+ *
+ * <p>
+ * The basic assumptions are:
+ *
+ * <ul>
+ * <li>Rendering is done from left to right on a horizontal line.</li>
+ * <li>A run of single-style, unidirectional text can be rendered at once.
+ * </li>
+ * <li>Such a run of text is passed to the graphics system with characters
+ * (code units) in logical order.</li>
+ * <li>The line-breaking algorithm is very complicated and Locale-dependent -
+ * and therefore its implementation omitted from this sample code.</li>
+ * </ul>
+ *
+ * <pre>
+ *
+ *  package android.icu.dev.test.bidi;
+ *
+ *  import android.icu.text.Bidi;
+ *  import android.icu.text.BidiRun;
+ *
+ *  public class Sample {
+ *
+ *      static final int styleNormal = 0;
+ *      static final int styleSelected = 1;
+ *      static final int styleBold = 2;
+ *      static final int styleItalics = 4;
+ *      static final int styleSuper=8;
+ *      static final int styleSub = 16;
+ *
+ *      static class StyleRun {
+ *          int limit;
+ *          int style;
+ *
+ *          public StyleRun(int limit, int style) {
+ *              this.limit = limit;
+ *              this.style = style;
+ *          }
+ *      }
+ *
+ *      static class Bounds {
+ *          int start;
+ *          int limit;
+ *
+ *          public Bounds(int start, int limit) {
+ *              this.start = start;
+ *              this.limit = limit;
+ *          }
+ *      }
+ *
+ *      static int getTextWidth(String text, int start, int limit,
+ *                              StyleRun[] styleRuns, int styleRunCount) {
+ *          // simplistic way to compute the width
+ *          return limit - start;
+ *      }
+ *
+ *      // set limit and StyleRun limit for a line
+ *      // from text[start] and from styleRuns[styleRunStart]
+ *      // using Bidi.getLogicalRun(...)
+ *      // returns line width
+ *      static int getLineBreak(String text, Bounds line, Bidi para,
+ *                              StyleRun styleRuns[], Bounds styleRun) {
+ *          // dummy return
+ *          return 0;
+ *      }
+ *
+ *      // render runs on a line sequentially, always from left to right
+ *
+ *      // prepare rendering a new line
+ *      static void startLine(byte textDirection, int lineWidth) {
+ *          System.out.println();
+ *      }
+ *
+ *      // render a run of text and advance to the right by the run width
+ *      // the text[start..limit-1] is always in logical order
+ *      static void renderRun(String text, int start, int limit,
+ *                            byte textDirection, int style) {
+ *      }
+ *
+ *      // We could compute a cross-product
+ *      // from the style runs with the directional runs
+ *      // and then reorder it.
+ *      // Instead, here we iterate over each run type
+ *      // and render the intersections -
+ *      // with shortcuts in simple (and common) cases.
+ *      // renderParagraph() is the main function.
+ *
+ *      // render a directional run with
+ *      // (possibly) multiple style runs intersecting with it
+ *      static void renderDirectionalRun(String text, int start, int limit,
+ *                                       byte direction, StyleRun styleRuns[],
+ *                                       int styleRunCount) {
+ *          int i;
+ *
+ *          // iterate over style runs
+ *          if (direction == Bidi.LTR) {
+ *              int styleLimit;
+ *              for (i = 0; i &lt; styleRunCount; ++i) {
+ *                  styleLimit = styleRuns[i].limit;
+ *                  if (start &lt; styleLimit) {
+ *                      if (styleLimit &gt; limit) {
+ *                          styleLimit = limit;
+ *                      }
+ *                      renderRun(text, start, styleLimit,
+ *                                direction, styleRuns[i].style);
+ *                      if (styleLimit == limit) {
+ *                          break;
+ *                      }
+ *                      start = styleLimit;
+ *                  }
+ *              }
+ *          } else {
+ *              int styleStart;
+ *
+ *              for (i = styleRunCount-1; i &gt;= 0; --i) {
+ *                  if (i &gt; 0) {
+ *                      styleStart = styleRuns[i-1].limit;
+ *                  } else {
+ *                      styleStart = 0;
+ *                  }
+ *                  if (limit &gt;= styleStart) {
+ *                      if (styleStart &lt; start) {
+ *                          styleStart = start;
+ *                      }
+ *                      renderRun(text, styleStart, limit, direction,
+ *                                styleRuns[i].style);
+ *                      if (styleStart == start) {
+ *                          break;
+ *                      }
+ *                      limit = styleStart;
+ *                  }
+ *              }
+ *          }
+ *      }
+ *
+ *      // the line object represents text[start..limit-1]
+ *      static void renderLine(Bidi line, String text, int start, int limit,
+ *                             StyleRun styleRuns[], int styleRunCount) {
+ *          byte direction = line.getDirection();
+ *          if (direction != Bidi.MIXED) {
+ *              // unidirectional
+ *              if (styleRunCount &lt;= 1) {
+ *                  renderRun(text, start, limit, direction, styleRuns[0].style);
+ *              } else {
+ *                  renderDirectionalRun(text, start, limit, direction,
+ *                                       styleRuns, styleRunCount);
+ *              }
+ *          } else {
+ *              // mixed-directional
+ *              int count, i;
+ *              BidiRun run;
+ *
+ *              try {
+ *                  count = line.countRuns();
+ *              } catch (IllegalStateException e) {
+ *                  e.printStackTrace();
+ *                  return;
+ *              }
+ *              if (styleRunCount &lt;= 1) {
+ *                  int style = styleRuns[0].style;
+ *
+ *                  // iterate over directional runs
+ *                  for (i = 0; i &lt; count; ++i) {
+ *                      run = line.getVisualRun(i);
+ *                      renderRun(text, run.getStart(), run.getLimit(),
+ *                                run.getDirection(), style);
+ *                  }
+ *              } else {
+ *                  // iterate over both directional and style runs
+ *                  for (i = 0; i &lt; count; ++i) {
+ *                      run = line.getVisualRun(i);
+ *                      renderDirectionalRun(text, run.getStart(),
+ *                                           run.getLimit(), run.getDirection(),
+ *                                           styleRuns, styleRunCount);
+ *                  }
+ *              }
+ *          }
+ *      }
+ *
+ *      static void renderParagraph(String text, byte textDirection,
+ *                                  StyleRun styleRuns[], int styleRunCount,
+ *                                  int lineWidth) {
+ *          int length = text.length();
+ *          Bidi para = new Bidi();
+ *          try {
+ *              para.setPara(text,
+ *                           textDirection != 0 ? Bidi.LEVEL_DEFAULT_RTL
+ *                                              : Bidi.LEVEL_DEFAULT_LTR,
+ *                           null);
+ *          } catch (Exception e) {
+ *              e.printStackTrace();
+ *              return;
+ *          }
+ *          byte paraLevel = (byte)(1 &amp; para.getParaLevel());
+ *          StyleRun styleRun = new StyleRun(length, styleNormal);
+ *
+ *          if (styleRuns == null || styleRunCount &lt;= 0) {
+ *              styleRuns = new StyleRun[1];
+ *              styleRunCount = 1;
+ *              styleRuns[0] = styleRun;
+ *          }
+ *          // assume styleRuns[styleRunCount-1].limit&gt;=length
+ *
+ *          int width = getTextWidth(text, 0, length, styleRuns, styleRunCount);
+ *          if (width &lt;= lineWidth) {
+ *              // everything fits onto one line
+ *
+ *              // prepare rendering a new line from either left or right
+ *              startLine(paraLevel, width);
+ *
+ *              renderLine(para, text, 0, length, styleRuns, styleRunCount);
+ *          } else {
+ *              // we need to render several lines
+ *              Bidi line = new Bidi(length, 0);
+ *              int start = 0, limit;
+ *              int styleRunStart = 0, styleRunLimit;
+ *
+ *              for (;;) {
+ *                  limit = length;
+ *                  styleRunLimit = styleRunCount;
+ *                  width = getLineBreak(text, new Bounds(start, limit),
+ *                                       para, styleRuns,
+ *                                       new Bounds(styleRunStart, styleRunLimit));
+ *                  try {
+ *                      line = para.setLine(start, limit);
+ *                  } catch (Exception e) {
+ *                      e.printStackTrace();
+ *                      return;
+ *                  }
+ *                  // prepare rendering a new line
+ *                  // from either left or right
+ *                  startLine(paraLevel, width);
+ *
+ *                  if (styleRunStart &gt; 0) {
+ *                      int newRunCount = styleRuns.length - styleRunStart;
+ *                      StyleRun[] newRuns = new StyleRun[newRunCount];
+ *                      System.arraycopy(styleRuns, styleRunStart, newRuns, 0,
+ *                                       newRunCount);
+ *                      renderLine(line, text, start, limit, newRuns,
+ *                                 styleRunLimit - styleRunStart);
+ *                  } else {
+ *                      renderLine(line, text, start, limit, styleRuns,
+ *                                 styleRunLimit - styleRunStart);
+ *                  }
+ *                  if (limit == length) {
+ *                      break;
+ *                  }
+ *                  start = limit;
+ *                  styleRunStart = styleRunLimit - 1;
+ *                  if (start &gt;= styleRuns[styleRunStart].limit) {
+ *                      ++styleRunStart;
+ *                  }
+ *              }
+ *          }
+ *      }
+ *
+ *      public static void main(String[] args)
+ *      {
+ *          renderParagraph("Some Latin text...", Bidi.LTR, null, 0, 80);
+ *          renderParagraph("Some Hebrew text...", Bidi.RTL, null, 0, 60);
+ *      }
+ *  }
+ *
+ * </pre>
+ *
+ * @author Simon Montagu, Matitiahu Allouche (ported from C code written by Markus W. Scherer)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Bidi {
+
+/**
+ * Allocate a <code>Bidi</code> object.
+ * Such an object is initially empty. It is assigned
+ * the Bidi properties of a piece of text containing one or more paragraphs
+ * by <code>setPara()</code>
+ * or the Bidi properties of a line within a paragraph by
+ * <code>setLine()</code>.<p>
+ * This object can be reused.<p>
+ * <code>setPara()</code> and <code>setLine()</code> will allocate
+ * additional memory for internal structures as necessary.
+ */
+
+public Bidi() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Allocate a <code>Bidi</code> object with preallocated memory
+ * for internal structures.
+ * This method provides a <code>Bidi</code> object like the default constructor
+ * but it also preallocates memory for internal structures
+ * according to the sizings supplied by the caller.<p>
+ * The preallocation can be limited to some of the internal memory
+ * by setting some values to 0 here. That means that if, e.g.,
+ * <code>maxRunCount</code> cannot be reasonably predetermined and should not
+ * be set to <code>maxLength</code> (the only failproof value) to avoid
+ * wasting  memory, then <code>maxRunCount</code> could be set to 0 here
+ * and the internal structures that are associated with it will be allocated
+ * on demand, just like with the default constructor.
+ *
+ * @param maxLength is the maximum text or line length that internal memory
+ *        will be preallocated for. An attempt to associate this object with a
+ *        longer text will fail, unless this value is 0, which leaves the allocation
+ *        up to the implementation.
+ *
+ * @param maxRunCount is the maximum anticipated number of same-level runs
+ *        that internal memory will be preallocated for. An attempt to access
+ *        visual runs on an object that was not preallocated for as many runs
+ *        as the text was actually resolved to will fail,
+ *        unless this value is 0, which leaves the allocation up to the implementation.<br><br>
+ *        The number of runs depends on the actual text and maybe anywhere between
+ *        1 and <code>maxLength</code>. It is typically small.
+ *
+ * @throws java.lang.IllegalArgumentException if maxLength or maxRunCount is less than 0
+ */
+
+public Bidi(int maxLength, int maxRunCount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create Bidi from the given paragraph of text and base direction.
+ *
+ * @param paragraph a paragraph of text
+ * @param flags a collection of flags that control the algorithm. The
+ *        algorithm understands the flags DIRECTION_LEFT_TO_RIGHT,
+ *        DIRECTION_RIGHT_TO_LEFT, DIRECTION_DEFAULT_LEFT_TO_RIGHT, and
+ *        DIRECTION_DEFAULT_RIGHT_TO_LEFT. Other values are reserved.
+ * @see #DIRECTION_LEFT_TO_RIGHT
+ * @see #DIRECTION_RIGHT_TO_LEFT
+ * @see #DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ * @see #DIRECTION_DEFAULT_RIGHT_TO_LEFT
+ */
+
+public Bidi(java.lang.String paragraph, int flags) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create Bidi from the given paragraph of text.<p>
+ *
+ * The RUN_DIRECTION attribute in the text, if present, determines the base
+ * direction (left-to-right or right-to-left). If not present, the base
+ * direction is computed using the Unicode Bidirectional Algorithm,
+ * defaulting to left-to-right if there are no strong directional characters
+ * in the text. This attribute, if present, must be applied to all the text
+ * in the paragraph.<p>
+ *
+ * The BIDI_EMBEDDING attribute in the text, if present, represents
+ * embedding level information.
+ * Negative values indicate overrides at the absolute value of the level.
+ * Positive values indicate embeddings. (See {@link #MAX_EXPLICIT_LEVEL}.)
+ * Where values are zero or not defined, the base
+ * embedding level as determined by the base direction is assumed.<p>
+ *
+ * The NUMERIC_SHAPING attribute in the text, if present, converts European
+ * digits to other decimal digits before running the bidi algorithm. This
+ * attribute, if present, must be applied to all the text in the paragraph.<p>
+ *
+ * Note: this constructor calls setPara() internally.
+ *
+ * @param paragraph a paragraph of text with optional character and
+ *        paragraph attribute information
+ */
+
+public Bidi(java.text.AttributedCharacterIterator paragraph) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create Bidi from the given text, embedding, and direction information.
+ *
+ * <p>The embeddings array may be null. If present, the values represent
+ * embedding level information.
+ * Negative values indicate overrides at the absolute value of the level.
+ * Positive values indicate embeddings. (See {@link #MAX_EXPLICIT_LEVEL}.)
+ * Where values are zero, the base embedding level
+ * as determined by the base direction is assumed,
+ * except for paragraph separators which remain at 0 to prevent reordering of paragraphs.</p>
+ *
+ * <p>Note: This constructor calls setPara() internally,
+ * after converting the java.text.Bidi-style embeddings with negative overrides
+ * into ICU-style embeddings with bit fields for {@link #LEVEL_OVERRIDE} and the level.
+ *
+ * @param text an array containing the paragraph of text to process.
+ * @param textStart the index into the text array of the start of the
+ *        paragraph.
+ * @param embeddings an array containing embedding values for each character
+ *        in the paragraph. This can be null, in which case it is assumed
+ *        that there is no external embedding information.
+ * @param embStart the index into the embedding array of the start of the
+ *        paragraph.
+ * @param paragraphLength the length of the paragraph in the text and
+ *        embeddings arrays.
+ * @param flags a collection of flags that control the algorithm. The
+ *        algorithm understands the flags DIRECTION_LEFT_TO_RIGHT,
+ *        DIRECTION_RIGHT_TO_LEFT, DIRECTION_DEFAULT_LEFT_TO_RIGHT, and
+ *        DIRECTION_DEFAULT_RIGHT_TO_LEFT. Other values are reserved.
+ *
+ * @throws java.lang.IllegalArgumentException if the values in embeddings are
+ *         not within the allowed range
+ *
+ * @see #DIRECTION_LEFT_TO_RIGHT
+ * @see #DIRECTION_RIGHT_TO_LEFT
+ * @see #DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ * @see #DIRECTION_DEFAULT_RIGHT_TO_LEFT
+ */
+
+public Bidi(char[] text, int textStart, byte[] embeddings, int embStart, int paragraphLength, int flags) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modify the operation of the Bidi algorithm such that it
+ * approximates an "inverse Bidi" algorithm. This method
+ * must be called before <code>setPara()</code>.
+ *
+ * <p>The normal operation of the Bidi algorithm as described
+ * in the Unicode Technical Report is to take text stored in logical
+ * (keyboard, typing) order and to determine the reordering of it for visual
+ * rendering.
+ * Some legacy systems store text in visual order, and for operations
+ * with standard, Unicode-based algorithms, the text needs to be transformed
+ * to logical order. This is effectively the inverse algorithm of the
+ * described Bidi algorithm. Note that there is no standard algorithm for
+ * this "inverse Bidi" and that the current implementation provides only an
+ * approximation of "inverse Bidi".
+ *
+ * <p>With <code>isInversed</code> set to <code>true</code>,
+ * this method changes the behavior of some of the subsequent methods
+ * in a way that they can be used for the inverse Bidi algorithm.
+ * Specifically, runs of text with numeric characters will be treated in a
+ * special way and may need to be surrounded with LRM characters when they are
+ * written in reordered sequence.
+ *
+ * <p>Output runs should be retrieved using <code>getVisualRun()</code>.
+ * Since the actual input for "inverse Bidi" is visually ordered text and
+ * <code>getVisualRun()</code> gets the reordered runs, these are actually
+ * the runs of the logically ordered output.
+ *
+ * <p>Calling this method with argument <code>isInverse</code> set to
+ * <code>true</code> is equivalent to calling <code>setReorderingMode</code>
+ * with argument <code>reorderingMode</code>
+ * set to <code>REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
+ * Calling this method with argument <code>isInverse</code> set to
+ * <code>false</code> is equivalent to calling <code>setReorderingMode</code>
+ * with argument <code>reorderingMode</code>
+ * set to <code>REORDER_DEFAULT</code>.
+ *
+ * @param isInverse specifies "forward" or "inverse" Bidi operation.
+ *
+ * @see #setPara
+ * @see #writeReordered
+ * @see #setReorderingMode
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ * @see #REORDER_DEFAULT
+ */
+
+public void setInverse(boolean isInverse) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is this <code>Bidi</code> object set to perform the inverse Bidi
+ * algorithm?
+ * <p>Note: calling this method after setting the reordering mode with
+ * <code>setReorderingMode</code> will return <code>true</code> if the
+ * reordering mode was set to
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>, <code>false</code>
+ * for all other values.
+ *
+ * @return <code>true</code> if the <code>Bidi</code> object is set to
+ * perform the inverse Bidi algorithm by handling numbers as L.
+ *
+ * @see #setInverse
+ * @see #setReorderingMode
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ */
+
+public boolean isInverse() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modify the operation of the Bidi algorithm such that it implements some
+ * variant to the basic Bidi algorithm or approximates an "inverse Bidi"
+ * algorithm, depending on different values of the "reordering mode".
+ * This method must be called before <code>setPara()</code>, and stays in
+ * effect until called again with a different argument.
+ *
+ * <p>The normal operation of the Bidi algorithm as described in the Unicode
+ * Standard Annex #9 is to take text stored in logical (keyboard, typing)
+ * order and to determine how to reorder it for visual rendering.
+ *
+ * <p>With the reordering mode set to a value other than
+ * <code>REORDER_DEFAULT</code>, this method changes the behavior of some of
+ * the subsequent methods in a way such that they implement an inverse Bidi
+ * algorithm or some other algorithm variants.
+ *
+ * <p>Some legacy systems store text in visual order, and for operations
+ * with standard, Unicode-based algorithms, the text needs to be transformed
+ * into logical order. This is effectively the inverse algorithm of the
+ * described Bidi algorithm. Note that there is no standard algorithm for
+ * this "inverse Bidi", so a number of variants are implemented here.
+ *
+ * <p>In other cases, it may be desirable to emulate some variant of the
+ * Logical to Visual algorithm (e.g. one used in MS Windows), or perform a
+ * Logical to Logical transformation.
+ *
+ * <ul>
+ * <li>When the Reordering Mode is set to
+ * <code>REORDER_DEFAULT</code>,
+ * the standard Bidi Logical to Visual algorithm is applied.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_NUMBERS_SPECIAL</code>,
+ * the algorithm used to perform Bidi transformations when calling
+ * <code>setPara</code> should approximate the algorithm used in Microsoft
+ * Windows XP rather than strictly conform to the Unicode Bidi algorithm.
+ * <br>
+ * The differences between the basic algorithm and the algorithm addressed
+ * by this option are as follows:
+ * <ul>
+ *   <li>Within text at an even embedding level, the sequence "123AB"
+ *   (where AB represent R or AL letters) is transformed to "123BA" by the
+ *   Unicode algorithm and to "BA123" by the Windows algorithm.</li>
+ *
+ *   <li>Arabic-Indic numbers (AN) are handled by the Windows algorithm just
+ *   like regular numbers (EN).</li>
+ * </ul></li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_GROUP_NUMBERS_WITH_R</code>,
+ * numbers located between LTR text and RTL text are associated with the RTL
+ * text. For instance, an LTR paragraph with content "abc 123 DEF" (where
+ * upper case letters represent RTL characters) will be transformed to
+ * "abc FED 123" (and not "abc 123 FED"), "DEF 123 abc" will be transformed
+ * to "123 FED abc" and "123 FED abc" will be transformed to "DEF 123 abc".
+ * This makes the algorithm reversible and makes it useful when round trip
+ * (from visual to logical and back to visual) must be achieved without
+ * adding LRM characters. However, this is a variation from the standard
+ * Unicode Bidi algorithm.<br>
+ * The source text should not contain Bidi control characters other than LRM
+ * or RLM.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_RUNS_ONLY</code>,
+ * a "Logical to Logical" transformation must be performed:
+ * <ul>
+ * <li>If the default text level of the source text (argument
+ * <code>paraLevel</code> in <code>setPara</code>) is even, the source text
+ * will be handled as LTR logical text and will be transformed to the RTL
+ * logical text which has the same LTR visual display.</li>
+ * <li>If the default level of the source text is odd, the source text
+ * will be handled as RTL logical text and will be transformed to the
+ * LTR logical text which has the same LTR visual display.</li>
+ * </ul>
+ * This mode may be needed when logical text which is basically Arabic or
+ * Hebrew, with possible included numbers or phrases in English, has to be
+ * displayed as if it had an even embedding level (this can happen if the
+ * displaying application treats all text as if it was basically LTR).
+ * <br>
+ * This mode may also be needed in the reverse case, when logical text which
+ * is basically English, with possible included phrases in Arabic or Hebrew,
+ * has to be displayed as if it had an odd embedding level.
+ * <br>
+ * Both cases could be handled by adding LRE or RLE at the head of the
+ * text, if the display subsystem supports these formatting controls. If it
+ * does not, the problem may be handled by transforming the source text in
+ * this mode before displaying it, so that it will be displayed properly.
+ * <br>
+ * The source text should not contain Bidi control characters other than LRM
+ * or RLM.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>, an "inverse Bidi"
+ * algorithm is applied.
+ * Runs of text with numeric characters will be treated like LTR letters and
+ * may need to be surrounded with LRM characters when they are written in
+ * reordered sequence (the option <code>INSERT_LRM_FOR_NUMERIC</code> can
+ * be used with method <code>writeReordered</code> to this end. This mode
+ * is equivalent to calling <code>setInverse()</code> with
+ * argument <code>isInverse</code> set to <code>true</code>.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_INVERSE_LIKE_DIRECT</code>, the "direct" Logical to
+ * Visual Bidi algorithm is used as an approximation of an "inverse Bidi"
+ * algorithm. This mode is similar to mode
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code> but is closer to the
+ * regular Bidi algorithm.
+ * <br>
+ * For example, an LTR paragraph with the content "FED 123 456 CBA" (where
+ * upper case represents RTL characters) will be transformed to
+ * "ABC 456 123 DEF", as opposed to "DEF 123 456 ABC"
+ * with mode <code>REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
+ * When used in conjunction with option
+ * <code>OPTION_INSERT_MARKS</code>, this mode generally
+ * adds Bidi marks to the output significantly more sparingly than mode
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>.<br> with option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to
+ * <code>writeReordered</code>.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the Logical to Visual
+ * Bidi algorithm used in Windows XP is used as an approximation of an "inverse
+ * Bidi" algorithm.
+ * <br>
+ * For example, an LTR paragraph with the content "abc FED123" (where
+ * upper case represents RTL characters) will be transformed to
+ * "abc 123DEF.</li>
+ * </ul>
+ *
+ * <p>In all the reordering modes specifying an "inverse Bidi" algorithm
+ * (i.e. those with a name starting with <code>REORDER_INVERSE</code>),
+ * output runs should be retrieved using <code>getVisualRun()</code>, and
+ * the output text with <code>writeReordered()</code>. The caller should
+ * keep in mind that in "inverse Bidi" modes the input is actually visually
+ * ordered text and reordered output returned by <code>getVisualRun()</code>
+ * or <code>writeReordered()</code> are actually runs or character string
+ * of logically ordered output.<br>
+ * For all the "inverse Bidi" modes, the source text should not contain
+ * Bidi control characters other than LRM or RLM.
+ *
+ * <p>Note that option <code>OUTPUT_REVERSE</code> of
+ * <code>writeReordered</code> has no useful meaning and should not be used
+ * in conjunction with any value of the reordering mode specifying "inverse
+ * Bidi" or with value <code>REORDER_RUNS_ONLY</code>.
+ *
+ * @param reorderingMode specifies the required variant of the Bidi
+ *                       algorithm.
+ *
+ * @see #setInverse
+ * @see #setPara
+ * @see #writeReordered
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #OUTPUT_REVERSE
+ * @see #REORDER_DEFAULT
+ * @see #REORDER_NUMBERS_SPECIAL
+ * @see #REORDER_GROUP_NUMBERS_WITH_R
+ * @see #REORDER_RUNS_ONLY
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public void setReorderingMode(int reorderingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * What is the requested reordering mode for a given Bidi object?
+ *
+ * @return the current reordering mode of the Bidi object
+ *
+ * @see #setReorderingMode
+ */
+
+public int getReorderingMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specify which of the reordering options should be applied during Bidi
+ * transformations.
+ *
+ * @param options A combination of zero or more of the following
+ * reordering options:
+ * <code>OPTION_DEFAULT</code>, <code>OPTION_INSERT_MARKS</code>,
+ * <code>OPTION_REMOVE_CONTROLS</code>, <code>OPTION_STREAMING</code>.
+ *
+ * @see #getReorderingOptions
+ * @see #OPTION_DEFAULT
+ * @see #OPTION_INSERT_MARKS
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #OPTION_STREAMING
+ */
+
+public void setReorderingOptions(int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * What are the reordering options applied to a given Bidi object?
+ *
+ * @return the current reordering options of the Bidi object
+ *
+ * @see #setReorderingOptions
+ */
+
+public int getReorderingOptions() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the base direction of the text provided according to the Unicode
+ * Bidirectional Algorithm. The base direction is derived from the first
+ * character in the string with bidirectional character type L, R, or AL.
+ * If the first such character has type L, LTR is returned. If the first
+ * such character has type R or AL, RTL is returned. If the string does
+ * not contain any character of these types, then NEUTRAL is returned.
+ * This is a lightweight function for use when only the base direction is
+ * needed and no further bidi processing of the text is needed.
+ * @param paragraph the text whose paragraph level direction is needed.
+ * @return LTR, RTL, NEUTRAL
+ * @see #LTR
+ * @see #RTL
+ * @see #NEUTRAL
+ */
+
+public static byte getBaseDirection(java.lang.CharSequence paragraph) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the context before a call to setPara().<p>
+ *
+ * setPara() computes the left-right directionality for a given piece
+ * of text which is supplied as one of its arguments. Sometimes this piece
+ * of text (the "main text") should be considered in context, because text
+ * appearing before ("prologue") and/or after ("epilogue") the main text
+ * may affect the result of this computation.<p>
+ *
+ * This function specifies the prologue and/or the epilogue for the next
+ * call to setPara(). If successive calls to setPara()
+ * all need specification of a context, setContext() must be called
+ * before each call to setPara(). In other words, a context is not
+ * "remembered" after the following successful call to setPara().<p>
+ *
+ * If a call to setPara() specifies DEFAULT_LTR or
+ * DEFAULT_RTL as paraLevel and is preceded by a call to
+ * setContext() which specifies a prologue, the paragraph level will
+ * be computed taking in consideration the text in the prologue.<p>
+ *
+ * When setPara() is called without a previous call to
+ * setContext, the main text is handled as if preceded and followed
+ * by strong directional characters at the current paragraph level.
+ * Calling setContext() with specification of a prologue will change
+ * this behavior by handling the main text as if preceded by the last
+ * strong character appearing in the prologue, if any.
+ * Calling setContext() with specification of an epilogue will change
+ * the behavior of setPara() by handling the main text as if followed
+ * by the first strong character or digit appearing in the epilogue, if any.<p>
+ *
+ * Note 1: if <code>setContext</code> is called repeatedly without
+ *         calling <code>setPara</code>, the earlier calls have no effect,
+ *         only the last call will be remembered for the next call to
+ *         <code>setPara</code>.<p>
+ *
+ * Note 2: calling <code>setContext(null, null)</code>
+ *         cancels any previous setting of non-empty prologue or epilogue.
+ *         The next call to <code>setPara()</code> will process no
+ *         prologue or epilogue.<p>
+ *
+ * Note 3: users must be aware that even after setting the context
+ *         before a call to setPara() to perform e.g. a logical to visual
+ *         transformation, the resulting string may not be identical to what it
+ *         would have been if all the text, including prologue and epilogue, had
+ *         been processed together.<br>
+ * Example (upper case letters represent RTL characters):<br>
+ * &nbsp;&nbsp;prologue = "<code>abc DE</code>"<br>
+ * &nbsp;&nbsp;epilogue = none<br>
+ * &nbsp;&nbsp;main text = "<code>FGH xyz</code>"<br>
+ * &nbsp;&nbsp;paraLevel = LTR<br>
+ * &nbsp;&nbsp;display without prologue = "<code>HGF xyz</code>"
+ *             ("HGF" is adjacent to "xyz")<br>
+ * &nbsp;&nbsp;display with prologue = "<code>abc HGFED xyz</code>"
+ *             ("HGF" is not adjacent to "xyz")<br>
+ *
+ * @param prologue is the text which precedes the text that
+ *        will be specified in a coming call to setPara().
+ *        If there is no prologue to consider,
+ *        this parameter can be <code>null</code>.
+ *
+ * @param epilogue is the text which follows the text that
+ *        will be specified in a coming call to setPara().
+ *        If there is no epilogue to consider,
+ *        this parameter can be <code>null</code>.
+ *
+ * @see #setPara
+ */
+
+public void setContext(java.lang.String prologue, java.lang.String epilogue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Perform the Unicode Bidi algorithm. It is defined in the
+ * <a href="http://www.unicode.org/reports/tr9/">Unicode Standard Annex #9</a>.
+ *
+ * <p>This method takes a piece of plain text containing one or more paragraphs,
+ * with or without externally specified embedding levels from <i>styled</i>
+ * text and computes the left-right-directionality of each character.</p>
+ *
+ * <p>If the entire text is all of the same directionality, then
+ * the method may not perform all the steps described by the algorithm,
+ * i.e., some levels may not be the same as if all steps were performed.
+ * This is not relevant for unidirectional text.<br>
+ * For example, in pure LTR text with numbers the numbers would get
+ * a resolved level of 2 higher than the surrounding text according to
+ * the algorithm. This implementation may set all resolved levels to
+ * the same value in such a case.</p>
+ *
+ * <p>The text can be composed of multiple paragraphs. Occurrence of a block
+ * separator in the text terminates a paragraph, and whatever comes next starts
+ * a new paragraph. The exception to this rule is when a Carriage Return (CR)
+ * is followed by a Line Feed (LF). Both CR and LF are block separators, but
+ * in that case, the pair of characters is considered as terminating the
+ * preceding paragraph, and a new paragraph will be started by a character
+ * coming after the LF.
+ *
+ * <p>Although the text is passed here as a <code>String</code>, it is
+ * stored internally as an array of characters. Therefore the
+ * documentation will refer to indexes of the characters in the text.
+ *
+ * @param text contains the text that the Bidi algorithm will be performed
+ *        on. This text can be retrieved with <code>getText()</code> or
+ *        <code>getTextAsString</code>.<br>
+ *
+ * @param paraLevel specifies the default level for the text;
+ *        it is typically 0 (LTR) or 1 (RTL).
+ *        If the method shall determine the paragraph level from the text,
+ *        then <code>paraLevel</code> can be set to
+ *        either <code>LEVEL_DEFAULT_LTR</code>
+ *        or <code>LEVEL_DEFAULT_RTL</code>; if the text contains multiple
+ *        paragraphs, the paragraph level shall be determined separately for
+ *        each paragraph; if a paragraph does not include any strongly typed
+ *        character, then the desired default is used (0 for LTR or 1 for RTL).
+ *        Any other value between 0 and <code>MAX_EXPLICIT_LEVEL</code>
+ *        is also valid, with odd levels indicating RTL.
+ *
+ * @param embeddingLevels (in) may be used to preset the embedding and override levels,
+ *        ignoring characters like LRE and PDF in the text.
+ *        A level overrides the directional property of its corresponding
+ *        (same index) character if the level has the
+ *        <code>LEVEL_OVERRIDE</code> bit set.<br><br>
+ *        Aside from that bit, it must be
+ *        <code>paraLevel&lt;=embeddingLevels[]&lt;=MAX_EXPLICIT_LEVEL</code>,
+ *        except that level 0 is always allowed.
+ *        Level 0 for a paragraph separator prevents reordering of paragraphs;
+ *        this only works reliably if <code>LEVEL_OVERRIDE</code>
+ *        is also set for paragraph separators.
+ *        Level 0 for other characters is treated as a wildcard
+ *        and is lifted up to the resolved level of the surrounding paragraph.<br><br>
+ *        <strong>Caution: </strong>A reference to this array, not a copy
+ *        of the levels, will be stored in the <code>Bidi</code> object;
+ *        the <code>embeddingLevels</code>
+ *        should not be modified to avoid unexpected results on subsequent
+ *        Bidi operations. However, the <code>setPara()</code> and
+ *        <code>setLine()</code> methods may modify some or all of the
+ *        levels.<br><br>
+ *        <strong>Note:</strong> the <code>embeddingLevels</code> array must
+ *        have one entry for each character in <code>text</code>.
+ *
+ * @throws java.lang.IllegalArgumentException if the values in embeddingLevels are
+ *         not within the allowed range
+ *
+ * @see #LEVEL_DEFAULT_LTR
+ * @see #LEVEL_DEFAULT_RTL
+ * @see #LEVEL_OVERRIDE
+ * @see #MAX_EXPLICIT_LEVEL
+ */
+
+public void setPara(java.lang.String text, byte paraLevel, byte[] embeddingLevels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Perform the Unicode Bidi algorithm. It is defined in the
+ * <a href="http://www.unicode.org/reports/tr9/">Unicode Standard Annex #9</a>.
+ *
+ * <p>This method takes a piece of plain text containing one or more paragraphs,
+ * with or without externally specified embedding levels from <i>styled</i>
+ * text and computes the left-right-directionality of each character.</p>
+ *
+ * <p>If the entire text is all of the same directionality, then
+ * the method may not perform all the steps described by the algorithm,
+ * i.e., some levels may not be the same as if all steps were performed.
+ * This is not relevant for unidirectional text.<br>
+ * For example, in pure LTR text with numbers the numbers would get
+ * a resolved level of 2 higher than the surrounding text according to
+ * the algorithm. This implementation may set all resolved levels to
+ * the same value in such a case.</p>
+ *
+ * <p>The text can be composed of multiple paragraphs. Occurrence of a block
+ * separator in the text terminates a paragraph, and whatever comes next starts
+ * a new paragraph. The exception to this rule is when a Carriage Return (CR)
+ * is followed by a Line Feed (LF). Both CR and LF are block separators, but
+ * in that case, the pair of characters is considered as terminating the
+ * preceding paragraph, and a new paragraph will be started by a character
+ * coming after the LF.
+ *
+ * <p>The text is stored internally as an array of characters. Therefore the
+ * documentation will refer to indexes of the characters in the text.
+ *
+ * @param chars contains the text that the Bidi algorithm will be performed
+ *        on. This text can be retrieved with <code>getText()</code> or
+ *        <code>getTextAsString</code>.<br>
+ *
+ * @param paraLevel specifies the default level for the text;
+ *        it is typically 0 (LTR) or 1 (RTL).
+ *        If the method shall determine the paragraph level from the text,
+ *        then <code>paraLevel</code> can be set to
+ *        either <code>LEVEL_DEFAULT_LTR</code>
+ *        or <code>LEVEL_DEFAULT_RTL</code>; if the text contains multiple
+ *        paragraphs, the paragraph level shall be determined separately for
+ *        each paragraph; if a paragraph does not include any strongly typed
+ *        character, then the desired default is used (0 for LTR or 1 for RTL).
+ *        Any other value between 0 and <code>MAX_EXPLICIT_LEVEL</code>
+ *        is also valid, with odd levels indicating RTL.
+ *
+ * @param embeddingLevels (in) may be used to preset the embedding and
+ *        override levels, ignoring characters like LRE and PDF in the text.
+ *        A level overrides the directional property of its corresponding
+ *        (same index) character if the level has the
+ *        <code>LEVEL_OVERRIDE</code> bit set.<br><br>
+ *        Aside from that bit, it must be
+ *        <code>paraLevel&lt;=embeddingLevels[]&lt;=MAX_EXPLICIT_LEVEL</code>,
+ *        except that level 0 is always allowed.
+ *        Level 0 for a paragraph separator prevents reordering of paragraphs;
+ *        this only works reliably if <code>LEVEL_OVERRIDE</code>
+ *        is also set for paragraph separators.
+ *        Level 0 for other characters is treated as a wildcard
+ *        and is lifted up to the resolved level of the surrounding paragraph.<br><br>
+ *        <strong>Caution: </strong>A reference to this array, not a copy
+ *        of the levels, will be stored in the <code>Bidi</code> object;
+ *        the <code>embeddingLevels</code>
+ *        should not be modified to avoid unexpected results on subsequent
+ *        Bidi operations. However, the <code>setPara()</code> and
+ *        <code>setLine()</code> methods may modify some or all of the
+ *        levels.<br><br>
+ *        <strong>Note:</strong> the <code>embeddingLevels</code> array must
+ *        have one entry for each character in <code>text</code>.
+ *
+ * @throws java.lang.IllegalArgumentException if the values in embeddingLevels are
+ *         not within the allowed range
+ *
+ * @see #LEVEL_DEFAULT_LTR
+ * @see #LEVEL_DEFAULT_RTL
+ * @see #LEVEL_OVERRIDE
+ * @see #MAX_EXPLICIT_LEVEL
+ */
+
+public void setPara(char[] chars, byte paraLevel, byte[] embeddingLevels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Perform the Unicode Bidi algorithm on a given paragraph, as defined in the
+ * <a href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Annex #9</a>,
+ * version 13,
+ * also described in The Unicode Standard, Version 4.0 .<p>
+ *
+ * This method takes a paragraph of text and computes the
+ * left-right-directionality of each character. The text should not
+ * contain any Unicode block separators.<p>
+ *
+ * The RUN_DIRECTION attribute in the text, if present, determines the base
+ * direction (left-to-right or right-to-left). If not present, the base
+ * direction is computed using the Unicode Bidirectional Algorithm,
+ * defaulting to left-to-right if there are no strong directional characters
+ * in the text. This attribute, if present, must be applied to all the text
+ * in the paragraph.<p>
+ *
+ * The BIDI_EMBEDDING attribute in the text, if present, represents
+ * embedding level information.
+ * Negative values indicate overrides at the absolute value of the level.
+ * Positive values indicate embeddings. (See {@link #MAX_EXPLICIT_LEVEL}.)
+ * Where values are zero or not defined, the base
+ * embedding level as determined by the base direction is assumed.<p>
+ *
+ * The NUMERIC_SHAPING attribute in the text, if present, converts European
+ * digits to other decimal digits before running the bidi algorithm. This
+ * attribute, if present, must be applied to all the text in the paragraph.
+ *
+ * If the entire text is all of the same directionality, then
+ * the method may not perform all the steps described by the algorithm,
+ * i.e., some levels may not be the same as if all steps were performed.
+ * This is not relevant for unidirectional text.<br>
+ * For example, in pure LTR text with numbers the numbers would get
+ * a resolved level of 2 higher than the surrounding text according to
+ * the algorithm. This implementation may set all resolved levels to
+ * the same value in such a case.<p>
+ *
+ * @param paragraph a paragraph of text with optional character and
+ *        paragraph attribute information
+ */
+
+public void setPara(java.text.AttributedCharacterIterator paragraph) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specify whether block separators must be allocated level zero,
+ * so that successive paragraphs will progress from left to right.
+ * This method must be called before <code>setPara()</code>.
+ * Paragraph separators (B) may appear in the text.  Setting them to level zero
+ * means that all paragraph separators (including one possibly appearing
+ * in the last text position) are kept in the reordered text after the text
+ * that they follow in the source text.
+ * When this feature is not enabled, a paragraph separator at the last
+ * position of the text before reordering will go to the first position
+ * of the reordered text when the paragraph level is odd.
+ *
+ * @param ordarParaLTR specifies whether paragraph separators (B) must
+ * receive level 0, so that successive paragraphs progress from left to right.
+ *
+ * @see #setPara
+ */
+
+public void orderParagraphsLTR(boolean ordarParaLTR) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is this <code>Bidi</code> object set to allocate level 0 to block
+ * separators so that successive paragraphs progress from left to right?
+ *
+ * @return <code>true</code> if the <code>Bidi</code> object is set to
+ *         allocate level 0 to block separators.
+ */
+
+public boolean isOrderParagraphsLTR() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the directionality of the text.
+ *
+ * @return a value of <code>LTR</code>, <code>RTL</code> or <code>MIXED</code>
+ *         that indicates if the entire text
+ *         represented by this object is unidirectional,
+ *         and which direction, or if it is mixed-directional.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #LTR
+ * @see #RTL
+ * @see #MIXED
+ */
+
+public byte getDirection() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the text.
+ *
+ * @return A <code>String</code> containing the text that the
+ *         <code>Bidi</code> object was created for.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #setLine
+ */
+
+public java.lang.String getTextAsString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the text.
+ *
+ * @return A <code>char</code> array containing the text that the
+ *         <code>Bidi</code> object was created for.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #setLine
+ */
+
+public char[] getText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the length of the text.
+ *
+ * @return The length of the text that the <code>Bidi</code> object was
+ *         created for.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int getLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the length of the source text processed by the last call to
+ * <code>setPara()</code>. This length may be different from the length of
+ * the source text if option <code>OPTION_STREAMING</code> has been
+ * set.
+ * <br>
+ * Note that whenever the length of the text affects the execution or the
+ * result of a method, it is the processed length which must be considered,
+ * except for <code>setPara</code> (which receives unprocessed source text)
+ * and <code>getLength</code> (which returns the original length of the
+ * source text).<br>
+ * In particular, the processed length is the one to consider in the
+ * following cases:
+ * <ul>
+ * <li>maximum value of the <code>limit</code> argument of
+ * <code>setLine</code></li>
+ * <li>maximum value of the <code>charIndex</code> argument of
+ * <code>getParagraph</code></li>
+ * <li>maximum value of the <code>charIndex</code> argument of
+ * <code>getLevelAt</code></li>
+ * <li>number of elements in the array returned by <code>getLevels</code>
+ * </li>
+ * <li>maximum value of the <code>logicalStart</code> argument of
+ * <code>getLogicalRun</code></li>
+ * <li>maximum value of the <code>logicalIndex</code> argument of
+ * <code>getVisualIndex</code></li>
+ * <li>number of elements returned by <code>getLogicalMap</code></li>
+ * <li>length of text processed by <code>writeReordered</code></li>
+ * </ul>
+ *
+ * @return The length of the part of the source text processed by
+ *         the last call to <code>setPara</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #OPTION_STREAMING
+ */
+
+public int getProcessedLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the length of the reordered text resulting from the last call to
+ * <code>setPara()</code>. This length may be different from the length
+ * of the source text if option <code>OPTION_INSERT_MARKS</code>
+ * or option <code>OPTION_REMOVE_CONTROLS</code> has been set.
+ * <br>
+ * This resulting length is the one to consider in the following cases:
+ * <ul>
+ * <li>maximum value of the <code>visualIndex</code> argument of
+ * <code>getLogicalIndex</code></li>
+ * <li>number of elements returned by <code>getVisualMap</code></li>
+ * </ul>
+ * Note that this length stays identical to the source text length if
+ * Bidi marks are inserted or removed using option bits of
+ * <code>writeReordered</code>, or if option
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code> has been set.
+ *
+ * @return The length of the reordered text resulting from
+ *         the last call to <code>setPara</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #OPTION_INSERT_MARKS
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ */
+
+public int getResultLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the paragraph level of the text.
+ *
+ * @return The paragraph level. If there are multiple paragraphs, their
+ *         level may vary if the required paraLevel is LEVEL_DEFAULT_LTR or
+ *         LEVEL_DEFAULT_RTL.  In that case, the level of the first paragraph
+ *         is returned.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #LEVEL_DEFAULT_LTR
+ * @see #LEVEL_DEFAULT_RTL
+ * @see #getParagraph
+ * @see #getParagraphByIndex
+ */
+
+public byte getParaLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the number of paragraphs.
+ *
+ * @return The number of paragraphs.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int countParagraphs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a paragraph, given the index of this paragraph.
+ *
+ * This method returns information about a paragraph.<p>
+ *
+ * @param paraIndex is the number of the paragraph, in the
+ *        range <code>[0..countParagraphs()-1]</code>.
+ *
+ * @return a BidiRun object with the details of the paragraph:<br>
+ *        <code>start</code> will receive the index of the first character
+ *        of the paragraph in the text.<br>
+ *        <code>limit</code> will receive the limit of the paragraph.<br>
+ *        <code>embeddingLevel</code> will receive the level of the paragraph.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if paraIndex is not in the range
+ *        <code>[0..countParagraphs()-1]</code>
+ *
+ * @see android.icu.text.BidiRun
+ */
+
+public android.icu.text.BidiRun getParagraphByIndex(int paraIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a paragraph, given a position within the text.
+ * This method returns information about a paragraph.<br>
+ * Note: if the paragraph index is known, it is more efficient to
+ * retrieve the paragraph information using getParagraphByIndex().<p>
+ *
+ * @param charIndex is the index of a character within the text, in the
+ *        range <code>[0..getProcessedLength()-1]</code>.
+ *
+ * @return a BidiRun object with the details of the paragraph:<br>
+ *        <code>start</code> will receive the index of the first character
+ *        of the paragraph in the text.<br>
+ *        <code>limit</code> will receive the limit of the paragraph.<br>
+ *        <code>embeddingLevel</code> will receive the level of the paragraph.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if charIndex is not within the legal range
+ *
+ * @see android.icu.text.BidiRun
+ * @see #getParagraphByIndex
+ * @see #getProcessedLength
+ */
+
+public android.icu.text.BidiRun getParagraph(int charIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the index of a paragraph, given a position within the text.<p>
+ *
+ * @param charIndex is the index of a character within the text, in the
+ *        range <code>[0..getProcessedLength()-1]</code>.
+ *
+ * @return The index of the paragraph containing the specified position,
+ *         starting from 0.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if charIndex is not within the legal range
+ *
+ * @see android.icu.text.BidiRun
+ * @see #getProcessedLength
+ */
+
+public int getParagraphIndex(int charIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a custom Bidi classifier used by the UBA implementation for Bidi
+ * class determination.
+ *
+ * @param classifier A new custom classifier. This can be null.
+ *
+ * @see #getCustomClassifier
+ */
+
+public void setCustomClassifier(android.icu.text.BidiClassifier classifier) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the current custom class classifier used for Bidi class
+ * determination.
+ *
+ * @return An instance of class <code>BidiClassifier</code>
+ *
+ * @see #setCustomClassifier
+ */
+
+public android.icu.text.BidiClassifier getCustomClassifier() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves the Bidi class for a given code point.
+ * <p>If a <code>BidiClassifier</code> is defined and returns a value
+ * other than <code>UCharacter.getIntPropertyMaxValue(UProperty.BIDI_CLASS)+1</code>,
+ * that value is used; otherwise the default class determination mechanism is invoked.
+ *
+ * @param c The code point to get a Bidi class for.
+ *
+ * @return The Bidi class for the character <code>c</code> that is in effect
+ *         for this <code>Bidi</code> instance.
+ *
+ * @see android.icu.text.BidiClassifier
+ */
+
+public int getCustomizedClass(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <code>setLine()</code> returns a <code>Bidi</code> object to
+ * contain the reordering information, especially the resolved levels,
+ * for all the characters in a line of text. This line of text is
+ * specified by referring to a <code>Bidi</code> object representing
+ * this information for a piece of text containing one or more paragraphs,
+ * and by specifying a range of indexes in this text.<p>
+ * In the new line object, the indexes will range from 0 to <code>limit-start-1</code>.<p>
+ *
+ * This is used after calling <code>setPara()</code>
+ * for a piece of text, and after line-breaking on that text.
+ * It is not necessary if each paragraph is treated as a single line.<p>
+ *
+ * After line-breaking, rules (L1) and (L2) for the treatment of
+ * trailing WS and for reordering are performed on
+ * a <code>Bidi</code> object that represents a line.<p>
+ *
+ * <strong>Important: </strong>the line <code>Bidi</code> object may
+ * reference data within the global text <code>Bidi</code> object.
+ * You should not alter the content of the global text object until
+ * you are finished using the line object.
+ *
+ * @param start is the line's first index into the text.
+ *
+ * @param limit is just behind the line's last index into the text
+ *        (its last index +1).
+ *
+ * @return a <code>Bidi</code> object that will now represent a line of the text.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ * @throws java.lang.IllegalArgumentException if start and limit are not in the range
+ *         <code>0&lt;=start&lt;limit&lt;=getProcessedLength()</code>,
+ *         or if the specified line crosses a paragraph boundary
+ *
+ * @see #setPara
+ * @see #getProcessedLength
+ */
+
+public android.icu.text.Bidi setLine(int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the level for one character.
+ *
+ * @param charIndex the index of a character.
+ *
+ * @return The level for the character at <code>charIndex</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if charIndex is not in the range
+ *         <code>0&lt;=charIndex&lt;getProcessedLength()</code>
+ *
+ * @see #getProcessedLength
+ */
+
+public byte getLevelAt(int charIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get an array of levels for each character.<p>
+ *
+ * Note that this method may allocate memory under some
+ * circumstances, unlike <code>getLevelAt()</code>.
+ *
+ * @return The levels array for the text,
+ *         or <code>null</code> if an error occurs.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public byte[] getLevels() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a logical run.
+ * This method returns information about a run and is used
+ * to retrieve runs in logical order.<p>
+ * This is especially useful for line-breaking on a paragraph.
+ *
+ * @param logicalPosition is a logical position within the source text.
+ *
+ * @return a BidiRun object filled with <code>start</code> containing
+ *        the first character of the run, <code>limit</code> containing
+ *        the limit of the run, and <code>embeddingLevel</code> containing
+ *        the level of the run.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if logicalPosition is not in the range
+ *         <code>0&lt;=logicalPosition&lt;getProcessedLength()</code>
+ *
+ * @see android.icu.text.BidiRun
+ * @see android.icu.text.BidiRun#getStart()
+ * @see android.icu.text.BidiRun#getLimit()
+ * @see android.icu.text.BidiRun#getEmbeddingLevel()
+ */
+
+public android.icu.text.BidiRun getLogicalRun(int logicalPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the number of runs.
+ * This method may invoke the actual reordering on the
+ * <code>Bidi</code> object, after <code>setPara()</code>
+ * may have resolved only the levels of the text. Therefore,
+ * <code>countRuns()</code> may have to allocate memory,
+ * and may throw an exception if it fails to do so.
+ *
+ * @return The number of runs.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int countRuns() { throw new RuntimeException("Stub!"); }
+
+/**
+ *
+ * Get a <code>BidiRun</code> object according to its index. BidiRun methods
+ * may be used to retrieve the run's logical start, length and level,
+ * which can be even for an LTR run or odd for an RTL run.
+ * In an RTL run, the character at the logical start is
+ * visually on the right of the displayed run.
+ * The length is the number of characters in the run.<p>
+ * <code>countRuns()</code> is normally called
+ * before the runs are retrieved.
+ *
+ * <p>
+ *  Example:
+ * <pre>
+ *  Bidi bidi = new Bidi();
+ *  String text = "abc 123 DEFG xyz";
+ *  bidi.setPara(text, Bidi.RTL, null);
+ *  int i, count=bidi.countRuns(), logicalStart, visualIndex=0, length;
+ *  BidiRun run;
+ *  for (i = 0; i &lt; count; ++i) {
+ *      run = bidi.getVisualRun(i);
+ *      logicalStart = run.getStart();
+ *      length = run.getLength();
+ *      if (Bidi.LTR == run.getEmbeddingLevel()) {
+ *          do { // LTR
+ *              show_char(text.charAt(logicalStart++), visualIndex++);
+ *          } while (--length &gt; 0);
+ *      } else {
+ *          logicalStart += length;  // logicalLimit
+ *          do { // RTL
+ *              show_char(text.charAt(--logicalStart), visualIndex++);
+ *          } while (--length &gt; 0);
+ *      }
+ *  }
+ * </pre>
+ * <p>
+ * Note that in right-to-left runs, code like this places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * <p>
+ * Use of <code>{@link #writeReordered}</code>, optionally with the
+ * <code>{@link #KEEP_BASE_COMBINING}</code> option, can be considered in
+ * order to avoid these issues.
+ *
+ * @param runIndex is the number of the run in visual order, in the
+ *        range <code>[0..countRuns()-1]</code>.
+ *
+ * @return a BidiRun object containing the details of the run. The
+ *         directionality of the run is
+ *         <code>LTR==0</code> or <code>RTL==1</code>,
+ *         never <code>MIXED</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>runIndex</code> is not in
+ *         the range <code>0&lt;=runIndex&lt;countRuns()</code>
+ *
+ * @see #countRuns()
+ * @see android.icu.text.BidiRun
+ * @see android.icu.text.BidiRun#getStart()
+ * @see android.icu.text.BidiRun#getLength()
+ * @see android.icu.text.BidiRun#getEmbeddingLevel()
+ */
+
+public android.icu.text.BidiRun getVisualRun(int runIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the visual position from a logical text position.
+ * If such a mapping is used many times on the same
+ * <code>Bidi</code> object, then calling
+ * <code>getLogicalMap()</code> is more efficient.
+ * <p>
+ * The value returned may be <code>MAP_NOWHERE</code> if there is no
+ * visual position because the corresponding text character is a Bidi
+ * control removed from output by the option
+ * <code>OPTION_REMOVE_CONTROLS</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the visual position returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ * <p>
+ * Note that in right-to-left runs, this mapping places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * Use of <code>{@link #writeReordered}</code>, optionally with the
+ * <code>{@link #KEEP_BASE_COMBINING}</code> option can be considered instead
+ * of using the mapping, in order to avoid these issues.
+ *
+ * @param logicalIndex is the index of a character in the text.
+ *
+ * @return The visual position of this character.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>logicalIndex</code> is not in
+ *         the range <code>0&lt;=logicalIndex&lt;getProcessedLength()</code>
+ *
+ * @see #getLogicalMap
+ * @see #getLogicalIndex
+ * @see #getProcessedLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #writeReordered
+ */
+
+public int getVisualIndex(int logicalIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the logical text position from a visual position.
+ * If such a mapping is used many times on the same
+ * <code>Bidi</code> object, then calling
+ * <code>getVisualMap()</code> is more efficient.
+ * <p>
+ * The value returned may be <code>MAP_NOWHERE</code> if there is no
+ * logical position because the corresponding text character is a Bidi
+ * mark inserted in the output by option
+ * <code>OPTION_INSERT_MARKS</code>.
+ * <p>
+ * This is the inverse method to <code>getVisualIndex()</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the logical position returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ *
+ * @param visualIndex is the visual position of a character.
+ *
+ * @return The index of this character in the text.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>visualIndex</code> is not in
+ *         the range <code>0&lt;=visualIndex&lt;getResultLength()</code>
+ *
+ * @see #getVisualMap
+ * @see #getVisualIndex
+ * @see #getResultLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_INSERT_MARKS
+ * @see #writeReordered
+ */
+
+public int getLogicalIndex(int visualIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a logical-to-visual index map (array) for the characters in the
+ * <code>Bidi</code> (paragraph or line) object.
+ * <p>
+ * Some values in the map may be <code>MAP_NOWHERE</code> if the
+ * corresponding text characters are Bidi controls removed from the visual
+ * output by the option <code>OPTION_REMOVE_CONTROLS</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the visual positions returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ * <p>
+ * Note that in right-to-left runs, this mapping places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * Use of <code>{@link #writeReordered}</code>, optionally with the
+ * <code>{@link #KEEP_BASE_COMBINING}</code> option can be considered instead
+ * of using the mapping, in order to avoid these issues.
+ *
+ * @return an array of <code>getProcessedLength()</code>
+ *        indexes which will reflect the reordering of the characters.<br><br>
+ *        The index map will result in
+ *        <code>indexMap[logicalIndex]==visualIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #getVisualMap
+ * @see #getVisualIndex
+ * @see #getProcessedLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #writeReordered
+ */
+
+public int[] getLogicalMap() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a visual-to-logical index map (array) for the characters in the
+ * <code>Bidi</code> (paragraph or line) object.
+ * <p>
+ * Some values in the map may be <code>MAP_NOWHERE</code> if the
+ * corresponding text characters are Bidi marks inserted in the visual
+ * output by the option <code>OPTION_INSERT_MARKS</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the logical positions returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ *
+ * @return an array of <code>getResultLength()</code>
+ *        indexes which will reflect the reordering of the characters.<br><br>
+ *        The index map will result in
+ *        <code>indexMap[visualIndex]==logicalIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #getLogicalMap
+ * @see #getLogicalIndex
+ * @see #getResultLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_INSERT_MARKS
+ * @see #writeReordered
+ */
+
+public int[] getVisualMap() { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is a convenience method that does not use a <code>Bidi</code> object.
+ * It is intended to be used for when an application has determined the levels
+ * of objects (character sequences) and just needs to have them reordered (L2).
+ * This is equivalent to using <code>getLogicalMap()</code> on a
+ * <code>Bidi</code> object.
+ *
+ * @param levels is an array of levels that have been determined by
+ *        the application.
+ *
+ * @return an array of <code>levels.length</code>
+ *        indexes which will reflect the reordering of the characters.<p>
+ *        The index map will result in
+ *        <code>indexMap[logicalIndex]==visualIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ */
+
+public static int[] reorderLogical(byte[] levels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is a convenience method that does not use a <code>Bidi</code> object.
+ * It is intended to be used for when an application has determined the levels
+ * of objects (character sequences) and just needs to have them reordered (L2).
+ * This is equivalent to using <code>getVisualMap()</code> on a
+ * <code>Bidi</code> object.
+ *
+ * @param levels is an array of levels that have been determined by
+ *        the application.
+ *
+ * @return an array of <code>levels.length</code>
+ *        indexes which will reflect the reordering of the characters.<p>
+ *        The index map will result in
+ *        <code>indexMap[visualIndex]==logicalIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ */
+
+public static int[] reorderVisual(byte[] levels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Invert an index map.
+ * The index mapping of the argument map is inverted and returned as
+ * an array of indexes that we will call the inverse map.
+ *
+ * @param srcMap is an array whose elements define the original mapping
+ * from a source array to a destination array.
+ * Some elements of the source array may have no mapping in the
+ * destination array. In that case, their value will be
+ * the special value <code>MAP_NOWHERE</code>.
+ * All elements must be &gt;=0 or equal to <code>MAP_NOWHERE</code>.
+ * Some elements in the source map may have a value greater than the
+ * srcMap.length if the destination array has more elements than the
+ * source array.
+ * There must be no duplicate indexes (two or more elements with the
+ * same value except <code>MAP_NOWHERE</code>).
+ *
+ * @return an array representing the inverse map.
+ *         This array has a number of elements equal to 1 + the highest
+ *         value in <code>srcMap</code>.
+ *         For elements of the result array which have no matching elements
+ *         in the source array, the corresponding elements in the inverse
+ *         map will receive a value equal to <code>MAP_NOWHERE</code>.
+ *         If element with index i in <code>srcMap</code> has a value k different
+ *         from <code>MAP_NOWHERE</code>, this means that element i of
+ *         the source array maps to element k in the destination array.
+ *         The inverse map will have value i in its k-th element.
+ *         For all elements of the destination array which do not map to
+ *         an element in the source array, the corresponding element in the
+ *         inverse map will have a value equal to <code>MAP_NOWHERE</code>.
+ *
+ * @see #MAP_NOWHERE
+ */
+
+public static int[] invertMap(int[] srcMap) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a Bidi object representing the bidi information on a line of text
+ * within the paragraph represented by the current Bidi. This call is not
+ * required if the entire paragraph fits on one line.
+ *
+ * @param lineStart the offset from the start of the paragraph to the start
+ *        of the line.
+ * @param lineLimit the offset from the start of the paragraph to the limit
+ *        of the line.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ * @throws java.lang.IllegalArgumentException if lineStart and lineLimit are not in the range
+ *         <code>0&lt;=lineStart&lt;lineLimit&lt;=getProcessedLength()</code>,
+ *         or if the specified line crosses a paragraph boundary
+ */
+
+public android.icu.text.Bidi createLineBidi(int lineStart, int lineLimit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the line is not left-to-right or right-to-left. This means
+ * it either has mixed runs of left-to-right and right-to-left text, or the
+ * base direction differs from the direction of the only run of text.
+ *
+ * @return true if the line is not left-to-right or right-to-left.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ */
+
+public boolean isMixed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the line is all left-to-right text and the base direction
+ * is left-to-right.
+ *
+ * @return true if the line is all left-to-right text and the base direction
+ *         is left-to-right.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ */
+
+public boolean isLeftToRight() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the line is all right-to-left text, and the base direction
+ * is right-to-left
+ *
+ * @return true if the line is all right-to-left text, and the base
+ *         direction is right-to-left
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ */
+
+public boolean isRightToLeft() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the base direction is left-to-right
+ *
+ * @return true if the base direction is left-to-right
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public boolean baseIsLeftToRight() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the base level (0 if left-to-right, 1 if right-to-left).
+ *
+ * @return the base level
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int getBaseLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of level runs.
+ *
+ * @return the number of level runs
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int getRunCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the level of the nth logical run in this line.
+ *
+ * @param run the index of the run, between 0 and <code>countRuns()-1</code>
+ *
+ * @return the level of the run
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>run</code> is not in
+ *         the range <code>0&lt;=run&lt;countRuns()</code>
+ */
+
+public int getRunLevel(int run) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the index of the character at the start of the nth logical run in
+ * this line, as an offset from the start of the line.
+ *
+ * @param run the index of the run, between 0 and <code>countRuns()</code>
+ *
+ * @return the start of the run
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>run</code> is not in
+ *         the range <code>0&lt;=run&lt;countRuns()</code>
+ */
+
+public int getRunStart(int run) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the index of the character past the end of the nth logical run in
+ * this line, as an offset from the start of the line. For example, this
+ * will return the length of the line for the last run on the line.
+ *
+ * @param run the index of the run, between 0 and <code>countRuns()</code>
+ *
+ * @return the limit of the run
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>run</code> is not in
+ *         the range <code>0&lt;=run&lt;countRuns()</code>
+ */
+
+public int getRunLimit(int run) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the specified text requires bidi analysis. If this returns
+ * false, the text will display left-to-right. Clients can then avoid
+ * constructing a Bidi object. Text in the Arabic Presentation Forms area of
+ * Unicode is presumed to already be shaped and ordered for display, and so
+ * will not cause this method to return true.
+ *
+ * @param text the text containing the characters to test
+ * @param start the start of the range of characters to test
+ * @param limit the limit of the range of characters to test
+ *
+ * @return true if the range of characters requires bidi analysis
+ */
+
+public static boolean requiresBidi(char[] text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Reorder the objects in the array into visual order based on their levels.
+ * This is a utility method to use when you have a collection of objects
+ * representing runs of text in logical order, each run containing text at a
+ * single level. The elements at <code>index</code> from
+ * <code>objectStart</code> up to <code>objectStart + count</code> in the
+ * objects array will be reordered into visual order assuming
+ * each run of text has the level indicated by the corresponding element in
+ * the levels array (at <code>index - objectStart + levelStart</code>).
+ *
+ * @param levels an array representing the bidi level of each object
+ * @param levelStart the start position in the levels array
+ * @param objects the array of objects to be reordered into visual order
+ * @param objectStart the start position in the objects array
+ * @param count the number of objects to reorder
+ */
+
+public static void reorderVisually(byte[] levels, int levelStart, java.lang.Object[] objects, int objectStart, int count) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Take a <code>Bidi</code> object containing the reordering
+ * information for a piece of text (one or more paragraphs) set by
+ * <code>setPara()</code> or for a line of text set by <code>setLine()</code>
+ * and return a string containing the reordered text.
+ *
+ * <p>The text may have been aliased (only a reference was stored
+ * without copying the contents), thus it must not have been modified
+ * since the <code>setPara()</code> call.
+ *
+ * This method preserves the integrity of characters with multiple
+ * code units and (optionally) combining characters.
+ * Characters in RTL runs can be replaced by mirror-image characters
+ * in the returned string. Note that "real" mirroring has to be done in a
+ * rendering engine by glyph selection and that for many "mirrored"
+ * characters there are no Unicode characters as mirror-image equivalents.
+ * There are also options to insert or remove Bidi control
+ * characters; see the descriptions of the return value and the
+ * <code>options</code> parameter, and of the option bit flags.
+ *
+ * @param options A bit set of options for the reordering that control
+ *                how the reordered text is written.
+ *                The options include mirroring the characters on a code
+ *                point basis and inserting LRM characters, which is used
+ *                especially for transforming visually stored text
+ *                to logically stored text (although this is still an
+ *                imperfect implementation of an "inverse Bidi" algorithm
+ *                because it uses the "forward Bidi" algorithm at its core).
+ *                The available options are:
+ *                <code>DO_MIRRORING</code>,
+ *                <code>INSERT_LRM_FOR_NUMERIC</code>,
+ *                <code>KEEP_BASE_COMBINING</code>,
+ *                <code>OUTPUT_REVERSE</code>,
+ *                <code>REMOVE_BIDI_CONTROLS</code>,
+ *                <code>STREAMING</code>
+ *
+ * @return The reordered text.
+ *         If the <code>INSERT_LRM_FOR_NUMERIC</code> option is set, then
+ *         the length of the returned string could be as large as
+ *         <code>getLength()+2*countRuns()</code>.<br>
+ *         If the <code>REMOVE_BIDI_CONTROLS</code> option is set, then the
+ *         length of the returned string may be less than
+ *         <code>getLength()</code>.<br>
+ *         If none of these options is set, then the length of the returned
+ *         string will be exactly <code>getProcessedLength()</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #DO_MIRRORING
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #KEEP_BASE_COMBINING
+ * @see #OUTPUT_REVERSE
+ * @see #REMOVE_BIDI_CONTROLS
+ * @see #OPTION_STREAMING
+ * @see #getProcessedLength
+ */
+
+public java.lang.String writeReordered(int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Reverse a Right-To-Left run of Unicode text.
+ *
+ * This method preserves the integrity of characters with multiple
+ * code units and (optionally) combining characters.
+ * Characters can be replaced by mirror-image characters
+ * in the destination buffer. Note that "real" mirroring has
+ * to be done in a rendering engine by glyph selection
+ * and that for many "mirrored" characters there are no
+ * Unicode characters as mirror-image equivalents.
+ * There are also options to insert or remove Bidi control
+ * characters.
+ *
+ * This method is the implementation for reversing RTL runs as part
+ * of <code>writeReordered()</code>. For detailed descriptions
+ * of the parameters, see there.
+ * Since no Bidi controls are inserted here, the output string length
+ * will never exceed <code>src.length()</code>.
+ *
+ * @see #writeReordered
+ *
+ * @param src The RTL run text.
+ *
+ * @param options A bit set of options for the reordering that control
+ *                how the reordered text is written.
+ *                See the <code>options</code> parameter in <code>writeReordered()</code>.
+ *
+ * @return The reordered text.
+ *         If the <code>REMOVE_BIDI_CONTROLS</code> option
+ *         is set, then the length of the returned string may be less than
+ *         <code>src.length()</code>. If this option is not set,
+ *         then the length of the returned string will be exactly
+ *         <code>src.length()</code>.
+ *
+ * @throws java.lang.IllegalArgumentException if <code>src</code> is null.
+ */
+
+public static java.lang.String writeReverse(java.lang.String src, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present, the base
+ * direction is left-to-right.
+ */
+
+public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = 126; // 0x7e
+
+/**
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present, the base
+ * direction is right-to-left.
+ */
+
+public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = 127; // 0x7f
+
+/**
+ * Constant indicating base direction is left-to-right.
+ */
+
+public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+
+/**
+ * Constant indicating base direction is right-to-left.
+ */
+
+public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+
+/**
+ * option bit for writeReordered():
+ * replace characters with the "mirrored" property in RTL runs
+ * by their mirror-image mappings
+ *
+ * @see #writeReordered
+ */
+
+public static final short DO_MIRRORING = 2; // 0x2
+
+/**
+ * option bit for writeReordered():
+ * surround the run with LRMs if necessary;
+ * this is part of the approximate "inverse Bidi" algorithm
+ *
+ * <p>This option does not imply corresponding adjustment of the index
+ * mappings.
+ *
+ * @see #setInverse
+ * @see #writeReordered
+ */
+
+public static final short INSERT_LRM_FOR_NUMERIC = 4; // 0x4
+
+/**
+ * option bit for writeReordered():
+ * keep combining characters after their base characters in RTL runs
+ *
+ * @see #writeReordered
+ */
+
+public static final short KEEP_BASE_COMBINING = 1; // 0x1
+
+/** Paragraph level setting<p>
+ *
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present,
+ * then set the paragraph level to 0 (left-to-right).<p>
+ *
+ * If this value is used in conjunction with reordering modes
+ * <code>REORDER_INVERSE_LIKE_DIRECT</code> or
+ * <code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the text to reorder
+ * is assumed to be visual LTR, and the text after reordering is required
+ * to be the corresponding logical string with appropriate contextual
+ * direction. The direction of the result string will be RTL if either
+ * the rightmost or leftmost strong character of the source text is RTL
+ * or Arabic Letter, the direction will be LTR otherwise.<p>
+ *
+ * If reordering option <code>OPTION_INSERT_MARKS</code> is set, an RLM may
+ * be added at the beginning of the result string to ensure round trip
+ * (that the result string, when reordered back to visual, will produce
+ * the original source text).
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public static final byte LEVEL_DEFAULT_LTR = 126; // 0x7e
+
+/** Paragraph level setting<p>
+ *
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present,
+ * then set the paragraph level to 1 (right-to-left).<p>
+ *
+ * If this value is used in conjunction with reordering modes
+ * <code>REORDER_INVERSE_LIKE_DIRECT</code> or
+ * <code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the text to reorder
+ * is assumed to be visual LTR, and the text after reordering is required
+ * to be the corresponding logical string with appropriate contextual
+ * direction. The direction of the result string will be RTL if either
+ * the rightmost or leftmost strong character of the source text is RTL
+ * or Arabic Letter, or if the text contains no strong character;
+ * the direction will be LTR otherwise.<p>
+ *
+ * If reordering option <code>OPTION_INSERT_MARKS</code> is set, an RLM may
+ * be added at the beginning of the result string to ensure round trip
+ * (that the result string, when reordered back to visual, will produce
+ * the original source text).
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public static final byte LEVEL_DEFAULT_RTL = 127; // 0x7f
+
+/**
+ * Bit flag for level input.
+ * Overrides directional properties.
+ */
+
+public static final byte LEVEL_OVERRIDE = -128; // 0xffffff80
+
+/**
+ * Left-to-right text.
+ * <ul>
+ * <li>As return value for <code>getDirection()</code>, it means
+ *     that the source string contains no right-to-left characters, or
+ *     that the source string is empty and the paragraph level is even.
+ * <li>As return value for <code>getBaseDirection()</code>, it
+ *     means that the first strong character of the source string has
+ *     a left-to-right direction.
+ * </ul>
+ */
+
+public static final byte LTR = 0; // 0x0
+
+/**
+ * Special value which can be returned by the mapping methods when a
+ * logical index has no corresponding visual index or vice-versa. This may
+ * happen for the logical-to-visual mapping of a Bidi control when option
+ * <code>OPTION_REMOVE_CONTROLS</code> is
+ * specified. This can also happen for the visual-to-logical mapping of a
+ * Bidi mark (LRM or RLM) inserted by option
+ * <code>OPTION_INSERT_MARKS</code>.
+ * @see #getVisualIndex
+ * @see #getVisualMap
+ * @see #getLogicalIndex
+ * @see #getLogicalMap
+ * @see #OPTION_INSERT_MARKS
+ * @see #OPTION_REMOVE_CONTROLS
+ */
+
+public static final int MAP_NOWHERE = -1; // 0xffffffff
+
+/**
+ * Maximum explicit embedding level.
+ * Same as the max_depth value in the
+ * <a href="http://www.unicode.org/reports/tr9/#BD2">Unicode Bidirectional Algorithm</a>.
+ * (The maximum resolved level can be up to <code>MAX_EXPLICIT_LEVEL+1</code>).
+ */
+
+public static final byte MAX_EXPLICIT_LEVEL = 125; // 0x7d
+
+/**
+ * Mixed-directional text.
+ * <p>As return value for <code>getDirection()</code>, it means
+ *    that the source string contains both left-to-right and
+ *    right-to-left characters.
+ */
+
+public static final byte MIXED = 2; // 0x2
+
+/**
+ * No strongly directional text.
+ * <p>As return value for <code>getBaseDirection()</code>, it means
+ *    that the source string is missing or empty, or contains neither
+ *    left-to-right nor right-to-left characters.
+ */
+
+public static final byte NEUTRAL = 3; // 0x3
+
+/**
+ * Option value for <code>setReorderingOptions</code>:
+ * disable all the options which can be set with this method
+ * @see #setReorderingOptions
+ */
+
+public static final int OPTION_DEFAULT = 0; // 0x0
+
+/**
+ * Option bit for <code>setReorderingOptions</code>:
+ * insert Bidi marks (LRM or RLM) when needed to ensure correct result of
+ * a reordering to a Logical order
+ *
+ * <p>This option must be set or reset before calling
+ * <code>setPara</code>.
+ *
+ * <p>This option is significant only with reordering modes which generate
+ * a result with Logical order, specifically.
+ * <ul>
+ *   <li><code>REORDER_RUNS_ONLY</code></li>
+ *   <li><code>REORDER_INVERSE_NUMBERS_AS_L</code></li>
+ *   <li><code>REORDER_INVERSE_LIKE_DIRECT</code></li>
+ *   <li><code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code></li>
+ * </ul>
+ *
+ * <p>If this option is set in conjunction with reordering mode
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code> or with calling
+ * <code>setInverse(true)</code>, it implies option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to method
+ * <code>writeReordered()</code>.
+ *
+ * <p>For other reordering modes, a minimum number of LRM or RLM characters
+ * will be added to the source text after reordering it so as to ensure
+ * round trip, i.e. when applying the inverse reordering mode on the
+ * resulting logical text with removal of Bidi marks
+ * (option <code>OPTION_REMOVE_CONTROLS</code> set before calling
+ * <code>setPara()</code> or option
+ * <code>REMOVE_BIDI_CONTROLS</code> in
+ * <code>writeReordered</code>), the result will be identical to the
+ * source text in the first transformation.
+ *
+ * <p>This option will be ignored if specified together with option
+ * <code>OPTION_REMOVE_CONTROLS</code>. It inhibits option
+ * <code>REMOVE_BIDI_CONTROLS</code> in calls to method
+ * <code>writeReordered()</code> and it implies option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to method
+ * <code>writeReordered()</code> if the reordering mode is
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>.
+ *
+ * @see #setReorderingMode
+ * @see #setReorderingOptions
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #REMOVE_BIDI_CONTROLS
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #REORDER_RUNS_ONLY
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public static final int OPTION_INSERT_MARKS = 1; // 0x1
+
+/**
+ * Option bit for <code>setReorderingOptions</code>:
+ * remove Bidi control characters
+ *
+ * <p>This option must be set or reset before calling
+ * <code>setPara</code>.
+ *
+ * <p>This option nullifies option
+ * <code>OPTION_INSERT_MARKS</code>. It inhibits option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to method
+ * <code>writeReordered()</code> and it implies option
+ * <code>REMOVE_BIDI_CONTROLS</code> in calls to that method.
+ *
+ * @see #setReorderingMode
+ * @see #setReorderingOptions
+ * @see #OPTION_INSERT_MARKS
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #REMOVE_BIDI_CONTROLS
+ */
+
+public static final int OPTION_REMOVE_CONTROLS = 2; // 0x2
+
+/**
+ * Option bit for <code>setReorderingOptions</code>:
+ * process the output as part of a stream to be continued
+ *
+ * <p>This option must be set or reset before calling
+ * <code>setPara</code>.
+ *
+ * <p>This option specifies that the caller is interested in processing
+ * large text object in parts. The results of the successive calls are
+ * expected to be concatenated by the caller. Only the call for the last
+ * part will have this option bit off.
+ *
+ * <p>When this option bit is on, <code>setPara()</code> may process
+ * less than the full source text in order to truncate the text at a
+ * meaningful boundary. The caller should call
+ * <code>getProcessedLength()</code> immediately after calling
+ * <code>setPara()</code> in order to determine how much of the source
+ * text has been processed. Source text beyond that length should be
+ * resubmitted in following calls to <code>setPara</code>. The
+ * processed length may be less than the length of the source text if a
+ * character preceding the last character of the source text constitutes a
+ * reasonable boundary (like a block separator) for text to be continued.<br>
+ * If the last character of the source text constitutes a reasonable
+ * boundary, the whole text will be processed at once.<br>
+ * If nowhere in the source text there exists
+ * such a reasonable boundary, the processed length will be zero.<br>
+ * The caller should check for such an occurrence and do one of the following:
+ * <ul><li>submit a larger amount of text with a better chance to include
+ *         a reasonable boundary.</li>
+ *     <li>resubmit the same text after turning off option
+ *         <code>OPTION_STREAMING</code>.</li></ul>
+ * In all cases, this option should be turned off before processing the last
+ * part of the text.
+ *
+ * <p>When the <code>OPTION_STREAMING</code> option is used, it is
+ * recommended to call <code>orderParagraphsLTR(true)</code> before calling
+ * <code>setPara()</code> so that later paragraphs may be concatenated to
+ * previous paragraphs on the right.
+ *
+ * @see #setReorderingMode
+ * @see #setReorderingOptions
+ * @see #getProcessedLength
+ */
+
+public static final int OPTION_STREAMING = 4; // 0x4
+
+/**
+ * option bit for writeReordered():
+ * write the output in reverse order
+ *
+ * <p>This has the same effect as calling <code>writeReordered()</code>
+ * first without this option, and then calling
+ * <code>writeReverse()</code> without mirroring.
+ * Doing this in the same step is faster and avoids a temporary buffer.
+ * An example for using this option is output to a character terminal that
+ * is designed for RTL scripts and stores text in reverse order.
+ *
+ * @see #writeReordered
+ */
+
+public static final short OUTPUT_REVERSE = 16; // 0x10
+
+/**
+ * option bit for writeReordered():
+ * remove Bidi control characters
+ * (this does not affect INSERT_LRM_FOR_NUMERIC)
+ *
+ * <p>This option does not imply corresponding adjustment of the index
+ * mappings.
+ *
+ * @see #writeReordered
+ * @see #INSERT_LRM_FOR_NUMERIC
+ */
+
+public static final short REMOVE_BIDI_CONTROLS = 8; // 0x8
+
+/** Reordering mode: Regular Logical to Visual Bidi algorithm according to Unicode.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_DEFAULT = 0; // 0x0
+
+/** Reordering mode: Logical to Visual algorithm grouping numbers with
+ * adjacent R characters (reversible algorithm).
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_GROUP_NUMBERS_WITH_R = 2; // 0x2
+
+/** Reordering mode: Inverse Bidi (Visual to Logical) algorithm for the
+ * <code>REORDER_NUMBERS_SPECIAL</code> Bidi algorithm.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_INVERSE_FOR_NUMBERS_SPECIAL = 6; // 0x6
+
+/** Reordering mode: Visual to Logical algorithm equivalent to the regular
+ * Logical to Visual algorithm.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_INVERSE_LIKE_DIRECT = 5; // 0x5
+
+/** Reordering mode: Visual to Logical algorithm which handles numbers
+ * like L (same algorithm as selected by <code>setInverse(true)</code>.
+ * @see #setInverse
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_INVERSE_NUMBERS_AS_L = 4; // 0x4
+
+/** Reordering mode: Logical to Visual algorithm which handles numbers in
+ * a way which mimicks the behavior of Windows XP.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_NUMBERS_SPECIAL = 1; // 0x1
+
+/** Reordering mode: Reorder runs only to transform a Logical LTR string
+ * to the logical RTL string with the same display, or vice-versa.<br>
+ * If this mode is set together with option
+ * <code>OPTION_INSERT_MARKS</code>, some Bidi controls in the source
+ * text may be removed and other controls may be added to produce the
+ * minimum combination which has the required display.
+ * @see #OPTION_INSERT_MARKS
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_RUNS_ONLY = 3; // 0x3
+
+/**
+ * Right-to-left text.
+ * <ul>
+ * <li>As return value for <code>getDirection()</code>, it means
+ *     that the source string contains no left-to-right characters, or
+ *     that the source string is empty and the paragraph level is odd.
+ * <li>As return value for <code>getBaseDirection()</code>, it
+ *     means that the first strong character of the source string has
+ *     a right-to-left direction.
+ * </ul>
+ */
+
+public static final byte RTL = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BidiClassifier.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BidiClassifier.java
new file mode 100644
index 0000000..b8fa07f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BidiClassifier.java
@@ -0,0 +1,82 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2000-2009, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+/* Written by Simon Montagu, Matitiahu Allouche
+ * (ported from C code written by Markus W. Scherer)
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * Overrides default Bidi class values with custom ones.
+ *
+ * <p>The override mechanism requires to define a subclass of
+ * <code>BidiClassifier</code> which overrides the <code>classifier</code>
+ * method to assign customized Bidi classes.</p>
+ *
+ * <p>This may be useful for assigning Bidi classes to PUA characters, or
+ * for special application needs. For instance, an application may want to
+ * handle all spaces like L or R characters (according to the base direction)
+ * when creating the visual ordering of logical lines which are part of a report
+ * organized in columns: there should not be interaction between adjacent
+ * cells.</p>
+ *
+ * <p>To start using this customized
+ * classifier with a Bidi object, it must be specified by calling the
+ * <code>Bidi.setCustomClassifier</code> method; after that, the method
+ * <code>classify</code> of the custom <code>BidiClassifier</code> will be
+ * called by the UBA implementation any time the class of a character is
+ * to be determined.</p>
+ *
+ * @see android.icu.text.Bidi#setCustomClassifier
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BidiClassifier {
+
+/**
+ * @param context Context for this classifier instance.
+ *                May be null.
+ */
+
+public BidiClassifier(java.lang.Object context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets classifier context, which can be used either by a caller or
+ * callee for various purposes.
+ *
+ * @param context Context for this classifier instance.
+ *                May be null.
+ */
+
+public void setContext(java.lang.Object context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current classifier context.
+ */
+
+public java.lang.Object getContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets customized Bidi class for the code point <code>c</code>.
+ * <p>
+ * Default implementation, to be overridden.
+ *
+ * @param c Code point to be classified.
+ * @return An integer representing directional property / Bidi class for the
+ *         given code point <code>c</code>, or UCharacter.getIntPropertyMaxValue(UProperty.BIDI_CLASS)+1
+ *         to signify that there is no need to override the standard Bidi class for
+ *         the given code point.
+ */
+
+public int classify(int c) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BidiRun.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BidiRun.java
new file mode 100644
index 0000000..3168b69
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BidiRun.java
@@ -0,0 +1,92 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 2001-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+/* Written by Simon Montagu, Matitiahu Allouche
+ * (ported from C code written by Markus W. Scherer)
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * A BidiRun represents a sequence of characters at the same embedding level.
+ * The Bidi algorithm decomposes a piece of text into sequences of characters
+ * at the same embedding level, each such sequence is called a "run".
+ *
+ * <p>A BidiRun represents such a run by storing its essential properties,
+ * but does not duplicate the characters which form the run.
+ *
+ * <p>The &quot;limit&quot; of the run is the position just after the
+ * last character, i.e., one more than that position.
+ *
+ * <p>This class has no public constructor, and its members cannot be
+ * modified by users.
+ *
+ * @see android.icu.text.Bidi
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BidiRun {
+
+BidiRun() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the first logical position of the run in the source text
+ */
+
+public int getStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get position of one character after the end of the run in the source text
+ */
+
+public int getLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get length of run
+ */
+
+public int getLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get level of run
+ */
+
+public byte getEmbeddingLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Check if run level is odd
+ * @return true if the embedding level of this run is odd, i.e. it is a
+ *  right-to-left run.
+ */
+
+public boolean isOddRun() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Check if run level is even
+ * @return true if the embedding level of this run is even, i.e. it is a
+ *  left-to-right run.
+ */
+
+public boolean isEvenRun() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get direction of run
+ */
+
+public byte getDirection() { throw new RuntimeException("Stub!"); }
+
+/**
+ * String to display run
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BreakIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BreakIterator.java
new file mode 100644
index 0000000..cc71cff
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/BreakIterator.java
@@ -0,0 +1,705 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import java.text.CharacterIterator;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.BreakIterator}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>A class that locates boundaries in text.  This class defines a protocol for
+ * objects that break up a piece of natural-language text according to a set
+ * of criteria.  Instances or subclasses of BreakIterator can be provided, for
+ * example, to break a piece of text into words, sentences, or logical characters
+ * according to the conventions of some language or group of languages.
+ *
+ * We provide five built-in types of BreakIterator:
+ * <ul><li>getTitleInstance() returns a BreakIterator that locates boundaries
+ * between title breaks.
+ * <li>getSentenceInstance() returns a BreakIterator that locates boundaries
+ * between sentences.  This is useful for triple-click selection, for example.
+ * <li>getWordInstance() returns a BreakIterator that locates boundaries between
+ * words.  This is useful for double-click selection or "find whole words" searches.
+ * This type of BreakIterator makes sure there is a boundary position at the
+ * beginning and end of each legal word.  (Numbers count as words, too.)  Whitespace
+ * and punctuation are kept separate from real words.
+ * <li>getLineInstance() returns a BreakIterator that locates positions where it is
+ * legal for a text editor to wrap lines.  This is similar to word breaking, but
+ * not the same: punctuation and whitespace are generally kept with words (you don't
+ * want a line to start with whitespace, for example), and some special characters
+ * can force a position to be considered a line-break position or prevent a position
+ * from being a line-break position.
+ * <li>getCharacterInstance() returns a BreakIterator that locates boundaries between
+ * logical characters.  Because of the structure of the Unicode encoding, a logical
+ * character may be stored internally as more than one Unicode code point.  (A with an
+ * umlaut may be stored as an a followed by a separate combining umlaut character,
+ * for example, but the user still thinks of it as one character.)  This iterator allows
+ * various processes (especially text editors) to treat as characters the units of text
+ * that a user would think of as characters, rather than the units of text that the
+ * computer sees as "characters".</ul>
+ * The text boundary positions are found according to the rules
+ * described in Unicode Standard Annex #29, Text Boundaries, and
+ * Unicode Standard Annex #14, Line Breaking Properties.  These
+ * are available at http://www.unicode.org/reports/tr14/ and
+ * http://www.unicode.org/reports/tr29/.
+ * <p>
+ * BreakIterator's interface follows an "iterator" model (hence the name), meaning it
+ * has a concept of a "current position" and methods like first(), last(), next(),
+ * and previous() that update the current position.  All BreakIterators uphold the
+ * following invariants:
+ * <ul><li>The beginning and end of the text are always treated as boundary positions.
+ * <li>The current position of the iterator is always a boundary position (random-
+ * access methods move the iterator to the nearest boundary position before or
+ * after the specified position, not _to_ the specified position).
+ * <li>DONE is used as a flag to indicate when iteration has stopped.  DONE is only
+ * returned when the current position is the end of the text and the user calls next(),
+ * or when the current position is the beginning of the text and the user calls
+ * previous().
+ * <li>Break positions are numbered by the positions of the characters that follow
+ * them.  Thus, under normal circumstances, the position before the first character
+ * is 0, the position after the first character is 1, and the position after the
+ * last character is 1 plus the length of the string.
+ * <li>The client can change the position of an iterator, or the text it analyzes,
+ * at will, but cannot change the behavior.  If the user wants different behavior, he
+ * must instantiate a new iterator.</ul>
+ *
+ * BreakIterator accesses the text it analyzes through a CharacterIterator, which makes
+ * it possible to use BreakIterator to analyze text in any text-storage vehicle that
+ * provides a CharacterIterator interface.
+ *
+ * <b>Note:</b>  Some types of BreakIterator can take a long time to create, and
+ * instances of BreakIterator are not currently cached by the system.  For
+ * optimal performance, keep instances of BreakIterator around as long as makes
+ * sense.  For example, when word-wrapping a document, don't create and destroy a
+ * new BreakIterator for each line.  Create one break iterator for the whole document
+ * (or whatever stretch of text you're wrapping) and use it to do the whole job of
+ * wrapping the text.
+ *
+ * <P>
+ * <strong>Examples</strong>:<P>
+ * Creating and using text boundaries
+ * <blockquote>
+ * <pre>
+ * public static void main(String args[]) {
+ *      if (args.length == 1) {
+ *          String stringToExamine = args[0];
+ *          //print each word in order
+ *          BreakIterator boundary = BreakIterator.getWordInstance();
+ *          boundary.setText(stringToExamine);
+ *          printEachForward(boundary, stringToExamine);
+ *          //print each sentence in reverse order
+ *          boundary = BreakIterator.getSentenceInstance(Locale.US);
+ *          boundary.setText(stringToExamine);
+ *          printEachBackward(boundary, stringToExamine);
+ *          printFirst(boundary, stringToExamine);
+ *          printLast(boundary, stringToExamine);
+ *      }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print each element in order
+ * <blockquote>
+ * <pre>
+ * public static void printEachForward(BreakIterator boundary, String source) {
+ *     int start = boundary.first();
+ *     for (int end = boundary.next();
+ *          end != BreakIterator.DONE;
+ *          start = end, end = boundary.next()) {
+ *          System.out.println(source.substring(start,end));
+ *     }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print each element in reverse order
+ * <blockquote>
+ * <pre>
+ * public static void printEachBackward(BreakIterator boundary, String source) {
+ *     int end = boundary.last();
+ *     for (int start = boundary.previous();
+ *          start != BreakIterator.DONE;
+ *          end = start, start = boundary.previous()) {
+ *         System.out.println(source.substring(start,end));
+ *     }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print first element
+ * <blockquote>
+ * <pre>
+ * public static void printFirst(BreakIterator boundary, String source) {
+ *     int start = boundary.first();
+ *     int end = boundary.next();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print last element
+ * <blockquote>
+ * <pre>
+ * public static void printLast(BreakIterator boundary, String source) {
+ *     int end = boundary.last();
+ *     int start = boundary.previous();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print the element at a specified position
+ * <blockquote>
+ * <pre>
+ * public static void printAt(BreakIterator boundary, int pos, String source) {
+ *     int end = boundary.following(pos);
+ *     int start = boundary.previous();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Find the next word
+ * <blockquote>
+ * <pre>
+ * public static int nextWordStartAfter(int pos, String text) {
+ *     BreakIterator wb = BreakIterator.getWordInstance();
+ *     wb.setText(text);
+ *     int wordStart = wb.following(pos);
+ *     for (;;) {
+ *         int wordLimit = wb.next();
+ *         if (wordLimit == BreakIterator.DONE) {
+ *             return BreakIterator.DONE;
+ *         }
+ *         int wordStatus = wb.getRuleStatus();
+ *         if (wordStatus != BreakIterator.WORD_NONE) {
+ *             return wordStart;
+ *         }
+ *         wordStart = wordLimit;
+ *      }
+ * }
+ * </pre>
+ * The iterator returned by {@link #getWordInstance} is unique in that
+ * the break positions it returns don't represent both the start and end of the
+ * thing being iterated over.  That is, a sentence-break iterator returns breaks
+ * that each represent the end of one sentence and the beginning of the next.
+ * With the word-break iterator, the characters between two boundaries might be a
+ * word, or they might be the punctuation or whitespace between two words.  The
+ * above code uses {@link #getRuleStatus} to identify and ignore boundaries associated
+ * with punctuation or other non-word characters.
+ * </blockquote>
+ *
+ * @see java.text.CharacterIterator
+ *
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class BreakIterator implements java.lang.Cloneable {
+
+/**
+ * Default constructor.  There is no state that is carried by this abstract
+ * base class.
+ */
+
+protected BreakIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone method.  Creates another BreakIterator with the same behavior and
+ * current state as this one.
+ * @return The clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the iterator to the first boundary position.  This is always the beginning
+ * index of the text this iterator iterates over.  For example, if
+ * the iterator iterates over a whole string, this function will
+ * always return 0.
+ * @return The character offset of the beginning of the stretch of text
+ * being broken.
+ */
+
+public abstract int first();
+
+/**
+ * Set the iterator to the last boundary position.  This is always the "past-the-end"
+ * index of the text this iterator iterates over.  For example, if the
+ * iterator iterates over a whole string (call it "text"), this function
+ * will always return text.length().
+ * @return The character offset of the end of the stretch of text
+ * being broken.
+ */
+
+public abstract int last();
+
+/**
+ * Move the iterator by the specified number of steps in the text.
+ * A positive number moves the iterator forward; a negative number
+ * moves the iterator backwards. If this causes the iterator
+ * to move off either end of the text, this function returns DONE;
+ * otherwise, this function returns the position of the appropriate
+ * boundary.  Calling this function is equivalent to calling next() or
+ * previous() n times.
+ * @param n The number of boundaries to advance over (if positive, moves
+ * forward; if negative, moves backwards).
+ * @return The position of the boundary n boundaries from the current
+ * iteration position, or DONE if moving n boundaries causes the iterator
+ * to advance off either end of the text.
+ */
+
+public abstract int next(int n);
+
+/**
+ * Advances the iterator forward one boundary.  The current iteration
+ * position is updated to point to the next boundary position after the
+ * current position, and this is also the value that is returned.  If
+ * the current position is equal to the value returned by last(), or to
+ * DONE, this function returns DONE and sets the current position to
+ * DONE.
+ * @return The position of the first boundary position following the
+ * iteration position.
+ */
+
+public abstract int next();
+
+/**
+ * Move the iterator backward one boundary.  The current iteration
+ * position is updated to point to the last boundary position before
+ * the current position, and this is also the value that is returned.  If
+ * the current position is equal to the value returned by first(), or to
+ * DONE, this function returns DONE and sets the current position to
+ * DONE.
+ * @return The position of the last boundary position preceding the
+ * iteration position.
+ */
+
+public abstract int previous();
+
+/**
+ * Sets the iterator's current iteration position to be the first
+ * boundary position following the specified position.  (Whether the
+ * specified position is itself a boundary position or not doesn't
+ * matter-- this function always moves the iteration position to the
+ * first boundary after the specified position.)  If the specified
+ * position is the past-the-end position, returns DONE.
+ * @param offset The character position to start searching from.
+ * @return The position of the first boundary position following
+ * "offset" (whether or not "offset" itself is a boundary position),
+ * or DONE if "offset" is the past-the-end offset.
+ */
+
+public abstract int following(int offset);
+
+/**
+ * Sets the iterator's current iteration position to be the last
+ * boundary position preceding the specified position.  (Whether the
+ * specified position is itself a boundary position or not doesn't
+ * matter-- this function always moves the iteration position to the
+ * last boundary before the specified position.)  If the specified
+ * position is the starting position, returns DONE.
+ * @param offset The character position to start searching from.
+ * @return The position of the last boundary position preceding
+ * "offset" (whether of not "offset" itself is a boundary position),
+ * or DONE if "offset" is the starting offset of the iterator.
+ */
+
+public int preceding(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the specified position is a boundary position.  If the
+ * function returns true, the current iteration position is set to the
+ * specified position; if the function returns false, the current
+ * iteration position is set as though following() had been called.
+ * @param offset the offset to check.
+ * @return True if "offset" is a boundary position.
+ */
+
+public boolean isBoundary(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the iterator's current position.
+ * @return The iterator's current position.
+ */
+
+public abstract int current();
+
+/**
+ * For RuleBasedBreakIterators, return the status tag from the
+ * break rule that determined the boundary at the current iteration position.
+ * <p>
+ * For break iterator types that do not support a rule status,
+ * a default value of 0 is returned.
+ * <p>
+ * @return The status from the break rule that determined the boundary
+ * at the current iteration position.
+ */
+
+public int getRuleStatus() { throw new RuntimeException("Stub!"); }
+
+/**
+ * For RuleBasedBreakIterators, get the status (tag) values from the break rule(s)
+ * that determined the the boundary at the current iteration position.
+ * <p>
+ * For break iterator types that do not support rule status,
+ * no values are returned.
+ * <p>
+ * If the size  of the output array is insufficient to hold the data,
+ *  the output will be truncated to the available length.  No exception
+ *  will be thrown.
+ *
+ * @param fillInArray an array to be filled in with the status values.
+ * @return          The number of rule status values from rules that determined
+ *                  the the boundary at the current iteration position.
+ *                  In the event that the array is too small, the return value
+ *                  is the total number of status values that were available,
+ *                  not the reduced number that were actually returned.
+ */
+
+public int getRuleStatusVec(int[] fillInArray) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a CharacterIterator over the text being analyzed.
+ * <p>
+ * <b><i>Caution:</i></b>The state of the returned CharacterIterator
+ * must not be modified in any way while the BreakIterator is still in use.
+ * Doing so will lead to undefined behavior of the BreakIterator.
+ * Clone the returned CharacterIterator first and work with that.
+ * <p>
+ * The returned CharacterIterator is a reference
+ * to the <b>actual iterator being used</b> by the BreakIterator.
+ * No guarantees are made about the current position
+ * of this iterator when it is returned; it may differ from the
+ * BreakIterators current position.  If you need to move that
+ * position to examine the text, clone this function's return value first.
+ *
+ * @return A CharacterIterator over the text being analyzed.
+ */
+
+public abstract java.text.CharacterIterator getText();
+
+/**
+ * Sets the iterator to analyze a new piece of text.  The new
+ * piece of text is passed in as a String, and the current
+ * iteration position is reset to the beginning of the string.
+ * (The old text is dropped.)
+ * @param newText A String containing the text to analyze with
+ * this BreakIterator.
+ */
+
+public void setText(java.lang.String newText) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the iterator to analyze a new piece of text.  The new
+ * piece of text is passed in as a CharSequence, and the current
+ * iteration position is reset to the beginning of the text.
+ * (The old text is dropped.)
+ * <p>
+ * The text underlying the CharSequence must not be be modified while
+ * the BreakIterator holds a references to it. (As could possibly occur
+ * with a StringBuilder, for example).
+ * @param newText A CharSequence containing the text to analyze with
+ * this BreakIterator.
+ */
+
+public void setText(java.lang.CharSequence newText) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the iterator to analyze a new piece of text. This function resets
+ * the current iteration position to the beginning of the text.
+ * (The old iterator is dropped.)
+ * <p>
+ * <b><i>Caution:</i></b> The supplied CharacterIterator is used
+ * directly by the BreakIterator, and must not be altered in any
+ * way by code outside of the BreakIterator.
+ * Doing so will lead to undefined behavior of the BreakIterator.
+ *
+ * @param newText A CharacterIterator referring to the text
+ * to analyze with this BreakIterator (the iterator's current
+ * position is ignored, but its other state is significant).
+ */
+
+public abstract void setText(java.text.CharacterIterator newText);
+
+/**
+ * Returns a new instance of BreakIterator that locates word boundaries.
+ * This function assumes that the text being analyzed is in the default
+ * locale's language.
+ * @return An instance of BreakIterator that locates word boundaries.
+ */
+
+public static android.icu.text.BreakIterator getWordInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates word boundaries.
+ * @param where A locale specifying the language of the text to be
+ * analyzed.
+ * @return An instance of BreakIterator that locates word boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getWordInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates word boundaries.
+ * @param where A locale specifying the language of the text to be
+ * analyzed.
+ * @return An instance of BreakIterator that locates word boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getWordInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates legal line-
+ * wrapping positions.  This function assumes the text being broken
+ * is in the default locale's language.
+ * @return A new instance of BreakIterator that locates legal
+ * line-wrapping positions.
+ */
+
+public static android.icu.text.BreakIterator getLineInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates legal line-
+ * wrapping positions.
+ * @param where A Locale specifying the language of the text being broken.
+ * @return A new instance of BreakIterator that locates legal
+ * line-wrapping positions.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getLineInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates legal line-
+ * wrapping positions.
+ * @param where A Locale specifying the language of the text being broken.
+ * @return A new instance of BreakIterator that locates legal
+ * line-wrapping positions.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getLineInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates logical-character
+ * boundaries.  This function assumes that the text being analyzed is
+ * in the default locale's language.
+ * @return A new instance of BreakIterator that locates logical-character
+ * boundaries.
+ */
+
+public static android.icu.text.BreakIterator getCharacterInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getCharacterInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getCharacterInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates sentence boundaries.
+ * This function assumes the text being analyzed is in the default locale's
+ * language.
+ * @return A new instance of BreakIterator that locates sentence boundaries.
+ */
+
+public static android.icu.text.BreakIterator getSentenceInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates sentence boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates sentence boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getSentenceInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates sentence boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates sentence boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getSentenceInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates title boundaries.
+ * This function assumes the text being analyzed is in the default locale's
+ * language. The iterator returned locates title boundaries as described for
+ * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
+ * please use a word boundary iterator. {@link #getWordInstance}
+ * @return A new instance of BreakIterator that locates title boundaries.
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated
+public static android.icu.text.BreakIterator getTitleInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates title boundaries.
+ * The iterator returned locates title boundaries as described for
+ * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
+ * please use Word Boundary iterator.{@link #getWordInstance}
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates title boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated
+public static android.icu.text.BreakIterator getTitleInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates title boundaries.
+ * The iterator returned locates title boundaries as described for
+ * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
+ * please use Word Boundary iterator.{@link #getWordInstance}
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates title boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated
+public static android.icu.text.BreakIterator getTitleInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of locales for which BreakIterators can be used.
+ * @return An array of Locales.  All of the locales in the array can
+ * be used when creating a BreakIterator.
+ */
+
+public static synchronized java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * DONE is returned by previous() and next() after all valid
+ * boundaries have been returned.
+ */
+
+public static final int DONE = -1; // 0xffffffff
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_CHARACTER = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_LINE = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_SENTENCE = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong>
+ * @see #getTitleInstance
+ * @see #getWordInstance
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated public static final int KIND_TITLE = 4; // 0x4
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_WORD = 1; // 0x1
+
+/**
+ * Tag value for words containing ideographic characters, lower limit
+ */
+
+public static final int WORD_IDEO = 400; // 0x190
+
+/**
+ * Tag value for words containing ideographic characters, upper limit
+ */
+
+public static final int WORD_IDEO_LIMIT = 500; // 0x1f4
+
+/**
+ * Tag value for words containing kana characters, lower limit
+ */
+
+public static final int WORD_KANA = 300; // 0x12c
+
+/**
+ * Tag value for words containing kana characters, upper limit
+ */
+
+public static final int WORD_KANA_LIMIT = 400; // 0x190
+
+/**
+ * Tag value for words that contain letters, excluding
+ * hiragana, katakana or ideographic characters, lower limit.
+ */
+
+public static final int WORD_LETTER = 200; // 0xc8
+
+/**
+ * Tag value for words containing letters, upper limit
+ */
+
+public static final int WORD_LETTER_LIMIT = 300; // 0x12c
+
+/**
+ * Tag value for "words" that do not fit into any of other categories.
+ * Includes spaces and most punctuation.
+ */
+
+public static final int WORD_NONE = 0; // 0x0
+
+/**
+ * Upper bound for tags for uncategorized words.
+ */
+
+public static final int WORD_NONE_LIMIT = 100; // 0x64
+
+/**
+ * Tag value for words that appear to be numbers, lower limit.
+ */
+
+public static final int WORD_NUMBER = 100; // 0x64
+
+/**
+ * Tag value for words that appear to be numbers, upper limit.
+ */
+
+public static final int WORD_NUMBER_LIMIT = 200; // 0xc8
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CaseMap.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CaseMap.java
new file mode 100644
index 0000000..a8da15b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CaseMap.java
@@ -0,0 +1,380 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import android.icu.lang.UCharacter;
+
+/**
+ * Low-level case mapping options and methods. Immutable.
+ * "Setters" return instances with the union of the current and new options set.
+ *
+ * This class is not intended for public subclassing.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class CaseMap {
+
+private CaseMap() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Lowercasing object with default options.
+ */
+
+public static android.icu.text.CaseMap.Lower toLower() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Uppercasing object with default options.
+ */
+
+public static android.icu.text.CaseMap.Upper toUpper() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Titlecasing object with default options.
+ */
+
+public static android.icu.text.CaseMap.Title toTitle() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Case folding object with default options.
+ */
+
+public static android.icu.text.CaseMap.Fold fold() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * omits unchanged text when case-mapping with {@link android.icu.text.Edits Edits}.
+ *
+ * @return an options object with this option.
+ */
+
+public abstract android.icu.text.CaseMap omitUnchangedText();
+/**
+ * Case folding options and methods. Immutable.
+ *
+ * @see #fold()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Fold extends android.icu.text.CaseMap {
+
+private Fold() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Fold omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * handles dotted I and dotless i appropriately for Turkic languages (tr, az).
+ *
+ * <p>Uses the Unicode CaseFolding.txt mappings marked with 'T' that
+ * are to be excluded for default mappings and
+ * included for the Turkic-specific mappings.
+ *
+ * @return an options object with this option.
+ * @see android.icu.lang.UCharacter#FOLD_CASE_EXCLUDE_SPECIAL_I
+ */
+
+public android.icu.text.CaseMap.Fold turkic() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Case-folds a string.
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Case-folding is locale-independent and not context-sensitive,
+ * but there is an option for whether to include or exclude mappings for dotted I
+ * and dotless i that are marked with 'T' in CaseFolding.txt.
+ *
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#foldCase(String, int)
+ */
+
+public java.lang.String apply(java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Case-folds a string and optionally records edits (see {@link #omitUnchangedText}).
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Case-folding is locale-independent and not context-sensitive,
+ * but there is an option for whether to include or exclude mappings for dotted I
+ * and dotless i that are marked with 'T' in CaseFolding.txt.
+ *
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#foldCase(String, int)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Lowercasing options and methods. Immutable.
+ *
+ * @see #toLower()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Lower extends android.icu.text.CaseMap {
+
+private Lower() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Lower omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Lowercases a string.
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#toLowerCase(Locale, String)
+ */
+
+public java.lang.String apply(java.util.Locale locale, java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Lowercases a string and optionally records edits (see {@link #omitUnchangedText}).
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#toLowerCase(Locale, String)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.util.Locale locale, java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Titlecasing options and methods. Immutable.
+ *
+ * @see #toTitle()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Title extends android.icu.text.CaseMap {
+
+private Title() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * titlecases the string as a whole rather than each word.
+ * (Titlecases only the character at index 0, possibly adjusted.)
+ *
+ * <p>It is an error to specify multiple titlecasing iterator options together,
+ * including both an option and an explicit BreakIterator.
+ *
+ * @return an options object with this option.
+ * @see #adjustToCased()
+ */
+
+public android.icu.text.CaseMap.Title wholeString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * titlecases sentences rather than words.
+ * (Titlecases only the first character of each sentence, possibly adjusted.)
+ *
+ * <p>It is an error to specify multiple titlecasing iterator options together,
+ * including both an option and an explicit BreakIterator.
+ *
+ * @return an options object with this option.
+ * @see #adjustToCased()
+ */
+
+public android.icu.text.CaseMap.Title sentences() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Title omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * does not lowercase non-initial parts of words when titlecasing.
+ *
+ * <p>By default, titlecasing will titlecase the character at each
+ * (possibly adjusted) BreakIterator index and
+ * lowercase all other characters up to the next iterator index.
+ * With this option, the other characters will not be modified.
+ *
+ * @return an options object with this option.
+ * @see android.icu.lang.UCharacter#TITLECASE_NO_LOWERCASE
+ * @see #adjustToCased()
+ */
+
+public android.icu.text.CaseMap.Title noLowercase() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * does not adjust the titlecasing BreakIterator indexes;
+ * titlecases exactly the characters at breaks from the iterator.
+ *
+ * <p>By default, titlecasing will take each break iterator index,
+ * adjust it to the next relevant character (see {@link #adjustToCased()}),
+ * and titlecase that one.
+ *
+ * <p>Other characters are lowercased.
+ *
+ * @return an options object with this option.
+ * @see android.icu.lang.UCharacter#TITLECASE_NO_BREAK_ADJUSTMENT
+ */
+
+public android.icu.text.CaseMap.Title noBreakAdjustment() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * adjusts each titlecasing BreakIterator index to the next cased character.
+ * (See the Unicode Standard, chapter 3, Default Case Conversion, R3 toTitlecase(X).)
+ *
+ * <p>This used to be the default index adjustment in ICU.
+ * Since ICU 60, the default index adjustment is to the next character that is
+ * a letter, number, symbol, or private use code point.
+ * (Uncased modifier letters are skipped.)
+ * The difference in behavior is small for word titlecasing,
+ * but the new adjustment is much better for whole-string and sentence titlecasing:
+ * It yields "49ers" and "??(abc)?" instead of "49Ers" and "??(Abc)?".
+ *
+ * <p>It is an error to specify multiple titlecasing adjustment options together.
+ *
+ * @return an options object with this option.
+ * @see #noBreakAdjustment()
+ */
+
+public android.icu.text.CaseMap.Title adjustToCased() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Titlecases a string.
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with options bits.)
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param iter      A break iterator to find the first characters of words that are to be titlecased.
+ *                  It is set to the source string (setText())
+ *                  and used one or more times for iteration (first() and next()).
+ *                  If null, then a word break iterator for the locale is used
+ *                  (or something equivalent).
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#toUpperCase(Locale, String)
+ */
+
+public java.lang.String apply(java.util.Locale locale, android.icu.text.BreakIterator iter, java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Titlecases a string and optionally records edits (see {@link #omitUnchangedText}).
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with options bits.)
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param iter      A break iterator to find the first characters of words that are to be titlecased.
+ *                  It is set to the source string (setText())
+ *                  and used one or more times for iteration (first() and next()).
+ *                  If null, then a word break iterator for the locale is used
+ *                  (or something equivalent).
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#toTitleCase(Locale, String, BreakIterator, int)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.util.Locale locale, android.icu.text.BreakIterator iter, java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Uppercasing options and methods. Immutable.
+ *
+ * @see #toUpper()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Upper extends android.icu.text.CaseMap {
+
+private Upper() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Upper omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Uppercases a string.
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#toUpperCase(Locale, String)
+ */
+
+public java.lang.String apply(java.util.Locale locale, java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Uppercases a string and optionally records edits (see {@link #omitUnchangedText}).
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#toUpperCase(Locale, String)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.util.Locale locale, java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CollationElementIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CollationElementIterator.java
new file mode 100644
index 0000000..bae7436
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CollationElementIterator.java
@@ -0,0 +1,316 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+package android.icu.text;
+
+
+/**
+ * <code>CollationElementIterator</code> is an iterator created by
+ * a RuleBasedCollator to walk through a string. The return result of
+ * each iteration is a 32-bit collation element (CE) that defines the
+ * ordering priority of the next character or sequence of characters
+ * in the source string.
+ *
+ * <p>For illustration, consider the following in Slovak and in traditional Spanish collation:
+ * <blockquote>
+ * <pre>
+ * "ca" -&gt; the first collation element is CE('c') and the second
+ *         collation element is CE('a').
+ * "cha" -&gt; the first collation element is CE('ch') and the second
+ *          collation element is CE('a').
+ * </pre>
+ * </blockquote>
+ * And in German phonebook collation,
+ * <blockquote>
+ * <pre>
+ * Since the character '&#230;' is a composed character of 'a' and 'e', the
+ * iterator returns two collation elements for the single character '&#230;'
+ *
+ * "&#230;b" -&gt; the first collation element is collation_element('a'), the
+ *              second collation element is collation_element('e'), and the
+ *              third collation element is collation_element('b').
+ * </pre>
+ * </blockquote>
+ *
+ * <p>For collation ordering comparison, the collation element results
+ * can not be compared simply by using basic arithmetic operators,
+ * e.g. &lt;, == or &gt;, further processing has to be done. Details
+ * can be found in the ICU
+ * <a href="https://unicode-org.github.io/icu/userguide/collation/architecture">
+ * User Guide</a>. An example of using the CollationElementIterator
+ * for collation ordering comparison is the class
+ * {@link android.icu.text.StringSearch}.
+ *
+ * <p>To construct a CollationElementIterator object, users
+ * call the method getCollationElementIterator() on a
+ * RuleBasedCollator that defines the desired sorting order.
+ *
+ * <p> Example:
+ * <blockquote>
+ * <pre>
+ *  String testString = "This is a test";
+ *  RuleBasedCollator rbc = new RuleBasedCollator("&amp;a&lt;b");
+ *  CollationElementIterator iterator = rbc.getCollationElementIterator(testString);
+ *  int primaryOrder = iterator.IGNORABLE;
+ *  while (primaryOrder != iterator.NULLORDER) {
+ *      int order = iterator.next();
+ *      if (order != iterator.IGNORABLE &amp;&amp;
+ *          order != iterator.NULLORDER) {
+ *          // order is valid, not ignorable and we have not passed the end
+ *          // of the iteration, we do something
+ *          primaryOrder = CollationElementIterator.primaryOrder(order);
+ *          System.out.println("Next primary order 0x" +
+ *                             Integer.toHexString(primaryOrder));
+ *      }
+ *  }
+ * </pre>
+ * </blockquote>
+ * <p>
+ * The method next() returns the collation order of the next character based on
+ * the comparison level of the collator. The method previous() returns the
+ * collation order of the previous character based on the comparison level of
+ * the collator. The Collation Element Iterator moves only in one direction
+ * between calls to reset(), setOffset(), or setText(). That is, next() and
+ * previous() can not be inter-used. Whenever previous() is to be called after
+ * next() or vice versa, reset(), setOffset() or setText() has to be called first
+ * to reset the status, shifting current position to either the end or the start of
+ * the string (reset() or setText()), or the specified position (setOffset()).
+ * Hence at the next call of next() or previous(), the first or last collation order,
+ * or collation order at the specified position will be returned. If a change of
+ * direction is done without one of these calls, the result is undefined.
+ * <p>
+ * This class is not subclassable.
+ * @see android.icu.text.Collator
+ * @see android.icu.text.RuleBasedCollator
+ * @see android.icu.text.StringSearch
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class CollationElementIterator {
+
+CollationElementIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the primary order of the specified collation element,
+ * i.e. the first 16 bits.  This value is unsigned.
+ * @param ce the collation element
+ * @return the element's 16 bits primary order.
+ */
+
+public static int primaryOrder(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the secondary order of the specified collation element,
+ * i.e. the 16th to 23th bits, inclusive.  This value is unsigned.
+ * @param ce the collation element
+ * @return the element's 8 bits secondary order
+ */
+
+public static int secondaryOrder(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the tertiary order of the specified collation element, i.e. the last
+ * 8 bits.  This value is unsigned.
+ * @param ce the collation element
+ * @return the element's 8 bits tertiary order
+ */
+
+public static int tertiaryOrder(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character offset in the source string
+ * corresponding to the next collation element. I.e., getOffset()
+ * returns the position in the source string corresponding to the
+ * collation element that will be returned by the next call to
+ * next() or previous(). This value could be any of:
+ * <ul>
+ * <li> The index of the <b>first</b> character corresponding to
+ * the next collation element. (This means that if
+ * <code>setOffset(offset)</code> sets the index in the middle of
+ * a contraction, <code>getOffset()</code> returns the index of
+ * the first character in the contraction, which may not be equal
+ * to the original offset that was set. Hence calling getOffset()
+ * immediately after setOffset(offset) does not guarantee that the
+ * original offset set will be returned.)
+ * <li> If normalization is on, the index of the <b>immediate</b>
+ * subsequent character, or composite character with the first
+ * character, having a combining class of 0.
+ * <li> The length of the source string, if iteration has reached
+ * the end.
+ *</ul>
+ *
+ * @return The character offset in the source string corresponding to the
+ *         collation element that will be returned by the next call to
+ *         next() or previous().
+ */
+
+public int getOffset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the next collation element in the source string.
+ *
+ * <p>This iterator iterates over a sequence of collation elements
+ * that were built from the string. Because there isn't
+ * necessarily a one-to-one mapping from characters to collation
+ * elements, this doesn't mean the same thing as "return the
+ * collation element [or ordering priority] of the next character
+ * in the string".
+ *
+ * <p>This function returns the collation element that the
+ * iterator is currently pointing to, and then updates the
+ * internal pointer to point to the next element.
+ *
+ * @return the next collation element or NULLORDER if the end of the
+ *         iteration has been reached.
+ */
+
+public int next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the previous collation element in the source string.
+ *
+ * <p>This iterator iterates over a sequence of collation elements
+ * that were built from the string. Because there isn't
+ * necessarily a one-to-one mapping from characters to collation
+ * elements, this doesn't mean the same thing as "return the
+ * collation element [or ordering priority] of the previous
+ * character in the string".
+ *
+ * <p>This function updates the iterator's internal pointer to
+ * point to the collation element preceding the one it's currently
+ * pointing to and then returns that element, while next() returns
+ * the current element and then updates the pointer.
+ *
+ * @return the previous collation element, or NULLORDER when the start of
+ *             the iteration has been reached.
+ */
+
+public int previous() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the cursor to the beginning of the string. The next
+ * call to next() or previous() will return the first and last
+ * collation element in the string, respectively.
+ *
+ * <p>If the RuleBasedCollator used by this iterator has had its
+ * attributes changed, calling reset() will reinitialize the
+ * iterator to use the new attributes.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the iterator to point to the collation element
+ * corresponding to the character at the specified offset. The
+ * value returned by the next call to next() will be the collation
+ * element corresponding to the characters at offset.
+ *
+ * <p>If offset is in the middle of a contracting character
+ * sequence, the iterator is adjusted to the start of the
+ * contracting sequence. This means that getOffset() is not
+ * guaranteed to return the same value set by this method.
+ *
+ * <p>If the decomposition mode is on, and offset is in the middle
+ * of a decomposible range of source text, the iterator may not
+ * return a correct result for the next forwards or backwards
+ * iteration.  The user must ensure that the offset is not in the
+ * middle of a decomposible range.
+ *
+ * @param newOffset the character offset into the original source string to
+ *        set. Note that this is not an offset into the corresponding
+ *        sequence of collation elements.
+ */
+
+public void setOffset(int newOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a new source string for iteration, and reset the offset
+ * to the beginning of the text.
+ *
+ * @param source the new source string for iteration.
+ */
+
+public void setText(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a new source string iterator for iteration, and reset the
+ * offset to the beginning of the text.
+ *
+ * <p>The source iterator's integrity will be preserved since a new copy
+ * will be created for use.
+ * @param source the new source string iterator for iteration.
+ */
+
+public void setText(android.icu.text.UCharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a new source string iterator for iteration, and reset the
+ * offset to the beginning of the text.
+ *
+ * @param source the new source string iterator for iteration.
+ */
+
+public void setText(java.text.CharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum length of any expansion sequence that ends with
+ * the specified collation element. If there is no expansion with this
+ * collation element as the last element, returns 1.
+ *
+ * @param ce a collation element returned by previous() or next().
+ * @return the maximum length of any expansion sequence ending
+ *         with the specified collation element.
+ */
+
+public int getMaxExpansion(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tests that argument object is equals to this CollationElementIterator.
+ * Iterators are equal if the objects uses the same RuleBasedCollator,
+ * the same source text and have the same current position in iteration.
+ * @param that object to test if it is equals to this
+ *             CollationElementIterator
+ */
+
+public boolean equals(java.lang.Object that) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Mock implementation of hashCode(). This implementation always returns a constant
+ * value. When Java assertion is enabled, this method triggers an assertion failure.
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * This constant is returned by the iterator in the methods
+ * next() and previous() when a collation element result is to be
+ * ignored.
+ *
+ * <p>See class documentation for an example of use.
+ * @see #next
+ * @see #previous */
+
+public static final int IGNORABLE = 0; // 0x0
+
+/**
+ * This constant is returned by the iterator in the methods
+ * next() and previous() when the end or the beginning of the
+ * source string has been reached, and there are no more valid
+ * collation elements to return.
+ *
+ * <p>See class documentation for an example of use.
+ * @see #next
+ * @see #previous */
+
+public static final int NULLORDER = -1; // 0xffffffff
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CollationKey.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CollationKey.java
new file mode 100644
index 0000000..40368e2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CollationKey.java
@@ -0,0 +1,335 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+package android.icu.text;
+
+
+/**
+ * A <code>CollationKey</code> represents a <code>String</code>
+ * under the rules of a specific <code>Collator</code>
+ * object. Comparing two <code>CollationKey</code>s returns the
+ * relative order of the <code>String</code>s they represent.
+ *
+ * <p>Since the rule set of <code>Collator</code>s can differ, the
+ * sort orders of the same string under two different
+ * <code>Collator</code>s might differ.  Hence comparing
+ * <code>CollationKey</code>s generated from different
+ * <code>Collator</code>s can give incorrect results.
+ 
+ * <p>Both the method
+ * <code>CollationKey.compareTo(CollationKey)</code> and the method
+ * <code>Collator.compare(String, String)</code> compare two strings
+ * and returns their relative order.  The performance characteristics
+ * of these two approaches can differ.
+ * Note that collation keys are often less efficient than simply doing comparison.
+ * For more details, see the ICU User Guide.
+ *
+ * <p>During the construction of a <code>CollationKey</code>, the
+ * entire source string is examined and processed into a series of
+ * bits terminated by a null, that are stored in the <code>CollationKey</code>.
+ * When <code>CollationKey.compareTo(CollationKey)</code> executes, it
+ * performs bitwise comparison on the bit sequences.  This can incurs
+ * startup cost when creating the <code>CollationKey</code>, but once
+ * the key is created, binary comparisons are fast.  This approach is
+ * recommended when the same strings are to be compared over and over
+ * again.
+ *
+ * <p>On the other hand, implementations of
+ * <code>Collator.compare(String, String)</code> can examine and
+ * process the strings only until the first characters differing in
+ * order.  This approach is recommended if the strings are to be
+ * compared only once.</p>
+ *
+ * <p>More information about the composition of the bit sequence can
+ * be found in the
+ * <a href="http://www.icu-project.org/userguide/Collate_ServiceArchitecture.html">
+ * user guide</a>.</p>
+ *
+ * <p>The following example shows how <code>CollationKey</code>s can be used
+ * to sort a list of <code>String</code>s.</p>
+ * <blockquote>
+ * <pre>
+ * // Create an array of CollationKeys for the Strings to be sorted.
+ * Collator myCollator = Collator.getInstance();
+ * CollationKey[] keys = new CollationKey[3];
+ * keys[0] = myCollator.getCollationKey("Tom");
+ * keys[1] = myCollator.getCollationKey("Dick");
+ * keys[2] = myCollator.getCollationKey("Harry");
+ * sort( keys );
+ * <br>
+ * //...
+ * <br>
+ * // Inside body of sort routine, compare keys this way
+ * if( keys[i].compareTo( keys[j] ) &gt; 0 )
+ *    // swap keys[i] and keys[j]
+ * <br>
+ * //...
+ * <br>
+ * // Finally, when we've returned from sort.
+ * System.out.println( keys[0].getSourceString() );
+ * System.out.println( keys[1].getSourceString() );
+ * System.out.println( keys[2].getSourceString() );
+ * </pre>
+ * </blockquote>
+ * <p>
+ * This class is not subclassable
+ * @see android.icu.text.Collator
+ * @see android.icu.text.RuleBasedCollator
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class CollationKey implements java.lang.Comparable<android.icu.text.CollationKey> {
+
+/**
+ * CollationKey constructor.
+ * This constructor is given public access, unlike the JDK version, to
+ * allow access to users extending the Collator class. See
+ * {@link android.icu.text.Collator#getCollationKey(java.lang.String) Collator#getCollationKey(String)}.
+ * @param source string this CollationKey is to represent
+ * @param key array of bytes that represent the collation order of argument
+ *            source terminated by a null
+ * @see android.icu.text.Collator
+ */
+
+public CollationKey(java.lang.String source, byte[] key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the source string that this CollationKey represents.
+ * @return source string that this CollationKey represents
+ */
+
+public java.lang.String getSourceString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Duplicates and returns the value of this CollationKey as a sequence
+ * of big-endian bytes terminated by a null.
+ *
+ * <p>If two CollationKeys can be legitimately compared, then one can
+ * compare the byte arrays of each to obtain the same result, e.g.
+ * <pre>
+ * byte key1[] = collationkey1.toByteArray();
+ * byte key2[] = collationkey2.toByteArray();
+ * int key, targetkey;
+ * int i = 0;
+ * do {
+ *       key = key1[i] &amp; 0xFF;
+ *     targetkey = key2[i] &amp; 0xFF;
+ *     if (key &lt; targetkey) {
+ *         System.out.println("String 1 is less than string 2");
+ *         return;
+ *     }
+ *     if (targetkey &lt; key) {
+ *         System.out.println("String 1 is more than string 2");
+ *     }
+ *     i ++;
+ * } while (key != 0 &amp;&amp; targetKey != 0);
+ *
+ * System.out.println("Strings are equal.");
+ * </pre>
+ *
+ * @return CollationKey value in a sequence of big-endian byte bytes
+ *         terminated by a null.
+ */
+
+public byte[] toByteArray() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this CollationKey to another CollationKey.  The
+ * collation rules of the Collator that created this key are
+ * applied.
+ *
+ * <p><strong>Note:</strong> Comparison between CollationKeys
+ * created by different Collators might return incorrect
+ * results.  See class documentation.
+ *
+ * @param target target CollationKey
+ * @return an integer value.  If the value is less than zero this CollationKey
+ *         is less than than target, if the value is zero they are equal, and
+ *         if the value is greater than zero this CollationKey is greater
+ *         than target.
+ * @exception java.lang.NullPointerException is thrown if argument is null.
+ * @see android.icu.text.Collator#compare(String, String)
+ */
+
+public int compareTo(android.icu.text.CollationKey target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this CollationKey and the specified Object for
+ * equality.  The collation rules of the Collator that created
+ * this key are applied.
+ *
+ * <p>See note in compareTo(CollationKey) for warnings about
+ * possible incorrect results.
+ *
+ * @param target the object to compare to.
+ * @return true if the two keys compare as equal, false otherwise.
+ * @see #compareTo(CollationKey)
+ * @exception java.lang.ClassCastException is thrown when the argument is not
+ *            a CollationKey.  NullPointerException is thrown when the argument
+ *            is null.
+ */
+
+public boolean equals(java.lang.Object target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this CollationKey and the argument target CollationKey for
+ * equality.
+ * The collation
+ * rules of the Collator object which created these objects are applied.
+ * <p>
+ * See note in compareTo(CollationKey) for warnings of incorrect results
+ *
+ * @param target the CollationKey to compare to.
+ * @return true if two objects are equal, false otherwise.
+ * @exception java.lang.NullPointerException is thrown when the argument is null.
+ */
+
+public boolean equals(android.icu.text.CollationKey target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a hash code for this CollationKey. The hash value is calculated
+ * on the key itself, not the String from which the key was created. Thus
+ * if x and y are CollationKeys, then x.hashCode(x) == y.hashCode()
+ * if x.equals(y) is true. This allows language-sensitive comparison in a
+ * hash table.
+ *
+ * @return the hash value.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Produces a bound for the sort order of a given collation key and a
+ * strength level. This API does not attempt to find a bound for the
+ * CollationKey String representation, hence null will be returned in its
+ * place.
+ * <p>
+ * Resulting bounds can be used to produce a range of strings that are
+ * between upper and lower bounds. For example, if bounds are produced
+ * for a sortkey of string "smith", strings between upper and lower
+ * bounds with primary strength would include "Smith", "SMITH", "sMiTh".
+ * <p>
+ * There are two upper bounds that can be produced. If BoundMode.UPPER
+ * is produced, strings matched would be as above. However, if a bound
+ * is produced using BoundMode.UPPER_LONG is used, the above example will
+ * also match "Smithsonian" and similar.
+ * <p>
+ * For more on usage, see example in test procedure
+ * <a href="http://source.icu-project.org/repos/icu/icu4j/trunk/src/com/ibm/icu/dev/test/collator/CollationAPITest.java">
+ * src/com/ibm/icu/dev/test/collator/CollationAPITest/TestBounds.
+ * </a>
+ * <p>
+ * Collation keys produced may be compared using the <TT>compare</TT> API.
+ * @param boundType Mode of bound required. It can be BoundMode.LOWER, which
+ *              produces a lower inclusive bound, BoundMode.UPPER, that
+ *              produces upper bound that matches strings of the same
+ *              length or BoundMode.UPPER_LONG that matches strings that
+ *              have the same starting substring as the source string.
+ * @param noOfLevels Strength levels required in the resulting bound
+ *                 (for most uses, the recommended value is PRIMARY). This
+ *                 strength should be less than the maximum strength of
+ *                 this CollationKey.
+ *                 See users guide for explanation on the strength levels a
+ *                 collation key can have.
+ * @return the result bounded CollationKey with a valid sort order but
+ *         a null String representation.
+ * @exception java.lang.IllegalArgumentException thrown when the strength level
+ *            requested is higher than or equal to the strength in this
+ *            CollationKey.
+ *            In the case of an Exception, information
+ *            about the maximum strength to use will be returned in the
+ *            Exception. The user can then call getBound() again with the
+ *            appropriate strength.
+ * @see android.icu.text.CollationKey
+ * @see android.icu.text.CollationKey.BoundMode
+ * @see android.icu.text.Collator#PRIMARY
+ * @see android.icu.text.Collator#SECONDARY
+ * @see android.icu.text.Collator#TERTIARY
+ * @see android.icu.text.Collator#QUATERNARY
+ * @see android.icu.text.Collator#IDENTICAL
+ */
+
+public android.icu.text.CollationKey getBound(int boundType, int noOfLevels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Merges this CollationKey with another.
+ * The levels are merged with their corresponding counterparts
+ * (primaries with primaries, secondaries with secondaries etc.).
+ * Between the values from the same level a separator is inserted.
+ *
+ * <p>This is useful, for example, for combining sort keys from first and last names
+ * to sort such pairs.
+ * See http://www.unicode.org/reports/tr10/#Merging_Sort_Keys
+ *
+ * <p>The recommended way to achieve "merged" sorting is by
+ * concatenating strings with U+FFFE between them.
+ * The concatenation has the same sort order as the merged sort keys,
+ * but merge(getSortKey(str1), getSortKey(str2)) may differ from getSortKey(str1 + '\uFFFE' + str2).
+ * Using strings with U+FFFE may yield shorter sort keys.
+ *
+ * <p>For details about Sort Key Features see
+ * https://unicode-org.github.io/icu/userguide/collation/api#sort-key-features
+ *
+ * <p>It is possible to merge multiple sort keys by consecutively merging
+ * another one with the intermediate result.
+ *
+ * <p>Only the sort key bytes of the CollationKeys are merged.
+ * This API does not attempt to merge the
+ * String representations of the CollationKeys, hence null will be returned
+ * as the result's String representation.
+ *
+ * <p>Example (uncompressed):
+ * <pre>191B1D 01 050505 01 910505 00
+ * 1F2123 01 050505 01 910505 00</pre>
+ * will be merged as
+ * <pre>191B1D 02 1F2123 01 050505 02 050505 01 910505 02 910505 00</pre>
+ *
+ * @param source CollationKey to merge with
+ * @return a CollationKey that contains the valid merged sort keys
+ *         with a null String representation,
+ *         i.e. <tt>new CollationKey(null, merged_sort_keys)</tt>
+ * @exception java.lang.IllegalArgumentException thrown if source CollationKey
+ *            argument is null or of 0 length.
+ */
+
+public android.icu.text.CollationKey merge(android.icu.text.CollationKey source) { throw new RuntimeException("Stub!"); }
+/**
+ * Options that used in the API CollationKey.getBound() for getting a
+ * CollationKey based on the bound mode requested.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class BoundMode {
+
+private BoundMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Lower bound
+ */
+
+public static final int LOWER = 0; // 0x0
+
+/**
+ * Upper bound that will match strings of exact size
+ */
+
+public static final int UPPER = 1; // 0x1
+
+/**
+ * Upper bound that will match all the strings that have the same
+ * initial substring as the given string
+ */
+
+public static final int UPPER_LONG = 2; // 0x2
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Collator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Collator.java
new file mode 100644
index 0000000..3e4adce
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Collator.java
@@ -0,0 +1,832 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Freezable;
+import android.icu.lang.UScript;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.Collator}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>Collator performs locale-sensitive string comparison. A concrete
+ * subclass, RuleBasedCollator, allows customization of the collation
+ * ordering by the use of rule sets.
+ *
+ * <p>A Collator is thread-safe only when frozen. See {@link #isFrozen()} and {@link android.icu.util.Freezable Freezable}.
+ *
+ * <p>Following the <a href=http://www.unicode.org>Unicode
+ * Consortium</a>'s specifications for the
+ * <a href="http://www.unicode.org/unicode/reports/tr10/">Unicode Collation
+ * Algorithm (UCA)</a>, there are 5 different levels of strength used
+ * in comparisons:
+ *
+ * <ul>
+ * <li>PRIMARY strength: Typically, this is used to denote differences between
+ *     base characters (for example, "a" &lt; "b").
+ *     It is the strongest difference. For example, dictionaries are divided
+ *     into different sections by base character.
+ * <li>SECONDARY strength: Accents in the characters are considered secondary
+ *     differences (for example, "as" &lt; "&agrave;s" &lt; "at"). Other
+ *     differences
+ *     between letters can also be considered secondary differences, depending
+ *     on the language. A secondary difference is ignored when there is a
+ *     primary difference anywhere in the strings.
+ * <li>TERTIARY strength: Upper and lower case differences in characters are
+ *     distinguished at tertiary strength (for example, "ao" &lt; "Ao" &lt;
+ *     "a&ograve;"). In addition, a variant of a letter differs from the base
+ *     form on the tertiary strength (such as "A" and "?"). Another
+ *     example is the
+ *     difference between large and small Kana. A tertiary difference is ignored
+ *     when there is a primary or secondary difference anywhere in the strings.
+ * <li>QUATERNARY strength: When punctuation is ignored
+ *     (see <a href="https://unicode-org.github.io/icu/userguide/collation/concepts#ignoring-punctuation">
+ *     Ignoring Punctuations in the User Guide</a>) at PRIMARY to TERTIARY
+ *     strength, an additional strength level can
+ *     be used to distinguish words with and without punctuation (for example,
+ *     "ab" &lt; "a-b" &lt; "aB").
+ *     This difference is ignored when there is a PRIMARY, SECONDARY or TERTIARY
+ *     difference. The QUATERNARY strength should only be used if ignoring
+ *     punctuation is required.
+ * <li>IDENTICAL strength:
+ *     When all other strengths are equal, the IDENTICAL strength is used as a
+ *     tiebreaker. The Unicode code point values of the NFD form of each string
+ *     are compared, just in case there is no difference.
+ *     For example, Hebrew cantellation marks are only distinguished at this
+ *     strength. This strength should be used sparingly, as only code point
+ *     value differences between two strings is an extremely rare occurrence.
+ *     Using this strength substantially decreases the performance for both
+ *     comparison and collation key generation APIs. This strength also
+ *     increases the size of the collation key.
+ * </ul>
+ *
+ * Unlike the JDK, ICU4J's Collator deals only with 2 decomposition modes,
+ * the canonical decomposition mode and one that does not use any decomposition.
+ * The compatibility decomposition mode, java.text.Collator.FULL_DECOMPOSITION
+ * is not supported here. If the canonical
+ * decomposition mode is set, the Collator handles un-normalized text properly,
+ * producing the same results as if the text were normalized in NFD. If
+ * canonical decomposition is turned off, it is the user's responsibility to
+ * ensure that all text is already in the appropriate form before performing
+ * a comparison or before getting a CollationKey.
+ *
+ * <p>For more information about the collation service see the
+ * <a href="https://unicode-org.github.io/icu/userguide/collation">User Guide</a>.
+ *
+ * <p>Examples of use
+ * <pre>
+ * // Get the Collator for US English and set its strength to PRIMARY
+ * Collator usCollator = Collator.getInstance(Locale.US);
+ * usCollator.setStrength(Collator.PRIMARY);
+ * if (usCollator.compare("abc", "ABC") == 0) {
+ *     System.out.println("Strings are equivalent");
+ * }
+ *
+ * The following example shows how to compare two strings using the
+ * Collator for the default locale.
+ *
+ * // Compare two strings in the default locale
+ * Collator myCollator = Collator.getInstance();
+ * myCollator.setDecomposition(NO_DECOMPOSITION);
+ * if (myCollator.compare("&agrave;&#92;u0325", "a&#92;u0325&#768;") != 0) {
+ *     System.out.println("&agrave;&#92;u0325 is not equals to a&#92;u0325&#768; without decomposition");
+ *     myCollator.setDecomposition(CANONICAL_DECOMPOSITION);
+ *     if (myCollator.compare("&agrave;&#92;u0325", "a&#92;u0325&#768;") != 0) {
+ *         System.out.println("Error: &agrave;&#92;u0325 should be equals to a&#92;u0325&#768; with decomposition");
+ *     }
+ *     else {
+ *         System.out.println("&agrave;&#92;u0325 is equals to a&#92;u0325&#768; with decomposition");
+ *     }
+ * }
+ * else {
+ *     System.out.println("Error: &agrave;&#92;u0325 should be not equals to a&#92;u0325&#768; without decomposition");
+ * }
+ * </pre>
+ *
+ * @see android.icu.text.RuleBasedCollator
+ * @see android.icu.text.CollationKey
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Collator implements java.util.Comparator<java.lang.Object>, android.icu.util.Freezable<android.icu.text.Collator>, java.lang.Cloneable {
+
+/**
+ * Empty default constructor to make javadocs happy
+ */
+
+protected Collator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the equality of two Collator objects. Collator objects are equal if they have the same
+ * collation (sorting &amp; searching) behavior.
+ *
+ * <p>The base class checks for null and for equal types.
+ * Subclasses should override.
+ *
+ * @param obj the Collator to compare to.
+ * @return true if this Collator has exactly the same collation behavior as obj, false otherwise.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generates a hash code for this Collator object.
+ *
+ * <p>The implementation exists just for consistency with {@link #equals(java.lang.Object)}
+ * implementation in this class and does not generate a useful hash code.
+ * Subclasses should override this implementation.
+ *
+ * @return a hash code value.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Collator's strength attribute. The strength attribute
+ * determines the minimum level of difference considered significant
+ * during comparison.
+ *
+ * <p>The base class method does nothing. Subclasses should override it if appropriate.
+ *
+ * <p>See the Collator class description for an example of use.
+ * @param newStrength the new strength value.
+ * @see #getStrength
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ * @throws java.lang.IllegalArgumentException if the new strength value is not valid.
+ */
+
+public void setStrength(int newStrength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decomposition mode of this Collator.  Setting this
+ * decomposition attribute with CANONICAL_DECOMPOSITION allows the
+ * Collator to handle un-normalized text properly, producing the
+ * same results as if the text were normalized. If
+ * NO_DECOMPOSITION is set, it is the user's responsibility to
+ * insure that all text is already in the appropriate form before
+ * a comparison or before getting a CollationKey. Adjusting
+ * decomposition mode allows the user to select between faster and
+ * more complete collation behavior.
+ *
+ * <p>Since a great many of the world's languages do not require
+ * text normalization, most locales set NO_DECOMPOSITION as the
+ * default decomposition mode.
+ *
+ * <p>The base class method does nothing. Subclasses should override it if appropriate.
+ *
+ * <p>See getDecomposition for a description of decomposition
+ * mode.
+ *
+ * @param decomposition the new decomposition mode
+ * @see #getDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ * @throws java.lang.IllegalArgumentException If the given value is not a valid
+ *            decomposition mode.
+ */
+
+public void setDecomposition(int decomposition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the reordering codes for this collator.
+ * Collation reordering allows scripts and some other groups of characters
+ * to be moved relative to each other. This reordering is done on top of
+ * the DUCET/CLDR standard collation order. Reordering can specify groups to be placed
+ * at the start and/or the end of the collation order. These groups are specified using
+ * UScript codes and {@link android.icu.text.Collator.ReorderCodes Collator.ReorderCodes} entries.
+ *
+ * <p>By default, reordering codes specified for the start of the order are placed in the
+ * order given after several special non-script blocks. These special groups of characters
+ * are space, punctuation, symbol, currency, and digit. These special groups are represented with
+ * {@link android.icu.text.Collator.ReorderCodes Collator.ReorderCodes} entries. Script groups can be intermingled with
+ * these special non-script groups if those special groups are explicitly specified in the reordering.
+ *
+ * <p>The special code {@link android.icu.text.Collator.ReorderCodes#OTHERS OTHERS}
+ * stands for any script that is not explicitly
+ * mentioned in the list of reordering codes given. Anything that is after OTHERS
+ * will go at the very end of the reordering in the order given.
+ *
+ * <p>The special reorder code {@link android.icu.text.Collator.ReorderCodes#DEFAULT DEFAULT}
+ * will reset the reordering for this collator
+ * to the default for this collator. The default reordering may be the DUCET/CLDR order or may be a reordering that
+ * was specified when this collator was created from resource data or from rules. The
+ * DEFAULT code <b>must</b> be the sole code supplied when it is used.
+ * If not, then an {@link java.lang.IllegalArgumentException IllegalArgumentException} will be thrown.
+ *
+ * <p>The special reorder code {@link android.icu.text.Collator.ReorderCodes#NONE NONE}
+ * will remove any reordering for this collator.
+ * The result of setting no reordering will be to have the DUCET/CLDR ordering used. The
+ * NONE code <b>must</b> be the sole code supplied when it is used.
+ *
+ * @param order the reordering codes to apply to this collator; if this is null or an empty array
+ * then this clears any existing reordering
+ * @see #getReorderCodes
+ * @see #getEquivalentReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public void setReorderCodes(int... order) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Collator for the current default locale.
+ * The default locale is determined by java.util.Locale.getDefault().
+ * @return the Collator for the default locale (for example, en_US) if it
+ *         is created successfully. Otherwise if there is no Collator
+ *         associated with the current locale, the root collator
+ *         will be returned.
+ * @see java.util.Locale#getDefault()
+ * @see #getInstance(Locale)
+ */
+
+public static final android.icu.text.Collator getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clones the collator.
+ * @return a clone of this collator.
+ */
+
+public java.lang.Object clone() throws java.lang.CloneNotSupportedException { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the Collator for the desired locale.
+ *
+ * <p>For some languages, multiple collation types are available;
+ * for example, "de@collation=phonebook".
+ * Starting with ICU 54, collation attributes can be specified via locale keywords as well,
+ * in the old locale extension syntax ("el@colCaseFirst=upper")
+ * or in language tag syntax ("el-u-kf-upper").
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/api">User Guide: Collation API</a>.
+ *
+ * @param locale the desired locale.
+ * @return Collator for the desired locale if it is created successfully.
+ *         Otherwise if there is no Collator
+ *         associated with the current locale, the root collator will
+ *         be returned.
+ * @see java.util.Locale
+ * @see java.util.ResourceBundle
+ * @see #getInstance(Locale)
+ * @see #getInstance()
+ */
+
+public static final android.icu.text.Collator getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Collator for the desired locale.
+ *
+ * <p>For some languages, multiple collation types are available;
+ * for example, "de-u-co-phonebk".
+ * Starting with ICU 54, collation attributes can be specified via locale keywords as well,
+ * in the old locale extension syntax ("el@colCaseFirst=upper", only with {@link android.icu.util.ULocale ULocale})
+ * or in language tag syntax ("el-u-kf-upper").
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/api">User Guide: Collation API</a>.
+ *
+ * @param locale the desired locale.
+ * @return Collator for the desired locale if it is created successfully.
+ *         Otherwise if there is no Collator
+ *         associated with the current locale, the root collator will
+ *         be returned.
+ * @see java.util.Locale
+ * @see java.util.ResourceBundle
+ * @see #getInstance(ULocale)
+ * @see #getInstance()
+ */
+
+public static final android.icu.text.Collator getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of locales, as Locale objects, for which collators
+ * are installed.  Note that Locale objects do not support RFC 3066.
+ * @return the list of locales in which collators are installed.
+ * This list includes any that have been registered, in addition to
+ * those that are installed with ICU4J.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the set of locales, as ULocale objects, for which collators
+ * are installed.  ULocale objects support RFC 3066.
+ * @return the list of locales in which collators are installed.
+ * This list includes any that have been registered, in addition to
+ * those that are installed with ICU4J.
+ */
+
+public static final android.icu.util.ULocale[] getAvailableULocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an array of all possible keywords that are relevant to
+ * collation. At this point, the only recognized keyword for this
+ * service is "collation".
+ * @return an array of valid collation keywords.
+ * @see #getKeywordValues
+ */
+
+public static final java.lang.String[] getKeywords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a keyword, returns an array of all values for
+ * that keyword that are currently in use.
+ * @param keyword one of the keywords returned by getKeywords.
+ * @see #getKeywords
+ */
+
+public static final java.lang.String[] getKeywordValues(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a key and a locale, returns an array of string values in a preferred
+ * order that would make a difference. These are all and only those values where
+ * the open (creation) of the service with the locale formed from the input locale
+ * plus input keyword and that value has different behavior than creation with the
+ * input locale alone.
+ * @param key           one of the keys supported by this service.  For now, only
+ *                      "collation" is supported.
+ * @param locale        the locale
+ * @param commonlyUsed  if set to true it will return only commonly used values
+ *                      with the given locale in preferred order.  Otherwise,
+ *                      it will return all the available values for the locale.
+ * @return an array of string values for the given key and the locale.
+ */
+
+public static final java.lang.String[] getKeywordValuesForLocale(java.lang.String key, android.icu.util.ULocale locale, boolean commonlyUsed) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the functionally equivalent locale for the given
+ * requested locale, with respect to given keyword, for the
+ * collation service.  If two locales return the same result, then
+ * collators instantiated for these locales will behave
+ * equivalently.  The converse is not always true; two collators
+ * may in fact be equivalent, but return different results, due to
+ * internal details.  The return result has no other meaning than
+ * that stated above, and implies nothing as to the relationship
+ * between the two locales.  This is intended for use by
+ * applications who wish to cache collators, or otherwise reuse
+ * collators when possible.  The functional equivalent may change
+ * over time.  For more information, please see the <a
+ * href="https://unicode-org.github.io/icu/userguide/locale#locales-and-services">
+ * Locales and Services</a> section of the ICU User Guide.
+ * @param keyword a particular keyword as enumerated by
+ * getKeywords.
+ * @param locID The requested locale
+ * @param isAvailable If non-null, isAvailable[0] will receive and
+ * output boolean that indicates whether the requested locale was
+ * 'available' to the collation service. If non-null, isAvailable
+ * must have length &gt;= 1.
+ * @return the locale
+ */
+
+public static final android.icu.util.ULocale getFunctionalEquivalent(java.lang.String keyword, android.icu.util.ULocale locID, boolean[] isAvailable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the functionally equivalent locale for the given
+ * requested locale, with respect to given keyword, for the
+ * collation service.
+ * @param keyword a particular keyword as enumerated by
+ * getKeywords.
+ * @param locID The requested locale
+ * @return the locale
+ * @see #getFunctionalEquivalent(String,ULocale,boolean[])
+ */
+
+public static final android.icu.util.ULocale getFunctionalEquivalent(java.lang.String keyword, android.icu.util.ULocale locID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * displayLocale.
+ * @param objectLocale the locale of the collator
+ * @param displayLocale the locale for the collator's display name
+ * @return the display name
+ */
+
+public static java.lang.String getDisplayName(java.util.Locale objectLocale, java.util.Locale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * displayLocale.
+ * @param objectLocale the locale of the collator
+ * @param displayLocale the locale for the collator's display name
+ * @return the display name
+ */
+
+public static java.lang.String getDisplayName(android.icu.util.ULocale objectLocale, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * default <code>DISPLAY</code> locale.
+ * @param objectLocale the locale of the collator
+ * @return the display name
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static java.lang.String getDisplayName(java.util.Locale objectLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * default <code>DISPLAY</code> locale.
+ * @param objectLocale the locale of the collator
+ * @return the display name
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static java.lang.String getDisplayName(android.icu.util.ULocale objectLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Collator's strength attribute. The strength attribute
+ * determines the minimum level of difference considered significant.
+ * <strong>[icu] Note:</strong> This can return QUATERNARY strength, which is not supported by the
+ * JDK version.
+ * <p>
+ * See the Collator class description for more details.
+ * <p>The base class method always returns {@link #TERTIARY}.
+ * Subclasses should override it if appropriate.
+ *
+ * @return this Collator's current strength attribute.
+ * @see #setStrength
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ */
+
+public int getStrength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the decomposition mode of this Collator. The decomposition mode
+ * determines how Unicode composed characters are handled.
+ * <p>
+ * See the Collator class description for more details.
+ * <p>The base class method always returns {@link #NO_DECOMPOSITION}.
+ * Subclasses should override it if appropriate.
+ *
+ * @return the decomposition mode
+ * @see #setDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ */
+
+public int getDecomposition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the equality of two text Strings using
+ * this Collator's rules, strength and decomposition mode.  Convenience method.
+ * @param source the source string to be compared.
+ * @param target the target string to be compared.
+ * @return true if the strings are equal according to the collation
+ *         rules, otherwise false.
+ * @see #compare
+ * @throws java.lang.NullPointerException thrown if either arguments is null.
+ */
+
+public boolean equals(java.lang.String source, java.lang.String target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a UnicodeSet that contains all the characters and sequences tailored
+ * in this collator.
+ * @return a pointer to a UnicodeSet object containing all the
+ *         code points and sequences that may sort differently than
+ *         in the root collator.
+ */
+
+public android.icu.text.UnicodeSet getTailoredSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the source text String to the target text String according to
+ * this Collator's rules, strength and decomposition mode.
+ * Returns an integer less than,
+ * equal to or greater than zero depending on whether the source String is
+ * less than, equal to or greater than the target String. See the Collator
+ * class description for an example of use.
+ *
+ * @param source the source String.
+ * @param target the target String.
+ * @return Returns an integer value. Value is less than zero if source is
+ *         less than target, value is zero if source and target are equal,
+ *         value is greater than zero if source is greater than target.
+ * @see android.icu.text.CollationKey
+ * @see #getCollationKey
+ * @throws java.lang.NullPointerException thrown if either argument is null.
+ */
+
+public abstract int compare(java.lang.String source, java.lang.String target);
+
+/**
+ * Compares the source Object to the target Object.
+ *
+ * @param source the source Object.
+ * @param target the target Object.
+ * @return Returns an integer value. Value is less than zero if source is
+ *         less than target, value is zero if source and target are equal,
+ *         value is greater than zero if source is greater than target.
+ * @throws java.lang.ClassCastException thrown if either arguments cannot be cast to CharSequence.
+ */
+
+public int compare(java.lang.Object source, java.lang.Object target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * Transforms the String into a CollationKey suitable for efficient
+ * repeated comparison.  The resulting key depends on the collator's
+ * rules, strength and decomposition mode.
+ *
+ * <p>Note that collation keys are often less efficient than simply doing comparison.
+ * For more details, see the ICU User Guide.
+ *
+ * <p>See the CollationKey class documentation for more information.
+ * @param source the string to be transformed into a CollationKey.
+ * @return the CollationKey for the given String based on this Collator's
+ *         collation rules. If the source String is null, a null
+ *         CollationKey is returned.
+ * @see android.icu.text.CollationKey
+ * @see #compare(String, String)
+ */
+
+public abstract android.icu.text.CollationKey getCollationKey(java.lang.String source);
+
+/**
+ * <strong>[icu]</strong> Sets the variable top to the top of the specified reordering group.
+ * The variable top determines the highest-sorting character
+ * which is affected by the alternate handling behavior.
+ * If that attribute is set to UCOL_NON_IGNORABLE, then the variable top has no effect.
+ *
+ * <p>The base class implementation throws an UnsupportedOperationException.
+ * @param group one of Collator.ReorderCodes.SPACE, Collator.ReorderCodes.PUNCTUATION,
+ *              Collator.ReorderCodes.SYMBOL, Collator.ReorderCodes.CURRENCY;
+ *              or Collator.ReorderCodes.DEFAULT to restore the default max variable group
+ * @return this
+ * @see #getMaxVariable
+ */
+
+public android.icu.text.Collator setMaxVariable(int group) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the maximum reordering group whose characters are affected by
+ * the alternate handling behavior.
+ *
+ * <p>The base class implementation returns Collator.ReorderCodes.PUNCTUATION.
+ * @return the maximum variable reordering group.
+ * @see #setMaxVariable
+ */
+
+public int getMaxVariable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Gets the variable top value of a Collator.
+ *
+ * @return the variable top primary weight
+ * @see #getMaxVariable
+ */
+
+public abstract int getVariableTop();
+
+/**
+ * <strong>[icu]</strong> Returns the version of this collator object.
+ * @return the version object associated with this collator
+ */
+
+public abstract android.icu.util.VersionInfo getVersion();
+
+/**
+ * <strong>[icu]</strong> Returns the UCA version of this collator object.
+ * @return the version object associated with this collator
+ */
+
+public abstract android.icu.util.VersionInfo getUCAVersion();
+
+/**
+ * Retrieves the reordering codes for this collator.
+ * These reordering codes are a combination of UScript codes and ReorderCodes.
+ * @return a copy of the reordering codes for this collator;
+ * if none are set then returns an empty array
+ * @see #setReorderCodes
+ * @see #getEquivalentReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public int[] getReorderCodes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves all the reorder codes that are grouped with the given reorder code. Some reorder
+ * codes are grouped and must reorder together.
+ * Beginning with ICU 55, scripts only reorder together if they are primary-equal,
+ * for example Hiragana and Katakana.
+ *
+ * @param reorderCode The reorder code to determine equivalence for.
+ * @return the set of all reorder codes in the same group as the given reorder code.
+ * @see #setReorderCodes
+ * @see #getReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public static int[] getEquivalentReorderCodes(int reorderCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether the object has been frozen or not.
+ *
+ * <p>An unfrozen Collator is mutable and not thread-safe.
+ * A frozen Collator is immutable and thread-safe.
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freezes the collator.
+ * @return the collator itself.
+ */
+
+public android.icu.text.Collator freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides for the clone operation. Any clone is initially unfrozen.
+ */
+
+public android.icu.text.Collator cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Decomposition mode value. With CANONICAL_DECOMPOSITION set,
+ * characters that are canonical variants according to the Unicode standard
+ * will be decomposed for collation.
+ *
+ * <p>CANONICAL_DECOMPOSITION corresponds to Normalization Form D as
+ * described in <a href="http://www.unicode.org/unicode/reports/tr15/">
+ * Unicode Technical Report #15</a>.
+ *
+ * @see #NO_DECOMPOSITION
+ * @see #getDecomposition
+ * @see #setDecomposition
+ */
+
+public static final int CANONICAL_DECOMPOSITION = 17; // 0x11
+
+/**
+ * <strong>[icu] Note:</strong> This is for backwards compatibility with Java APIs only.  It
+ * should not be used, IDENTICAL should be used instead.  ICU's
+ * collation does not support Java's FULL_DECOMPOSITION mode.
+ */
+
+public static final int FULL_DECOMPOSITION = 15; // 0xf
+
+/**
+ * Smallest Collator strength value. When all other strengths are equal,
+ * the IDENTICAL strength is used as a tiebreaker. The Unicode code point
+ * values of the NFD form of each string are compared, just in case there
+ * is no difference.
+ * See class documentation for more explanation.
+ * <p>
+ * Note this value is different from JDK's
+ */
+
+public static final int IDENTICAL = 15; // 0xf
+
+/**
+ * Decomposition mode value. With NO_DECOMPOSITION set, Strings
+ * will not be decomposed for collation. This is the default
+ * decomposition setting unless otherwise specified by the locale
+ * used to create the Collator.
+ *
+ * <p><strong>Note</strong> this value is different from the JDK's.
+ * @see #CANONICAL_DECOMPOSITION
+ * @see #getDecomposition
+ * @see #setDecomposition
+ */
+
+public static final int NO_DECOMPOSITION = 16; // 0x10
+
+/**
+ * Strongest collator strength value. Typically used to denote differences
+ * between base characters. See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int PRIMARY = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Fourth level collator strength value.
+ * When punctuation is ignored
+ * (see <a href="https://unicode-org.github.io/icu/userguide/collation/concepts#ignoring-punctuation">
+ * Ignoring Punctuation in the User Guide</a>) at PRIMARY to TERTIARY
+ * strength, an additional strength level can
+ * be used to distinguish words with and without punctuation.
+ * See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int QUATERNARY = 3; // 0x3
+
+/**
+ * Second level collator strength value.
+ * Accents in the characters are considered secondary differences.
+ * Other differences between letters can also be considered secondary
+ * differences, depending on the language.
+ * See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int SECONDARY = 1; // 0x1
+
+/**
+ * Third level collator strength value.
+ * Upper and lower case differences in characters are distinguished at this
+ * strength level. In addition, a variant of a letter differs from the base
+ * form on the tertiary level.
+ * See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int TERTIARY = 2; // 0x2
+/**
+ * Reordering codes for non-script groups that can be reordered under collation.
+ *
+ * @see #getReorderCodes
+ * @see #setReorderCodes
+ * @see #getEquivalentReorderCodes
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface ReorderCodes {
+
+/**
+ * Characters with the currency property.
+ * This is equivalent to the rule value "currency".
+ */
+
+public static final int CURRENCY = 4099; // 0x1003
+
+/**
+ * A special reordering code that is used to specify the default reordering codes for a locale.
+ */
+
+public static final int DEFAULT = -1; // 0xffffffff
+
+/**
+ * Characters with the digit property.
+ * This is equivalent to the rule value "digit".
+ */
+
+public static final int DIGIT = 4100; // 0x1004
+
+/**
+ * The first entry in the enumeration of reordering groups. This is intended for use in
+ * range checking and enumeration of the reorder codes.
+ */
+
+public static final int FIRST = 4096; // 0x1000
+
+/**
+ * A special reordering code that is used to specify no reordering codes.
+ */
+
+public static final int NONE = 103; // 0x67
+
+/**
+ * A special reordering code that is used to specify all other codes used for reordering except
+ * for the codes listed as ReorderingCodes and those listed explicitly in a reordering.
+ */
+
+public static final int OTHERS = 103; // 0x67
+
+/**
+ * Characters with the punctuation property.
+ * This is equivalent to the rule value "punct".
+ */
+
+public static final int PUNCTUATION = 4097; // 0x1001
+
+/**
+ * Characters with the space property.
+ * This is equivalent to the rule value "space".
+ */
+
+public static final int SPACE = 4096; // 0x1000
+
+/**
+ * Characters with the symbol property.
+ * This is equivalent to the rule value "symbol".
+ */
+
+public static final int SYMBOL = 4098; // 0x1002
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CompactDecimalFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CompactDecimalFormat.java
new file mode 100644
index 0000000..ed10596
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CompactDecimalFormat.java
@@ -0,0 +1,101 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, Google, International Business Machines Corporation and
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * Formats numbers in compact (abbreviated) notation, like "1.2K" instead of "1200".
+ *
+ * The CompactDecimalFormat produces abbreviated numbers, suitable for display in environments will
+ * limited real estate. For example, 'Hits: 1.2B' instead of 'Hits: 1,200,000,000'. The format will
+ * be appropriate for the given language, such as "1,2 Mrd." for German.
+ *
+ * <p>For numbers under 1000 trillion (under 10^15, such as 123,456,789,012,345), the result will be
+ * short for supported languages. However, the result may sometimes exceed 7 characters, such as
+ * when there are combining marks or thin characters. In such cases, the visual width in fonts
+ * should still be short.
+ *
+ * <p>By default, there are 2 significant digits. After creation, if more than three significant
+ * digits are set (with setMaximumSignificantDigits), or if a fixed number of digits are set (with
+ * setMaximumIntegerDigits or setMaximumFractionDigits), then result may be wider.
+ *
+ * <p>The "short" style is also capable of formatting currency amounts, such as "$1.2M" instead of
+ * "$1,200,000.00" (English) or "5,3?Mio.??" instead of "5.300.000,00 ?" (German). Localized data
+ * concerning longer formats is not available yet in the Unicode CLDR. Because of this, attempting
+ * to format a currency amount using the "long" style will produce an UnsupportedOperationException.
+ *
+ * <p>At this time, negative numbers and parsing are not supported, and will produce an
+ * UnsupportedOperationException. Resetting the pattern prefixes or suffixes is not supported; the
+ * method calls are ignored.
+ *
+ * <p>Note that important methods, like setting the number of decimals, will be moved up from
+ * DecimalFormat to NumberFormat.
+ *
+ * @author markdavis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CompactDecimalFormat extends android.icu.text.DecimalFormat {
+
+CompactDecimalFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a CompactDecimalFormat appropriate for a locale. The result may be affected by the
+ * number system in the locale, such as ar-u-nu-latn.
+ *
+ * @param locale the desired locale
+ * @param style the compact style
+ */
+
+public static android.icu.text.CompactDecimalFormat getInstance(android.icu.util.ULocale locale, android.icu.text.CompactDecimalFormat.CompactStyle style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a CompactDecimalFormat appropriate for a locale. The result may be affected by the
+ * number system in the locale, such as ar-u-nu-latn.
+ *
+ * @param locale the desired locale
+ * @param style the compact style
+ */
+
+public static android.icu.text.CompactDecimalFormat getInstance(java.util.Locale locale, android.icu.text.CompactDecimalFormat.CompactStyle style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parsing is currently unsupported, and throws an UnsupportedOperationException.
+ */
+
+public java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parsing is currently unsupported, and throws an UnsupportedOperationException.
+ */
+
+public android.icu.util.CurrencyAmount parseCurrency(java.lang.CharSequence text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+/**
+ * Style parameter for CompactDecimalFormat.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CompactStyle {
+/**
+ * Short version, like "1.2T"
+ */
+
+SHORT,
+/**
+ * Longer version, like "1.2 trillion", if available. May return same result as SHORT if not.
+ */
+
+LONG;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ConstrainedFieldPosition.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ConstrainedFieldPosition.java
new file mode 100644
index 0000000..b623b2c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ConstrainedFieldPosition.java
@@ -0,0 +1,195 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import java.text.Format.Field;
+
+/**
+ * Represents a span of a string containing a given field.
+ *
+ * This class differs from FieldPosition in the following ways:
+ *
+ *   1. It has information on the field category.
+ *   2. It allows you to set constraints to use when iterating over field positions.
+ *   3. It is used for the newer FormattedValue APIs.
+ *
+ * @author sffc
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ConstrainedFieldPosition {
+
+/**
+ * Initializes a CategoryFieldPosition.
+ *
+ * By default, the CategoryFieldPosition has no iteration constraints.
+ */
+
+public ConstrainedFieldPosition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets this ConstrainedFieldPosition to its initial state, as if it were newly created:
+ *
+ * - Removes any constraints that may have been set on the instance.
+ * - Resets the iteration position.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a constraint on the field.
+ *
+ * When this instance of ConstrainedFieldPosition is passed to {@link android.icu.text.FormattedValue#nextPosition FormattedValue#nextPosition}, positions are
+ * skipped unless they have the given field.
+ *
+ * Any previously set constraints are cleared.
+ *
+ * For example, to loop over all grouping separators:
+ *
+ * <pre>
+ * ConstrainedFieldPosition cfpos;
+ * cfpos.constrainField(NumberFormat.Field.GROUPING_SEPARATOR);
+ * while (fmtval.nextPosition(cfpos)) {
+ *   // handle the grouping separator position
+ * }
+ * </pre>
+ *
+ * Changing the constraint while in the middle of iterating over a FormattedValue
+ * does not generally have well-defined behavior.
+ *
+ * @param field
+ *            The field to fix when iterating.
+ */
+
+public void constrainField(java.text.Format.Field field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a constraint on the field class.
+ *
+ * When this instance of ConstrainedFieldPosition is passed to {@link android.icu.text.FormattedValue#nextPosition FormattedValue#nextPosition}, positions are
+ * skipped unless the field is an instance of the class constraint, including subclasses.
+ *
+ * Any previously set constraints are cleared.
+ *
+ * For example, to loop over only the number-related fields:
+ *
+ * <pre>
+ * ConstrainedFieldPosition cfpos;
+ * cfpos.constrainClass(NumberFormat.Field.class);
+ * while (fmtval.nextPosition(cfpos)) {
+ *   // handle the number-related field position
+ * }
+ * </pre>
+ *
+ * @param classConstraint
+ *            The field class to fix when iterating.
+ */
+
+public void constrainClass(java.lang.Class<?> classConstraint) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the field for the current position.
+ *
+ * The return value is well-defined and non-null only after
+ * FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The field saved in the instance. See above for null conditions.
+ */
+
+public java.text.Format.Field getField() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the INCLUSIVE start index for the current position.
+ *
+ * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The start index saved in the instance.
+ */
+
+public int getStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the EXCLUSIVE end index stored for the current position.
+ *
+ * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The end index saved in the instance.
+ */
+
+public int getLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the value associated with the current field position. The field value is often not set.
+ *
+ * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The value for the current position. Might be null.
+ */
+
+public java.lang.Object getFieldValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets an int64 that FormattedValue implementations may use for storage.
+ *
+ * The initial value is zero.
+ *
+ * Users of FormattedValue should not need to call this method.
+ *
+ * @return The current iteration context from {@link #setInt64IterationContext}.
+ */
+
+public long getInt64IterationContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets an int64 that FormattedValue implementations may use for storage.
+ *
+ * Intended to be used by FormattedValue implementations.
+ *
+ * @param context
+ *            The new iteration context.
+ */
+
+public void setInt64IterationContext(long context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets new values for the primary public getters.
+ *
+ * Intended to be used by FormattedValue implementations.
+ *
+ * It is up to the implementation to ensure that the user-requested
+ * constraints are satisfied. This method does not check!
+ *
+ * @param field
+ *            The new field.
+ * @param value
+ *            The new field value. Should be null if there is no value.
+ * @param start
+ *            The new inclusive start index.
+ * @param limit
+ *            The new exclusive end index.
+ */
+
+public void setState(java.text.Format.Field field, java.lang.Object value, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether a given field and value should be included given the
+ * constraints.
+ *
+ * Intended to be used by FormattedValue implementations.
+ *
+ * @param field The field to test.
+ * @param fieldValue The field value to test. Should be null if there is no value.
+ * @return Whether the field should be included given the constraints.
+ */
+
+public boolean matchesField(java.text.Format.Field field, java.lang.Object fieldValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CurrencyPluralInfo.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CurrencyPluralInfo.java
new file mode 100644
index 0000000..1674dcf
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/CurrencyPluralInfo.java
@@ -0,0 +1,160 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * This class represents the information needed by
+ * DecimalFormat to format currency plural,
+ * such as "3.00 US dollars" or "1.00 US dollar".
+ * DecimalFormat creates for itself an instance of
+ * CurrencyPluralInfo from its locale data.
+ * If you need to change any of these symbols, you can get the
+ * CurrencyPluralInfo object from your
+ * DecimalFormat and modify it.
+ *
+ * Following are the information needed for currency plural format and parse:
+ * locale information,
+ * plural rule of the locale,
+ * currency plural pattern of the locale.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CurrencyPluralInfo implements java.lang.Cloneable, java.io.Serializable {
+
+/**
+ * Create a CurrencyPluralInfo object for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public CurrencyPluralInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a CurrencyPluralInfo object for the given locale.
+ * @param locale the locale
+ */
+
+public CurrencyPluralInfo(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a CurrencyPluralInfo object for the given locale.
+ * @param locale the locale
+ */
+
+public CurrencyPluralInfo(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a CurrencyPluralInfo instance for the default locale.
+ *
+ * @return A CurrencyPluralInfo instance.
+ */
+
+public static android.icu.text.CurrencyPluralInfo getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a CurrencyPluralInfo instance for the given locale.
+ *
+ * @param locale the locale.
+ * @return A CurrencyPluralInfo instance.
+ */
+
+public static android.icu.text.CurrencyPluralInfo getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a CurrencyPluralInfo instance for the given locale.
+ *
+ * @param locale the locale.
+ * @return A CurrencyPluralInfo instance.
+ */
+
+public static android.icu.text.CurrencyPluralInfo getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets plural rules of this locale, used for currency plural format
+ *
+ * @return plural rule
+ */
+
+public android.icu.text.PluralRules getPluralRules() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a plural count, gets currency plural pattern of this locale,
+ * used for currency plural format
+ *
+ * @param  pluralCount currency plural count
+ * @return a currency plural pattern based on plural count
+ */
+
+public java.lang.String getCurrencyPluralPattern(java.lang.String pluralCount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get locale
+ *
+ * @return locale
+ */
+
+public android.icu.util.ULocale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set plural rules.  These are initially set in the constructor based on the locale,
+ * and usually do not need to be changed.
+ *
+ * @param ruleDescription new plural rule description
+ */
+
+public void setPluralRules(java.lang.String ruleDescription) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set currency plural patterns.  These are initially set in the constructor based on the
+ * locale, and usually do not need to be changed.
+ *
+ * The decimal digits part of the pattern cannot be specified via this method.  All plural
+ * forms will use the same decimal pattern as set in the constructor of DecimalFormat.  For
+ * example, you can't set "0.0" for plural "few" but "0.00" for plural "many".
+ *
+ * @param pluralCount the plural count for which the currency pattern will
+ *                    be overridden.
+ * @param pattern     the new currency plural pattern
+ */
+
+public void setCurrencyPluralPattern(java.lang.String pluralCount, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set locale.  This also sets both the plural rules and the currency plural patterns to be
+ * the defaults for the locale.
+ *
+ * @param loc the new locale to set
+ */
+
+public void setLocale(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Standard override
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode
+ *
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateFormat.java
new file mode 100644
index 0000000..409f5fa
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateFormat.java
@@ -0,0 +1,1922 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *   Copyright (C) 1996-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Calendar;
+import android.icu.util.GregorianCalendar;
+import java.text.FieldPosition;
+import java.util.Date;
+import android.icu.util.TimeZone;
+import java.text.ParsePosition;
+import java.text.Format;
+import java.text.ParseException;
+import android.icu.util.ULocale.Category;
+import java.io.InvalidObjectException;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DateFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>
+ * DateFormat is an abstract class for date/time formatting subclasses which formats and parses dates or time in a
+ * language-independent manner. The date/time formatting subclass, such as SimpleDateFormat, allows for formatting
+ * (i.e., date -&gt; text), parsing (text -&gt; date), and normalization. The date is represented as a <code>Date</code>
+ * object or as the milliseconds since January 1, 1970, 00:00:00 GMT.
+ *
+ * <p>
+ * DateFormat helps you to format and parse dates for any locale. Your code can be completely independent of the locale
+ * conventions for months, days of the week, or even the calendar format: lunar vs. solar. It provides many class
+ * methods for obtaining default date/time formatters based on the default for a given locale and a number of formatting
+ * styles or arbitrary "skeletons".
+ * <ol>
+ * <li>The formatting styles include FULL, LONG, MEDIUM, and SHORT. More detail and examples of using these styles are
+ * provided in the method descriptions.
+ * <li>The formatting styles only cover a fraction of the necessary usage. You often need to have just certain
+ * combinations of fields, like Month and Year, but have it to be formatted appropriate to a given locale. This is done
+ * using the (misnamed) getPatternInstance() method, supplying a skeleton. There are a number of constants that have
+ * common pre-defined skeletons, such as {@link #MINUTE_SECOND} for something like "13:45" or {@link #YEAR_ABBR_MONTH}
+ * for something like "Sept 2012".
+ * </ol>
+ *
+ * <p>
+ * To format a date for the current Locale, use one of the static factory methods:
+ *
+ * <pre>
+ * myString = DateFormat.getDateInstance().format(myDate);
+ * myString = DateFormat.getPatternInstance(DateFormat.YEAR_ABBR_MONTH).format(myDate);
+ * </pre>
+ * <p>
+ * If you are formatting multiple numbers, it is more efficient to get the format and use it multiple times so that the
+ * system doesn't have to fetch the information about the local language and country conventions multiple times.
+ *
+ * <pre>
+ * DateFormat df = DateFormat.getDateInstance();
+ * for (int i = 0; i &lt; a.length; ++i) {
+ *     output.println(df.format(myDate[i]) + &quot;; &quot;);
+ * }
+ * </pre>
+ * <p>
+ * To format a date for a different Locale, specify it in the call to getDateInstance().
+ *
+ * <pre>
+ * DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
+ * </pre>
+ * <p>
+ * You can use a DateFormat to parse also.
+ *
+ * <pre>
+ * myDate = df.parse(myString);
+ * </pre>
+ * <p>
+ * There are many static factory methods available. Use getDateInstance to get the normal date format for that country.
+ * Use getTimeInstance to get the time format for that country. Use getDateTimeInstance to get a date and time format.
+ * You can pass in different options to these factory methods to control the length of the result; from SHORT to MEDIUM
+ * to LONG to FULL. The exact result depends on the locale, but generally:
+ * <ul>
+ * <li>SHORT is completely numeric, such as 12.13.52 or 3:30pm
+ * <li>MEDIUM is longer, such as Jan 12, 1952
+ * <li>LONG is longer, such as January 12, 1952 or 3:30:32pm
+ * <li>FULL is pretty completely specified, such as Tuesday, April 12, 1952 AD or 3:30:42pm PST.
+ * </ul>
+ *
+ * <p>
+ * Use getPatternInstance to format with a skeleton. Typically this is with a predefined skeleton, like
+ * {@link #YEAR_ABBR_MONTH} for something like "Sept 2012". If you don't want to use one of the predefined skeletons,
+ * you can supply your own. The skeletons are like the patterns in SimpleDateFormat, except they:
+ * <ol>
+ * <li>only keep the field pattern letter and ignore all other parts in a pattern, such as space, punctuation, and
+ * string literals.
+ * <li>are independent of the order of fields.
+ * <li>ignore certain differences in the field's pattern letter length:
+ * <ol>
+ * <li>For those non-digit calendar fields, the pattern letter length is important, such as MMM, MMMM, and MMMMM; E and
+ * EEEE, and the field's pattern letter length is honored.
+ * <li>For the digit calendar fields, such as M or MM, d or dd, yy or yyyy, the field pattern length is ignored and the
+ * best match, which is defined in date time patterns, will be returned without honor the field pattern letter length in
+ * skeleton.
+ * </ol>
+ * </ol>
+ *
+ * <p>
+ * You can also set the time zone on the format if you wish. If you want even more control over the format or parsing,
+ * (or want to give your users more control), you can try casting the DateFormat you get from the factory methods to a
+ * SimpleDateFormat. This will work for the majority of countries; just remember to put it in a try block in case you
+ * encounter an unusual one.
+ *
+ * <p>
+ * You can also use forms of the parse and format methods with ParsePosition and FieldPosition to allow you to
+ * <ul>
+ * <li>progressively parse through pieces of a string.
+ * <li>align any particular field, or find out where it is for selection on the screen.
+ * </ul>
+ *
+ * <h3>Synchronization</h3>
+ *
+ * Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple
+ * threads access a format concurrently, it must be synchronized externally.
+ *
+ * @see android.icu.text.UFormat
+ * @see android.icu.text.NumberFormat
+ * @see android.icu.text.SimpleDateFormat
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.TimeZone
+ * @author Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class DateFormat extends android.icu.text.UFormat {
+
+/**
+ * Creates a new date format.
+ */
+
+protected DateFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a time object into a time string. Examples of time objects
+ * are a time value expressed in milliseconds and a Date object.
+ * @param obj must be a Number or a Date or a Calendar.
+ * @param toAppendTo the string buffer for the returning time string.
+ * @return the formatted time string.
+ * @param fieldPosition keeps track of the position of the field
+ * within the returned string.
+ * On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field. For
+ * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+ * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+ * begin index and end index of fieldPosition will be set to
+ * 0 and 4, respectively.
+ * Notice that if the same time field appears
+ * more than once in a pattern, the fieldPosition will be set for the first
+ * occurrence of that time field. For instance, formatting a Date to
+ * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+ * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+ * the begin index and end index of fieldPosition will be set to
+ * 5 and 8, respectively, for the first occurrence of the timezone
+ * pattern character 'z'.
+ * @see java.text.Format
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a date into a date/time string.
+ * @param cal a Calendar set to the date and time to be formatted
+ * into a date/time string.  When the calendar type is different from
+ * the internal calendar held by this DateFormat instance, the date
+ * and the time zone will be inherited from the input calendar, but
+ * other calendar field values will be calculated by the internal calendar.
+ * @param toAppendTo the string buffer for the returning date/time string.
+ * @param fieldPosition keeps track of the position of the field
+ * within the returned string.
+ * On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field. For
+ * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+ * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+ * begin index and end index of fieldPosition will be set to
+ * 0 and 4, respectively.
+ * Notice that if the same time field appears
+ * more than once in a pattern, the fieldPosition will be set for the first
+ * occurrence of that time field. For instance, formatting a Date to
+ * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+ * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+ * the begin index and end index of fieldPosition will be set to
+ * 5 and 8, respectively, for the first occurrence of the timezone
+ * pattern character 'z'.
+ * @return the formatted date/time string.
+ */
+
+public abstract java.lang.StringBuffer format(android.icu.util.Calendar cal, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fieldPosition);
+
+/**
+ * Formats a Date into a date/time string.
+ * @param date a Date to be formatted into a date/time string.
+ * @param toAppendTo the string buffer for the returning date/time string.
+ * @param fieldPosition keeps track of the position of the field
+ * within the returned string.
+ * On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field. For
+ * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+ * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+ * begin index and end index of fieldPosition will be set to
+ * 0 and 4, respectively.
+ * Notice that if the same time field appears
+ * more than once in a pattern, the fieldPosition will be set for the first
+ * occurrence of that time field. For instance, formatting a Date to
+ * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+ * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+ * the begin index and end index of fieldPosition will be set to
+ * 5 and 8, respectively, for the first occurrence of the timezone
+ * pattern character 'z'.
+ * @return the formatted date/time string.
+ */
+
+public java.lang.StringBuffer format(java.util.Date date, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a Date into a date/time string.
+ * @param date the time value to be formatted into a time string.
+ * @return the formatted time string.
+ */
+
+public final java.lang.String format(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a date/time string. For example, a time text "07/10/96 4:5 PM, PDT"
+ * will be parsed into a Date that is equivalent to Date(837039928046).
+ * Parsing begins at the beginning of the string and proceeds as far as
+ * possible.  Assuming no parse errors were encountered, this function
+ * doesn't return any information about how much of the string was consumed
+ * by the parsing.  If you need that information, use a version of
+ * parse() that takes a ParsePosition.
+ *
+ * <p> By default, parsing is lenient: If the input is not in the form used
+ * by this object's format method but can still be parsed as a date, then
+ * the parse succeeds.  Clients may insist on strict adherence to the
+ * format by calling setLenient(false).
+ *
+ * <p> Note that the normal date formats associated with some calendars - such
+ * as the Chinese lunar calendar - do not specify enough fields to enable
+ * dates to be parsed unambiguously. In the case of the Chinese lunar
+ * calendar, while the year within the current 60-year cycle is specified,
+ * the number of such cycles since the start date of the calendar (in the
+ * ERA field of the Calendar object) is not normally part of the format,
+ * and parsing may assume the wrong era. For cases such as this it is
+ * recommended that clients parse using the parse method that takes a Calendar
+ * with the Calendar passed in set to the current date, or to a date
+ * within the era/cycle that should be assumed if absent in the format.
+ *
+ * @param text  The date/time string to be parsed
+ *
+ * @return      A Date, or null if the input could not be parsed
+ *
+ * @exception  java.text.ParseException  If the given string cannot be parsed as a date.
+ *
+ * @see #parse(String, ParsePosition)
+ */
+
+public java.util.Date parse(java.lang.String text) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a date/time string according to the given parse position.
+ * For example, a time text "07/10/96 4:5 PM, PDT" will be parsed
+ * into a Calendar that is equivalent to Date(837039928046). Before
+ * calling this method the caller should initialize the calendar
+ * in one of two ways (unless existing field information is to be kept):
+ * (1) clear the calendar, or (2) set the calendar to the current date
+ * (or to any date whose fields should be used to supply values that
+ * are missing in the parsed date). For example, Chinese calendar dates
+ * do not normally provide an era/cycle; in this case the calendar that
+ * is passed in should be set to a date within the era that should be
+ * assumed, normally the current era.
+ *
+ * <p> By default, parsing is lenient: If the input is not in the form used
+ * by this object's format method but can still be parsed as a date, then
+ * the parse succeeds.  Clients may insist on strict adherence to the
+ * format by calling setLenient(false).
+ *
+ * @see #setLenient(boolean)
+ *
+ * @param text  The date/time string to be parsed
+ *
+ * @param cal   The calendar set on input to the date and time to be used
+ *              for missing values in the date/time string being parsed,
+ *              and set on output to the parsed date/time. In general, this
+ *              should be initialized before calling this method - either
+ *              cleared or set to the current date, depending on desired
+ *              behavior. If this parse fails, the calendar may still
+ *              have been modified. When the calendar type is different
+ *              from the internal calendar held by this DateFormat
+ *              instance, calendar field values will be parsed based
+ *              on the internal calendar initialized with the time and
+ *              the time zone taken from this calendar, then the
+ *              parse result (time in milliseconds and time zone) will
+ *              be set back to this calendar.
+ *
+ * @param pos   On input, the position at which to start parsing; on
+ *              output, the position at which parsing terminated, or the
+ *              start position if the parse failed.
+ */
+
+public abstract void parse(java.lang.String text, android.icu.util.Calendar cal, java.text.ParsePosition pos);
+
+/**
+ * Parses a date/time string according to the given parse position.  For
+ * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
+ * that is equivalent to Date(837039928046).
+ *
+ * <p> By default, parsing is lenient: If the input is not in the form used
+ * by this object's format method but can still be parsed as a date, then
+ * the parse succeeds.  Clients may insist on strict adherence to the
+ * format by calling setLenient(false).
+ *
+ * <p> Note that the normal date formats associated with some calendars - such
+ * as the Chinese lunar calendar - do not specify enough fields to enable
+ * dates to be parsed unambiguously. In the case of the Chinese lunar
+ * calendar, while the year within the current 60-year cycle is specified,
+ * the number of such cycles since the start date of the calendar (in the
+ * ERA field of the Calendar object) is not normally part of the format,
+ * and parsing may assume the wrong era. For cases such as this it is
+ * recommended that clients parse using the parse method that takes a Calendar
+ * with the Calendar passed in set to the current date, or to a date
+ * within the era/cycle that should be assumed if absent in the format.
+ *
+ * @see #setLenient(boolean)
+ *
+ * @param text  The date/time string to be parsed
+ *
+ * @param pos   On input, the position at which to start parsing; on
+ *              output, the position at which parsing terminated, or the
+ *              start position if the parse failed.
+ *
+ * @return      A Date, or null if the input could not be parsed
+ */
+
+public java.util.Date parse(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a date/time string into an Object.  This convenience method simply
+ * calls parse(String, ParsePosition).
+ *
+ * @see #parse(String, ParsePosition)
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the time formatter with the default formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @return a time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time formatter with the given formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @return a time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @param aLocale the given locale.
+ * @return a time formatter.
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(int style, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @param locale the given ulocale.
+ * @return a time formatter.
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(int style, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the default formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @return a date formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the given formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @return a date formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param aLocale the given locale.
+ * @return a date formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(int style, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param locale the given ulocale.
+ * @return a date formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(int style, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the default formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @return a date/time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the given date and time
+ * formatting styles for the default <code>FORMAT</code> locale.
+ * @param dateStyle the given date formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param timeStyle the given time formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @return a date/time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(int dateStyle, int timeStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the given formatting styles
+ * for the given locale.
+ * @param dateStyle the given date formatting style. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param timeStyle the given time formatting style. Relative time styles are not
+ * currently supported, and behave just like the corresponding non-relative style.
+ * @param aLocale the given locale.
+ * @return a date/time formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(int dateStyle, int timeStyle, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the given formatting styles
+ * for the given locale.
+ * @param dateStyle the given date formatting style. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param timeStyle the given time formatting style. Relative time styles are not
+ * currently supported, and behave just like the corresponding non-relative style.
+ * @param locale the given ulocale.
+ * @return a date/time formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(int dateStyle, int timeStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a default date/time formatter that uses the SHORT style for both the
+ * date and the time.
+ */
+
+public static final android.icu.text.DateFormat getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of locales for which DateFormats are installed.
+ * @return the set of locales for which DateFormats are installed.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the calendar to be used by this date format.  Initially, the default
+ * calendar for the specified or default locale is used.
+ * @param newCalendar the new Calendar to be used by the date format
+ */
+
+public void setCalendar(android.icu.util.Calendar newCalendar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the calendar associated with this date/time formatter.
+ * @return the calendar associated with this date/time formatter.
+ */
+
+public android.icu.util.Calendar getCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the number formatter.
+ * @param newNumberFormat the given new NumberFormat.
+ */
+
+public void setNumberFormat(android.icu.text.NumberFormat newNumberFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number formatter which this date/time formatter uses to
+ * format and parse a time.
+ * @return the number formatter which this date/time formatter uses.
+ */
+
+public android.icu.text.NumberFormat getNumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone for the calendar of this DateFormat object.
+ * @param zone the given new time zone.
+ */
+
+public void setTimeZone(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone.
+ * @return the time zone associated with the calendar of DateFormat.
+ */
+
+public android.icu.util.TimeZone getTimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies whether date/time parsing is to be lenient.  With
+ * lenient parsing, the parser may use heuristics to interpret inputs that
+ * do not precisely match this object's format.  Without lenient parsing,
+ * inputs must match this object's format more closely.
+ * <br><br>
+ * <b>Note:</b> ICU 53 introduced finer grained control of leniency (and added
+ * new control points) making the preferred method a combination of
+ * setCalendarLenient() &amp; setBooleanAttribute() calls.
+ * This method supports prior functionality but may not support all
+ * future leniency control &amp; behavior of DateFormat. For control of pre 53 leniency,
+ * Calendar and DateFormat whitespace &amp; numeric tolerance, this method is safe to
+ * use. However, mixing leniency control via this method and modification of the
+ * newer attributes via setBooleanAttribute() may produce undesirable
+ * results.
+ *
+ * @param lenient True specifies date/time interpretation to be lenient.
+ * @see android.icu.util.Calendar#setLenient
+ * @see #setBooleanAttribute(BooleanAttribute, boolean)
+ * @see #setCalendarLenient(boolean)
+ */
+
+public void setLenient(boolean lenient) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether both date/time parsing in the encapsulated Calendar object and DateFormat whitespace &amp;
+ * numeric processing is lenient.
+ */
+
+public boolean isLenient() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies whether date/time parsing in the encapsulated Calendar object should be lenient.
+ * With lenient parsing, the parser may use heuristics to interpret inputs that
+ * do not precisely match this object's format.  Without lenient parsing,
+ * inputs must match this object's format more closely.
+ * @param lenient when true, Calendar parsing is lenient
+ * @see android.icu.util.Calendar#setLenient
+ */
+
+public void setCalendarLenient(boolean lenient) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether date/time parsing in the encapsulated Calendar object is lenient.
+ */
+
+public boolean isCalendarLenient() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a boolean attribute for this instance. Aspects of DateFormat leniency are controlled by
+ * boolean attributes.
+ *
+ * @see android.icu.text.DateFormat.BooleanAttribute
+ */
+
+public android.icu.text.DateFormat setBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute key, boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current value for the specified BooleanAttribute for this instance
+ *
+ * if attribute is missing false is returned.
+ *
+ * @see android.icu.text.DateFormat.BooleanAttribute
+ */
+
+public boolean getBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set a particular DisplayContext value in the formatter,
+ * such as CAPITALIZATION_FOR_STANDALONE.
+ *
+ * @param context The DisplayContext value to set.
+ */
+
+public void setContext(android.icu.text.DisplayContext context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Get the formatter's DisplayContext value for the specified DisplayContext.Type,
+ * such as CAPITALIZATION.
+ *
+ * @param type the DisplayContext.Type whose value to return
+ * @return the current DisplayContext setting for the specified type
+ */
+
+public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides hashCode.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates in
+ * the calendar system specified by <code>cal</code>.
+ * <p>
+ * @param cal   The calendar system for which a date format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date format is desired.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar cal, int dateStyle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates in
+ * the calendar system specified by <code>cal</code>.
+ * <p>
+ * @param cal   The calendar system for which a date format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date format is desired.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar cal, int dateStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a time format is desired.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the time format is desired.
+ *
+ * @see DateFormat#getTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar cal, int timeStyle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a time format is desired.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the time format is desired.
+ *
+ * @see DateFormat#getTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar cal, int timeStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ *
+ * @see DateFormat#getDateTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar cal, int dateStyle, int timeStyle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ *
+ * @see DateFormat#getDateTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar cal, int dateStyle, int timeStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a date/time formatter that uses the SHORT style
+ * for both the date and the time.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar cal, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a default date/time formatter that uses the SHORT style for both the
+ * date and the time.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object for the default locale that can be used
+ * to format dates in the calendar system specified by <code>cal</code>.
+ * <p>
+ * @param cal   The calendar system for which a date format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar cal, int dateStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a time format is desired.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @see DateFormat#getTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar cal, int timeStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object for the default locale that can be used to format
+ * dates and times in the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @see DateFormat#getDateTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar cal, int dateStyle, int timeStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the default locale.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar cal, java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar cal, java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the default locale.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar cal, java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar cal, java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant for <i>generic non-location format</i>, abbreviated if possible, such as PT;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String ABBR_GENERIC_TZ = "v";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated month.
+ */
+
+public static final java.lang.String ABBR_MONTH = "MMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated month and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String ABBR_MONTH_DAY = "MMMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String ABBR_MONTH_WEEKDAY_DAY = "MMMEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated quarter.
+ */
+
+public static final java.lang.String ABBR_QUARTER = "QQQ";
+
+/**
+ * <strong>[icu]</strong> Constant for <i>specific non-location format</i>, abbreviated if possible, such as PDT;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String ABBR_SPECIFIC_TZ = "z";
+
+/**
+ * <strong>[icu]</strong> Constant for <i>localized GMT/UTC format</i>, such as GMT+8:00 or HPG-8:00;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String ABBR_UTC_TZ = "ZZZZ";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated weekday.
+ */
+
+public static final java.lang.String ABBR_WEEKDAY = "E";
+
+/**
+ * FieldPosition selector for 'a' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#AM_PM Calendar#AM_PM} field.
+ */
+
+public static final int AM_PM_FIELD = 14; // 0xe
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'b' field alignment.
+ * No related Calendar field.
+ * This displays the fixed day period (am/pm/midnight/noon).
+ */
+
+public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
+
+/**
+ * FieldPosition selector for 'd' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DATE Calendar#DATE} field.
+ */
+
+public static final int DATE_FIELD = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with day.
+ */
+
+public static final java.lang.String DAY = "d";
+
+/**
+ * FieldPosition selector for 'E' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_WEEK Calendar#DAY_OF_WEEK} field.
+ */
+
+public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
+
+/**
+ * FieldPosition selector for 'F' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_WEEK_IN_MONTH Calendar#DAY_OF_WEEK_IN_MONTH} field.
+ */
+
+public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb
+
+/**
+ * FieldPosition selector for 'D' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_YEAR Calendar#DAY_OF_YEAR} field.
+ */
+
+public static final int DAY_OF_YEAR_FIELD = 10; // 0xa
+
+/**
+ * Constant for default style pattern.  Its value is MEDIUM.
+ */
+
+public static final int DEFAULT = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'e' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DOW_LOCAL Calendar#DOW_LOCAL} field.
+ */
+
+public static final int DOW_LOCAL_FIELD = 19; // 0x13
+
+/**
+ * FieldPosition selector for 'G' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ERA Calendar#ERA} field.
+ */
+
+public static final int ERA_FIELD = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'u' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#EXTENDED_YEAR Calendar#EXTENDED_YEAR} field.
+ */
+
+public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'B' field alignment.
+ * No related Calendar field.
+ * This displays the flexible day period.
+ */
+
+public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'S' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MILLISECOND Calendar#MILLISECOND} field.
+ *
+ * Note: Time formats that use 'S' can display a maximum of three
+ * significant digits for fractional seconds, corresponding to millisecond
+ * resolution and a fractional seconds sub-pattern of SSS. If the
+ * sub-pattern is S or SS, the fractional seconds value will be truncated
+ * (not rounded) to the number of display places specified. If the
+ * fractional seconds sub-pattern is longer than SSS, the additional
+ * display places will be filled with zeros.
+ */
+
+public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
+
+/**
+ * Constant for full style pattern.
+ */
+
+public static final int FULL = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for <i>generic non-location format</i>, such as Pacific Time;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String GENERIC_TZ = "vvvv";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour, with the locale's preferred hour format (12 or 24).
+ */
+
+public static final java.lang.String HOUR = "j";
+
+/**
+ * FieldPosition selector for 'K' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR Calendar#HOUR} field.
+ * HOUR0_FIELD is used for the zero-based 12-hour clock.
+ * For example, 11:30 PM + 1 hour results in 00:30 AM.
+ */
+
+public static final int HOUR0_FIELD = 16; // 0x10
+
+/**
+ * FieldPosition selector for 'h' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR Calendar#HOUR} field.
+ * HOUR1_FIELD is used for the one-based 12-hour clock.
+ * For example, 11:30 PM + 1 hour results in 12:30 AM.
+ */
+
+public static final int HOUR1_FIELD = 15; // 0xf
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour in 24-hour presentation.
+ */
+
+public static final java.lang.String HOUR24 = "H";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour and minute in 24-hour presentation.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR24_MINUTE = "Hm";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour, minute, and second in
+ * 24-hour presentation.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR24_MINUTE_SECOND = "Hms";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour and minute, with the locale's preferred hour format (12 or 24).
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR_MINUTE = "jm";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour, minute, and second,
+ * with the locale's preferred hour format (12 or 24).
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR_MINUTE_SECOND = "jms";
+
+/**
+ * FieldPosition selector for 'H' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR_OF_DAY Calendar#HOUR_OF_DAY} field.
+ * HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
+ * For example, 23:59 + 01:00 results in 00:59.
+ */
+
+public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5
+
+/**
+ * FieldPosition selector for 'k' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR_OF_DAY Calendar#HOUR_OF_DAY} field.
+ * HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock.
+ * For example, 23:59 + 01:00 results in 24:59.
+ */
+
+public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'g' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#JULIAN_DAY Calendar#JULIAN_DAY} field.
+ */
+
+public static final int JULIAN_DAY_FIELD = 21; // 0x15
+
+/**
+ * <strong>[icu]</strong> Constant for <i>generic location format</i>, such as Los Angeles Time;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String LOCATION_TZ = "VVVV";
+
+/**
+ * Constant for long style pattern.
+ */
+
+public static final int LONG = 1; // 0x1
+
+/**
+ * Constant for medium style pattern.
+ */
+
+public static final int MEDIUM = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'A' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MILLISECONDS_IN_DAY Calendar#MILLISECONDS_IN_DAY} field.
+ */
+
+public static final int MILLISECONDS_IN_DAY_FIELD = 22; // 0x16
+
+/**
+ * Alias for FRACTIONAL_SECOND_FIELD.
+ */
+
+public static final int MILLISECOND_FIELD = 8; // 0x8
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with minute.
+ */
+
+public static final java.lang.String MINUTE = "m";
+
+/**
+ * FieldPosition selector for 'm' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MINUTE Calendar#MINUTE} field.
+ */
+
+public static final int MINUTE_FIELD = 6; // 0x6
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with minute and second.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String MINUTE_SECOND = "ms";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with month.
+ */
+
+public static final java.lang.String MONTH = "MMMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with long month and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String MONTH_DAY = "MMMMd";
+
+/**
+ * FieldPosition selector for 'M' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ */
+
+public static final int MONTH_FIELD = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String MONTH_WEEKDAY_DAY = "MMMMEEEEd";
+
+/**
+ * <strong>[icu]</strong> Constant for empty style pattern.
+ */
+
+public static final int NONE = -1; // 0xffffffff
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with numeric month.
+ */
+
+public static final java.lang.String NUM_MONTH = "M";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with numeric month and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String NUM_MONTH_DAY = "Md";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with numeric month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String NUM_MONTH_WEEKDAY_DAY = "MEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with quarter.
+ */
+
+public static final java.lang.String QUARTER = "QQQQ";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'Q' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ * This displays the quarter.
+ */
+
+public static final int QUARTER_FIELD = 27; // 0x1b
+
+/**
+ * <strong>[icu]</strong> Constant for relative style mask.
+ */
+
+public static final int RELATIVE = 128; // 0x80
+
+/**
+ * <strong>[icu]</strong> Constant for relative default style pattern.
+ */
+
+public static final int RELATIVE_DEFAULT = 130; // 0x82
+
+/**
+ * <strong>[icu]</strong> Constant for relative full style pattern.
+ */
+
+public static final int RELATIVE_FULL = 128; // 0x80
+
+/**
+ * <strong>[icu]</strong> Constant for relative style pattern.
+ */
+
+public static final int RELATIVE_LONG = 129; // 0x81
+
+/**
+ * <strong>[icu]</strong> Constant for relative style pattern.
+ */
+
+public static final int RELATIVE_MEDIUM = 130; // 0x82
+
+/**
+ * <strong>[icu]</strong> Constant for relative style pattern.
+ */
+
+public static final int RELATIVE_SHORT = 131; // 0x83
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with second.
+ */
+
+public static final java.lang.String SECOND = "s";
+
+/**
+ * FieldPosition selector for 's' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#SECOND Calendar#SECOND} field.
+ */
+
+public static final int SECOND_FIELD = 7; // 0x7
+
+/**
+ * Constant for short style pattern.
+ */
+
+public static final int SHORT = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for <i>specific non-location format</i>, such as Pacific Daylight Time;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String SPECIFIC_TZ = "zzzz";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'c' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_WEEK Calendar#DAY_OF_WEEK} field.
+ * This displays the stand alone day name, if available.
+ */
+
+public static final int STANDALONE_DAY_FIELD = 25; // 0x19
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'L' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ * This displays the stand alone month name, if available.
+ */
+
+public static final int STANDALONE_MONTH_FIELD = 26; // 0x1a
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'q' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ * This displays the stand alone quarter, if available.
+ */
+
+public static final int STANDALONE_QUARTER_FIELD = 28; // 0x1c
+
+/**
+ * FieldPosition selector for 'z' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.
+ */
+
+public static final int TIMEZONE_FIELD = 17; // 0x11
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'v' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the generic zone
+ * name, if available.
+ */
+
+public static final int TIMEZONE_GENERIC_FIELD = 24; // 0x18
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'X' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the
+ * ISO 8601 local time offset format or UTC indicator ("Z").
+ */
+
+public static final int TIMEZONE_ISO_FIELD = 32; // 0x20
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'x' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the
+ * ISO 8601 local time offset format.
+ */
+
+public static final int TIMEZONE_ISO_LOCAL_FIELD = 33; // 0x21
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'O' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the
+ * localized GMT format.
+ */
+
+public static final int TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31; // 0x1f
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'Z' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.
+ */
+
+public static final int TIMEZONE_RFC_FIELD = 23; // 0x17
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'V' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the fallback timezone
+ * name when VVVV is specified, and the short standard or daylight
+ * timezone name ignoring commonlyUsed when a single V is specified.
+ */
+
+public static final int TIMEZONE_SPECIAL_FIELD = 29; // 0x1d
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with weekday.
+ */
+
+public static final java.lang.String WEEKDAY = "EEEE";
+
+/**
+ * FieldPosition selector for 'W' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#WEEK_OF_MONTH Calendar#WEEK_OF_MONTH} field.
+ */
+
+public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd
+
+/**
+ * FieldPosition selector for 'w' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#WEEK_OF_YEAR Calendar#WEEK_OF_YEAR} field.
+ */
+
+public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year.
+ */
+
+public static final java.lang.String YEAR = "y";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and abbreviated month.
+ */
+
+public static final java.lang.String YEAR_ABBR_MONTH = "yMMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, abbreviated month, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_ABBR_MONTH_DAY = "yMMMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, abbreviated month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_ABBR_MONTH_WEEKDAY_DAY = "yMMMEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and abbreviated quarter.
+ */
+
+public static final java.lang.String YEAR_ABBR_QUARTER = "yQQQ";
+
+/**
+ * FieldPosition selector for 'y' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#YEAR Calendar#YEAR} field.
+ */
+
+public static final int YEAR_FIELD = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and month.
+ */
+
+public static final java.lang.String YEAR_MONTH = "yMMMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, month, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_MONTH_DAY = "yMMMMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_MONTH_WEEKDAY_DAY = "yMMMMEEEEd";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'U' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#YEAR Calendar#YEAR} field.
+ * This displays the cyclic year name, if available.
+ */
+
+public static final int YEAR_NAME_FIELD = 30; // 0x1e
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and numeric month.
+ */
+
+public static final java.lang.String YEAR_NUM_MONTH = "yM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, numeric month, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_NUM_MONTH_DAY = "yMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, numeric month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_NUM_MONTH_WEEKDAY_DAY = "yMEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and quarter.
+ */
+
+public static final java.lang.String YEAR_QUARTER = "yQQQQ";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'Y' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#YEAR_WOY Calendar#YEAR_WOY} field.
+ */
+
+public static final int YEAR_WOY_FIELD = 18; // 0x12
+
+/**
+ * The calendar that <code>DateFormat</code> uses to produce the time field
+ * values needed to implement date and time formatting.  Subclasses should
+ * initialize this to a calendar appropriate for the locale associated with
+ * this <code>DateFormat</code>.
+ * @serial
+ */
+
+protected android.icu.util.Calendar calendar;
+
+/**
+ * The number formatter that <code>DateFormat</code> uses to format numbers
+ * in dates and times.  Subclasses should initialize this to a number format
+ * appropriate for the locale associated with this <code>DateFormat</code>.
+ * @serial
+ */
+
+protected android.icu.text.NumberFormat numberFormat;
+/**
+ * boolean attributes
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum BooleanAttribute {
+/**
+ * indicates whitespace tolerance. Also included is trailing dot tolerance.
+ */
+
+PARSE_ALLOW_WHITESPACE,
+/**
+ * indicates tolerance of numeric data when String data may be assumed.
+ * e.g. YEAR_NAME_FIELD
+ */
+
+PARSE_ALLOW_NUMERIC,
+/**
+ * indicates tolerance of pattern mismatch between input data and specified format pattern.
+ * e.g. accepting "September" for a month pattern of MMM ("Sep")
+ */
+
+PARSE_MULTIPLE_PATTERNS_FOR_MATCH,
+/**
+ * indicates tolerance of a partial literal match
+ * e.g. accepting "--mon-02-march-2011" for a pattern of "'--: 'EEE-WW-MMMM-yyyy"
+ */
+
+PARSE_PARTIAL_LITERAL_MATCH;
+}
+
+/**
+ * The instances of this inner class are used as attribute keys and values
+ * in AttributedCharacterIterator that
+ * DateFormat.formatToCharacterIterator() method returns.
+ *
+ * <p>There is no public constructor to this class, the only instances are the
+ * constants defined here.
+ * <p>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Field extends java.text.Format.Field {
+
+/**
+ * Constructs a <code>DateFormat.Field</code> with the given name and
+ * the <code>Calendar</code> field which this attribute represents.  Use -1 for
+ * <code>calendarField</code> if this field does not have a corresponding
+ * <code>Calendar</code> field.
+ *
+ * @param name          Name of the attribute
+ * @param calendarField <code>Calendar</code> field constant
+ */
+
+protected Field(java.lang.String name, int calendarField) { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>Field</code> constant that corresponds to the <code>
+ * Calendar</code> field <code>calendarField</code>.  If there is no
+ * corresponding <code>Field</code> is available, null is returned.
+ *
+ * @param calendarField <code>Calendar</code> field constant
+ * @return <code>Field</code> associated with the <code>calendarField</code>,
+ * or null if no associated <code>Field</code> is available.
+ * @throws java.lang.IllegalArgumentException if <code>calendarField</code> is not
+ * a valid <code>Calendar</code> field constant.
+ */
+
+public static android.icu.text.DateFormat.Field ofCalendarField(int calendarField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>Calendar</code> field associated with this attribute.
+ * If there is no corresponding <code>Calendar</code> available, this will
+ * return -1.
+ *
+ * @return <code>Calendar</code> constant for this attribute.
+ */
+
+public int getCalendarField() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resolves instances being deserialized to the predefined constants.
+ *
+ * @throws java.io.InvalidObjectException if the constant could not be resolved.
+ */
+
+protected java.lang.Object readResolve() throws java.io.InvalidObjectException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant identifying the time of day indicator(am/pm).
+ */
+
+public static final android.icu.text.DateFormat.Field AM_PM;
+static { AM_PM = null; }
+
+/**
+ * <strong>[icu]</strong> Constant identifying the am/pm/midnight/noon field.
+ */
+
+public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
+static { AM_PM_MIDNIGHT_NOON = null; }
+
+/**
+ * Constant identifying the day of month field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
+static { DAY_OF_MONTH = null; }
+
+/**
+ * Constant identifying the day of week field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
+static { DAY_OF_WEEK = null; }
+
+/**
+ * Constant identifying the day of week in month field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
+static { DAY_OF_WEEK_IN_MONTH = null; }
+
+/**
+ * Constant identifying the day of year field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_YEAR;
+static { DAY_OF_YEAR = null; }
+
+/**
+ * Constant identifying the local day of week field.
+ */
+
+public static final android.icu.text.DateFormat.Field DOW_LOCAL;
+static { DOW_LOCAL = null; }
+
+/**
+ * Constant identifying the era field.
+ */
+
+public static final android.icu.text.DateFormat.Field ERA;
+static { ERA = null; }
+
+/**
+ * Constant identifying the extended year field.
+ */
+
+public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+static { EXTENDED_YEAR = null; }
+
+/**
+ * <strong>[icu]</strong> Constant identifying the flexible day period field.
+ */
+
+public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
+static { FLEXIBLE_DAY_PERIOD = null; }
+
+/**
+ * Constant identifying the hour(0-11) field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR0;
+static { HOUR0 = null; }
+
+/**
+ * Constant identifying the hour(1-12) field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR1;
+static { HOUR1 = null; }
+
+/**
+ * Constant identifying the hour(0-23) of day field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
+static { HOUR_OF_DAY0 = null; }
+
+/**
+ * Constant identifying the hour(1-24) of day field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR_OF_DAY1;
+static { HOUR_OF_DAY1 = null; }
+
+/**
+ * Constant identifying the Julian day field.
+ */
+
+public static final android.icu.text.DateFormat.Field JULIAN_DAY;
+static { JULIAN_DAY = null; }
+
+/**
+ * Constant identifying the millisecond field.
+ */
+
+public static final android.icu.text.DateFormat.Field MILLISECOND;
+static { MILLISECOND = null; }
+
+/**
+ * Constant identifying the milliseconds in day field.
+ */
+
+public static final android.icu.text.DateFormat.Field MILLISECONDS_IN_DAY;
+static { MILLISECONDS_IN_DAY = null; }
+
+/**
+ * Constant identifying the minute field.
+ */
+
+public static final android.icu.text.DateFormat.Field MINUTE;
+static { MINUTE = null; }
+
+/**
+ * Constant identifying the month field.
+ */
+
+public static final android.icu.text.DateFormat.Field MONTH;
+static { MONTH = null; }
+
+/**
+ * Constant identifying the quarter field.
+ */
+
+public static final android.icu.text.DateFormat.Field QUARTER;
+static { QUARTER = null; }
+
+/**
+ * Constant identifying the second field.
+ */
+
+public static final android.icu.text.DateFormat.Field SECOND;
+static { SECOND = null; }
+
+/**
+ * Constant identifying the time zone field.
+ */
+
+public static final android.icu.text.DateFormat.Field TIME_ZONE;
+static { TIME_ZONE = null; }
+
+/**
+ * Constant identifying the week of month field.
+ */
+
+public static final android.icu.text.DateFormat.Field WEEK_OF_MONTH;
+static { WEEK_OF_MONTH = null; }
+
+/**
+ * Constant identifying the week of year field.
+ */
+
+public static final android.icu.text.DateFormat.Field WEEK_OF_YEAR;
+static { WEEK_OF_YEAR = null; }
+
+/**
+ * Constant identifying the year field.
+ */
+
+public static final android.icu.text.DateFormat.Field YEAR;
+static { YEAR = null; }
+
+/**
+ * Constant identifying the year used with week of year field.
+ */
+
+public static final android.icu.text.DateFormat.Field YEAR_WOY;
+static { YEAR_WOY = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateFormatSymbols.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateFormatSymbols.java
new file mode 100644
index 0000000..eb9e1d5
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateFormatSymbols.java
@@ -0,0 +1,561 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.MissingResourceException;
+import java.util.Locale;
+import android.icu.util.Calendar;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DateFormatSymbols}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>DateFormatSymbols</code> is a public class for encapsulating
+ * localizable date-time formatting data, such as the names of the
+ * months, the names of the days of the week, and the time zone data.
+ * <code>DateFormat</code> and <code>SimpleDateFormat</code> both use
+ * <code>DateFormatSymbols</code> to encapsulate this information.
+ *
+ * <p>Typically you shouldn't use <code>DateFormatSymbols</code> directly.
+ * Rather, you are encouraged to create a date-time formatter with the
+ * <code>DateFormat</code> class's factory methods: <code>getTimeInstance</code>,
+ * <code>getDateInstance</code>, or <code>getDateTimeInstance</code>.
+ * These methods automatically create a <code>DateFormatSymbols</code> for
+ * the formatter so that you don't have to. After the
+ * formatter is created, you may modify its format pattern using the
+ * <code>setPattern</code> method. For more information about
+ * creating formatters using <code>DateFormat</code>'s factory methods,
+ * see {@link android.icu.text.DateFormat DateFormat}.
+ *
+ * <p>If you decide to create a date-time formatter with a specific
+ * format pattern for a specific locale, you can do so with:
+ * <blockquote>
+ * <pre>
+ * new SimpleDateFormat(aPattern, new DateFormatSymbols(aLocale)).
+ * </pre>
+ * </blockquote>
+ *
+ * <p><code>DateFormatSymbols</code> objects are clonable. When you obtain
+ * a <code>DateFormatSymbols</code> object, feel free to modify the
+ * date-time formatting data. For instance, you can replace the localized
+ * date-time format pattern characters with the ones that you feel easy
+ * to remember. Or you can change the representative cities
+ * to your favorite ones.
+ *
+ * <p>New <code>DateFormatSymbols</code> subclasses may be added to support
+ * <code>SimpleDateFormat</code> for date-time formatting for additional locales.
+ *
+ * @see          android.icu.text.DateFormat
+ * @see          android.icu.text.SimpleDateFormat
+ * @author       Chen-Lieh Huang
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateFormatSymbols implements java.io.Serializable, java.lang.Cloneable {
+
+/**
+ * Constructs a DateFormatSymbols object by loading format data from
+ * resources for the default <code>FORMAT</code> locale.
+ *
+ * @throws java.util.MissingResourceException if the resources for the default locale
+ *          cannot be found or cannot be loaded.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DateFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a DateFormatSymbols object by loading format data from
+ * resources for the given locale.
+ *
+ * @throws java.util.MissingResourceException if the resources for the specified
+ *          locale cannot be found or cannot be loaded.
+ */
+
+public DateFormatSymbols(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constructs a DateFormatSymbols object by loading format data from
+ * resources for the given ulocale.
+ *
+ * @throws java.util.MissingResourceException if the resources for the specified
+ *          locale cannot be found or cannot be loaded.
+ */
+
+public DateFormatSymbols(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the {@link android.icu.text.DateFormatSymbols DateFormatSymbols} object that should be used to format a
+ * calendar system's dates in the given locale.
+ *
+ * @param cal       The calendar system whose date format symbols are desired.
+ * @param locale    The locale whose symbols are desired.
+ *
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(android.icu.util.Calendar cal, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the {@link android.icu.text.DateFormatSymbols DateFormatSymbols} object that should be used to format a
+ * calendar system's dates in the given locale.
+ * @param cal       The calendar system whose date format symbols are desired.
+ * @param locale    The ulocale whose symbols are desired.
+ *
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(android.icu.util.Calendar cal, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Variant of DateFormatSymbols(Calendar, Locale) that takes the Calendar class
+ * instead of a Calendar instance.
+ * @see #DateFormatSymbols(Calendar, Locale)
+ */
+
+public DateFormatSymbols(java.lang.Class<? extends android.icu.util.Calendar> calendarClass, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Variant of DateFormatSymbols(Calendar, ULocale) that takes the Calendar class
+ * instead of a Calendar instance.
+ * @see #DateFormatSymbols(Calendar, Locale)
+ */
+
+public DateFormatSymbols(java.lang.Class<? extends android.icu.util.Calendar> calendarClass, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fetches a custom calendar's DateFormatSymbols out of the given resource
+ * bundle.  Symbols that are not overridden are inherited from the
+ * default DateFormatSymbols for the locale.
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(java.util.ResourceBundle bundle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fetches a custom calendar's DateFormatSymbols out of the given resource
+ * bundle.  Symbols that are not overridden are inherited from the
+ * default DateFormatSymbols for the locale.
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(java.util.ResourceBundle bundle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DateFormatSymbols instance for the default locale.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getInstance</code>,
+ * this method simply returns <code>new android.icu.text.DateFormatSymbols()</code>.
+ * ICU does not support <code>DateFormatSymbolsProvider</code> introduced in Java 6
+ * or its equivalent implementation for now.
+ *
+ * @return A DateFormatSymbols instance.
+ */
+
+public static android.icu.text.DateFormatSymbols getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DateFormatSymbols instance for the given locale.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getInstance</code>,
+ * this method simply returns <code>new android.icu.text.DateFormatSymbols(locale)</code>.
+ * ICU does not support <code>DateFormatSymbolsProvider</code> introduced in Java 6
+ * or its equivalent implementation for now.
+ *
+ * @param locale the locale.
+ * @return A DateFormatSymbols instance.
+ */
+
+public static android.icu.text.DateFormatSymbols getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a DateFormatSymbols instance for the given locale.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getInstance</code>,
+ * this method simply returns <code>new android.icu.text.DateFormatSymbols(locale)</code>.
+ * ICU does not support <code>DateFormatSymbolsProvider</code> introduced in Java 6
+ * or its equivalent implementation for now.
+ *
+ * @param locale the locale.
+ * @return A DateFormatSymbols instance.
+ */
+
+public static android.icu.text.DateFormatSymbols getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of all locales for which the <code>getInstance</code> methods of
+ * this class can return localized instances.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getAvailableLocales</code>,
+ * this method simply returns the array of <code>Locale</code>s available in this
+ * class.  ICU does not support <code>DateFormatSymbolsProvider</code> introduced in
+ * Java 6 or its equivalent implementation for now.
+ *
+ * @return An array of <code>Locale</code>s for which localized
+ * <code>DateFormatSymbols</code> instances are available.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns abbreviated era strings. For example: "AD" and "BC".
+ * @return the era strings.
+ */
+
+public java.lang.String[] getEras() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets abbreviated era strings. For example: "AD" and "BC".
+ * @param newEras the new era strings.
+ */
+
+public void setEras(java.lang.String[] newEras) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns full era name strings. For example: "Anno Domini" and "Before Christ".
+ * @return the era strings.
+ */
+
+public java.lang.String[] getEraNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets full era name strings. For example: "Anno Domini" and "Before Christ".
+ * @param newEraNames the new era strings.
+ */
+
+public void setEraNames(java.lang.String[] newEraNames) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns narrow era name strings. For example: "A" and "B".
+ * @return the narrow era strings.
+ */
+
+public java.lang.String[] getNarrowEras() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets narrow era name strings. For example: "A" and "B".
+ * @param newNarrowEras the new narrow era strings.
+ */
+
+public void setNarrowEras(java.lang.String[] newNarrowEras) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns month strings. For example: "January", "February", etc.
+ * @return the month strings.
+ */
+
+public java.lang.String[] getMonths() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns month strings. For example: "January", "February", etc.
+ * @param context    The month context, FORMAT or STANDALONE.
+ * @param width      The width or the returned month string,
+ *                   either WIDE, ABBREVIATED, or NARROW.
+ * @return the month strings.
+ */
+
+public java.lang.String[] getMonths(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets month strings. For example: "January", "February", etc.
+ * @param newMonths the new month strings.
+ */
+
+public void setMonths(java.lang.String[] newMonths) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets month strings. For example: "January", "February", etc.
+ * @param newMonths the new month strings.
+ * @param context    The formatting context, FORMAT or STANDALONE.
+ * @param width      The width of the month string,
+ *                   either WIDE, ABBREVIATED, or NARROW.
+ */
+
+public void setMonths(java.lang.String[] newMonths, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns short month strings. For example: "Jan", "Feb", etc.
+ * @return the short month strings.
+ */
+
+public java.lang.String[] getShortMonths() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets short month strings. For example: "Jan", "Feb", etc.
+ * @param newShortMonths the new short month strings.
+ */
+
+public void setShortMonths(java.lang.String[] newShortMonths) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns wide weekday strings. For example: "Sunday", "Monday", etc.
+ * @return the weekday strings. Use <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc. to index the result array.
+ */
+
+public java.lang.String[] getWeekdays() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns weekday strings. For example: "Sunday", "Monday", etc.
+ * @return the weekday strings. Use <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc. to index the result array.
+ * @param context    Formatting context, either FORMAT or STANDALONE.
+ * @param width      Width of strings to be returned, either
+ *                   WIDE, ABBREVIATED, SHORT, or NARROW
+ */
+
+public java.lang.String[] getWeekdays(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets weekday strings. For example: "Sunday", "Monday", etc.
+ * @param newWeekdays The new weekday strings.
+ * @param context     The formatting context, FORMAT or STANDALONE.
+ * @param width       The width of the strings,
+ *                    either WIDE, ABBREVIATED, SHORT, or NARROW.
+ */
+
+public void setWeekdays(java.lang.String[] newWeekdays, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets wide weekday strings. For example: "Sunday", "Monday", etc.
+ * @param newWeekdays the new weekday strings. The array should
+ * be indexed by <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc.
+ */
+
+public void setWeekdays(java.lang.String[] newWeekdays) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns abbreviated weekday strings; for example: "Sun", "Mon", etc.
+ * (Note: the method name is misleading; it does not get the CLDR-style
+ * "short" weekday strings, e.g. "Su", "Mo", etc.)
+ * @return the abbreviated weekday strings. Use <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc. to index the result array.
+ */
+
+public java.lang.String[] getShortWeekdays() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets abbreviated weekday strings; for example: "Sun", "Mon", etc.
+ * (Note: the method name is misleading; it does not set the CLDR-style
+ * "short" weekday strings, e.g. "Su", "Mo", etc.)
+ * @param newAbbrevWeekdays the new abbreviated weekday strings. The array should
+ * be indexed by <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc.
+ */
+
+public void setShortWeekdays(java.lang.String[] newAbbrevWeekdays) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns quarter strings. For example: "1st Quarter", "2nd Quarter", etc.
+ * @param context    The quarter context, FORMAT or STANDALONE.
+ * @param width      The width or the returned quarter string,
+ *                   either WIDE or ABBREVIATED. There are no NARROW quarters.
+ * @return the quarter strings.
+ */
+
+public java.lang.String[] getQuarters(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets quarter strings. For example: "1st Quarter", "2nd Quarter", etc.
+ * @param newQuarters the new quarter strings.
+ * @param context    The formatting context, FORMAT or STANDALONE.
+ * @param width      The width of the quarter string,
+ *                   either WIDE or ABBREVIATED. There are no NARROW quarters.
+ */
+
+public void setQuarters(java.lang.String[] newQuarters, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns cyclic year name strings if the calendar has them,
+ * for example: "jia-zi", "yi-chou", etc.
+ * @param context   The usage context: FORMAT, STANDALONE.
+ * @param width     The requested name width: WIDE, ABBREVIATED, SHORT, NARROW.
+ * @return          The year name strings, or null if they are not
+ *                  available for this calendar.
+ */
+
+public java.lang.String[] getYearNames(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets cyclic year name strings, for example: "jia-zi", "yi-chou", etc.
+ * @param yearNames The new cyclic year name strings.
+ * @param context   The usage context: FORMAT, STANDALONE (currently only FORMAT is supported).
+ * @param width     The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported).
+ */
+
+public void setYearNames(java.lang.String[] yearNames, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns calendar zodiac name strings if the calendar has them,
+ * for example: "Rat", "Ox", "Tiger", etc.
+ * @param context   The usage context: FORMAT, STANDALONE.
+ * @param width     The requested name width: WIDE, ABBREVIATED, SHORT, NARROW.
+ * @return          The zodiac name strings, or null if they are not
+ *                  available for this calendar.
+ */
+
+public java.lang.String[] getZodiacNames(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets calendar zodiac name strings, for example: "Rat", "Ox", "Tiger", etc.
+ * @param zodiacNames   The new zodiac name strings.
+ * @param context   The usage context: FORMAT, STANDALONE (currently only FORMAT is supported).
+ * @param width     The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported).
+ */
+
+public void setZodiacNames(java.lang.String[] zodiacNames, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns am/pm strings. For example: "AM" and "PM".
+ * @return the weekday strings.
+ */
+
+public java.lang.String[] getAmPmStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets am/pm strings. For example: "AM" and "PM".
+ * @param newAmpms the new ampm strings.
+ */
+
+public void setAmPmStrings(java.lang.String[] newAmpms) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns time zone strings.
+ * <p>
+ * The array returned by this API is a two dimensional String array and
+ * each row contains at least following strings:
+ * <ul>
+ * <li>ZoneStrings[n][0] - System time zone ID
+ * <li>ZoneStrings[n][1] - Long standard time display name
+ * <li>ZoneStrings[n][2] - Short standard time display name
+ * <li>ZoneStrings[n][3] - Long daylight saving time display name
+ * <li>ZoneStrings[n][4] - Short daylight saving time display name
+ * </ul>
+ * When a localized display name is not available, the corresponding
+ * array element will be <code>null</code>.
+ * <p>
+ * <b>Note</b>: ICU implements the time zone display name formatting algorithm
+ * specified by <a href="http://www.unicode.org/reports/tr35/">UTS#35 Unicode
+ * Locale Data Markup Language(LDML)</a>. The algorithm supports historic
+ * display name changes and various different types of names not available in
+ * {@link java.text.DateFormatSymbols#getZoneStrings()}. For accessing the full
+ * set of time zone string data used by ICU implementation, you should use
+ * {@link android.icu.text.TimeZoneNames TimeZoneNames} APIs instead.
+ *
+ * @return the time zone strings.
+ */
+
+public java.lang.String[][] getZoneStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets time zone strings.
+ * <p>
+ * <b>Note</b>: {@link android.icu.text.SimpleDateFormat SimpleDateFormat} no longer uses the
+ * zone strings stored in a <code>DateFormatSymbols</code>.
+ * Therefore, the time zone strings set by this method have
+ * no effects in an instance of <code>SimpleDateFormat</code>
+ * for formatting time zones. If you want to customize time
+ * zone display names formatted by <code>SimpleDateFormat</code>,
+ * you should customize {@link android.icu.text.TimeZoneFormat TimeZoneFormat} and set the
+ * instance by {@link android.icu.text.SimpleDateFormat#setTimeZoneFormat(android.icu.text.TimeZoneFormat) SimpleDateFormat#setTimeZoneFormat(TimeZoneFormat)}
+ * instead.
+ *
+ * @param newZoneStrings the new time zone strings.
+ */
+
+public void setZoneStrings(java.lang.String[][] newZoneStrings) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns localized date-time pattern characters. For example: 'u', 't', etc.
+ *
+ * <p>Note: ICU no longer provides localized date-time pattern characters for a locale
+ * starting ICU 3.8.  This method returns the non-localized date-time pattern
+ * characters unless user defined localized data is set by setLocalPatternChars.
+ * @return the localized date-time pattern characters.
+ */
+
+public java.lang.String getLocalPatternChars() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets localized date-time pattern characters. For example: 'u', 't', etc.
+ * @param newLocalPatternChars the new localized date-time
+ * pattern characters.
+ */
+
+public void setLocalPatternChars(java.lang.String newLocalPatternChars) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode.
+ * Generates a hash code for the DateFormatSymbols object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes format symbols for the locale and calendar type
+ * @param desiredLocale The locale whose symbols are desired.
+ * @param type          The calendar type whose date format symbols are desired.
+ */
+
+protected void initializeData(android.icu.util.ULocale desiredLocale, java.lang.String type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant for width.
+ */
+
+public static final int ABBREVIATED = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for context.
+ */
+
+public static final int FORMAT = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for width.
+ */
+
+public static final int NARROW = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Constant for width; only supported for weekdays.
+ */
+
+public static final int SHORT = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for context.
+ */
+
+public static final int STANDALONE = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant for width.
+ */
+
+public static final int WIDE = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalFormat.java
new file mode 100644
index 0000000..3599e1d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalFormat.java
@@ -0,0 +1,595 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*   Copyright (C) 2008-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*/
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Calendar;
+import android.icu.util.DateInterval;
+import java.text.FieldPosition;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+import android.icu.util.Output;
+import android.icu.util.TimeZone;
+
+/**
+ * DateIntervalFormat is a class for formatting and parsing date
+ * intervals in a language-independent manner.
+ * Only formatting is supported. Parsing is not supported.
+ *
+ * <P>
+ * Date interval means from one date to another date,
+ * for example, from "Jan 11, 2008" to "Jan 18, 2008".
+ * We introduced class DateInterval to represent it.
+ * DateInterval is a pair of UDate, which is
+ * the standard milliseconds since 24:00 GMT, Jan 1, 1970.
+ *
+ * <P>
+ * DateIntervalFormat formats a DateInterval into
+ * text as compactly as possible.
+ * For example, the date interval format from "Jan 11, 2008" to "Jan 18,. 2008"
+ * is "Jan 11-18, 2008" for English.
+ * And it parses text into DateInterval,
+ * although initially, parsing is not supported.
+ *
+ * <P>
+ * There is no structural information in date time patterns.
+ * For any punctuations and string literals inside a date time pattern,
+ * we do not know whether it is just a separator, or a prefix, or a suffix.
+ * Without such information, so, it is difficult to generate a sub-pattern
+ * (or super-pattern) by algorithm.
+ * So, formatting a DateInterval is pattern-driven. It is very
+ * similar to formatting in SimpleDateFormat.
+ * We introduce class DateIntervalInfo to save date interval
+ * patterns, similar to date time pattern in SimpleDateFormat.
+ *
+ * <P>
+ * Logically, the interval patterns are mappings
+ * from (skeleton, the_largest_different_calendar_field)
+ * to (date_interval_pattern).
+ *
+ * <P>
+ * A skeleton
+ * <ol>
+ * <li>
+ * only keeps the field pattern letter and ignores all other parts
+ * in a pattern, such as space, punctuations, and string literals.
+ * <li>
+ * hides the order of fields.
+ * <li>
+ * might hide a field's pattern letter length.
+ *
+ * For those non-digit calendar fields, the pattern letter length is
+ * important, such as MMM, MMMM, and MMMMM; EEE and EEEE,
+ * and the field's pattern letter length is honored.
+ *
+ * For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy,
+ * the field pattern length is ignored and the best match, which is defined
+ * in date time patterns, will be returned without honor the field pattern
+ * letter length in skeleton.
+ * </ol>
+ *
+ * <P>
+ * The calendar fields we support for interval formatting are:
+ * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, and
+ * second (though we do not currently have specific intervalFormat data for
+ * skeletons with seconds).
+ * Those calendar fields can be defined in the following order:
+ * year &gt; month &gt; date &gt; hour (in day) &gt; minute &gt; second
+ *
+ * The largest different calendar fields between 2 calendars is the
+ * first different calendar field in above order.
+ *
+ * For example: the largest different calendar fields between "Jan 10, 2007"
+ * and "Feb 20, 2008" is year.
+ *
+ * <P>
+ * For other calendar fields, the compact interval formatting is not
+ * supported. And the interval format will be fall back to fall-back
+ * patterns, which is mostly "{date0} - {date1}".
+ *
+ * <P>
+ * There is a set of pre-defined static skeleton strings in DateFormat,
+ * There are pre-defined interval patterns for those pre-defined skeletons
+ * in locales' resource files.
+ * For example, for a skeleton YEAR_ABBR_MONTH_DAY, which is  "yMMMd",
+ * in  en_US, if the largest different calendar field between date1 and date2
+ * is "year", the date interval pattern  is "MMM d, yyyy - MMM d, yyyy",
+ * such as "Jan 10, 2007 - Jan 10, 2008".
+ * If the largest different calendar field between date1 and date2 is "month",
+ * the date interval pattern is "MMM d - MMM d, yyyy",
+ * such as "Jan 10 - Feb 10, 2007".
+ * If the largest different calendar field between date1 and date2 is "day",
+ * the date interval pattern is ""MMM d-d, yyyy", such as "Jan 10-20, 2007".
+ *
+ * For date skeleton, the interval patterns when year, or month, or date is
+ * different are defined in resource files.
+ * For time skeleton, the interval patterns when am/pm, or hour, or minute is
+ * different are defined in resource files.
+ *
+ * <P>
+ * If a skeleton is not found in a locale's DateIntervalInfo, which means
+ * the interval patterns for the skeleton is not defined in resource file,
+ * the interval pattern will falls back to the interval "fallback" pattern
+ * defined in resource file.
+ * If the interval "fallback" pattern is not defined, the default fall-back
+ * is "{date0} - {data1}".
+ *
+ * <P>
+ * For the combination of date and time,
+ * The rule to genearte interval patterns are:
+ * <ol>
+ * <li>
+ *    when the year, month, or day differs, falls back to fall-back
+ *    interval pattern, which mostly is the concatenate the two original
+ *    expressions with a separator between,
+ *    For example, interval pattern from "Jan 10, 2007 10:10 am"
+ *    to "Jan 11, 2007 10:10am" is
+ *    "Jan 10, 2007 10:10 am - Jan 11, 2007 10:10am"
+ * <li>
+ *    otherwise, present the date followed by the range expression
+ *    for the time.
+ *    For example, interval pattern from "Jan 10, 2007 10:10 am"
+ *    to "Jan 10, 2007 11:10am" is "Jan 10, 2007 10:10 am - 11:10am"
+ * </ol>
+ *
+ *
+ * <P>
+ * If two dates are the same, the interval pattern is the single date pattern.
+ * For example, interval pattern from "Jan 10, 2007" to "Jan 10, 2007" is
+ * "Jan 10, 2007".
+ *
+ * Or if the presenting fields between 2 dates have the exact same values,
+ * the interval pattern is the  single date pattern.
+ * For example, if user only requests year and month,
+ * the interval pattern from "Jan 10, 2007" to "Jan 20, 2007" is "Jan 2007".
+ *
+ * <P>
+ * DateIntervalFormat needs the following information for correct
+ * formatting: time zone, calendar type, pattern, date format symbols,
+ * and date interval patterns.
+ * It can be instantiated in several ways:
+ * <ol>
+ * <li>
+ *    create an instance using default or given locale plus given skeleton.
+ *    Users are encouraged to created date interval formatter this way and
+ *    to use the pre-defined skeleton macros, such as
+ *    YEAR_NUM_MONTH, which consists the calendar fields and
+ *    the format style.
+ * </li>
+ * <li>
+ *    create an instance using default or given locale plus given skeleton
+ *    plus a given DateIntervalInfo.
+ *    This factory method is for powerful users who want to provide their own
+ *    interval patterns.
+ *    Locale provides the timezone, calendar, and format symbols information.
+ *    Local plus skeleton provides full pattern information.
+ *    DateIntervalInfo provides the date interval patterns.
+ * </li>
+ * </ol>
+ *
+ * <P>
+ * For the calendar field pattern letter, such as G, y, M, d, a, h, H, m, s etc.
+ * DateIntervalFormat uses the same syntax as that of
+ * DateTime format.
+ *
+ * <P>
+ * Code Sample: general usage
+ * <pre>
+ *
+ *   // the date interval object which the DateIntervalFormat formats on
+ *   // and parses into
+ *   DateInterval dtInterval = new DateInterval(1000*3600*24L, 1000*3600*24*2L);
+ *   DateIntervalFormat dtIntervalFmt = DateIntervalFormat.getInstance(
+ *                   YEAR_MONTH_DAY, Locale("en", "GB", ""));
+ *   StringBuffer str = new StringBuffer("");
+ *   FieldPosition pos = new FieldPosition(0);
+ *   // formatting
+ *   dtIntervalFmt.format(dtInterval, dateIntervalString, pos);
+ *
+ * </pre>
+ *
+ * <P>
+ * Code Sample: for powerful users who wants to use their own interval pattern
+ * <pre>
+ *
+ *     import android.icu.text.DateIntervalInfo;
+ *     import android.icu.text.DateIntervalFormat;
+ *     ....................
+ *
+ *     // Get DateIntervalFormat instance using default locale
+ *     DateIntervalFormat dtitvfmt = DateIntervalFormat.getInstance(YEAR_MONTH_DAY);
+ *
+ *     // Create an empty DateIntervalInfo object, which does not have any interval patterns inside.
+ *     dtitvinf = new DateIntervalInfo();
+ *
+ *     // a series of set interval patterns.
+ *     // Only ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH, DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY,
+ *     MINUTE, SECOND and MILLISECOND are supported.
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.YEAR, "'y ~ y'");
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.MONTH, "yyyy 'diff' MMM d - MMM d");
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.DATE, "yyyy MMM d ~ d");
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm");
+ *
+ *     // Set fallback interval pattern. Fallback pattern is used when interval pattern is not found.
+ *     // If the fall-back pattern is not set,  falls back to {date0} - {date1} if interval pattern is not found.
+ *     dtitvinf.setFallbackIntervalPattern("{0} - {1}");
+ *
+ *     // Set above DateIntervalInfo object as the interval patterns of date interval formatter
+ *     dtitvfmt.setDateIntervalInfo(dtitvinf);
+ *
+ *     // Prepare to format
+ *     pos = new FieldPosition(0);
+ *     str = new StringBuffer("");
+ *
+ *     // The 2 calendars should be equivalent, otherwise,  IllegalArgumentException will be thrown by format()
+ *     Calendar fromCalendar = (Calendar) dtfmt.getCalendar().clone();
+ *     Calendar toCalendar = (Calendar) dtfmt.getCalendar().clone();
+ *     fromCalendar.setTimeInMillis(....);
+ *     toCalendar.setTimeInMillis(...);
+ *
+ *     //Formatting given 2 calendars
+ *     dtitvfmt.format(fromCalendar, toCalendar, str, pos);
+ *
+ *
+ * </pre>
+ * <h3>Synchronization</h3>
+ *
+ * The format methods of DateIntervalFormat may be used concurrently from multiple threads.
+ * Functions that alter the state of a DateIntervalFormat object (setters)
+ * may not be used concurrently with any other functions.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateIntervalFormat extends android.icu.text.UFormat {
+
+DateIntervalFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton and  the default <code>FORMAT</code> locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale)
+ * with the value of locale as default <code>FORMAT</code> locale.
+ *
+ * @param skeleton  the skeleton on which interval format based.
+ * @return          a date time interval formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton and a given locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale)
+ *
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/dateintervalformat/DateIntervalFormatSample.java dtitvfmtPreDefinedExample}
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton and a given locale.
+ * <P>
+ * In this factory method,
+ * the date interval pattern information is load from resource files.
+ * Users are encouraged to created date interval formatter this way and
+ * to use the pre-defined skeleton macros.
+ *
+ * <P>
+ * There are pre-defined skeletons in DateFormat,
+ * such as MONTH_DAY, YEAR_MONTH_WEEKDAY_DAY etc.
+ *
+ * Those skeletons have pre-defined interval patterns in resource files.
+ * Users are encouraged to use them.
+ * For example:
+ * DateIntervalFormat.getInstance(DateFormat.MONTH_DAY, false, loc);
+ *
+ * The given Locale provides the interval patterns.
+ * For example, for en_GB, if skeleton is YEAR_ABBR_MONTH_WEEKDAY_DAY,
+ * which is "yMMMEEEd",
+ * the interval patterns defined in resource file to above skeleton are:
+ * "EEE, d MMM, yyyy - EEE, d MMM, yyyy" for year differs,
+ * "EEE, d MMM - EEE, d MMM, yyyy" for month differs,
+ * "EEE, d - EEE, d MMM, yyyy" for day differs,
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton
+ *  DateIntervalInfo, and the default <code>FORMAT</code> locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale, DateIntervalInfo dtitvinf)
+ * with the locale value as default <code>FORMAT</code> locale.
+ *
+ * @param skeleton  the skeleton on which interval format based.
+ * @param dtitvinf  the DateIntervalInfo object to be adopted.
+ * @return          a date time interval formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, android.icu.text.DateIntervalInfo dtitvinf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton
+ * a DateIntervalInfo, and the given locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale, DateIntervalInfo dtitvinf)
+ *
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/dateintervalformat/DateIntervalFormatSample.java dtitvfmtCustomizedExample}
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @param dtitvinf  the DateIntervalInfo object to be adopted.
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, java.util.Locale locale, android.icu.text.DateIntervalInfo dtitvinf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton
+ * a DateIntervalInfo, and the given locale.
+ *
+ * <P>
+ * In this factory method, user provides its own date interval pattern
+ * information, instead of using those pre-defined data in resource file.
+ * This factory method is for powerful users who want to provide their own
+ * interval patterns.
+ *
+ * <P>
+ * There are pre-defined skeleton in DateFormat,
+ * such as MONTH_DAY, YEAR_MONTH_WEEKDAY_DAY etc.
+ *
+ * Those skeletons have pre-defined interval patterns in resource files.
+ * Users are encouraged to use them.
+ * For example:
+ * DateIntervalFormat.getInstance(DateFormat.MONTH_DAY, false, loc,itvinf);
+ *
+ * the DateIntervalInfo provides the interval patterns.
+ *
+ * User are encouraged to set default interval pattern in DateIntervalInfo
+ * as well, if they want to set other interval patterns ( instead of
+ * reading the interval patterns from resource files).
+ * When the corresponding interval pattern for a largest calendar different
+ * field is not found ( if user not set it ), interval format fallback to
+ * the default interval pattern.
+ * If user does not provide default interval pattern, it fallback to
+ * "{date0} - {date1}"
+ *
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @param dtitvinf  the DateIntervalInfo object to be adopted.
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, android.icu.util.ULocale locale, android.icu.text.DateIntervalInfo dtitvinf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone this Format object polymorphically.
+ * @return    A copy of the object.
+ */
+
+public synchronized java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format an object to produce a string. This method handles Formattable
+ * objects with a DateInterval type.
+ * If a the Formattable object type is not a DateInterval,
+ * IllegalArgumentException is thrown.
+ *
+ * @param obj               The object to format.
+ *                          Must be a DateInterval.
+ * @param appendTo          Output parameter to receive result.
+ *                          Result is appended to existing contents.
+ * @param fieldPosition     On input: an alignment field, if desired.
+ *                          On output: the offsets of the alignment field.
+ *                          There may be multiple instances of a given field type
+ *                          in an interval format; in this case the fieldPosition
+ *                          offsets refer to the first instance.
+ * @return                  Reference to 'appendTo' parameter.
+ * @throws    java.lang.IllegalArgumentException  if the formatted object is not
+ *                                      DateInterval object
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer appendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a DateInterval to produce a string.
+ *
+ * @param dtInterval        DateInterval to be formatted.
+ * @param appendTo          Output parameter to receive result.
+ *                          Result is appended to existing contents.
+ * @param fieldPosition     On input: an alignment field, if desired.
+ *                          On output: the offsets of the alignment field.
+ *                          There may be multiple instances of a given field type
+ *                          in an interval format; in this case the fieldPosition
+ *                          offsets refer to the first instance.
+ * @return                  Reference to 'appendTo' parameter.
+ */
+
+public final java.lang.StringBuffer format(android.icu.util.DateInterval dtInterval, java.lang.StringBuffer appendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a DateInterval to produce a FormattedDateInterval.
+ *
+ * The FormattedDateInterval exposes field information about the formatted string.
+ *
+ * @param dtInterval        DateInterval to be formatted.
+ * @return                  A FormattedDateInterval containing the format result.
+ */
+
+public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.DateInterval dtInterval) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format 2 Calendars to produce a string.
+ *
+ * @param fromCalendar      calendar set to the from date in date interval
+ *                          to be formatted into date interval string
+ * @param toCalendar        calendar set to the to date in date interval
+ *                          to be formatted into date interval string
+ * @param appendTo          Output parameter to receive result.
+ *                          Result is appended to existing contents.
+ * @param pos               On input: an alignment field, if desired.
+ *                          On output: the offsets of the alignment field.
+ *                          There may be multiple instances of a given field type
+ *                          in an interval format; in this case the fieldPosition
+ *                          offsets refer to the first instance.
+ * @return                  Reference to 'appendTo' parameter.
+ * @throws    java.lang.IllegalArgumentException  if the two calendars are not equivalent.
+ */
+
+public final java.lang.StringBuffer format(android.icu.util.Calendar fromCalendar, android.icu.util.Calendar toCalendar, java.lang.StringBuffer appendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format 2 Calendars to produce a FormattedDateInterval.
+ *
+ * The FormattedDateInterval exposes field information about the formatted string.
+ *
+ * @param fromCalendar      calendar set to the from date in date interval
+ *                          to be formatted into date interval string
+ * @param toCalendar        calendar set to the to date in date interval
+ *                          to be formatted into date interval string
+ * @return                  A FormattedDateInterval containing the format result.
+ */
+
+public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.Calendar fromCalendar, android.icu.util.Calendar toCalendar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Date interval parsing is not supported.
+ * <P>
+ * This method should handle parsing of
+ * date time interval strings into Formattable objects with
+ * DateInterval type, which is a pair of UDate.
+ * <P>
+ * Before calling, set parse_pos.index to the offset you want to start
+ * parsing at in the source. After calling, parse_pos.index is the end of
+ * the text you parsed. If error occurs, index is unchanged.
+ * <P>
+ * When parsing, leading whitespace is discarded (with a successful parse),
+ * while trailing whitespace is left as is.
+ * <P>
+ * See Format.parseObject() for more.
+ *
+ * @param source    The string to be parsed into an object.
+ * @param parse_pos The position to start parsing at. Since no parsing
+ *                  is supported, upon return this param is unchanged.
+ * @return          A newly created Formattable* object, or NULL
+ *                  on failure.
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition parse_pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the date time interval patterns.
+ * @return a copy of the date time interval patterns associated with
+ * this date interval formatter.
+ */
+
+public android.icu.text.DateIntervalInfo getDateIntervalInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the date time interval patterns.
+ * @param newItvPattern   the given interval patterns to copy.
+ */
+
+public void setDateIntervalInfo(android.icu.text.DateIntervalInfo newItvPattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the TimeZone
+ * @return A copy of the TimeZone associated with this date interval formatter.
+ */
+
+public android.icu.util.TimeZone getTimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the TimeZone for the calendar used by this DateIntervalFormat object.
+ * @param zone The new TimeZone, will be cloned for use by this DateIntervalFormat.
+ */
+
+public void setTimeZone(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the date formatter
+ * @return a copy of the date formatter associated with
+ * this date interval formatter.
+ */
+
+public synchronized android.icu.text.DateFormat getDateFormat() { throw new RuntimeException("Stub!"); }
+/**
+ * An immutable class containing the result of a date interval formatting operation.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * Not intended for public subclassing.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class FormattedDateInterval implements android.icu.text.FormattedValue {
+
+FormattedDateInterval() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalInfo.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalInfo.java
new file mode 100644
index 0000000..f79e136
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalInfo.java
@@ -0,0 +1,338 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2008-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Calendar;
+
+/**
+ * DateIntervalInfo is a public class for encapsulating localizable
+ * date time interval patterns. It is used by DateIntervalFormat.
+ *
+ * <P>
+ * For most users, ordinary use of DateIntervalFormat does not need to create
+ * DateIntervalInfo object directly.
+ * DateIntervalFormat will take care of it when creating a date interval
+ * formatter when user pass in skeleton and locale.
+ *
+ * <P>
+ * For power users, who want to create their own date interval patterns,
+ * or want to re-set date interval patterns, they could do so by
+ * directly creating DateIntervalInfo and manipulating it.
+ *
+ * <P>
+ * Logically, the interval patterns are mappings
+ * from (skeleton, the_largest_different_calendar_field)
+ * to (date_interval_pattern).
+ *
+ * <P>
+ * A skeleton
+ * <ol>
+ * <li>
+ * only keeps the field pattern letter and ignores all other parts
+ * in a pattern, such as space, punctuations, and string literals.
+ * <li>
+ * hides the order of fields.
+ * <li>
+ * might hide a field's pattern letter length.
+ *
+ * For those non-digit calendar fields, the pattern letter length is
+ * important, such as MMM, MMMM, and MMMMM; EEE and EEEE,
+ * and the field's pattern letter length is honored.
+ *
+ * For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy,
+ * the field pattern length is ignored and the best match, which is defined
+ * in date time patterns, will be returned without honor the field pattern
+ * letter length in skeleton.
+ * </ol>
+ *
+ * <P>
+ * The calendar fields we support for interval formatting are:
+ * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, and
+ * second (though we do not currently have specific intervalFormat data for
+ * skeletons with seconds).
+ * Those calendar fields can be defined in the following order:
+ * year &gt; month &gt; date &gt; am-pm &gt; hour &gt;  minute &gt; second
+ *
+ * The largest different calendar fields between 2 calendars is the
+ * first different calendar field in above order.
+ *
+ * For example: the largest different calendar fields between "Jan 10, 2007"
+ * and "Feb 20, 2008" is year.
+ *
+ * <P>
+ * There is a set of pre-defined static skeleton strings.
+ * There are pre-defined interval patterns for those pre-defined skeletons
+ * in locales' resource files.
+ * For example, for a skeleton YEAR_ABBR_MONTH_DAY, which is  "yMMMd",
+ * in  en_US, if the largest different calendar field between date1 and date2
+ * is "year", the date interval pattern  is "MMM d, yyyy - MMM d, yyyy",
+ * such as "Jan 10, 2007 - Jan 10, 2008".
+ * If the largest different calendar field between date1 and date2 is "month",
+ * the date interval pattern is "MMM d - MMM d, yyyy",
+ * such as "Jan 10 - Feb 10, 2007".
+ * If the largest different calendar field between date1 and date2 is "day",
+ * the date interval pattern is ""MMM d-d, yyyy", such as "Jan 10-20, 2007".
+ *
+ * For date skeleton, the interval patterns when year, or month, or date is
+ * different are defined in resource files.
+ * For time skeleton, the interval patterns when am/pm, or hour, or minute is
+ * different are defined in resource files.
+ *
+ *
+ * <P>
+ * There are 2 dates in interval pattern. For most locales, the first date
+ * in an interval pattern is the earlier date. There might be a locale in which
+ * the first date in an interval pattern is the later date.
+ * We use fallback format for the default order for the locale.
+ * For example, if the fallback format is "{0} - {1}", it means
+ * the first date in the interval pattern for this locale is earlier date.
+ * If the fallback format is "{1} - {0}", it means the first date is the
+ * later date.
+ * For a particular interval pattern, the default order can be overriden
+ * by prefixing "latestFirst:" or "earliestFirst:" to the interval pattern.
+ * For example, if the fallback format is "{0}-{1}",
+ * but for skeleton "yMMMd", the interval pattern when day is different is
+ * "latestFirst:d-d MMM yy", it means by default, the first date in interval
+ * pattern is the earlier date. But for skeleton "yMMMd", when day is different,
+ * the first date in "d-d MMM yy" is the later date.
+ *
+ * <P>
+ * The recommended way to create a DateIntervalFormat object is to pass in
+ * the locale.
+ * By using a Locale parameter, the DateIntervalFormat object is
+ * initialized with the pre-defined interval patterns for a given or
+ * default locale.
+ * <P>
+ * Users can also create DateIntervalFormat object
+ * by supplying their own interval patterns.
+ * It provides flexibility for power usage.
+ *
+ * <P>
+ * After a DateIntervalInfo object is created, clients may modify
+ * the interval patterns using setIntervalPattern function as so desired.
+ * Currently, users can only set interval patterns when the following
+ * calendar fields are different: ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH,
+ * DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND.
+ * Interval patterns when other calendar fields are different is not supported.
+ * <P>
+ * DateIntervalInfo objects are cloneable.
+ * When clients obtain a DateIntervalInfo object,
+ * they can feel free to modify it as necessary.
+ * <P>
+ * DateIntervalInfo are not expected to be subclassed.
+ * Data for a calendar is loaded out of resource bundles.
+ * Through ICU 4.4, date interval patterns are only supported in the Gregoria
+ * calendar; non-Gregorian calendars are supported from ICU 4.4.1.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateIntervalInfo implements java.lang.Cloneable, android.icu.util.Freezable<android.icu.text.DateIntervalInfo>, java.io.Serializable {
+
+/**
+ * Construct DateIntervalInfo for the given locale,
+ * @param locale  the interval patterns are loaded from the appropriate
+ *                calendar data (specified calendar or default calendar)
+ *                in this locale.
+ */
+
+public DateIntervalInfo(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct DateIntervalInfo for the given {@link java.util.Locale}.
+ * @param locale  the interval patterns are loaded from the appropriate
+ *                calendar data (specified calendar or default calendar)
+ *                in this locale.
+ */
+
+public DateIntervalInfo(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides a way for client to build interval patterns.
+ * User could construct DateIntervalInfo by providing
+ * a list of skeletons and their patterns.
+ * <P>
+ * For example:
+ * <pre>
+ * DateIntervalInfo dIntervalInfo = new DateIntervalInfo();
+ * dIntervalInfo.setIntervalPattern("yMd", Calendar.YEAR, "'from' yyyy-M-d 'to' yyyy-M-d");
+ * dIntervalInfo.setIntervalPattern("yMMMd", Calendar.MONTH, "'from' yyyy MMM d 'to' MMM d");
+ * dIntervalInfo.setIntervalPattern("yMMMd", Calendar.DAY, "yyyy MMM d-d");
+ * dIntervalInfo.setFallbackIntervalPattern("{0} ~ {1}");
+ * </pre>
+ *
+ * Restriction:
+ * Currently, users can only set interval patterns when the following
+ * calendar fields are different: ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH,
+ * DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND.
+ * Interval patterns when other calendar fields are different are
+ * not supported.
+ *
+ * @param skeleton         the skeleton on which interval pattern based
+ * @param lrgDiffCalUnit   the largest different calendar unit.
+ * @param intervalPattern  the interval pattern on the largest different
+ *                         calendar unit.
+ *                         For example, if lrgDiffCalUnit is
+ *                         "year", the interval pattern for en_US when year
+ *                         is different could be "'from' yyyy 'to' yyyy".
+ * @throws java.lang.IllegalArgumentException  if setting interval pattern on
+ *                            a calendar field that is smaller
+ *                            than the MINIMUM_SUPPORTED_CALENDAR_FIELD
+ * @throws java.lang.UnsupportedOperationException  if the object is frozen
+ */
+
+public void setIntervalPattern(java.lang.String skeleton, int lrgDiffCalUnit, java.lang.String intervalPattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the interval pattern given the largest different calendar field.
+ * @param skeleton   the skeleton
+ * @param field      the largest different calendar field
+ * @return interval pattern  return null if interval pattern is not found.
+ * @throws java.lang.IllegalArgumentException  if getting interval pattern on
+ *                            a calendar field that is smaller
+ *                            than the MINIMUM_SUPPORTED_CALENDAR_FIELD
+ */
+
+public android.icu.text.DateIntervalInfo.PatternInfo getIntervalPattern(java.lang.String skeleton, int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the fallback interval pattern.
+ * @return fallback interval pattern
+ */
+
+public java.lang.String getFallbackIntervalPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Re-set the fallback interval pattern.
+ *
+ * In construction, default fallback pattern is set as "{0} - {1}".
+ * And constructor taking locale as parameter will set the
+ * fallback pattern as what defined in the locale resource file.
+ *
+ * This method provides a way for user to replace the fallback pattern.
+ *
+ * @param fallbackPattern                 fall-back interval pattern.
+ * @throws java.lang.UnsupportedOperationException  if the object is frozen
+ * @throws java.lang.IllegalArgumentException       if there is no pattern {0} or
+ *                                        pattern {1} in fallbakckPattern
+ */
+
+public void setFallbackIntervalPattern(java.lang.String fallbackPattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get default order -- whether the first date in pattern is later date
+ *                      or not.
+ *
+ * return default date ordering in interval pattern. TRUE if the first date
+ *        in pattern is later date, FALSE otherwise.
+ */
+
+public boolean getDefaultOrder() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone this object.
+ * @return     a copy of the object
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateIntervalInfo freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateIntervalInfo cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashcode
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+/**
+ * PatternInfo class saves the first and second part of interval pattern,
+ * and whether the interval pattern is earlier date first.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class PatternInfo implements java.lang.Cloneable, java.io.Serializable {
+
+/**
+ * Constructs a <code>PatternInfo</code> object.
+ * @param firstPart     The first part of interval pattern.
+ * @param secondPart    The second part of interval pattern.
+ * @param firstDateInPtnIsLaterDate Whether the first date in interval patter is later date or not.
+ */
+
+public PatternInfo(java.lang.String firstPart, java.lang.String secondPart, boolean firstDateInPtnIsLaterDate) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first part of interval pattern.
+ * @return The first part of interval pattern.
+ */
+
+public java.lang.String getFirstPart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the second part of interval pattern.
+ * @return The second part of interval pattern.
+ */
+
+public java.lang.String getSecondPart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the first date in interval patter is later date or not.
+ * @return Whether the first date in interval patter is later date or not.
+ */
+
+public boolean firstDateInPtnIsLaterDate() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the specified object with this <code>PatternInfo</code> for equality.
+ * @param a The object to be compared.
+ * @return <code>true</code> if the specified object is equal to this <code>PatternInfo</code>.
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hash code of this <code>PatternInfo</code>.
+ * @return A hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateTimePatternGenerator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateTimePatternGenerator.java
new file mode 100644
index 0000000..d4cfcca
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DateTimePatternGenerator.java
@@ -0,0 +1,493 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ ********************************************************************************
+ * Copyright (C) 2006-2016, Google, International Business Machines Corporation
+ * and others. All Rights Reserved.
+ ********************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale.Category;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * This class provides flexible generation of date format patterns, like
+ * "yy-MM-dd". The user can build up the generator by adding successive
+ * patterns. Once that is done, a query can be made using a "skeleton", which is
+ * a pattern which just includes the desired fields and lengths. The generator
+ * will return the "best fit" pattern corresponding to that skeleton.
+ * <p>
+ * The main method people will use is getBestPattern(String skeleton), since
+ * normally this class is pre-built with data from a particular locale. However,
+ * generators can be built directly from other data as well.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateTimePatternGenerator implements android.icu.util.Freezable<android.icu.text.DateTimePatternGenerator>, java.lang.Cloneable {
+
+/**
+ * Only for use by subclasses
+ */
+
+protected DateTimePatternGenerator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create empty generator, to be constructed with addPattern(...) etc.
+ */
+
+public static android.icu.text.DateTimePatternGenerator getEmptyInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a flexible generator according to data for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.text.DateTimePatternGenerator getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a flexible generator according to data for a given locale.
+ * @param uLocale The locale to pass.
+ */
+
+public static android.icu.text.DateTimePatternGenerator getInstance(android.icu.util.ULocale uLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a flexible generator according to data for a given locale.
+ * @param locale The {@link java.util.Locale} to pass.
+ */
+
+public static android.icu.text.DateTimePatternGenerator getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the best pattern matching the input skeleton. It is guaranteed to
+ * have all of the fields in the skeleton.
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java getBestPatternExample}
+ * @param skeleton The skeleton is a pattern containing only the variable fields.
+ *            For example, "MMMdd" and "mmhh" are skeletons.
+ * @return Best pattern matching the input skeleton.
+ */
+
+public java.lang.String getBestPattern(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the best pattern matching the input skeleton. It is guaranteed to
+ * have all of the fields in the skeleton.
+ *
+ * @param skeleton The skeleton is a pattern containing only the variable fields.
+ *            For example, "MMMdd" and "mmhh" are skeletons.
+ * @param options MATCH_xxx options for forcing the length of specified fields in
+ *            the returned pattern to match those in the skeleton (when this would
+ *            not happen otherwise). For default behavior, use MATCH_NO_OPTIONS.
+ * @return Best pattern matching the input skeleton (and options).
+ */
+
+public java.lang.String getBestPattern(java.lang.String skeleton, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a pattern to the generator. If the pattern has the same skeleton as
+ * an existing pattern, and the override parameter is set, then the previous
+ * value is overridden. Otherwise, the previous value is retained. In either
+ * case, the conflicting information is returned in PatternInfo.
+ * <p>
+ * Note that single-field patterns (like "MMM") are automatically added, and
+ * don't need to be added explicitly!
+ * * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java addPatternExample}
+ * @param pattern Pattern to add.
+ * @param override When existing values are to be overridden use true, otherwise
+ *            use false.
+ * @param returnInfo Returned information.
+ */
+
+public android.icu.text.DateTimePatternGenerator addPattern(java.lang.String pattern, boolean override, android.icu.text.DateTimePatternGenerator.PatternInfo returnInfo) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Utility to return a unique skeleton from a given pattern. For example,
+ * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
+ *
+ * @param pattern Input pattern, such as "dd/MMM"
+ * @return skeleton, such as "MMMdd"
+ */
+
+public java.lang.String getSkeleton(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Utility to return a unique base skeleton from a given pattern. This is
+ * the same as the skeleton, except that differences in length are minimized
+ * so as to only preserve the difference between string and numeric form. So
+ * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd"
+ * (notice the single d).
+ *
+ * @param pattern Input pattern, such as "dd/MMM"
+ * @return skeleton, such as "MMMdd"
+ */
+
+public java.lang.String getBaseSkeleton(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a list of all the skeletons (in canonical form) from this class,
+ * and the patterns that they map to.
+ *
+ * @param result an output Map in which to place the mapping from skeleton to
+ *            pattern. If you want to see the internal order being used,
+ *            supply a LinkedHashMap. If the input value is null, then a
+ *            LinkedHashMap is allocated.
+ *            <p>
+ *            <i>Issue: an alternate API would be to just return a list of
+ *            the skeletons, and then have a separate routine to get from
+ *            skeleton to pattern.</i>
+ * @return the input Map containing the values.
+ */
+
+public java.util.Map<java.lang.String,java.lang.String> getSkeletons(java.util.Map<java.lang.String,java.lang.String> result) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a list of all the base skeletons (in canonical form) from this class
+ */
+
+public java.util.Set<java.lang.String> getBaseSkeletons(java.util.Set<java.lang.String> result) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adjusts the field types (width and subtype) of a pattern to match what is
+ * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
+ * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
+ * "dd-MMMM hh:mm". This is used internally to get the best match for the
+ * input skeleton, but can also be used externally.
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java replaceFieldTypesExample}
+ * @param pattern input pattern
+ * @param skeleton For the pattern to match to.
+ * @return pattern adjusted to match the skeleton fields widths and subtypes.
+ */
+
+public java.lang.String replaceFieldTypes(java.lang.String pattern, java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adjusts the field types (width and subtype) of a pattern to match what is
+ * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
+ * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
+ * "dd-MMMM hh:mm". This is used internally to get the best match for the
+ * input skeleton, but can also be used externally.
+ *
+ * @param pattern input pattern
+ * @param skeleton For the pattern to match to.
+ * @param options MATCH_xxx options for forcing the length of specified fields in
+ *            the returned pattern to match those in the skeleton (when this would
+ *            not happen otherwise). For default behavior, use MATCH_NO_OPTIONS.
+ * @return pattern adjusted to match the skeleton fields widths and subtypes.
+ */
+
+public java.lang.String replaceFieldTypes(java.lang.String pattern, java.lang.String skeleton, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The date time format is a message format pattern used to compose date and
+ * time patterns. The default value is "{1} {0}", where {1} will be replaced
+ * by the date pattern and {0} will be replaced by the time pattern.
+ * <p>
+ * This is used when the input skeleton contains both date and time fields,
+ * but there is not a close match among the added patterns. For example,
+ * suppose that this object was created by adding "dd-MMM" and "hh:mm", and
+ * its datetimeFormat is the default "{1} {0}". Then if the input skeleton
+ * is "MMMdhmm", there is not an exact match, so the input skeleton is
+ * broken up into two components "MMMd" and "hmm". There are close matches
+ * for those two skeletons, so the result is put together with this pattern,
+ * resulting in "d-MMM h:mm".
+ *
+ * @param dateTimeFormat message format pattern, where {1} will be replaced by the date
+ *            pattern and {0} will be replaced by the time pattern.
+ */
+
+public void setDateTimeFormat(java.lang.String dateTimeFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setDateTimeFormat.
+ *
+ * @return pattern
+ */
+
+public java.lang.String getDateTimeFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The decimal value is used in formatting fractions of seconds. If the
+ * skeleton contains fractional seconds, then this is used with the
+ * fractional seconds. For example, suppose that the input pattern is
+ * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and
+ * the decimal string is ",". Then the resulting pattern is modified to be
+ * "H:mm:ss,SSSS"
+ *
+ * @param decimal The decimal to set to.
+ */
+
+public void setDecimal(java.lang.String decimal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setDecimal.
+ * @return string corresponding to the decimal point
+ */
+
+public java.lang.String getDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * An AppendItem format is a pattern used to append a field if there is no
+ * good match. For example, suppose that the input skeleton is "GyyyyMMMd",
+ * and there is no matching pattern internally, but there is a pattern
+ * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the
+ * G. The way these two are conjoined is by using the AppendItemFormat for G
+ * (era). So if that value is, say "{0}, {1}" then the final resulting
+ * pattern is "d-MM-yyyy, G".
+ * <p>
+ * There are actually three available variables: {0} is the pattern so far,
+ * {1} is the element we are adding, and {2} is the name of the element.
+ * <p>
+ * This reflects the way that the CLDR data is organized.
+ *
+ * @param field such as ERA
+ * @param value pattern, such as "{0}, {1}"
+ */
+
+public void setAppendItemFormat(int field, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setAppendItemFormats. Values below 0 or at or
+ * above TYPE_LIMIT are illegal arguments.
+ *
+ * @param field The index to retrieve the append item formats.
+ * @return append pattern for field
+ */
+
+public java.lang.String getAppendItemFormat(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the names of fields, eg "era" in English for ERA. These are only
+ * used if the corresponding AppendItemFormat is used, and if it contains a
+ * {2} variable.
+ * <p>
+ * This reflects the way that the CLDR data is organized.
+ *
+ * @param field Index of the append item names.
+ * @param value The value to set the item to.
+ */
+
+public void setAppendItemName(int field, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setAppendItemName. Values below 0 or at or above
+ * TYPE_LIMIT are illegal arguments. Note: The more general method
+ * for getting date/time field display names is getFieldDisplayName.
+ *
+ * @param field The index to get the append item name.
+ * @return name for field
+ */
+
+public java.lang.String getAppendItemName(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The general interface to get a display name for a particular date/time field,
+ * in one of several possible display widths.
+ *
+ * @param field The field type, such as ERA.
+ * @param width The desired DisplayWidth, such as DisplayWidth.ABBREVIATED.
+ * @return      The display name for the field
+ */
+
+public java.lang.String getFieldDisplayName(int field, android.icu.text.DateTimePatternGenerator.DisplayWidth width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateTimePatternGenerator freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateTimePatternGenerator cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a copy of this <code>DateTimePatternGenerator</code> object.
+ * @return A copy of this <code>DateTimePatternGenerator</code> object.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final int DAY = 7; // 0x7
+
+/**
+ */
+
+public static final int DAYPERIOD = 10; // 0xa
+
+/**
+ */
+
+public static final int DAY_OF_WEEK_IN_MONTH = 9; // 0x9
+
+/**
+ */
+
+public static final int DAY_OF_YEAR = 8; // 0x8
+
+/**
+ */
+
+public static final int ERA = 0; // 0x0
+
+/**
+ */
+
+public static final int FRACTIONAL_SECOND = 14; // 0xe
+
+/**
+ */
+
+public static final int HOUR = 11; // 0xb
+
+/**
+ * Option mask for forcing the width of all date and time fields.
+ * @see #getBestPattern(String, int)
+ * @see #replaceFieldTypes(String, String, int)
+ */
+
+public static final int MATCH_ALL_FIELDS_LENGTH = 65535; // 0xffff
+
+/**
+ * Option mask for forcing the width of hour field.
+ * @see #getBestPattern(String, int)
+ * @see #replaceFieldTypes(String, String, int)
+ */
+
+public static final int MATCH_HOUR_FIELD_LENGTH = 2048; // 0x800
+
+/**
+ * Default option mask used for {@link #getBestPattern(java.lang.String,int)}
+ * and {@link #replaceFieldTypes(java.lang.String,java.lang.String,int)}.
+ * @see #getBestPattern(String, int)
+ * @see #replaceFieldTypes(String, String, int)
+ */
+
+public static final int MATCH_NO_OPTIONS = 0; // 0x0
+
+/**
+ */
+
+public static final int MINUTE = 12; // 0xc
+
+/**
+ */
+
+public static final int MONTH = 3; // 0x3
+
+/**
+ */
+
+public static final int QUARTER = 2; // 0x2
+
+/**
+ */
+
+public static final int SECOND = 13; // 0xd
+
+/**
+ */
+
+public static final int WEEKDAY = 6; // 0x6
+
+/**
+ */
+
+public static final int WEEK_OF_MONTH = 5; // 0x5
+
+/**
+ */
+
+public static final int WEEK_OF_YEAR = 4; // 0x4
+
+/**
+ */
+
+public static final int YEAR = 1; // 0x1
+
+/**
+ */
+
+public static final int ZONE = 15; // 0xf
+/**
+ * Field display name width constants for getFieldDisplayName
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DisplayWidth {
+/**
+ * The full field name
+ */
+
+WIDE,
+/**
+ * An abbreviated field name
+ * (may be the same as the wide version, if short enough)
+ */
+
+ABBREVIATED,
+/**
+ * The shortest possible field name
+ * (may be the same as the abbreviated version)
+ */
+
+NARROW;
+}
+
+/**
+ * PatternInfo supplies output parameters for addPattern(...). It is used because
+ * Java doesn't have real output parameters. It is treated like a struct (eg
+ * Point), so all fields are public.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class PatternInfo {
+
+/**
+ * Simple constructor, since this is treated like a struct.
+ */
+
+public PatternInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final int BASE_CONFLICT = 1; // 0x1
+
+/**
+ */
+
+public static final int CONFLICT = 2; // 0x2
+
+/**
+ */
+
+public static final int OK = 0; // 0x0
+
+/**
+ */
+
+public java.lang.String conflictingPattern;
+
+/**
+ */
+
+public int status;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormat.java
new file mode 100644
index 0000000..c6e8479
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormat.java
@@ -0,0 +1,1515 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.lang.UCharacter;
+import java.text.ParsePosition;
+import android.icu.util.ULocale.Category;
+import android.icu.math.MathContext;
+import android.icu.math.BigDecimal;
+import java.math.RoundingMode;
+import java.math.BigInteger;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DecimalFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <code>DecimalFormat</code> is the primary
+ * concrete subclass of {@link android.icu.text.NumberFormat NumberFormat}. It has a variety of features designed to make it
+ * possible to parse and format numbers in any locale, including support for Western, Arabic, or
+ * Indic digits. It supports different flavors of numbers, including integers ("123"), fixed-point
+ * numbers ("123.4"), scientific notation ("1.23E4"), percentages ("12%"), and currency amounts
+ * ("$123.00", "USD123.00", "123.00 US dollars"). All of these flavors can be easily localized.
+ *
+ * <p>To obtain a number formatter for a specific locale (including the default locale), call one of
+ * NumberFormat's factory methods such as {@link android.icu.text.NumberFormat#getInstance NumberFormat#getInstance}. Do not call
+ * DecimalFormat constructors directly unless you know what you are doing.
+ *
+ * <p>DecimalFormat aims to comply with the specification <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>. Read
+ * the specification for more information on how all the properties in DecimalFormat fit together.
+ *
+ * <p><strong>NOTE:</strong> Starting in ICU 60, there is a new set of APIs for localized number
+ * formatting that are designed to be an improvement over DecimalFormat.  New users are discouraged
+ * from using DecimalFormat.  For more information, see the package android.icu.number.
+ *
+ * <h3>Example Usage</h3>
+ *
+ * <p>Customize settings on a DecimalFormat instance from the NumberFormat factory:
+ *
+ * <blockquote>
+ *
+ * <pre>
+ * NumberFormat f = NumberFormat.getInstance(loc);
+ * if (f instanceof DecimalFormat) {
+ *     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
+ *     ((DecimalFormat) f).setMinimumGroupingDigits(2);
+ * }
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * <p>Quick and dirty print out a number using the localized number, currency, and percent format
+ * for each locale:
+ *
+ * <blockquote>
+ *
+ * <pre>
+ * for (ULocale uloc : ULocale.getAvailableLocales()) {
+ *     System.out.print(uloc + ":\t");
+ *     System.out.print(NumberFormat.getInstance(uloc).format(1.23));
+ *     System.out.print("\t");
+ *     System.out.print(NumberFormat.getCurrencyInstance(uloc).format(1.23));
+ *     System.out.print("\t");
+ *     System.out.print(NumberFormat.getPercentInstance(uloc).format(1.23));
+ *     System.out.println();
+ * }
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * <h3>Properties and Symbols</h3>
+ *
+ * <p>A DecimalFormat object encapsulates a set of <em>properties</em> and a set of
+ * <em>symbols</em>. Grouping size, rounding mode, and affixes are examples of properties. Locale
+ * digits and the characters used for grouping and decimal separators are examples of symbols.
+ *
+ * <p>To set a custom set of symbols, use {@link #setDecimalFormatSymbols}. Use the various other
+ * setters in this class to set custom values for the properties.
+ *
+ * <h3>Rounding</h3>
+ *
+ * <p>DecimalFormat provides three main strategies to specify the position at which numbers should
+ * be rounded:
+ *
+ * <ol>
+ *   <li><strong>Magnitude:</strong> Display a fixed number of fraction digits; this is the most
+ *       common form.
+ *   <li><strong>Increment:</strong> Round numbers to the closest multiple of a certain increment,
+ *       such as 0.05. This is common in currencies.
+ *   <li><strong>Significant Digits:</strong> Round numbers such that a fixed number of nonzero
+ *       digits are shown. This is most common in scientific notation.
+ * </ol>
+ *
+ * <p>It is not possible to specify more than one rounding strategy. For example, setting a rounding
+ * increment in conjunction with significant digits results in undefined behavior.
+ *
+ * <p>It is also possible to specify the <em>rounding mode</em> to use. The default rounding mode is
+ * "half even", which rounds numbers to their closest increment, with ties broken in favor of
+ * trailing numbers being even. For more information, see {@link #setRoundingMode} and <a
+ * href="https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes">the ICU
+ * User Guide</a>.
+ *
+ * <h3>Pattern Strings</h3>
+ *
+ * <p>A <em>pattern string</em> is a way to serialize some of the available properties for decimal
+ * formatting. However, not all properties are capable of being serialized into a pattern string;
+ * see {@link #applyPattern} for more information.
+ *
+ * <p>Most users should not need to interface with pattern strings directly.
+ *
+ * <p>ICU DecimalFormat aims to follow the specification for pattern strings in <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>.
+ * Refer to that specification for more information on pattern string syntax.
+ *
+ * <h4>Pattern String BNF</h4>
+ *
+ * The following BNF is used when parsing the pattern string into property values:
+ *
+ * <pre>
+ * pattern    := subpattern (';' subpattern)?
+ * subpattern := prefix? number exponent? suffix?
+ * number     := (integer ('.' fraction)?) | sigDigits
+ * prefix     := '&#92;u0000'..'&#92;uFFFD' - specialCharacters
+ * suffix     := '&#92;u0000'..'&#92;uFFFD' - specialCharacters
+ * integer    := '#'* '0'* '0'
+ * fraction   := '0'* '#'*
+ * sigDigits  := '#'* '@' '@'* '#'*
+ * exponent   := 'E' '+'? '0'* '0'
+ * padSpec    := '*' padChar
+ * padChar    := '&#92;u0000'..'&#92;uFFFD' - quote
+ * &#32;
+ * Notation:
+ *   X*       0 or more instances of X
+ *   X?       0 or 1 instances of X
+ *   X|Y      either X or Y
+ *   C..D     any character from C up to D, inclusive
+ *   S-T      characters in S, except those in T
+ * </pre>
+ *
+ * <p>The first subpattern is for positive numbers. The second (optional) subpattern is for negative
+ * numbers.
+ *
+ * <p>Not indicated in the BNF syntax above:
+ *
+ * <ul>
+ *   <li>The grouping separator ',' can occur inside the integer and sigDigits elements, between any
+ *       two pattern characters of that element, as long as the integer or sigDigits element is not
+ *       followed by the exponent element.
+ *   <li>Two grouping intervals are recognized: That between the decimal point and the first
+ *       grouping symbol, and that between the first and second grouping symbols. These intervals
+ *       are identical in most locales, but in some locales they differ. For example, the pattern
+ *       &quot;#,##,###&quot; formats the number 123456789 as &quot;12,34,56,789&quot;.
+ *   <li>The pad specifier <code>padSpec</code> may appear before the prefix, after the prefix,
+ *       before the suffix, after the suffix, or not at all.
+ *   <li>In place of '0', the digits '1' through '9' may be used to indicate a rounding increment.
+ * </ul>
+ *
+ * <h3>Parsing</h3>
+ *
+ * <p>DecimalFormat aims to be able to parse anything that it can output as a formatted string.
+ *
+ * <p>There are two primary parse modes: <em>lenient</em> and <em>strict</em>. Lenient mode should
+ * be used if the goal is to parse user input to a number; strict mode should be used if the goal is
+ * validation. The default is lenient mode. For more information, see {@link #setParseStrict}.
+ *
+ * <p><code>DecimalFormat</code> parses all Unicode characters that represent decimal digits, as
+ * defined by {@link android.icu.lang.UCharacter#digit UCharacter#digit}. In addition, <code>DecimalFormat</code> also recognizes as
+ * digits the ten consecutive characters starting with the localized zero digit defined in the
+ * {@link android.icu.text.DecimalFormatSymbols DecimalFormatSymbols} object. During formatting, the {@link android.icu.text.DecimalFormatSymbols DecimalFormatSymbols}-based
+ * digits are output.
+ *
+ * <p>Grouping separators are ignored in lenient mode (default). In strict mode, grouping separators
+ * must match the locale-specified grouping sizes.
+ *
+ * <p>When using {@link #parseCurrency}, all currencies are accepted, not just the currency
+ * currently set in the formatter. In addition, the formatter is able to parse every currency style
+ * format for a particular locale no matter which style the formatter is constructed with. For
+ * example, a formatter instance gotten from NumberFormat.getInstance(ULocale,
+ * NumberFormat.CURRENCYSTYLE) can parse both "USD1.00" and "3.00 US dollars".
+ *
+ * <p>Whitespace characters (lenient mode) and control characters (lenient and strict mode),
+ * collectively called "ignorables", do not need to match in identity or quantity between the
+ * pattern string and the input string. For example, the pattern "# %" matches "35 %" (with a single
+ * space), "35%" (with no space), "35&nbsp;%" (with a non-breaking space), and "35&nbsp; %" (with
+ * multiple spaces). Arbitrary ignorables are also allowed at boundaries between the parts of the
+ * number: prefix, number, exponent separator, and suffix. Ignorable whitespace characters are those
+ * having the Unicode "blank" property for regular expressions, defined in UTS #18 Annex C, which is
+ * "horizontal" whitespace, like spaces and tabs, but not "vertical" whitespace, like line breaks.
+ * Ignorable control characters are those in the Unicode set [:Default_Ignorable_Code_Point:].
+ *
+ * <p>If {@link #parse(java.lang.String,java.text.ParsePosition)} fails to parse a string, it returns <code>null</code>
+ * and leaves the parse position unchanged. The convenience method {@link #parse(java.lang.String)} indicates
+ * parse failure by throwing a {@link java.text.ParseException}.
+ *
+ * <p>Under the hood, a state table parsing engine is used. To debug a parsing failure during
+ * development, use the following pattern to print details about the state table transitions:
+ *
+ * <pre>
+ * android.icu.impl.number.Parse.DEBUGGING = true;
+ * df.parse("123.45", ppos);
+ * android.icu.impl.number.Parse.DEBUGGING = false;
+ * </pre>
+ *
+ * <h3>Thread Safety and Best Practices</h3>
+ *
+ * <p>Starting with ICU 59, instances of DecimalFormat are thread-safe.
+ *
+ * <p>Under the hood, DecimalFormat maintains an immutable formatter object that is rebuilt whenever
+ * any of the property setters are called. It is therefore best practice to call property setters
+ * only during construction and not when formatting numbers online.
+ *
+ * @see java.text.Format
+ * @see android.icu.text.NumberFormat
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DecimalFormat extends android.icu.text.NumberFormat {
+
+/**
+ * Creates a DecimalFormat based on the number pattern and symbols for the default locale. This is
+ * a convenient way to obtain a DecimalFormat instance when internationalization is not the main
+ * concern.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @see NumberFormat#getInstance
+ * @see NumberFormat#getNumberInstance
+ * @see NumberFormat#getCurrencyInstance
+ * @see NumberFormat#getPercentInstance
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DecimalFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormat based on the given pattern, using symbols for the default locale. This
+ * is a convenient way to obtain a DecimalFormat instance when internationalization is not the
+ * main concern.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @param pattern A pattern string such as "#,##0.00" conforming to <a
+ *     href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS
+ *     #35</a>.
+ * @throws java.lang.IllegalArgumentException if the given pattern is invalid.
+ * @see NumberFormat#getInstance
+ * @see NumberFormat#getNumberInstance
+ * @see NumberFormat#getCurrencyInstance
+ * @see NumberFormat#getPercentInstance
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DecimalFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormat based on the given pattern and symbols. Use this constructor if you
+ * want complete control over the behavior of the formatter.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @param pattern A pattern string such as "#,##0.00" conforming to <a
+ *     href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS
+ *     #35</a>.
+ * @param symbols The set of symbols to be used.
+ * @exception java.lang.IllegalArgumentException if the given pattern is invalid
+ * @see NumberFormat#getInstance
+ * @see NumberFormat#getNumberInstance
+ * @see NumberFormat#getCurrencyInstance
+ * @see NumberFormat#getPercentInstance
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public DecimalFormat(java.lang.String pattern, android.icu.text.DecimalFormatSymbols symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormat based on the given pattern and symbols, with additional control over
+ * the behavior of currency. The style argument determines whether currency rounding rules should
+ * override the pattern, and the {@link android.icu.text.CurrencyPluralInfo CurrencyPluralInfo} object is used for customizing the
+ * plural forms used for currency long names.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @param pattern a non-localized pattern string
+ * @param symbols the set of symbols to be used
+ * @param infoInput the information used for currency plural format, including currency plural
+ *     patterns and plural rules.
+ * @param style the decimal formatting style, it is one of the following values:
+ *     NumberFormat.NUMBERSTYLE; NumberFormat.CURRENCYSTYLE; NumberFormat.PERCENTSTYLE;
+ *     NumberFormat.SCIENTIFICSTYLE; NumberFormat.INTEGERSTYLE; NumberFormat.ISOCURRENCYSTYLE;
+ *     NumberFormat.PLURALCURRENCYSTYLE;
+ */
+
+public DecimalFormat(java.lang.String pattern, android.icu.text.DecimalFormatSymbols symbols, android.icu.text.CurrencyPluralInfo infoInput, int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses the given pattern string and overwrites the settings specified in the pattern string.
+ * The properties corresponding to the following setters are overwritten, either with their
+ * default values or with the value specified in the pattern string:
+ *
+ * <ol>
+ *   <li>{@link #setDecimalSeparatorAlwaysShown}
+ *   <li>{@link #setExponentSignAlwaysShown}
+ *   <li>{@link #setFormatWidth}
+ *   <li>{@link #setGroupingSize}
+ *   <li>{@link #setMultiplier} (percent/permille)
+ *   <li>{@link #setMaximumFractionDigits}
+ *   <li>{@link #setMaximumIntegerDigits}
+ *   <li>{@link #setMaximumSignificantDigits}
+ *   <li>{@link #setMinimumExponentDigits}
+ *   <li>{@link #setMinimumFractionDigits}
+ *   <li>{@link #setMinimumIntegerDigits}
+ *   <li>{@link #setMinimumSignificantDigits}
+ *   <li>{@link #setPadPosition}
+ *   <li>{@link #setPadCharacter}
+ *   <li>{@link #setRoundingIncrement}
+ *   <li>{@link #setSecondaryGroupingSize}
+ * </ol>
+ *
+ * All other settings remain untouched.
+ *
+ * <p>For more information on pattern strings, see <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>.
+ */
+
+public synchronized void applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the given string to standard notation and then parses it using {@link #applyPattern}.
+ * This method is provided for backwards compatibility and should not be used in new projects.
+ *
+ * <p>Localized notation means that instead of using generic placeholders in the pattern, you use
+ * the corresponding locale-specific characters instead. For example, in locale <em>fr-FR</em>,
+ * the period in the pattern "0.000" means "decimal" in standard notation (as it does in every
+ * other locale), but it means "grouping" in localized notation.
+ *
+ * @param localizedPattern The pattern string in localized notation.
+ */
+
+public synchronized void applyLocalizedPattern(java.lang.String localizedPattern) { throw new RuntimeException("Stub!"); }
+
+/***/
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(double number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(long number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(java.math.BigInteger number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(java.math.BigDecimal number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(android.icu.math.BigDecimal number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(android.icu.util.CurrencyAmount currAmt, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.util.CurrencyAmount parseCurrency(java.lang.CharSequence text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a copy of the decimal format symbols used by this formatter.
+ *
+ * @return desired DecimalFormatSymbols
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public synchronized android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decimal format symbols used by this formatter. The formatter uses a copy of the
+ * provided symbols.
+ *
+ * @param newSymbols desired DecimalFormatSymbols
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public synchronized void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols newSymbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the positive prefix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setPositivePrefix}, the string will be returned
+ * literally.
+ *
+ * @return The string being prepended to positive numbers.
+ */
+
+public synchronized java.lang.String getPositivePrefix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to prepend to positive numbers. For example, if you
+ * set the value "#", then the number 123 will be formatted as "#123" in the locale
+ * <em>en-US</em>.
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param prefix The literal string to prepend to positive numbers.
+ */
+
+public synchronized void setPositivePrefix(java.lang.String prefix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the negative prefix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setNegativePrefix}, the string will be returned
+ * literally.
+ *
+ * @return The string being prepended to negative numbers.
+ */
+
+public synchronized java.lang.String getNegativePrefix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to prepend to negative numbers. For example, if you
+ * set the value "#", then the number -123 will be formatted as "#123" in the locale
+ * <em>en-US</em> (overriding the implicit default '-' in the pattern).
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param prefix The literal string to prepend to negative numbers.
+ */
+
+public synchronized void setNegativePrefix(java.lang.String prefix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the positive suffix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setPositiveSuffix}, the string will be returned
+ * literally.
+ *
+ * @return The string being appended to positive numbers.
+ */
+
+public synchronized java.lang.String getPositiveSuffix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to append to positive numbers. For example, if you
+ * set the value "#", then the number 123 will be formatted as "123#" in the locale
+ * <em>en-US</em>.
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param suffix The literal string to append to positive numbers.
+ */
+
+public synchronized void setPositiveSuffix(java.lang.String suffix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the negative suffix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setNegativeSuffix}, the string will be returned
+ * literally.
+ *
+ * @return The string being appended to negative numbers.
+ */
+
+public synchronized java.lang.String getNegativeSuffix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to append to negative numbers. For example, if you
+ * set the value "#", then the number 123 will be formatted as "123#" in the locale
+ * <em>en-US</em>.
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param suffix The literal string to append to negative numbers.
+ */
+
+public synchronized void setNegativeSuffix(java.lang.String suffix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether the sign is being shown on positive numbers.
+ *
+ * @return Whether the sign is shown on positive numbers and zero.
+ * @see #setSignAlwaysShown
+ */
+
+public synchronized boolean isSignAlwaysShown() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether to always shown the plus sign ('+' in <em>en</em>) on positive numbers. The rules
+ * in UTS #35 section 3.2.1 will be followed to ensure a locale-aware placement of the sign.
+ *
+ * <p>More specifically, the following strategy will be used to place the plus sign:
+ *
+ * <ol>
+ *   <li><em>Patterns without a negative subpattern:</em> The locale's plus sign will be prepended
+ *       to the positive prefix.
+ *   <li><em>Patterns with a negative subpattern without a '-' sign (e.g., accounting):</em> The
+ *       locale's plus sign will be prepended to the positive prefix, as in case 1.
+ *   <li><em>Patterns with a negative subpattern that has a '-' sign:</em> The locale's plus sign
+ *       will substitute the '-' in the negative subpattern. The positive subpattern will be
+ *       unused.
+ * </ol>
+ *
+ * This method is designed to be used <em>instead of</em> applying a pattern containing an
+ * explicit plus sign, such as "+0;-0". The behavior when combining this method with explicit plus
+ * signs in the pattern is undefined.
+ *
+ * @param value true to always show a sign; false to hide the sign on positive numbers and zero.
+ */
+
+public synchronized void setSignAlwaysShown(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the multiplier being applied to numbers before they are formatted.
+ *
+ * @see #setMultiplier
+ */
+
+public synchronized int getMultiplier() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a number that will be used to multiply all numbers prior to formatting. For example, when
+ * formatting percents, a multiplier of 100 can be used.
+ *
+ * <p>If a percent or permille sign is specified in the pattern, the multiplier is automatically
+ * set to 100 or 1000, respectively.
+ *
+ * <p>If the number specified here is a power of 10, a more efficient code path will be used.
+ *
+ * @param multiplier The number by which all numbers passed to {@link #format} will be multiplied.
+ * @throws java.lang.IllegalArgumentException If the given multiplier is zero.
+ * @throws java.lang.ArithmeticException when inverting multiplier produces a non-terminating decimal result
+ *         in conjunction with MathContext of unlimited precision.
+ */
+
+public synchronized void setMultiplier(int multiplier) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the increment to which numbers are being rounded.
+ *
+ * @see #setRoundingIncrement
+ */
+
+public synchronized java.math.BigDecimal getRoundingIncrement() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets an increment, or interval, to which
+ * numbers are rounded. For example, a rounding increment of 0.05 will cause the number 1.23 to be
+ * rounded to 1.25 in the default rounding mode.
+ *
+ * <p>The rounding increment can be specified via the pattern string: for example, the pattern
+ * "#,##0.05" encodes a rounding increment of 0.05.
+ *
+ * <p>The rounding increment is applied <em>after</em> any multipliers might take effect; for
+ * example, in scientific notation or when {@link #setMultiplier} is used.
+ *
+ * <p>See {@link #setMaximumFractionDigits} and {@link #setMaximumSignificantDigits} for two other
+ * ways of specifying rounding strategies.
+ *
+ * @param increment The increment to which numbers are to be rounded.
+ * @see #setRoundingMode
+ * @see #setMaximumFractionDigits
+ * @see #setMaximumSignificantDigits
+ */
+
+public synchronized void setRoundingIncrement(java.math.BigDecimal increment) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Overload of {@link
+ * #setRoundingIncrement(java.math.BigDecimal)}.
+ *
+ * @param increment The increment to which numbers are to be rounded.
+ * @see #setRoundingIncrement
+ */
+
+public synchronized void setRoundingIncrement(android.icu.math.BigDecimal increment) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Overload of {@link
+ * #setRoundingIncrement(java.math.BigDecimal)}.
+ *
+ * @param increment The increment to which numbers are to be rounded.
+ * @see #setRoundingIncrement
+ */
+
+public synchronized void setRoundingIncrement(double increment) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding mode being used to round numbers.
+ *
+ * @see #setRoundingMode
+ */
+
+public synchronized int getRoundingMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the {@link java.math.RoundingMode RoundingMode} used to round
+ * numbers. The default rounding mode is HALF_EVEN, which rounds decimals to their closest whole
+ * number, and rounds to the closest even number if at the midpoint.
+ *
+ * <p>For more detail on rounding modes, see <a
+ * href="https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes">the ICU
+ * User Guide</a>.
+ *
+ * <p>For backwards compatibility, the rounding mode is specified as an int argument, which can be
+ * from either the constants in {@link android.icu.math.BigDecimal BigDecimal} or the ordinal value of {@link java.math.RoundingMode RoundingMode}.
+ * The following two calls are functionally equivalent.
+ *
+ * <pre>
+ * df.setRoundingMode(BigDecimal.ROUND_CEILING);
+ * df.setRoundingMode(RoundingMode.CEILING.ordinal());
+ * </pre>
+ *
+ * @param roundingMode The integer constant rounding mode to use when formatting numbers.
+ */
+
+public synchronized void setRoundingMode(int roundingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the {@link java.math.MathContext} being used to round numbers.
+ *
+ * @see #setMathContext
+ */
+
+public synchronized java.math.MathContext getMathContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets the {@link java.math.MathContext} used
+ * to round numbers. A "math context" encodes both a rounding mode and a number of significant
+ * digits. Most users should call {@link #setRoundingMode} and/or {@link
+ * #setMaximumSignificantDigits} instead of this method.
+ *
+ * <p>When formatting, since no division is ever performed, the default MathContext is unlimited
+ * significant digits. However, when division occurs during parsing to correct for percentages and
+ * multipliers, a MathContext of 34 digits, the IEEE 754R Decimal128 standard, is used by default.
+ * If you require more than 34 digits when parsing, you can set a custom MathContext using this
+ * method.
+ *
+ * @param mathContext The MathContext to use when rounding numbers.
+ * @throws java.lang.ArithmeticException when inverting multiplier produces a non-terminating decimal result
+ *         in conjunction with MathContext of unlimited precision.
+ * @see java.math.MathContext
+ */
+
+public synchronized void setMathContext(java.math.MathContext mathContext) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the {@link android.icu.math.MathContext} being used to round numbers.
+ *
+ * @see #setMathContext
+ */
+
+public synchronized android.icu.math.MathContext getMathContextICU() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Overload of {@link #setMathContext} for
+ * {@link android.icu.math.MathContext}.
+ *
+ * @param mathContextICU The MathContext to use when rounding numbers.
+ * @throws java.lang.ArithmeticException when inverting multiplier produces a non-terminating decimal result
+ *         in conjunction with MathContext of unlimited precision.
+ * @see #setMathContext(java.math.MathContext)
+ */
+
+public synchronized void setMathContextICU(android.icu.math.MathContext mathContextICU) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective minimum number of digits before the decimal separator.
+ *
+ * @see #setMinimumIntegerDigits
+ */
+
+public synchronized int getMinimumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the minimum number of digits to display before
+ * the decimal separator. If the number has fewer than this many digits, the number is padded with
+ * zeros.
+ *
+ * <p>For example, if minimum integer digits is 3, the number 12.3 will be printed as "001.23".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The minimum number of digits before the decimal separator.
+ */
+
+public synchronized void setMinimumIntegerDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective maximum number of digits before the decimal separator.
+ *
+ * @see #setMaximumIntegerDigits
+ */
+
+public synchronized int getMaximumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the maximum number of digits to display before
+ * the decimal separator. If the number has more than this many digits, the number is truncated.
+ *
+ * <p>For example, if maximum integer digits is 3, the number 12345 will be printed as "345".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The maximum number of digits before the decimal separator.
+ */
+
+public synchronized void setMaximumIntegerDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective minimum number of integer digits after the decimal separator.
+ *
+ * @see #setMaximumIntegerDigits
+ */
+
+public synchronized int getMinimumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the minimum number of digits to display after
+ * the decimal separator. If the number has fewer than this many digits, the number is padded with
+ * zeros.
+ *
+ * <p>For example, if minimum fraction digits is 2, the number 123.4 will be printed as "123.40".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * <p>See {@link #setRoundingIncrement} and {@link #setMaximumSignificantDigits} for two other
+ * ways of specifying rounding strategies.
+ *
+ * @param value The minimum number of integer digits after the decimal separator.
+ * @see #setRoundingMode
+ * @see #setRoundingIncrement
+ * @see #setMaximumSignificantDigits
+ */
+
+public synchronized void setMinimumFractionDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective maximum number of integer digits after the decimal separator.
+ *
+ * @see #setMaximumIntegerDigits
+ */
+
+public synchronized int getMaximumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the maximum number of digits to display after
+ * the decimal separator. If the number has more than this many digits, the number is rounded
+ * according to the rounding mode.
+ *
+ * <p>For example, if maximum fraction digits is 2, the number 123.456 will be printed as
+ * "123.46".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The maximum number of integer digits after the decimal separator.
+ * @see #setRoundingMode
+ */
+
+public synchronized void setMaximumFractionDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether significant digits are being used in rounding.
+ *
+ * @see #setSignificantDigitsUsed
+ */
+
+public synchronized boolean areSignificantDigitsUsed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets whether significant digits are to be
+ * used in rounding.
+ *
+ * <p>Calling <code>df.setSignificantDigitsUsed(true)</code> is functionally equivalent to:
+ *
+ * <pre>
+ * df.setMinimumSignificantDigits(1);
+ * df.setMaximumSignificantDigits(6);
+ * </pre>
+ *
+ * @param useSignificantDigits true to enable significant digit rounding; false to disable it.
+ */
+
+public synchronized void setSignificantDigitsUsed(boolean useSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the effective minimum number of significant digits displayed.
+ *
+ * @see #setMinimumSignificantDigits
+ */
+
+public synchronized int getMinimumSignificantDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets the minimum number of significant
+ * digits to be displayed. If the number of significant digits is less than this value, the number
+ * will be padded with zeros as necessary.
+ *
+ * <p>For example, if minimum significant digits is 3 and the number is 1.2, the number will be
+ * printed as "1.20".
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The minimum number of significant digits to display.
+ */
+
+public synchronized void setMinimumSignificantDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the effective maximum number of significant digits displayed.
+ *
+ * @see #setMaximumSignificantDigits
+ */
+
+public synchronized int getMaximumSignificantDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets the maximum number of significant
+ * digits to be displayed. If the number of significant digits in the number exceeds this value,
+ * the number will be rounded according to the current rounding mode.
+ *
+ * <p>For example, if maximum significant digits is 3 and the number is 12345, the number will be
+ * printed as "12300".
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * <p>See {@link #setRoundingIncrement} and {@link #setMaximumFractionDigits} for two other ways
+ * of specifying rounding strategies.
+ *
+ * @param value The maximum number of significant digits to display.
+ * @see #setRoundingMode
+ * @see #setRoundingIncrement
+ * @see #setMaximumFractionDigits
+ */
+
+public synchronized void setMaximumSignificantDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum number of characters in formatted output.
+ *
+ * @see #setFormatWidth
+ */
+
+public synchronized int getFormatWidth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Padding:</strong> Sets the minimum width of the string output by the formatting
+ * pipeline. For example, if padding is enabled and paddingWidth is set to 6, formatting the
+ * number "3.14159" with the pattern "0.00" will result in "??3.14" if '?' is your padding string.
+ *
+ * <p>If the number is longer than your padding width, the number will display as if no padding
+ * width had been specified, which may result in strings longer than the padding width.
+ *
+ * <p>Padding can be specified in the pattern string using the '*' symbol. For example, the format
+ * "*x######0" has a format width of 7 and a pad character of 'x'.
+ *
+ * <p>Padding is currently counted in UTF-16 code units; see <a
+ * href="http://bugs.icu-project.org/trac/ticket/13034">ticket #13034</a> for more information.
+ *
+ * @param width The minimum number of characters in the output.
+ * @see #setPadCharacter
+ * @see #setPadPosition
+ */
+
+public synchronized void setFormatWidth(int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the character used for padding.
+ *
+ * @see #setPadCharacter
+ */
+
+public synchronized char getPadCharacter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Padding:</strong> Sets the character used to pad numbers that are narrower than
+ * the width specified in {@link #setFormatWidth}.
+ *
+ * <p>In the pattern string, the padding character is the token that follows '*' before or after
+ * the prefix or suffix.
+ *
+ * @param padChar The character used for padding.
+ * @see #setFormatWidth
+ */
+
+public synchronized void setPadCharacter(char padChar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the position used for padding.
+ *
+ * @see #setPadPosition
+ */
+
+public synchronized int getPadPosition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Padding:</strong> Sets the position where to insert the pad character when
+ * narrower than the width specified in {@link #setFormatWidth}. For example, consider the pattern
+ * "P123S" with padding width 8 and padding char "*". The four positions are:
+ *
+ * <ul>
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_BEFORE_PREFIX DecimalFormat#PAD_BEFORE_PREFIX} ? "***P123S"
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_AFTER_PREFIX DecimalFormat#PAD_AFTER_PREFIX} ? "P***123S"
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_BEFORE_SUFFIX DecimalFormat#PAD_BEFORE_SUFFIX} ? "P123***S"
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_AFTER_SUFFIX DecimalFormat#PAD_AFTER_SUFFIX} ? "P123S***"
+ * </ul>
+ *
+ * @param padPos The position used for padding.
+ * @see #setFormatWidth
+ */
+
+public synchronized void setPadPosition(int padPos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether scientific (exponential) notation is enabled on this formatter.
+ *
+ * @see #setScientificNotation
+ */
+
+public synchronized boolean isScientificNotation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Scientific Notation:</strong> Sets whether this formatter should print in
+ * scientific (exponential) notation. For example, if scientific notation is enabled, the number
+ * 123000 will be printed as "1.23E5" in locale <em>en-US</em>. A locale-specific symbol is used
+ * as the exponent separator.
+ *
+ * <p>Calling <code>df.setScientificNotation(true)</code> is functionally equivalent to calling
+ * <code>df.setMinimumExponentDigits(1)</code>.
+ *
+ * @param useScientific true to enable scientific notation; false to disable it.
+ * @see #setMinimumExponentDigits
+ */
+
+public synchronized void setScientificNotation(boolean useScientific) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the minimum number of digits printed in the exponent in scientific notation.
+ *
+ * @see #setMinimumExponentDigits
+ */
+
+public synchronized byte getMinimumExponentDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Scientific Notation:</strong> Sets the minimum number of digits to be printed in
+ * the exponent. For example, if minimum exponent digits is 3, the number 123000 will be printed
+ * as "1.23E005".
+ *
+ * <p>This setting corresponds to the number of zeros after the 'E' in a pattern string such as
+ * "0.00E000".
+ *
+ * @param minExpDig The minimum number of digits in the exponent.
+ */
+
+public synchronized void setMinimumExponentDigits(byte minExpDig) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether the sign (plus or minus) is always printed in scientific notation.
+ *
+ * @see #setExponentSignAlwaysShown
+ */
+
+public synchronized boolean isExponentSignAlwaysShown() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Scientific Notation:</strong> Sets whether the sign (plus or minus) is always to
+ * be shown in the exponent in scientific notation. For example, if this setting is enabled, the
+ * number 123000 will be printed as "1.23E+5" in locale <em>en-US</em>. The number 0.0000123 will
+ * always be printed as "1.23E-5" in locale <em>en-US</em> whether or not this setting is enabled.
+ *
+ * <p>This setting corresponds to the '+' in a pattern such as "0.00E+0".
+ *
+ * @param expSignAlways true to always shown the sign in the exponent; false to show it for
+ *     negatives but not positives.
+ */
+
+public synchronized void setExponentSignAlwaysShown(boolean expSignAlways) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether or not grouping separators are being printed in the output.
+ *
+ * @see #setGroupingUsed
+ */
+
+public synchronized boolean isGroupingUsed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Grouping:</strong> Sets whether grouping is to be used when formatting numbers.
+ * Grouping means whether the thousands, millions, billions, and larger powers of ten should be
+ * separated by a grouping separator (a comma in <em>en-US</em>).
+ *
+ * <p>For example, if grouping is enabled, 12345 will be printed as "12,345" in <em>en-US</em>. If
+ * grouping were disabled, it would instead be printed as simply "12345".
+ *
+ * @param enabled true to enable grouping separators; false to disable them.
+ * @see #setGroupingSize
+ * @see #setSecondaryGroupingSize
+ */
+
+public synchronized void setGroupingUsed(boolean enabled) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the primary grouping size in use.
+ *
+ * @see #setGroupingSize
+ */
+
+public synchronized int getGroupingSize() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Grouping:</strong> Sets the primary grouping size (distance between grouping
+ * separators) used when formatting large numbers. For most locales, this defaults to 3: the
+ * number of digits between the ones and thousands place, between thousands and millions, and so
+ * forth.
+ *
+ * <p>For example, with a grouping size of 3, the number 1234567 will be formatted as "1,234,567".
+ *
+ * <p>Grouping size can also be specified in the pattern: for example, "#,##0" corresponds to a
+ * grouping size of 3.
+ *
+ * @param width The grouping size to use.
+ * @see #setSecondaryGroupingSize
+ */
+
+public synchronized void setGroupingSize(int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the secondary grouping size in use.
+ *
+ * @see #setSecondaryGroupingSize
+ */
+
+public synchronized int getSecondaryGroupingSize() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Grouping:</strong> Sets the secondary grouping size (distance between grouping
+ * separators after the first separator) used when formatting large numbers. In many south Asian
+ * locales, this is set to 2.
+ *
+ * <p>For example, with primary grouping size 3 and secondary grouping size 2, the number 1234567
+ * will be formatted as "12,34,567".
+ *
+ * <p>Grouping size can also be specified in the pattern: for example, "#,##,##0" corresponds to a
+ * primary grouping size of 3 and a secondary grouping size of 2.
+ *
+ * @param width The secondary grouping size to use.
+ * @see #setGroupingSize
+ */
+
+public synchronized void setSecondaryGroupingSize(int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the minimum number of digits before grouping is triggered.
+ *
+ * @see #setMinimumGroupingDigits
+ */
+
+public synchronized int getMinimumGroupingDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the minimum number of digits that must be before the first grouping separator in
+ * order for the grouping separator to be printed. For example, if minimum grouping digits is set
+ * to 2, in <em>en-US</em>, 1234 will be printed as "1234" and 12345 will be printed as "12,345".
+ *
+ * Set the value to:
+ * <ul>
+ * <li>1 to turn off minimum grouping digits.</li>
+ * <li>MINIMUM_GROUPING_DIGITS_AUTO to display grouping using the default
+ * strategy for all locales.</li>
+ * <li>MINIMUM_GROUPING_DIGITS_MIN2 to display grouping using locale defaults,
+ * except do not show grouping on values smaller than 10000 (such that there is a minimum of
+ * two digits before the first separator).</li>
+ * </ul>
+ *
+ * @param number The minimum number of digits before grouping is triggered.
+ */
+
+public synchronized void setMinimumGroupingDigits(int number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the decimal separator is shown on integers.
+ *
+ * @see #setDecimalSeparatorAlwaysShown
+ */
+
+public synchronized boolean isDecimalSeparatorAlwaysShown() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Separators:</strong> Sets whether the decimal separator (a period in <em>en-US</em>) is
+ * shown on integers. For example, if this setting is turned on, formatting 123 will result in
+ * "123." with the decimal separator.
+ *
+ * <p>This setting can be specified in the pattern for integer formats: "#,##0." is an example.
+ *
+ * @param value true to always show the decimal separator; false to show it only when there is a
+ *     fraction part of the number.
+ */
+
+public synchronized void setDecimalSeparatorAlwaysShown(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the currency used to display currency amounts. May be null.
+ *
+ * @see #setCurrency
+ * @see android.icu.text.DecimalFormatSymbols#getCurrency
+ */
+
+public synchronized android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the currency to be used when formatting numbers. The effect is twofold:
+ *
+ * <ol>
+ *   <li>Substitutions for currency symbols in the pattern string will use this currency
+ *   <li>The rounding mode will obey the rules for this currency (see {@link #setCurrencyUsage})
+ * </ol>
+ *
+ * <strong>Important:</strong> Displaying the currency in the output requires that the patter
+ * associated with this formatter contains a currency symbol '?'. This will be the case if the
+ * instance was created via {@link #getCurrencyInstance} or one of its friends.
+ *
+ * @param currency The currency to use.
+ */
+
+public synchronized void setCurrency(android.icu.util.Currency currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the strategy for rounding currency amounts.
+ *
+ * @see #setCurrencyUsage
+ */
+
+public synchronized android.icu.util.Currency.CurrencyUsage getCurrencyUsage() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the currency-dependent strategy to use when rounding numbers. There are two
+ * strategies:
+ *
+ * <ul>
+ *   <li>STANDARD: When the amount displayed is intended for banking statements or electronic
+ *       transfer.
+ *   <li>CASH: When the amount displayed is intended to be representable in physical currency,
+ *       like at a cash register.
+ * </ul>
+ *
+ * CASH mode is relevant in currencies that do not have tender down to the penny. For more
+ * information on the two rounding strategies, see <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Supplemental_Currency_Data">UTS
+ * #35</a>. If omitted, the strategy defaults to STANDARD. To override currency rounding
+ * altogether, use {@link #setMinimumFractionDigits} and {@link #setMaximumFractionDigits} or
+ * {@link #setRoundingIncrement}.
+ *
+ * @param usage The strategy to use when rounding in the current currency.
+ */
+
+public synchronized void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage usage) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the current instance of CurrencyPluralInfo.
+ *
+ * @see #setCurrencyPluralInfo
+ */
+
+public synchronized android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets a custom instance of CurrencyPluralInfo. CurrencyPluralInfo generates pattern
+ * strings for printing currency long names.
+ *
+ * <p><strong>Most users should not call this method directly.</strong> You should instead create
+ * your formatter via <code>NumberFormat.getInstance(NumberFormat.PLURALCURRENCYSTYLE)</code>.
+ *
+ * @param newInfo The CurrencyPluralInfo to use when printing currency long names.
+ */
+
+public synchronized void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo newInfo) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether {@link #parse} will always return a BigDecimal.
+ *
+ * @see #setParseBigDecimal
+ */
+
+public synchronized boolean isParseBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Whether to make {@link #parse} prefer returning a {@link android.icu.math.BigDecimal} when
+ * possible. For strings corresponding to return values of Infinity, -Infinity, NaN, and -0.0, a
+ * Double will be returned even if ParseBigDecimal is enabled.
+ *
+ * @param value true to cause {@link #parse} to prefer BigDecimal; false to let {@link #parse}
+ *     return additional data types like Long or BigInteger.
+ */
+
+public synchronized void setParseBigDecimal(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Always returns 1000, the default prior to ICU 59.
+ *
+ * @deprecated Setting max parse digits has no effect since ICU4J 59.
+ */
+
+@Deprecated
+public int getParseMaxDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @param maxDigits Prior to ICU 59, the maximum number of digits in the output number after
+ *     exponential notation is applied.
+ * @deprecated Setting max parse digits has no effect since ICU4J 59.
+ */
+
+@Deprecated
+public void setParseMaxDigits(int maxDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public synchronized boolean isParseStrict() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public synchronized void setParseStrict(boolean parseStrict) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ *
+ * @see #setParseIntegerOnly
+ */
+
+public synchronized boolean isParseIntegerOnly() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Parsing:</strong> {@inheritDoc}
+ *
+ * <p>This is functionally equivalent to calling {@link #setDecimalPatternMatchRequired} and a
+ * pattern without a decimal point.
+ *
+ * @param parseIntegerOnly true to ignore fractional parts of numbers when parsing; false to
+ *     consume fractional parts.
+ */
+
+public synchronized void setParseIntegerOnly(boolean parseIntegerOnly) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether the presence of a decimal point must match the pattern.
+ *
+ * @see #setDecimalPatternMatchRequired
+ */
+
+public synchronized boolean isDecimalPatternMatchRequired() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Parsing:</strong> This method is used to either <em>require</em> or
+ * <em>forbid</em> the presence of a decimal point in the string being parsed (disabled by
+ * default). This feature was designed to be an extra layer of strictness on top of strict
+ * parsing, although it can be used in either lenient mode or strict mode.
+ *
+ * <p>To <em>require</em> a decimal point, call this method in combination with either a pattern
+ * containing a decimal point or with {@link #setDecimalSeparatorAlwaysShown}.
+ *
+ * <pre>
+ * // Require a decimal point in the string being parsed:
+ * df.applyPattern("#.");
+ * df.setDecimalPatternMatchRequired(true);
+ *
+ * // Alternatively:
+ * df.setDecimalSeparatorAlwaysShown(true);
+ * df.setDecimalPatternMatchRequired(true);
+ * </pre>
+ *
+ * To <em>forbid</em> a decimal point, call this method in combination with a pattern containing
+ * no decimal point. Alternatively, use {@link #setParseIntegerOnly} for the same behavior without
+ * depending on the contents of the pattern string.
+ *
+ * <pre>
+ * // Forbid a decimal point in the string being parsed:
+ * df.applyPattern("#");
+ * df.setDecimalPatternMatchRequired(true);
+ * </pre>
+ *
+ * @param value true to either require or forbid the decimal point according to the pattern; false
+ *     to disable this feature.
+ * @see #setParseIntegerOnly
+ */
+
+public synchronized void setDecimalPatternMatchRequired(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether to ignore exponents when parsing.
+ *
+ * @see #setParseNoExponent
+ */
+
+public synchronized boolean isParseNoExponent() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Specifies whether to stop parsing when an exponent separator is encountered. For
+ * example, parses "123E4" to 123 (with parse position 3) instead of 1230000 (with parse position
+ * 5).
+ *
+ * @param value true to prevent exponents from being parsed; false to allow them to be parsed.
+ */
+
+public synchronized void setParseNoExponent(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether to force case (uppercase/lowercase) to match when parsing.
+ *
+ * @see #setParseNoExponent
+ */
+
+public synchronized boolean isParseCaseSensitive() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Specifies whether parsing should require cases to match in affixes, exponent separators,
+ * and currency codes. Case mapping is performed for each code point using {@link android.icu.lang.UCharacter#foldCase  }.
+ *
+ * @param value true to force case (uppercase/lowercase) to match when parsing; false to ignore
+ *     case and perform case folding.
+ */
+
+public synchronized void setParseCaseSensitive(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tests for equality between this formatter and another formatter.
+ *
+ * <p>If two DecimalFormat instances are equal, then they will always produce the same output.
+ * However, the reverse is not necessarily true: if two DecimalFormat instances always produce the
+ * same output, they are not necessarily equal.
+ */
+
+public synchronized boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public synchronized int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default value of toString() with extra DecimalFormat-specific information appended
+ * to the end of the string. This extra information is intended for debugging purposes, and the
+ * format is not guaranteed to be stable.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Serializes this formatter object to a decimal format pattern string. The result of this method
+ * is guaranteed to be <em>functionally</em> equivalent to the pattern string used to create this
+ * instance after incorporating values from the setter methods.
+ *
+ * <p>For more information on decimal format pattern strings, see <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>.
+ *
+ * <p><strong>Important:</strong> Not all properties are capable of being encoded in a pattern
+ * string. See a list of properties in {@link #applyPattern}.
+ *
+ * @return A decimal format pattern string.
+ */
+
+public synchronized java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Calls {@link #toPattern} and converts the string to localized notation. For more information on
+ * localized notation, see {@link #applyLocalizedPattern}. This method is provided for backwards
+ * compatibility and should not be used in new projects.
+ *
+ * @return A decimal format pattern string in localized notation.
+ */
+
+public synchronized java.lang.String toLocalizedPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted after the prefix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_BEFORE_PREFIX
+ * @see #PAD_BEFORE_SUFFIX
+ * @see #PAD_AFTER_SUFFIX
+ */
+
+public static final int PAD_AFTER_PREFIX = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted after the suffix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_BEFORE_PREFIX
+ * @see #PAD_AFTER_PREFIX
+ * @see #PAD_BEFORE_SUFFIX
+ */
+
+public static final int PAD_AFTER_SUFFIX = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted before the prefix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_AFTER_PREFIX
+ * @see #PAD_BEFORE_SUFFIX
+ * @see #PAD_AFTER_SUFFIX
+ */
+
+public static final int PAD_BEFORE_PREFIX = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted before the suffix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_BEFORE_PREFIX
+ * @see #PAD_AFTER_PREFIX
+ * @see #PAD_AFTER_SUFFIX
+ */
+
+public static final int PAD_BEFORE_SUFFIX = 2; // 0x2
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormatSymbols.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormatSymbols.java
new file mode 100644
index 0000000..49e761c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormatSymbols.java
@@ -0,0 +1,779 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale.Category;
+import android.icu.util.Currency;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DecimalFormatSymbols}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * This class represents the set of symbols (such as the decimal separator, the grouping
+ * separator, and so on) needed by <code>DecimalFormat</code> to format
+ * numbers. <code>DecimalFormat</code> creates for itself an instance of
+ * <code>DecimalFormatSymbols</code> from its locale data.  If you need to change any of
+ * these symbols, you can get the <code>DecimalFormatSymbols</code> object from your
+ * <code>DecimalFormat</code> and modify it.
+ *
+ * @see          java.util.Locale
+ * @see          android.icu.text.DecimalFormat
+ * @author       Mark Davis
+ * @author       Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DecimalFormatSymbols implements java.lang.Cloneable, java.io.Serializable {
+
+/**
+ * Creates a DecimalFormatSymbols object for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DecimalFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormatSymbols object for the given locale.
+ * @param locale the locale
+ */
+
+public DecimalFormatSymbols(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a DecimalFormatSymbols object for the given locale.
+ * @param locale the locale
+ */
+
+public DecimalFormatSymbols(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DecimalFormatSymbols instance for the default locale.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getInstance</code>, this method simply returns
+ * <code>new android.icu.text.DecimalFormatSymbols()</code>.  ICU currently does not
+ * support <code>DecimalFormatSymbolsProvider</code>, which was introduced in Java 6.
+ *
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DecimalFormatSymbols instance for the given locale.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getInstance</code>, this method simply returns
+ * <code>new android.icu.text.DecimalFormatSymbols(locale)</code>.  ICU currently does
+ * not support <code>DecimalFormatSymbolsProvider</code>, which was introduced in Java
+ * 6.
+ *
+ * @param locale the locale.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DecimalFormatSymbols instance for the given locale.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getInstance</code>, this method simply returns
+ * <code>new android.icu.text.DecimalFormatSymbols(locale)</code>.  ICU currently does
+ * not support <code>DecimalFormatSymbolsProvider</code>, which was introduced in Java
+ * 6.
+ *
+ * @param locale the locale.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a DecimalFormatSymbols instance for the given locale with digits and symbols
+ * corresponding to the given {@link android.icu.text.NumberingSystem NumberingSystem}.
+ *
+ * <p>This method behaves equivalently to {@link #getInstance} called with a locale having a
+ * "numbers=xxxx" keyword specifying the numbering system by name.
+ *
+ * <p>In this method, the NumberingSystem argument will be used even if the locale has its own
+ * "numbers=xxxx" keyword.
+ *
+ * @param locale the locale.
+ * @param ns the numbering system.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols forNumberingSystem(java.util.Locale locale, android.icu.text.NumberingSystem ns) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a DecimalFormatSymbols instance for the given locale with digits and symbols
+ * corresponding to the given {@link android.icu.text.NumberingSystem NumberingSystem}.
+ *
+ * <p>This method behaves equivalently to {@link #getInstance} called with a locale having a
+ * "numbers=xxxx" keyword specifying the numbering system by name.
+ *
+ * <p>In this method, the NumberingSystem argument will be used even if the locale has its own
+ * "numbers=xxxx" keyword.
+ *
+ * @param locale the locale.
+ * @param ns the numbering system.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols forNumberingSystem(android.icu.util.ULocale locale, android.icu.text.NumberingSystem ns) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of all locales for which the <code>getInstance</code> methods of
+ * this class can return localized instances.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getAvailableLocales</code>, this method simply
+ * returns the array of <code>Locale</code>s available for this class.  ICU currently
+ * does not support <code>DecimalFormatSymbolsProvider</code>, which was introduced in
+ * Java 6.
+ *
+ * @return An array of <code>Locale</code>s for which localized
+ * <code>DecimalFormatSymbols</code> instances are available.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for zero. Different for Arabic, etc.
+ * @return the character
+ */
+
+public char getZeroDigit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the array of characters used as digits, in order from 0 through 9
+ * @return The array
+ */
+
+public char[] getDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for zero.
+ * <p>
+ * <b>Note:</b> This method propagates digit 1 to
+ * digit 9 by incrementing code point one by one.
+ *
+ * @param zeroDigit the zero character.
+ */
+
+public void setZeroDigit(char zeroDigit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the array of strings used as digits, in order from 0 through 9
+ * @return The array of ten digit strings
+ * @see #setDigitStrings(String[])
+ */
+
+public java.lang.String[] getDigitStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the array of strings used as digits, in order from 0 through 9
+ * <p>
+ * <b>Note:</b>
+ * <p>
+ * When the input array of digit strings contains any strings
+ * represented by multiple Java chars, then {@link #getDigits()} will return
+ * the default digits ('0' - '9') and {@link #getZeroDigit()} will return the
+ * default zero digit ('0').
+ *
+ * @param digitStrings The array of digit strings. The length of the array must be exactly 10.
+ * @throws java.lang.NullPointerException if the <code>digitStrings</code> is null.
+ * @throws java.lang.IllegalArgumentException if the length of the array is not 10.
+ * @see #getDigitStrings()
+ */
+
+public void setDigitStrings(java.lang.String[] digitStrings) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used to represent a significant digit in a pattern.
+ * @return the significant digit pattern character
+ */
+
+public char getSignificantDigit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used to represent a significant digit in a pattern.
+ * @param sigDigit the significant digit pattern character
+ */
+
+public void setSignificantDigit(char sigDigit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for grouping separator. Different for French, etc.
+ * @return the thousands character
+ */
+
+public char getGroupingSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for grouping separator. Different for French, etc.
+ * @param groupingSeparator the thousands character
+ */
+
+public void setGroupingSeparator(char groupingSeparator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for grouping separator. Different for French, etc.
+ * @return the grouping separator string
+ * @see #setGroupingSeparatorString(String)
+ */
+
+public java.lang.String getGroupingSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for grouping separator.
+ * <p>
+ * <b>Note:</b> When the input grouping separator String is represented
+ * by multiple Java chars, then {@link #getGroupingSeparator()} will
+ * return the default grouping separator character (',').
+ *
+ * @param groupingSeparatorString the grouping separator string
+ * @throws java.lang.NullPointerException if <code>groupingSeparatorString</code> is null.
+ * @see #getGroupingSeparatorString()
+ */
+
+public void setGroupingSeparatorString(java.lang.String groupingSeparatorString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for decimal sign. Different for French, etc.
+ * @return the decimal character
+ */
+
+public char getDecimalSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for decimal sign. Different for French, etc.
+ * @param decimalSeparator the decimal character
+ */
+
+public void setDecimalSeparator(char decimalSeparator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for decimal sign.
+ * @return the decimal sign string
+ * @see #setDecimalSeparatorString(String)
+ */
+
+public java.lang.String getDecimalSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for decimal sign.
+ * <p>
+ * <b>Note:</b> When the input decimal separator String is represented
+ * by multiple Java chars, then {@link #getDecimalSeparator()} will
+ * return the default decimal separator character ('.').
+ *
+ * @param decimalSeparatorString the decimal sign string
+ * @throws java.lang.NullPointerException if <code>decimalSeparatorString</code> is null.
+ * @see #getDecimalSeparatorString()
+ */
+
+public void setDecimalSeparatorString(java.lang.String decimalSeparatorString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for mille percent sign. Different for Arabic, etc.
+ * @return the mille percent character
+ */
+
+public char getPerMill() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for mille percent sign. Different for Arabic, etc.
+ * @param perMill the mille percent character
+ */
+
+public void setPerMill(char perMill) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for permille sign.
+ * @return the permille string
+ * @see #setPerMillString(String)
+ */
+
+public java.lang.String getPerMillString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for permille sign.
+ * <p>
+ * <b>Note:</b> When the input permille String is represented
+ * by multiple Java chars, then {@link #getPerMill()} will
+ * return the default permille character ('&#x2030;').
+ *
+ * @param perMillString the permille string
+ * @throws java.lang.NullPointerException if <code>perMillString</code> is null.
+ * @see #getPerMillString()
+ */
+
+public void setPerMillString(java.lang.String perMillString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for percent sign. Different for Arabic, etc.
+ * @return the percent character
+ */
+
+public char getPercent() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for percent sign. Different for Arabic, etc.
+ * @param percent the percent character
+ */
+
+public void setPercent(char percent) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for percent sign.
+ * @return the percent string
+ * @see #setPercentString(String)
+ */
+
+public java.lang.String getPercentString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for percent sign.
+ * <p>
+ * <b>Note:</b> When the input grouping separator String is represented
+ * by multiple Java chars, then {@link #getPercent()} will
+ * return the default percent sign character ('%').
+ *
+ * @param percentString the percent string
+ * @throws java.lang.NullPointerException if <code>percentString</code> is null.
+ * @see #getPercentString()
+ */
+
+public void setPercentString(java.lang.String percentString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for a digit in a pattern.
+ * @return the digit pattern character
+ */
+
+public char getDigit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for a digit in a pattern.
+ * @param digit the digit pattern character
+ */
+
+public void setDigit(char digit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used to separate positive and negative subpatterns
+ * in a pattern.
+ * @return the pattern separator character
+ */
+
+public char getPatternSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used to separate positive and negative subpatterns
+ * in a pattern.
+ * @param patternSeparator the pattern separator character
+ */
+
+public void setPatternSeparator(char patternSeparator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the String used to represent infinity. Almost always left
+ * unchanged.
+ * @return the Infinity string
+ */
+
+public java.lang.String getInfinity() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the String used to represent infinity. Almost always left
+ * unchanged.
+ * @param infinity the Infinity String
+ */
+
+public void setInfinity(java.lang.String infinity) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the String used to represent NaN. Almost always left
+ * unchanged.
+ * @return the NaN String
+ */
+
+public java.lang.String getNaN() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the String used to represent NaN. Almost always left
+ * unchanged.
+ * @param NaN the NaN String
+ */
+
+public void setNaN(java.lang.String NaN) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used to represent minus sign. If no explicit
+ * negative format is specified, one is formed by prefixing
+ * minusSign to the positive format.
+ * @return the minus sign character
+ */
+
+public char getMinusSign() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used to represent minus sign. If no explicit
+ * negative format is specified, one is formed by prefixing
+ * minusSign to the positive format.
+ * @param minusSign the minus sign character
+ */
+
+public void setMinusSign(char minusSign) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used to represent minus sign.
+ * @return the minus sign string
+ * @see #setMinusSignString(String)
+ */
+
+public java.lang.String getMinusSignString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used to represent minus sign.
+ * <p>
+ * <b>Note:</b> When the input minus sign String is represented
+ * by multiple Java chars, then {@link #getMinusSign()} will
+ * return the default minus sign character ('-').
+ *
+ * @param minusSignString the minus sign string
+ * @throws java.lang.NullPointerException if <code>minusSignString</code> is null.
+ * @see #getGroupingSeparatorString()
+ */
+
+public void setMinusSignString(java.lang.String minusSignString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the localized plus sign.
+ * @return the plus sign, used in localized patterns and formatted
+ * strings
+ * @see #setPlusSign
+ * @see #setMinusSign
+ * @see #getMinusSign
+ */
+
+public char getPlusSign() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the localized plus sign.
+ * @param plus the plus sign, used in localized patterns and formatted
+ * strings
+ * @see #getPlusSign
+ * @see #setMinusSign
+ * @see #getMinusSign
+ */
+
+public void setPlusSign(char plus) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used to represent plus sign.
+ * @return the plus sign string
+ */
+
+public java.lang.String getPlusSignString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the localized plus sign string.
+ * <p>
+ * <b>Note:</b> When the input plus sign String is represented
+ * by multiple Java chars, then {@link #getPlusSign()} will
+ * return the default plus sign character ('+').
+ *
+ * @param plusSignString the plus sign string, used in localized patterns and formatted
+ * strings
+ * @throws java.lang.NullPointerException if <code>plusSignString</code> is null.
+ * @see #getPlusSignString()
+ */
+
+public void setPlusSignString(java.lang.String plusSignString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the string denoting the local currency.
+ * @return the local currency String.
+ */
+
+public java.lang.String getCurrencySymbol() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the string denoting the local currency.
+ * @param currency the local currency String.
+ */
+
+public void setCurrencySymbol(java.lang.String currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the international string denoting the local currency.
+ * @return the international string denoting the local currency
+ */
+
+public java.lang.String getInternationalCurrencySymbol() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the international string denoting the local currency.
+ * @param currency the international string denoting the local currency.
+ */
+
+public void setInternationalCurrencySymbol(java.lang.String currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the currency symbol, for {@link android.icu.text.DecimalFormatSymbols#getCurrency() DecimalFormatSymbols#getCurrency()} API
+ * compatibility only. ICU clients should use the Currency API directly.
+ * @return the currency used, or null
+ */
+
+public android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the currency.
+ *
+ * <p><strong>Note:</strong> ICU does not use the DecimalFormatSymbols for the currency
+ * any more.  This API is present for API compatibility only.
+ *
+ * <p>This also sets the currency symbol attribute to the currency's symbol
+ * in the DecimalFormatSymbols' locale, and the international currency
+ * symbol attribute to the currency's ISO 4217 currency code.
+ *
+ * @param currency the new currency to be used
+ * @throws java.lang.NullPointerException if <code>currency</code> is null
+ * @see #setCurrencySymbol
+ * @see #setInternationalCurrencySymbol
+ */
+
+public void setCurrency(android.icu.util.Currency currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the monetary decimal separator.
+ * @return the monetary decimal separator character
+ */
+
+public char getMonetaryDecimalSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the monetary decimal separator.
+ * @param sep the monetary decimal separator character
+ */
+
+public void setMonetaryDecimalSeparator(char sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the monetary decimal separator string.
+ * @return the monetary decimal separator string
+ * @see #setMonetaryDecimalSeparatorString(String)
+ */
+
+public java.lang.String getMonetaryDecimalSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the monetary decimal separator string.
+ * <p>
+ * <b>Note:</b> When the input monetary decimal separator String is represented
+ * by multiple Java chars, then {@link #getMonetaryDecimalSeparatorString()} will
+ * return the default monetary decimal separator character ('.').
+ *
+ * @param sep the monetary decimal separator string
+ * @throws java.lang.NullPointerException if <code>sep</code> is null.
+ * @see #getMonetaryDecimalSeparatorString()
+ */
+
+public void setMonetaryDecimalSeparatorString(java.lang.String sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the monetary grouping separator.
+ * @return the monetary grouping separator character
+ */
+
+public char getMonetaryGroupingSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the monetary grouping separator.
+ * @param sep the monetary grouping separator character
+ */
+
+public void setMonetaryGroupingSeparator(char sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the monetary grouping separator.
+ * @return the monetary grouping separator string
+ * @see #setMonetaryGroupingSeparatorString(String)
+ */
+
+public java.lang.String getMonetaryGroupingSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the monetary grouping separator string.
+ * <p>
+ * <b>Note:</b> When the input grouping separator String is represented
+ * by multiple Java chars, then {@link #getMonetaryGroupingSeparator()} will
+ * return the default monetary grouping separator character (',').
+ *
+ * @param sep the monetary grouping separator string
+ * @throws java.lang.NullPointerException if <code>sep</code> is null.
+ * @see #getMonetaryGroupingSeparatorString()
+ */
+
+public void setMonetaryGroupingSeparatorString(java.lang.String sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the multiplication sign
+ */
+
+public java.lang.String getExponentMultiplicationSign() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the multiplication sign
+ */
+
+public void setExponentMultiplicationSign(java.lang.String exponentMultiplicationSign) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used to separate the mantissa from the exponent.
+ * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+ * @return the localized exponent symbol, used in localized patterns
+ * and formatted strings
+ * @see #setExponentSeparator
+ */
+
+public java.lang.String getExponentSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used to separate the mantissa from the exponent.
+ * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+ * @param exp the localized exponent symbol, used in localized patterns
+ * and formatted strings
+ * @see #getExponentSeparator
+ */
+
+public void setExponentSeparator(java.lang.String exp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the character used to pad numbers out to a specified width.  This is
+ * not the pad character itself; rather, it is the special pattern character
+ * <em>preceding</em> the pad character.  In the pattern "*_#,##0", '*' is the pad
+ * escape, and '_' is the pad character.
+ * @return the character
+ * @see #setPadEscape
+ * @see android.icu.text.DecimalFormat#getFormatWidth
+ * @see android.icu.text.DecimalFormat#getPadPosition
+ * @see android.icu.text.DecimalFormat#getPadCharacter
+ */
+
+public char getPadEscape() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the character used to pad numbers out to a specified width.  This is not
+ * the pad character itself; rather, it is the special pattern character
+ * <em>preceding</em> the pad character.  In the pattern "*_#,##0", '*' is the pad
+ * escape, and '_' is the pad character.
+ * @see #getPadEscape
+ * @see android.icu.text.DecimalFormat#setFormatWidth
+ * @see android.icu.text.DecimalFormat#setPadPosition
+ * @see android.icu.text.DecimalFormat#setPadCharacter
+ */
+
+public void setPadEscape(char c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the desired currency spacing value. Original values come from ICU's
+ * CLDR data based on the locale provided during construction, and can be null.  These
+ * values govern what and when text is inserted between a currency code/name/symbol
+ * and the currency amount when formatting money.
+ *
+ * <p>For more information, see <a href="http://www.unicode.org/reports/tr35/#Currencies"
+ * >UTS#35 section 5.10.2</a>.
+ *
+ * @param itemType one of CURRENCY_SPC_CURRENCY_MATCH, CURRENCY_SPC_SURROUNDING_MATCH
+ * or CURRENCY_SPC_INSERT
+ * @param beforeCurrency true to get the <code>beforeCurrency</code> values, false
+ * to get the <code>afterCurrency</code> values.
+ * @return the value, or null.
+ * @see #setPatternForCurrencySpacing(int, boolean, String)
+ */
+
+public java.lang.String getPatternForCurrencySpacing(int itemType, boolean beforeCurrency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the indicated currency spacing pattern or value. See {@link
+ * #getPatternForCurrencySpacing} for more information.
+ *
+ * <p>Values for currency match and surrounding match must be {@link
+ * android.icu.text.UnicodeSet} patterns. Values for insert can be any string.
+ *
+ * <p><strong>Note:</strong> ICU4J does not currently use this information.
+ *
+ * @param itemType one of CURRENCY_SPC_CURRENCY_MATCH, CURRENCY_SPC_SURROUNDING_MATCH
+ * or CURRENCY_SPC_INSERT
+ * @param beforeCurrency true if the pattern is for before the currency symbol.
+ * false if the pattern is for after it.
+ * @param  pattern string to override current setting; can be null.
+ * @see #getPatternForCurrencySpacing(int, boolean)
+ */
+
+public void setPatternForCurrencySpacing(int itemType, boolean beforeCurrency, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale for which this object was constructed.
+ * @return the locale for which this object was constructed
+ */
+
+public java.util.Locale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale for which this object was constructed.
+ * @return the locale for which this object was constructed
+ */
+
+public android.icu.util.ULocale getULocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Indicates the currency match pattern used in {@link #getPatternForCurrencySpacing}.
+ */
+
+public static final int CURRENCY_SPC_CURRENCY_MATCH = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Indicates the insertion value used in {@link #getPatternForCurrencySpacing}.
+ */
+
+public static final int CURRENCY_SPC_INSERT = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Indicates the surrounding match pattern used in {@link
+ * #getPatternForCurrencySpacing}.
+ */
+
+public static final int CURRENCY_SPC_SURROUNDING_MATCH = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DisplayContext.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DisplayContext.java
new file mode 100644
index 0000000..bc416c3
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/DisplayContext.java
@@ -0,0 +1,141 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2012-2015, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * Display context settings.
+ * Note, the specific numeric values are internal and may change.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DisplayContext {
+/**
+ * A possible setting for DIALECT_HANDLING:
+ * use standard names when generating a locale name,
+ * e.g. en_GB displays as 'English (United Kingdom)'.
+ */
+
+STANDARD_NAMES,
+/**
+ * A possible setting for DIALECT_HANDLING:
+ * use dialect names, when generating a locale name,
+ * e.g. en_GB displays as 'British English'.
+ */
+
+DIALECT_NAMES,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context to be used is unknown (this is the default value).
+ */
+
+CAPITALIZATION_NONE,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for the middle of a sentence.
+ */
+
+CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for the beginning of a sentence.
+ */
+
+CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for a user-interface list or menu item.
+ */
+
+CAPITALIZATION_FOR_UI_LIST_OR_MENU,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for stand-alone usage such as an
+ * isolated name on a calendar page.
+ */
+
+CAPITALIZATION_FOR_STANDALONE,
+/**
+ * A possible setting for DISPLAY_LENGTH:
+ * use full names when generating a locale name,
+ * e.g. "United States" for US.
+ */
+
+LENGTH_FULL,
+/**
+ * A possible setting for DISPLAY_LENGTH:
+ * use short names when generating a locale name,
+ * e.g. "U.S." for US.
+ */
+
+LENGTH_SHORT,
+/**
+ * A possible setting for SUBSTITUTE_HANDLING:
+ * Returns a fallback value (e.g., the input code) when no data is available.
+ * This is the default behavior.
+ */
+
+SUBSTITUTE,
+/**
+ * A possible setting for SUBSTITUTE_HANDLING:
+ * Returns a null value when no data is available.
+ */
+
+NO_SUBSTITUTE;
+
+/**
+ * Get the Type part of the enum item
+ * (e.g. CAPITALIZATION)
+ */
+
+public android.icu.text.DisplayContext.Type type() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the value part of the enum item
+ * (e.g. CAPITALIZATION_FOR_STANDALONE)
+ */
+
+public int value() { throw new RuntimeException("Stub!"); }
+/**
+ * Type values for DisplayContext
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Type {
+/**
+ * DIALECT_HANDLING can be set to STANDARD_NAMES or DIALECT_NAMES.
+ */
+
+DIALECT_HANDLING,
+/**
+ * CAPITALIZATION can be set to one of CAPITALIZATION_NONE through
+ * CAPITALIZATION_FOR_STANDALONE.
+ */
+
+CAPITALIZATION,
+/**
+ * DISPLAY_LENGTH can be set to LENGTH_FULL or LENGTH_SHORT.
+ */
+
+DISPLAY_LENGTH,
+/**
+ * SUBSTITUTE_HANDLING can be set to SUBSTITUTE or NO_SUBSTITUTE.
+ */
+
+SUBSTITUTE_HANDLING;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Edits.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Edits.java
new file mode 100644
index 0000000..5315c6f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Edits.java
@@ -0,0 +1,352 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+
+/**
+ * Records lengths of string edits but not replacement text. Supports replacements, insertions, deletions
+ * in linear progression. Does not support moving/reordering of text.
+ * <p>
+ * There are two types of edits: <em>change edits</em> and <em>no-change edits</em>. Add edits to
+ * instances of this class using {@link #addReplace(int,int)} (for change edits) and
+ * {@link #addUnchanged(int)} (for no-change edits). Change edits are retained with full granularity,
+ * whereas adjacent no-change edits are always merged together. In no-change edits, there is a one-to-one
+ * mapping between code points in the source and destination strings.
+ * <p>
+ * After all edits have been added, instances of this class should be considered immutable, and an
+ * {@link android.icu.text.Edits.Iterator Edits.Iterator} can be used for queries.
+ * <p>
+ * There are four flavors of Edits.Iterator:
+ * <ul>
+ * <li>{@link #getFineIterator()} retains full granularity of change edits.
+ * <li>{@link #getFineChangesIterator()} retains full granularity of change edits, and when calling
+ * next() on the iterator, skips over no-change edits (unchanged regions).
+ * <li>{@link #getCoarseIterator()} treats adjacent change edits as a single edit. (Adjacent no-change
+ * edits are automatically merged during the construction phase.)
+ * <li>{@link #getCoarseChangesIterator()} treats adjacent change edits as a single edit, and when
+ * calling next() on the iterator, skips over no-change edits (unchanged regions).
+ * </ul>
+ * <p>
+ * For example, consider the string "abc?DeF", which case-folds to "abcssdef". This string has the
+ * following fine edits:
+ * <ul>
+ * <li>abc ? abc (no-change)
+ * <li>? ? ss (change)
+ * <li>D ? d (change)
+ * <li>e ? e (no-change)
+ * <li>F ? f (change)
+ * </ul>
+ * and the following coarse edits (note how adjacent change edits get merged together):
+ * <ul>
+ * <li>abc ? abc (no-change)
+ * <li>?D ? ssd (change)
+ * <li>e ? e (no-change)
+ * <li>F ? f (change)
+ * </ul>
+ * <p>
+ * The "fine changes" and "coarse changes" iterators will step through only the change edits when their
+ * {@link android.icu.text.Edits.Iterator#next() Edits.Iterator#next()} methods are called. They are identical to the non-change iterators when
+ * their {@link android.icu.text.Edits.Iterator#findSourceIndex(int) Edits.Iterator#findSourceIndex(int)} method is used to walk through the string.
+ * <p>
+ * For examples of how to use this class, see the test <code>TestCaseMapEditsIteratorDocs</code> in
+ * UCharacterCaseTest.java.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class Edits {
+
+/**
+ * Constructs an empty object.
+ */
+
+public Edits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the data but may not release memory.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a no-change edit: a record for an unchanged segment of text.
+ * Normally called from inside ICU string transformation functions, not user code.
+ */
+
+public void addUnchanged(int unchangedLength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a change edit: a record for a text replacement/insertion/deletion.
+ * Normally called from inside ICU string transformation functions, not user code.
+ */
+
+public void addReplace(int oldLength, int newLength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * How much longer is the new text compared with the old text?
+ * @return new length minus old length
+ */
+
+public int lengthDelta() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return true if there are any change edits
+ */
+
+public boolean hasChanges() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return the number of change edits
+ */
+
+public int numberOfChanges() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for coarse-grained change edits
+ * (adjacent change edits are treated as one).
+ * Can be used to perform simple string updates.
+ * Skips no-change edits.
+ * @return an Iterator that merges adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getCoarseChangesIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for coarse-grained change and no-change edits
+ * (adjacent change edits are treated as one).
+ * Can be used to perform simple string updates.
+ * Adjacent change edits are treated as one edit.
+ * @return an Iterator that merges adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getCoarseIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for fine-grained change edits
+ * (full granularity of change edits is retained).
+ * Can be used for modifying styled text.
+ * Skips no-change edits.
+ * @return an Iterator that separates adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getFineChangesIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for fine-grained change and no-change edits
+ * (full granularity of change edits is retained).
+ * Can be used for modifying styled text.
+ * @return an Iterator that separates adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getFineIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Merges the two input Edits and appends the result to this object.
+ *
+ * <p>Consider two string transformations (for example, normalization and case mapping)
+ * where each records Edits in addition to writing an output string.<br>
+ * Edits ab reflect how substrings of input string a
+ * map to substrings of intermediate string b.<br>
+ * Edits bc reflect how substrings of intermediate string b
+ * map to substrings of output string c.<br>
+ * This function merges ab and bc such that the additional edits
+ * recorded in this object reflect how substrings of input string a
+ * map to substrings of output string c.
+ *
+ * <p>If unrelated Edits are passed in where the output string of the first
+ * has a different length than the input string of the second,
+ * then an IllegalArgumentException is thrown.
+ *
+ * @param ab reflects how substrings of input string a
+ *     map to substrings of intermediate string b.
+ * @param bc reflects how substrings of intermediate string b
+ *     map to substrings of output string c.
+ * @return this, with the merged edits appended
+ */
+
+public android.icu.text.Edits mergeAndAppend(android.icu.text.Edits ab, android.icu.text.Edits bc) { throw new RuntimeException("Stub!"); }
+/**
+ * Access to the list of edits.
+ * <p>
+ * At any moment in time, an instance of this class points to a single edit: a "window" into a span
+ * of the source string and the corresponding span of the destination string. The source string span
+ * starts at {@link #sourceIndex()} and runs for {@link #oldLength()} chars; the destination string
+ * span starts at {@link #destinationIndex()} and runs for {@link #newLength()} chars.
+ * <p>
+ * The iterator can be moved between edits using the {@link #next()} and
+ * {@link #findSourceIndex(int)} methods. Calling any of these methods mutates the iterator
+ * to make it point to the corresponding edit.
+ * <p>
+ * For more information, see the documentation for {@link android.icu.text.Edits Edits}.
+ * <p>
+ * Note: Although this class is called "Iterator", it does not implement {@link java.util.Iterator}.
+ *
+ * @see #getCoarseIterator
+ * @see #getFineIterator
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Iterator {
+
+private Iterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Advances the iterator to the next edit.
+ * @return true if there is another edit
+ */
+
+public boolean next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the iterator to the edit that contains the source index.
+ * The source index may be found in a no-change edit
+ * even if normal iteration would skip no-change edits.
+ * Normal iteration can continue from a found edit.
+ *
+ * <p>The iterator state before this search logically does not matter.
+ * (It may affect the performance of the search.)
+ *
+ * <p>The iterator state after this search is undefined
+ * if the source index is out of bounds for the source string.
+ *
+ * @param i source index
+ * @return true if the edit for the source index was found
+ */
+
+public boolean findSourceIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the iterator to the edit that contains the destination index.
+ * The destination index may be found in a no-change edit
+ * even if normal iteration would skip no-change edits.
+ * Normal iteration can continue from a found edit.
+ *
+ * <p>The iterator state before this search logically does not matter.
+ * (It may affect the performance of the search.)
+ *
+ * <p>The iterator state after this search is undefined
+ * if the source index is out of bounds for the source string.
+ *
+ * @param i destination index
+ * @return true if the edit for the destination index was found
+ */
+
+public boolean findDestinationIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Computes the destination index corresponding to the given source index.
+ * If the source index is inside a change edit (not at its start),
+ * then the destination index at the end of that edit is returned,
+ * since there is no information about index mapping inside a change edit.
+ *
+ * <p>(This means that indexes to the start and middle of an edit,
+ * for example around a grapheme cluster, are mapped to indexes
+ * encompassing the entire edit.
+ * The alternative, mapping an interior index to the start,
+ * would map such an interval to an empty one.)
+ *
+ * <p>This operation will usually but not always modify this object.
+ * The iterator state after this search is undefined.
+ *
+ * @param i source index
+ * @return destination index; undefined if i is not 0..string length
+ */
+
+public int destinationIndexFromSourceIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Computes the source index corresponding to the given destination index.
+ * If the destination index is inside a change edit (not at its start),
+ * then the source index at the end of that edit is returned,
+ * since there is no information about index mapping inside a change edit.
+ *
+ * <p>(This means that indexes to the start and middle of an edit,
+ * for example around a grapheme cluster, are mapped to indexes
+ * encompassing the entire edit.
+ * The alternative, mapping an interior index to the start,
+ * would map such an interval to an empty one.)
+ *
+ * <p>This operation will usually but not always modify this object.
+ * The iterator state after this search is undefined.
+ *
+ * @param i destination index
+ * @return source index; undefined if i is not 0..string length
+ */
+
+public int sourceIndexFromDestinationIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the edit currently represented by the iterator is a change edit.
+ *
+ * @return true if this edit replaces oldLength() units with newLength() different ones.
+ *         false if oldLength units remain unchanged.
+ */
+
+public boolean hasChange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The length of the current span in the source string, which starts at {@link #sourceIndex}.
+ *
+ * @return the number of units in the source string which are replaced or remain unchanged.
+ */
+
+public int oldLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The length of the current span in the destination string, which starts at
+ * {@link #destinationIndex}, or in the replacement string, which starts at
+ * {@link #replacementIndex}.
+ *
+ * @return the number of units in the destination string, if hasChange() is true. Same as
+ *         oldLength if hasChange() is false.
+ */
+
+public int newLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The start index of the current span in the source string; the span has length
+ * {@link #oldLength}.
+ *
+ * @return the current index into the source string
+ */
+
+public int sourceIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The start index of the current span in the replacement string; the span has length
+ * {@link #newLength}. Well-defined only if the current edit is a change edit.
+ * <p>
+ * The <em>replacement string</em> is the concatenation of all substrings of the destination
+ * string corresponding to change edits.
+ * <p>
+ * This method is intended to be used together with operations that write only replacement
+ * characters (e.g., {@link android.icu.text.CaseMap#omitUnchangedText() CaseMap#omitUnchangedText()}). The source string can then be modified
+ * in-place.
+ *
+ * @return the current index into the replacement-characters-only string, not counting unchanged
+ *         spans
+ */
+
+public int replacementIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The start index of the current span in the destination string; the span has length
+ * {@link #newLength}.
+ *
+ * @return the current index into the full destination string
+ */
+
+public int destinationIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * A string representation of the current edit represented by the iterator for debugging. You
+ * should not depend on the contents of the return string; it may change over time.
+ * @return a string representation of the object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/FormattedValue.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/FormattedValue.java
new file mode 100644
index 0000000..5421fab
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/FormattedValue.java
@@ -0,0 +1,75 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import android.icu.util.ICUUncheckedIOException;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * An abstract formatted value: a string with associated field attributes.
+ * Many formatters format to classes implementing FormattedValue.
+ *
+ * @author sffc
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface FormattedValue extends java.lang.CharSequence {
+
+/**
+ * Returns the formatted string as a Java String.
+ *
+ * Consider using {@link #appendTo} for greater efficiency.
+ *
+ * @return The formatted string.
+ */
+
+public java.lang.String toString();
+
+/**
+ * Appends the formatted string to an Appendable.
+ * <p>
+ * If an IOException occurs when appending to the Appendable, an unchecked
+ * {@link android.icu.util.ICUUncheckedIOException ICUUncheckedIOException} is thrown instead.
+ *
+ * @param appendable The Appendable to which to append the string output.
+ * @return The same Appendable, for chaining.
+ * @throws android.icu.util.ICUUncheckedIOException if the Appendable throws IOException
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable);
+
+/**
+ * Iterates over field positions in the FormattedValue. This lets you determine the position
+ * of specific types of substrings, like a month or a decimal separator.
+ *
+ * To loop over all field positions:
+ *
+ * <pre>
+ *     ConstrainableFieldPosition cfpos = new ConstrainableFieldPosition();
+ *     while (fmtval.nextPosition(cfpos)) {
+ *         // handle the field position; get information from cfpos
+ *     }
+ * </pre>
+ *
+ * @param cfpos
+ *         The object used for iteration state. This can provide constraints to iterate over
+ *         only one specific field; see {@link android.icu.text.ConstrainedFieldPosition#constrainField ConstrainedFieldPosition#constrainField}.
+ * @return true if a new occurrence of the field was found;
+ *         false otherwise.
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos);
+
+/**
+ * Exports the formatted number as an AttributedCharacterIterator.
+ * <p>
+ * Consider using {@link #nextPosition} if you are trying to get field information.
+ *
+ * @return An AttributedCharacterIterator containing full field information.
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator();
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/IDNA.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/IDNA.java
new file mode 100644
index 0000000..e683e49
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/IDNA.java
@@ -0,0 +1,349 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2003-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * Abstract base class for IDNA processing.
+ * See http://www.unicode.org/reports/tr46/
+ * and http://www.ietf.org/rfc/rfc3490.txt
+ * <p>
+ * The IDNA class is not intended for public subclassing.
+ * <p>
+ * The non-static methods implement UTS #46 and IDNA2008.
+ * IDNA2008 is implemented according to UTS #46, see getUTS46Instance().
+ * <p>
+ * IDNA2003 is obsolete. The static methods implement IDNA2003. They are all deprecated.
+ * <p>
+ * IDNA2003 API Overview:
+ * <p>
+ * The static IDNA API methods implement the IDNA protocol as defined in the
+ * <a href="http://www.ietf.org/rfc/rfc3490.txt">IDNA RFC</a>.
+ * The draft defines 2 operations: ToASCII and ToUnicode. Domain labels
+ * containing non-ASCII code points are required to be processed by
+ * ToASCII operation before passing it to resolver libraries. Domain names
+ * that are obtained from resolver libraries are required to be processed by
+ * ToUnicode operation before displaying the domain name to the user.
+ * IDNA requires that implementations process input strings with
+ * <a href="http://www.ietf.org/rfc/rfc3491.txt">Nameprep</a>,
+ * which is a profile of <a href="http://www.ietf.org/rfc/rfc3454.txt">Stringprep</a> ,
+ * and then with <a href="http://www.ietf.org/rfc/rfc3492.txt">Punycode</a>.
+ * Implementations of IDNA MUST fully implement Nameprep and Punycode;
+ * neither Nameprep nor Punycode are optional.
+ * The input and output of ToASCII and ToUnicode operations are Unicode
+ * and are designed to be chainable, i.e., applying ToASCII or ToUnicode operations
+ * multiple times to an input string will yield the same result as applying the operation
+ * once.
+ * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string)
+ * ToASCII(ToASCII(ToASCII...(ToASCII(string))) == ToASCII(string).
+ *
+ * @author Ram Viswanadha, Markus Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class IDNA {
+
+IDNA() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an IDNA instance which implements UTS #46.
+ * Returns an unmodifiable instance, owned by the caller.
+ * Cache it for multiple operations, and delete it when done.
+ * The instance is thread-safe, that is, it can be used concurrently.
+ * <p>
+ * UTS #46 defines Unicode IDNA Compatibility Processing,
+ * updated to the latest version of Unicode and compatible with both
+ * IDNA2003 and IDNA2008.
+ * <p>
+ * The worker functions use transitional processing, including deviation mappings,
+ * unless NONTRANSITIONAL_TO_ASCII or NONTRANSITIONAL_TO_UNICODE
+ * is used in which case the deviation characters are passed through without change.
+ * <p>
+ * Disallowed characters are mapped to U+FFFD.
+ * <p>
+ * Operations with the UTS #46 instance do not support the
+ * ALLOW_UNASSIGNED option.
+ * <p>
+ * By default, the UTS #46 implementation allows all ASCII characters (as valid or mapped).
+ * When the USE_STD3_RULES option is used, ASCII characters other than
+ * letters, digits, hyphen (LDH) and dot/full stop are disallowed and mapped to U+FFFD.
+ *
+ * @param options Bit set to modify the processing and error checking.
+ * @return the UTS #46 IDNA instance, if successful
+ */
+
+public static android.icu.text.IDNA getUTS46Instance(int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts a single domain name label into its ASCII form for DNS lookup.
+ * If any processing step fails, then info.hasErrors() will be true and
+ * the result might not be an ASCII string.
+ * The label might be modified according to the types of errors.
+ * Labels with severe errors will be left in (or turned into) their Unicode form.
+ *
+ * @param label Input domain name label
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder labelToASCII(java.lang.CharSequence label, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * Converts a single domain name label into its Unicode form for human-readable display.
+ * If any processing step fails, then info.hasErrors() will be true.
+ * The label might be modified according to the types of errors.
+ *
+ * @param label Input domain name label
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder labelToUnicode(java.lang.CharSequence label, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * Converts a whole domain name into its ASCII form for DNS lookup.
+ * If any processing step fails, then info.hasErrors() will be true and
+ * the result might not be an ASCII string.
+ * The domain name might be modified according to the types of errors.
+ * Labels with severe errors will be left in (or turned into) their Unicode form.
+ *
+ * @param name Input domain name
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder nameToASCII(java.lang.CharSequence name, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * Converts a whole domain name into its Unicode form for human-readable display.
+ * If any processing step fails, then info.hasErrors() will be true.
+ * The domain name might be modified according to the types of errors.
+ *
+ * @param name Input domain name
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder nameToUnicode(java.lang.CharSequence name, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * IDNA option to check for whether the input conforms to the BiDi rules.
+ * For use in static worker and factory methods.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (IDNA2003 always performs a BiDi check.)
+ */
+
+public static final int CHECK_BIDI = 4; // 0x4
+
+/**
+ * IDNA option to check for whether the input conforms to the CONTEXTJ rules.
+ * For use in static worker and factory methods.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (The CONTEXTJ check is new in IDNA2008.)
+ */
+
+public static final int CHECK_CONTEXTJ = 8; // 0x8
+
+/**
+ * IDNA option to check for whether the input conforms to the CONTEXTO rules.
+ * For use in static worker and factory methods.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (The CONTEXTO check is new in IDNA2008.)
+ * <p>This is for use by registries for IDNA2008 conformance.
+ * UTS #46 does not require the CONTEXTO check.
+ */
+
+public static final int CHECK_CONTEXTO = 64; // 0x40
+
+/** 
+ * Default options value: None of the other options are set.
+ * For use in static worker and factory methods.
+ */
+
+public static final int DEFAULT = 0; // 0x0
+
+/**
+ * IDNA option for nontransitional processing in ToASCII().
+ * For use in static worker and factory methods.
+ * <p>By default, ToASCII() uses transitional processing.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.)
+ */
+
+public static final int NONTRANSITIONAL_TO_ASCII = 16; // 0x10
+
+/**
+ * IDNA option for nontransitional processing in ToUnicode().
+ * For use in static worker and factory methods.
+ * <p>By default, ToUnicode() uses transitional processing.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.)
+ */
+
+public static final int NONTRANSITIONAL_TO_UNICODE = 32; // 0x20
+
+/** 
+ * Option to check whether the input conforms to the STD3 ASCII rules,
+ * for example the restriction of labels to LDH characters
+ * (ASCII Letters, Digits and Hyphen-Minus).
+ * For use in static worker and factory methods.
+ */
+
+public static final int USE_STD3_RULES = 2; // 0x2
+/**
+ * IDNA error bit set values.
+ * When a domain name or label fails a processing step or does not meet the
+ * validity criteria, then one or more of these error bits are set.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Error {
+/**
+ * A non-final domain name label (or the whole domain name) is empty.
+ */
+
+EMPTY_LABEL,
+/**
+ * A domain name label is longer than 63 bytes.
+ * (See STD13/RFC1034 3.1. Name space specifications and terminology.)
+ * This is only checked in ToASCII operations, and only if the output label is all-ASCII.
+ */
+
+LABEL_TOO_LONG,
+/**
+ * A domain name is longer than 255 bytes in its storage form.
+ * (See STD13/RFC1034 3.1. Name space specifications and terminology.)
+ * This is only checked in ToASCII operations, and only if the output domain name is all-ASCII.
+ */
+
+DOMAIN_NAME_TOO_LONG,
+/**
+ * A label starts with a hyphen-minus ('-').
+ */
+
+LEADING_HYPHEN,
+/**
+ * A label ends with a hyphen-minus ('-').
+ */
+
+TRAILING_HYPHEN,
+/**
+ * A label contains hyphen-minus ('-') in the third and fourth positions.
+ */
+
+HYPHEN_3_4,
+/**
+ * A label starts with a combining mark.
+ */
+
+LEADING_COMBINING_MARK,
+/**
+ * A label or domain name contains disallowed characters.
+ */
+
+DISALLOWED,
+/**
+ * A label starts with "xn--" but does not contain valid Punycode.
+ * That is, an xn-- label failed Punycode decoding.
+ */
+
+PUNYCODE,
+/**
+ * A label contains a dot=full stop.
+ * This can occur in an input string for a single-label function.
+ */
+
+LABEL_HAS_DOT,
+/**
+ * An ACE label does not contain a valid label string.
+ * The label was successfully ACE (Punycode) decoded but the resulting
+ * string had severe validation errors. For example,
+ * it might contain characters that are not allowed in ACE labels,
+ * or it might not be normalized.
+ */
+
+INVALID_ACE_LABEL,
+/**
+ * A label does not meet the IDNA BiDi requirements (for right-to-left characters).
+ */
+
+BIDI,
+/**
+ * A label does not meet the IDNA CONTEXTJ requirements.
+ */
+
+CONTEXTJ,
+/**
+ * A label does not meet the IDNA CONTEXTO requirements for punctuation characters.
+ * Some punctuation characters "Would otherwise have been DISALLOWED"
+ * but are allowed in certain contexts. (RFC 5892)
+ */
+
+CONTEXTO_PUNCTUATION,
+/**
+ * A label does not meet the IDNA CONTEXTO requirements for digits.
+ * Arabic-Indic Digits (U+066x) must not be mixed with Extended Arabic-Indic Digits (U+06Fx).
+ */
+
+CONTEXTO_DIGITS;
+}
+
+/**
+ * Output container for IDNA processing errors.
+ * The Info class is not suitable for subclassing.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Info {
+
+/**
+ * Constructor.
+ */
+
+public Info() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Were there IDNA processing errors?
+ * @return true if there were processing errors
+ */
+
+public boolean hasErrors() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a set indicating IDNA processing errors.
+ * @return set of processing errors (modifiable, and not null)
+ */
+
+public java.util.Set<android.icu.text.IDNA.Error> getErrors() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if transitional and nontransitional processing produce different results.
+ * This is the case when the input label or domain name contains
+ * one or more deviation characters outside a Punycode label (see UTS #46).
+ * <ul>
+ * <li>With nontransitional processing, such characters are
+ * copied to the destination string.
+ * <li>With transitional processing, such characters are
+ * mapped (sharp s/sigma) or removed (joiner/nonjoiner).
+ * </ul>
+ * @return true if transitional and nontransitional processing produce different results
+ */
+
+public boolean isTransitionalDifferent() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ListFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ListFormatter.java
new file mode 100644
index 0000000..63a7e18
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ListFormatter.java
@@ -0,0 +1,85 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2012-2016, Google, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.Format;
+
+/**
+ * Immutable class for formatting a list, using data from CLDR (or supplied
+ * separately). The class is not subclassable.
+ *
+ * @author Mark Davis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class ListFormatter {
+
+ListFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a list formatter that is appropriate for a locale.
+ *
+ * @param locale
+ *            the locale in question.
+ * @return ListFormatter
+ */
+
+public static android.icu.text.ListFormatter getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a list formatter that is appropriate for a locale.
+ *
+ * @param locale
+ *            the locale in question.
+ * @return ListFormatter
+ */
+
+public static android.icu.text.ListFormatter getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a list formatter that is appropriate for the default FORMAT locale.
+ *
+ * @return ListFormatter
+ */
+
+public static android.icu.text.ListFormatter getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a list of objects.
+ *
+ * @param items
+ *            items to format. The toString() method is called on each.
+ * @return items formatted into a string
+ */
+
+public java.lang.String format(java.lang.Object... items) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a collection of objects. The toString() method is called on each.
+ *
+ * @param items
+ *            items to format. The toString() method is called on each.
+ * @return items formatted into a string
+ */
+
+public java.lang.String format(java.util.Collection<?> items) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern to use for a particular item count.
+ * @param count the item count.
+ * @return the pattern with {0}, {1}, {2}, etc. For English,
+ * getPatternForNumItems(3) == "{0}, {1}, and {2}"
+ * @throws java.lang.IllegalArgumentException when count is 0 or negative.
+ */
+
+public java.lang.String getPatternForNumItems(int count) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/LocaleDisplayNames.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/LocaleDisplayNames.java
new file mode 100644
index 0000000..f6e9f06
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/LocaleDisplayNames.java
@@ -0,0 +1,316 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import java.util.Locale;
+import android.icu.text.DisplayContext.Type;
+import android.icu.lang.UScript;
+import java.util.Set;
+import android.icu.util.IllformedLocaleException;
+
+/**
+ * Returns display names of ULocales and components of ULocales. For
+ * more information on language, script, region, variant, key, and
+ * values, see {@link android.icu.util.ULocale}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class LocaleDisplayNames {
+
+LocaleDisplayNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience overload of {@link #getInstance(android.icu.util.ULocale,android.icu.text.LocaleDisplayNames.DialectHandling)} that specifies
+ * STANDARD dialect handling.
+ * @param locale the display locale
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience overload of {@link #getInstance(java.util.Locale,android.icu.text.DisplayContext...)} that specifies
+ * {@link android.icu.text.DisplayContext#STANDARD_NAMES DisplayContext#STANDARD_NAMES}.
+ * @param locale the display {@link java.util.Locale}
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of LocaleDisplayNames that returns names formatted for the provided locale,
+ * using the provided dialectHandling.
+ * @param locale the display locale
+ * @param dialectHandling how to select names for locales
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale locale, android.icu.text.LocaleDisplayNames.DialectHandling dialectHandling) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of LocaleDisplayNames that returns names formatted for the provided locale,
+ * using the provided DisplayContext settings
+ * @param locale the display locale
+ * @param contexts one or more context settings (e.g. for dialect
+ *              handling, capitalization, etc.
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale locale, android.icu.text.DisplayContext... contexts) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of LocaleDisplayNames that returns names formatted for the provided
+ * {@link java.util.Locale}, using the provided DisplayContext settings
+ * @param locale the display {@link java.util.Locale}
+ * @param contexts one or more context settings (e.g. for dialect
+ *              handling, capitalization, etc.
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale locale, android.icu.text.DisplayContext... contexts) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale used to determine the display names. This is not necessarily the same
+ * locale passed to {@link #getInstance}.
+ * @return the display locale
+ */
+
+public abstract android.icu.util.ULocale getLocale();
+
+/**
+ * Returns the dialect handling used in the display names.
+ * @return the dialect handling enum
+ */
+
+public abstract android.icu.text.LocaleDisplayNames.DialectHandling getDialectHandling();
+
+/**
+ * Returns the current value for a specified DisplayContext.Type.
+ * @param type the DisplayContext.Type whose value to return
+ * @return the current DisplayContext setting for the specified type
+ */
+
+public abstract android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type type);
+
+/**
+ * Returns the display name of the provided ulocale.
+ * When no display names are available for all or portions
+ * of the original locale ID, those portions may be
+ * used directly (possibly in a more canonical form) as
+ * part of the  returned display name.
+ * @param locale the locale whose display name to return
+ * @return the display name of the provided locale
+ */
+
+public abstract java.lang.String localeDisplayName(android.icu.util.ULocale locale);
+
+/**
+ * Returns the display name of the provided locale.
+ * When no display names are available for all or portions
+ * of the original locale ID, those portions may be
+ * used directly (possibly in a more canonical form) as
+ * part of the  returned display name.
+ * @param locale the locale whose display name to return
+ * @return the display name of the provided locale
+ */
+
+public abstract java.lang.String localeDisplayName(java.util.Locale locale);
+
+/**
+ * Returns the display name of the provided locale id.
+ * When no display names are available for all or portions
+ * of the original locale ID, those portions may be
+ * used directly (possibly in a more canonical form) as
+ * part of the  returned display name.
+ * @param localeId the id of the locale whose display name to return
+ * @return the display name of the provided locale
+ */
+
+public abstract java.lang.String localeDisplayName(java.lang.String localeId);
+
+/**
+ * Returns the display name of the provided language code.
+ * @param lang the language code
+ * @return the display name of the provided language code
+ */
+
+public abstract java.lang.String languageDisplayName(java.lang.String lang);
+
+/**
+ * Returns the display name of the provided script code.
+ * @param script the script code
+ * @return the display name of the provided script code
+ */
+
+public abstract java.lang.String scriptDisplayName(java.lang.String script);
+
+/**
+ * Returns the display name of the provided script code.  See
+ * {@link android.icu.lang.UScript} for recognized script codes.
+ * @param scriptCode the script code number
+ * @return the display name of the provided script code
+ */
+
+public abstract java.lang.String scriptDisplayName(int scriptCode);
+
+/**
+ * Returns the display name of the provided region code.
+ * @param region the region code
+ * @return the display name of the provided region code
+ */
+
+public abstract java.lang.String regionDisplayName(java.lang.String region);
+
+/**
+ * Returns the display name of the provided variant.
+ * @param variant the variant string
+ * @return the display name of the provided variant
+ */
+
+public abstract java.lang.String variantDisplayName(java.lang.String variant);
+
+/**
+ * Returns the display name of the provided locale key.
+ * @param key the locale key name
+ * @return the display name of the provided locale key
+ */
+
+public abstract java.lang.String keyDisplayName(java.lang.String key);
+
+/**
+ * Returns the display name of the provided value (used with the provided key).
+ * @param key the locale key name
+ * @param value the locale key's value
+ * @return the display name of the provided value
+ */
+
+public abstract java.lang.String keyValueDisplayName(java.lang.String key, java.lang.String value);
+
+/**
+ * Return a list of information used to construct a UI list of locale names.
+ * @param collator how to collate?should normally be Collator.getInstance(getDisplayLocale())
+ * @param inSelf if true, compares the nameInSelf, otherwise the nameInDisplayLocale.
+ * Set depending on which field (displayLocale vs self) is to show up in the UI.
+ * If both are to show up in the UI, then it should be the one used for the primary sort order.
+ * @param localeSet a list of locales to present in a UI list. The casing uses the settings in the LocaleDisplayNames instance.
+ * @return an ordered list of UiListItems.
+ * @throws android.icu.util.IllformedLocaleException if any of the locales in localeSet are malformed.
+ */
+
+public java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiList(java.util.Set<android.icu.util.ULocale> localeSet, boolean inSelf, java.util.Comparator<java.lang.Object> collator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a list of information used to construct a UI list of locale names, providing more access to control the sorting.
+ * Normally use getUiList instead.
+ * @param comparator how to sort the UiListItems in the result.
+ * @param localeSet a list of locales to present in a UI list. The casing uses the settings in the LocaleDisplayNames instance.
+ * @return an ordered list of UiListItems.
+ * @throws android.icu.util.IllformedLocaleException if any of the locales in localeSet are malformed.
+ */
+
+public abstract java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiListCompareWholeItems(java.util.Set<android.icu.util.ULocale> localeSet, java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem> comparator);
+/**
+ * Enum used in {@link #getInstance(android.icu.util.ULocale,android.icu.text.LocaleDisplayNames.DialectHandling)}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DialectHandling {
+/**
+ * Use standard names when generating a locale name,
+ * e.g. en_GB displays as 'English (United Kingdom)'.
+ */
+
+STANDARD_NAMES,
+/**
+ * Use dialect names when generating a locale name,
+ * e.g. en_GB displays as 'British English'.
+ */
+
+DIALECT_NAMES;
+}
+
+/**
+ * Struct-like class used to return information for constructing a UI list, each corresponding to a locale.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class UiListItem {
+
+/**
+ * Constructor, normally only called internally.
+ * @param minimized locale for an input locale
+ * @param modified modified for an input locale
+ * @param nameInDisplayLocale name of the modified locale in the display locale
+ * @param nameInSelf name of the modified locale in itself
+ */
+
+public UiListItem(android.icu.util.ULocale minimized, android.icu.util.ULocale modified, java.lang.String nameInDisplayLocale, java.lang.String nameInSelf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a comparator that compares the locale names for the display locale or the in-self names,
+ * depending on an input parameter.
+ * @param inSelf if true, compares the nameInSelf, otherwise the nameInDisplayLocale
+ * @param comparator (meant for strings, but because Java Collator doesn't have &lt;String&gt;...)
+ * @return UiListItem comparator
+ */
+
+public static java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem> getComparator(java.util.Comparator<java.lang.Object> comparator, boolean inSelf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimized locale for an input locale, such as sr-Cyrl ? sr
+ */
+
+public final android.icu.util.ULocale minimized;
+{ minimized = null; }
+
+/**
+ * Returns the modified locale for an input locale, such as sr ? sr-Cyrl, where there is also an sr-Latn in the list
+ */
+
+public final android.icu.util.ULocale modified;
+{ modified = null; }
+
+/**
+ * Returns the name of the modified locale in the display locale, such as "Englisch (VS)" (for 'en-US', where the display locale is 'de').
+ */
+
+public final java.lang.String nameInDisplayLocale;
+{ nameInDisplayLocale = null; }
+
+/**
+ * Returns the name of the modified locale in itself, such as "English (US)" (for 'en-US').
+ */
+
+public final java.lang.String nameInSelf;
+{ nameInSelf = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MeasureFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MeasureFormat.java
new file mode 100644
index 0000000..8d6477a
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MeasureFormat.java
@@ -0,0 +1,318 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **********************************************************************
+ * Copyright (c) 2004-2016, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ **********************************************************************
+ * Author: Alan Liu
+ * Created: April 20, 2004
+ * Since: ICU 3.0
+ **********************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.util.MeasureUnit;
+import android.icu.util.Measure;
+import java.util.Locale;
+import java.text.FieldPosition;
+import java.util.Collection;
+import android.icu.util.ULocale.Category;
+
+/**
+ * A formatter for Measure objects.
+ *
+ * <p>
+ * To format a Measure object, first create a formatter object using a MeasureFormat factory method. Then
+ * use that object's format or formatMeasures methods.
+ *
+ * Here is sample code:
+ *
+ * <pre>
+ * MeasureFormat fmtFr = MeasureFormat.getInstance(ULocale.FRENCH, FormatWidth.SHORT);
+ * Measure measure = new Measure(23, MeasureUnit.CELSIUS);
+ *
+ * // Output: 23 ?C
+ * System.out.println(fmtFr.format(measure));
+ *
+ * Measure measureF = new Measure(70, MeasureUnit.FAHRENHEIT);
+ *
+ * // Output: 70 ?F
+ * System.out.println(fmtFr.format(measureF));
+ *
+ * MeasureFormat fmtFrFull = MeasureFormat.getInstance(ULocale.FRENCH, FormatWidth.WIDE);
+ * // Output: 70 pieds et 5,3 pouces
+ * System.out.println(fmtFrFull.formatMeasures(new Measure(70, MeasureUnit.FOOT),
+ *         new Measure(5.3, MeasureUnit.INCH)));
+ *
+ * // Output: 1 pied et 1 pouce
+ * System.out.println(
+ *         fmtFrFull.formatMeasures(new Measure(1, MeasureUnit.FOOT), new Measure(1, MeasureUnit.INCH)));
+ *
+ * MeasureFormat fmtFrNarrow = MeasureFormat.getInstance(ULocale.FRENCH, FormatWidth.NARROW);
+ * // Output: 1? 1?
+ * System.out.println(fmtFrNarrow.formatMeasures(new Measure(1, MeasureUnit.FOOT),
+ *         new Measure(1, MeasureUnit.INCH)));
+ *
+ * MeasureFormat fmtEn = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
+ *
+ * // Output: 1 inch, 2 feet
+ * fmtEn.formatMeasures(new Measure(1, MeasureUnit.INCH), new Measure(2, MeasureUnit.FOOT));
+ * </pre>
+ * <p>
+ * This class does not do conversions from one unit to another. It simply formats whatever units it is
+ * given
+ * <p>
+ * This class is immutable and thread-safe so long as its deprecated subclass, TimeUnitFormat, is never
+ * used. TimeUnitFormat is not thread-safe, and is mutable. Although this class has existing subclasses,
+ * this class does not support new sub-classes.
+ *
+ * @see android.icu.text.UFormat
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class MeasureFormat extends android.icu.text.UFormat {
+
+MeasureFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the locale, formatWidth, and format.
+ *
+ * @param locale
+ *            the locale.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the {@link java.util.Locale} and formatWidth.
+ *
+ * @param locale
+ *            the {@link java.util.Locale}.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(java.util.Locale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the locale, formatWidth, and format.
+ *
+ * @param locale
+ *            the locale.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @param format
+ *            This is defensively copied.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth, android.icu.text.NumberFormat format) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the {@link java.util.Locale}, formatWidth, and format.
+ *
+ * @param locale
+ *            the {@link java.util.Locale}.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @param format
+ *            This is defensively copied.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(java.util.Locale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth, android.icu.text.NumberFormat format) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Able to format Collection&lt;? extends Measure&gt;, Measure[], and Measure by delegating to
+ * formatMeasures. If the pos argument identifies a NumberFormat field, then its indices are set to
+ * the beginning and end of the first such field encountered. MeasureFormat itself does not supply
+ * any fields.
+ *
+ * Calling a <code>formatMeasures</code> method is preferred over calling this method as they give
+ * better performance.
+ *
+ * @param obj
+ *            must be a Collection&lt;? extends Measure&gt;, Measure[], or Measure object.
+ * @param toAppendTo
+ *            Formatted string appended here.
+ * @param fpos
+ *            Identifies a field in the formatted text.
+ * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition)
+ */
+
+public java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from a string to produce a <code>Measure</code>.
+ *
+ * @see java.text.Format#parseObject(java.lang.String, java.text.ParsePosition)
+ * @throws java.lang.UnsupportedOperationException
+ *             Not supported.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+public android.icu.util.Measure parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a sequence of measures. Uses the ListFormatter unit lists. So, for example, one could
+ * format ?3 feet, 2 inches?. Zero values are formatted (eg, ?3 feet, 0 inches?). It is the caller?s
+ * responsibility to have the appropriate values in appropriate order, and using the appropriate
+ * Number values. Typically the units should be in descending order, with all but the last Measure
+ * having integer values (eg, not ?3.2 feet, 2 inches?).
+ *
+ * @param measures
+ *            a sequence of one or more measures.
+ * @return the formatted string.
+ */
+
+public final java.lang.String formatMeasures(android.icu.util.Measure... measures) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a single measure per unit.
+ *
+ * An example of such a formatted string is "3.5 meters per second."
+ *
+ * @param measure
+ *            the measure object. In above example, 3.5 meters.
+ * @param perUnit
+ *            the per unit. In above example, it is MeasureUnit.SECOND
+ * @param appendTo
+ *            formatted string appended here.
+ * @param pos
+ *            The field position.
+ * @return appendTo.
+ */
+
+public java.lang.StringBuilder formatMeasurePerUnit(android.icu.util.Measure measure, android.icu.util.MeasureUnit perUnit, java.lang.StringBuilder appendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a sequence of measures.
+ *
+ * If the fieldPosition argument identifies a NumberFormat field, then its indices are set to the
+ * beginning and end of the first such field encountered. MeasureFormat itself does not supply any
+ * fields.
+ *
+ * @param appendTo
+ *            the formatted string appended here.
+ * @param fpos
+ *            Identifies a field in the formatted text.
+ * @param measures
+ *            the measures to format.
+ * @return appendTo.
+ * @see android.icu.text.MeasureFormat#formatMeasures(Measure...)
+ */
+
+public java.lang.StringBuilder formatMeasures(java.lang.StringBuilder appendTo, java.text.FieldPosition fpos, android.icu.util.Measure... measures) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the display name of the specified {@link android.icu.util.MeasureUnit MeasureUnit} corresponding to the current locale and
+ * format width.
+ *
+ * @param unit
+ *            The unit for which to get a display name.
+ * @return The display name in the locale and width specified in {@link android.icu.text.MeasureFormat#getInstance MeasureFormat#getInstance},
+ *         or null if there is no display name available for the specified unit.
+ */
+
+public java.lang.String getUnitDisplayName(android.icu.util.MeasureUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Two MeasureFormats, a and b, are equal if and only if they have the same formatWidth, locale, and
+ * equal number formats.
+ */
+
+public final boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public final int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the format width this instance is using.
+ */
+
+public android.icu.text.MeasureFormat.FormatWidth getWidth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the locale of this instance.
+ */
+
+public final android.icu.util.ULocale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a copy of the number format.
+ */
+
+public android.icu.text.NumberFormat getNumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a formatter for CurrencyAmount objects in the given locale.
+ *
+ * @param locale
+ *            desired locale
+ * @return a formatter object
+ */
+
+public static android.icu.text.MeasureFormat getCurrencyFormat(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a formatter for CurrencyAmount objects in the given {@link java.util.Locale}.
+ *
+ * @param locale
+ *            desired {@link java.util.Locale}
+ * @return a formatter object
+ */
+
+public static android.icu.text.MeasureFormat getCurrencyFormat(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a formatter for CurrencyAmount objects in the default <code>FORMAT</code> locale.
+ *
+ * @return a formatter object
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.text.MeasureFormat getCurrencyFormat() { throw new RuntimeException("Stub!"); }
+/**
+ * Formatting width enum.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum FormatWidth {
+/**
+ * Spell out everything.
+ */
+
+WIDE,
+/**
+ * Abbreviate when possible.
+ */
+
+SHORT,
+/**
+ * Brief. Use only a symbol for the unit when possible.
+ */
+
+NARROW,
+/**
+ * Identical to NARROW except when formatMeasures is called with an hour and minute; minute and
+ * second; or hour, minute, and second Measures. In these cases formatMeasures formats as 5:37:23
+ * instead of 5h, 37m, 23s.
+ */
+
+NUMERIC;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MessageFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MessageFormat.java
new file mode 100644
index 0000000..eea79a0
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MessageFormat.java
@@ -0,0 +1,1047 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (c) 2004-2016, International Business Machines
+* Corporation and others.  All Rights Reserved.
+**********************************************************************
+* Author: Alan Liu
+* Created: April 6, 2004
+* Since: ICU 3.0
+**********************************************************************
+*/
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import java.util.Date;
+import java.text.Format;
+import java.util.Map;
+import android.icu.util.ULocale.Category;
+import java.util.Set;
+import java.text.FieldPosition;
+import java.text.AttributedCharacterIterator;
+import java.text.ParsePosition;
+import java.text.ParseException;
+import java.io.InvalidObjectException;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.MessageFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>MessageFormat prepares strings for display to users,
+ * with optional arguments (variables/placeholders).
+ * The arguments can occur in any order, which is necessary for translation
+ * into languages with different grammars.
+ *
+ * <p>A MessageFormat is constructed from a <em>pattern</em> string
+ * with arguments in {curly braces} which will be replaced by formatted values.
+ *
+ * <p><code>MessageFormat</code> differs from the other <code>Format</code>
+ * classes in that you create a <code>MessageFormat</code> object with one
+ * of its constructors (not with a <code>getInstance</code> style factory
+ * method). Factory methods aren't necessary because <code>MessageFormat</code>
+ * itself doesn't implement locale-specific behavior. Any locale-specific
+ * behavior is defined by the pattern that you provide and the
+ * subformats used for inserted arguments.
+ *
+ * <p>Arguments can be named (using identifiers) or numbered (using small ASCII-digit integers).
+ * Some of the API methods work only with argument numbers and throw an exception
+ * if the pattern has named arguments (see {@link #usesNamedArguments()}).
+ *
+ * <p>An argument might not specify any format type. In this case,
+ * a Number value is formatted with a default (for the locale) NumberFormat,
+ * a Date value is formatted with a default (for the locale) DateFormat,
+ * and for any other value its toString() value is used.
+ *
+ * <p>An argument might specify a "simple" type for which the specified
+ * Format object is created, cached and used.
+ *
+ * <p>An argument might have a "complex" type with nested MessageFormat sub-patterns.
+ * During formatting, one of these sub-messages is selected according to the argument value
+ * and recursively formatted.
+ *
+ * <p>After construction, a custom Format object can be set for
+ * a top-level argument, overriding the default formatting and parsing behavior
+ * for that argument.
+ * However, custom formatting can be achieved more simply by writing
+ * a typeless argument in the pattern string
+ * and supplying it with a preformatted string value.
+ *
+ * <p>When formatting, MessageFormat takes a collection of argument values
+ * and writes an output string.
+ * The argument values may be passed as an array
+ * (when the pattern contains only numbered arguments)
+ * or as a Map (which works for both named and numbered arguments).
+ *
+ * <p>Each argument is matched with one of the input values by array index or map key
+ * and formatted according to its pattern specification
+ * (or using a custom Format object if one was set).
+ * A numbered pattern argument is matched with a map key that contains that number
+ * as an ASCII-decimal-digit string (without leading zero).
+ *
+ * <h3><a name="patterns">Patterns and Their Interpretation</a></h3>
+ *
+ * <code>MessageFormat</code> uses patterns of the following form:
+ * <blockquote><pre>
+ * message = messageText (argument messageText)*
+ * argument = noneArg | simpleArg | complexArg
+ * complexArg = choiceArg | pluralArg | selectArg | selectordinalArg
+ *
+ * noneArg = '{' argNameOrNumber '}'
+ * simpleArg = '{' argNameOrNumber ',' argType [',' argStyle] '}'
+ * choiceArg = '{' argNameOrNumber ',' "choice" ',' choiceStyle '}'
+ * pluralArg = '{' argNameOrNumber ',' "plural" ',' pluralStyle '}'
+ * selectArg = '{' argNameOrNumber ',' "select" ',' selectStyle '}'
+ * selectordinalArg = '{' argNameOrNumber ',' "selectordinal" ',' pluralStyle '}'
+ *
+ * choiceStyle: see {@link java.text.ChoiceFormat ChoiceFormat}
+ * pluralStyle: see {@link android.icu.text.PluralFormat PluralFormat}
+ * selectStyle: see {@link android.icu.text.SelectFormat SelectFormat}
+ *
+ * argNameOrNumber = argName | argNumber
+ * argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
+ * argNumber = '0' | ('1'..'9' ('0'..'9')*)
+ *
+ * argType = "number" | "date" | "time" | "spellout" | "ordinal" | "duration"
+ * argStyle = "short" | "medium" | "long" | "full" | "integer" | "currency" | "percent" | argStyleText
+ * </pre></blockquote>
+ *
+ * <ul>
+ *   <li>messageText can contain quoted literal strings including syntax characters.
+ *       A quoted literal string begins with an ASCII apostrophe and a syntax character
+ *       (usually a {curly brace}) and continues until the next single apostrophe.
+ *       A double ASCII apostrohpe inside or outside of a quoted string represents
+ *       one literal apostrophe.
+ *   <li>Quotable syntax characters are the {curly braces} in all messageText parts,
+ *       plus the '#' sign in a messageText immediately inside a pluralStyle,
+ *       and the '|' symbol in a messageText immediately inside a choiceStyle.
+ *   <li>See also {@link android.icu.text.MessagePattern.ApostropheMode MessagePattern.ApostropheMode}
+ *   <li>In argStyleText, every single ASCII apostrophe begins and ends quoted literal text,
+ *       and unquoted {curly braces} must occur in matched pairs.
+ * </ul>
+ *
+ * <p>Recommendation: Use the real apostrophe (single quote) character \\u2019 for
+ * human-readable text, and use the ASCII apostrophe (\\u0027 ' )
+ * only in program syntax, like quoting in MessageFormat.
+ * See the annotations for U+0027 Apostrophe in The Unicode Standard.
+ *
+ * <p>The <code>choice</code> argument type is deprecated.
+ * Use <code>plural</code> arguments for proper plural selection,
+ * and <code>select</code> arguments for simple selection among a fixed set of choices.
+ *
+ * <p>The <code>argType</code> and <code>argStyle</code> values are used to create
+ * a <code>Format</code> instance for the format element. The following
+ * table shows how the values map to Format instances. Combinations not
+ * shown in the table are illegal. Any <code>argStyleText</code> must
+ * be a valid pattern string for the Format subclass used.
+ *
+ * <table border=1>
+ *    <tr>
+ *       <th>argType
+ *       <th>argStyle
+ *       <th>resulting Format object
+ *    <tr>
+ *       <td colspan=2><i>(none)</i>
+ *       <td><code>null</code>
+ *    <tr>
+ *       <td rowspan=5><code>number</code>
+ *       <td><i>(none)</i>
+ *       <td><code>NumberFormat.getInstance(getLocale())</code>
+ *    <tr>
+ *       <td><code>integer</code>
+ *       <td><code>NumberFormat.getIntegerInstance(getLocale())</code>
+ *    <tr>
+ *       <td><code>currency</code>
+ *       <td><code>NumberFormat.getCurrencyInstance(getLocale())</code>
+ *    <tr>
+ *       <td><code>percent</code>
+ *       <td><code>NumberFormat.getPercentInstance(getLocale())</code>
+ *    <tr>
+ *       <td><i>argStyleText</i>
+ *       <td><code>new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale()))</code>
+ *    <tr>
+ *       <td rowspan=6><code>date</code>
+ *       <td><i>(none)</i>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>short</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.SHORT, getLocale())</code>
+ *    <tr>
+ *       <td><code>medium</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>long</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.LONG, getLocale())</code>
+ *    <tr>
+ *       <td><code>full</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.FULL, getLocale())</code>
+ *    <tr>
+ *       <td><i>argStyleText</i>
+ *       <td><code>new SimpleDateFormat(argStyleText, getLocale())</code>
+ *    <tr>
+ *       <td rowspan=6><code>time</code>
+ *       <td><i>(none)</i>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>short</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())</code>
+ *    <tr>
+ *       <td><code>medium</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>long</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.LONG, getLocale())</code>
+ *    <tr>
+ *       <td><code>full</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.FULL, getLocale())</code>
+ *    <tr>
+ *       <td><i>argStyleText</i>
+ *       <td><code>new SimpleDateFormat(argStyleText, getLocale())</code>
+ *    <tr>
+ *       <td><code>spellout</code>
+ *       <td><i>argStyleText (optional)</i>
+ *       <td><code>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT)
+ *           <br>&nbsp;&nbsp;&nbsp;&nbsp;.setDefaultRuleset(argStyleText);</code>
+ *    <tr>
+ *       <td><code>ordinal</code>
+ *       <td><i>argStyleText (optional)</i>
+ *       <td><code>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL)
+ *           <br>&nbsp;&nbsp;&nbsp;&nbsp;.setDefaultRuleset(argStyleText);</code>
+ *    <tr>
+ *       <td><code>duration</code>
+ *       <td><i>argStyleText (optional)</i>
+ *       <td><code>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION)
+ *           <br>&nbsp;&nbsp;&nbsp;&nbsp;.setDefaultRuleset(argStyleText);</code>
+ * </table>
+ *
+ * <h4><a name="diffsjdk">Differences from java.text.MessageFormat</a></h4>
+ *
+ * <p>The ICU MessageFormat supports both named and numbered arguments,
+ * while the JDK MessageFormat only supports numbered arguments.
+ * Named arguments make patterns more readable.
+ *
+ * <p>ICU implements a more user-friendly apostrophe quoting syntax.
+ * In message text, an apostrophe only begins quoting literal text
+ * if it immediately precedes a syntax character (mostly {curly braces}).<br>
+ * In the JDK MessageFormat, an apostrophe always begins quoting,
+ * which requires common text like "don't" and "aujourd'hui"
+ * to be written with doubled apostrophes like "don''t" and "aujourd''hui".
+ * For more details see {@link android.icu.text.MessagePattern.ApostropheMode MessagePattern.ApostropheMode}.
+ *
+ * <p>ICU does not create a ChoiceFormat object for a choiceArg, pluralArg or selectArg
+ * but rather handles such arguments itself.
+ * The JDK MessageFormat does create and use a ChoiceFormat object
+ * (<code>new ChoiceFormat(argStyleText)</code>).
+ * The JDK does not support plural and select arguments at all.
+ *
+ * <h4>Usage Information</h4>
+ *
+ * <p>Here are some examples of usage:
+ * <blockquote>
+ * <pre>
+ * Object[] arguments = {
+ *     7,
+ *     new Date(System.currentTimeMillis()),
+ *     "a disturbance in the Force"
+ * };
+ *
+ * String result = MessageFormat.format(
+ *     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
+ *     arguments);
+ *
+ * <em>output</em>: At 12:30 PM on Jul 3, 2053, there was a disturbance
+ *           in the Force on planet 7.
+ *
+ * </pre>
+ * </blockquote>
+ * Typically, the message format will come from resources, and the
+ * arguments will be dynamically set at runtime.
+ *
+ * <p>Example 2:
+ * <blockquote>
+ * <pre>
+ * Object[] testArgs = { 3, "MyDisk" };
+ *
+ * MessageFormat form = new MessageFormat(
+ *     "The disk \"{1}\" contains {0} file(s).");
+ *
+ * System.out.println(form.format(testArgs));
+ *
+ * // output, with different testArgs
+ * <em>output</em>: The disk "MyDisk" contains 0 file(s).
+ * <em>output</em>: The disk "MyDisk" contains 1 file(s).
+ * <em>output</em>: The disk "MyDisk" contains 1,273 file(s).
+ * </pre>
+ * </blockquote>
+ *
+ * <p>For messages that include plural forms, you can use a plural argument:
+ * <pre>
+ * MessageFormat msgFmt = new MessageFormat(
+ *     "{num_files, plural, " +
+ *     "=0{There are no files on disk \"{disk_name}\".}" +
+ *     "=1{There is one file on disk \"{disk_name}\".}" +
+ *     "other{There are # files on disk \"{disk_name}\".}}",
+ *     ULocale.ENGLISH);
+ * Map args = new HashMap();
+ * args.put("num_files", 0);
+ * args.put("disk_name", "MyDisk");
+ * System.out.println(msgFmt.format(args));
+ * args.put("num_files", 3);
+ * System.out.println(msgFmt.format(args));
+ *
+ * <em>output</em>:
+ * There are no files on disk "MyDisk".
+ * There are 3 files on "MyDisk".
+ * </pre>
+ * See {@link android.icu.text.PluralFormat PluralFormat} and {@link android.icu.text.PluralRules PluralRules} for details.
+ *
+ * <h4><a name="synchronization">Synchronization</a></h4>
+ *
+ * <p>MessageFormats are not synchronized.
+ * It is recommended to create separate format instances for each thread.
+ * If multiple threads access a format concurrently, it must be synchronized
+ * externally.
+ *
+ * @see          java.util.Locale
+ * @see          java.text.Format
+ * @see          android.icu.text.NumberFormat
+ * @see          android.icu.text.DecimalFormat
+ * @see          java.text.ChoiceFormat
+ * @see          android.icu.text.PluralFormat
+ * @see          android.icu.text.SelectFormat
+ * @author       Mark Davis
+ * @author       Markus Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class MessageFormat extends android.icu.text.UFormat {
+
+/**
+ * Constructs a MessageFormat for the default <code>FORMAT</code> locale and the
+ * specified pattern.
+ * Sets the locale and calls applyPattern(pattern).
+ *
+ * @param pattern the pattern for this message format
+ * @exception java.lang.IllegalArgumentException if the pattern is invalid
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public MessageFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a MessageFormat for the specified locale and
+ * pattern.
+ * Sets the locale and calls applyPattern(pattern).
+ *
+ * @param pattern the pattern for this message format
+ * @param locale the locale for this message format
+ * @exception java.lang.IllegalArgumentException if the pattern is invalid
+ */
+
+public MessageFormat(java.lang.String pattern, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a MessageFormat for the specified locale and
+ * pattern.
+ * Sets the locale and calls applyPattern(pattern).
+ *
+ * @param pattern the pattern for this message format
+ * @param locale the locale for this message format
+ * @exception java.lang.IllegalArgumentException if the pattern is invalid
+ */
+
+public MessageFormat(java.lang.String pattern, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the locale to be used for creating argument Format objects.
+ * This affects subsequent calls to the {@link #applyPattern applyPattern}
+ * method as well as to the <code>format</code> and
+ * {@link #formatToCharacterIterator formatToCharacterIterator} methods.
+ *
+ * @param locale the locale to be used when creating or comparing subformats
+ */
+
+public void setLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the locale to be used for creating argument Format objects.
+ * This affects subsequent calls to the {@link #applyPattern applyPattern}
+ * method as well as to the <code>format</code> and
+ * {@link #formatToCharacterIterator formatToCharacterIterator} methods.
+ *
+ * @param locale the locale to be used when creating or comparing subformats
+ */
+
+public void setLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale that's used when creating or comparing subformats.
+ *
+ * @return the locale used when creating or comparing subformats
+ */
+
+public java.util.Locale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale that's used when creating argument Format objects.
+ *
+ * @return the locale used when creating or comparing subformats
+ */
+
+public android.icu.util.ULocale getULocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the pattern used by this message format.
+ * Parses the pattern and caches Format objects for simple argument types.
+ * Patterns and their interpretation are specified in the
+ * <a href="#patterns">class description</a>.
+ *
+ * @param pttrn the pattern for this message format
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ */
+
+public void applyPattern(java.lang.String pttrn) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the ApostropheMode and the pattern used by this message format.
+ * Parses the pattern and caches Format objects for simple argument types.
+ * Patterns and their interpretation are specified in the
+ * <a href="#patterns">class description</a>.
+ * <p>
+ * This method is best used only once on a given object to avoid confusion about the mode,
+ * and after constructing the object with an empty pattern string to minimize overhead.
+ *
+ * @param pattern the pattern for this message format
+ * @param aposMode the new ApostropheMode
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ * @see android.icu.text.MessagePattern.ApostropheMode
+ */
+
+public void applyPattern(java.lang.String pattern, android.icu.text.MessagePattern.ApostropheMode aposMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>
+ * @return this instance's ApostropheMode.
+ */
+
+public android.icu.text.MessagePattern.ApostropheMode getApostropheMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the applied pattern string.
+ * @return the pattern string
+ * @throws java.lang.IllegalStateException after custom Format objects have been set
+ *         via setFormat() or similar APIs
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format objects to use for the values passed into
+ * <code>format</code> methods or returned from <code>parse</code>
+ * methods. The indices of elements in <code>newFormats</code>
+ * correspond to the argument indices used in the previously set
+ * pattern string.
+ * The order of formats in <code>newFormats</code> thus corresponds to
+ * the order of elements in the <code>arguments</code> array passed
+ * to the <code>format</code> methods or the result array returned
+ * by the <code>parse</code> methods.
+ * <p>
+ * If an argument index is used for more than one format element
+ * in the pattern string, then the corresponding new format is used
+ * for all such format elements. If an argument index is not used
+ * for any format element in the pattern string, then the
+ * corresponding new format is ignored. If fewer formats are provided
+ * than needed, then only the formats for argument indices less
+ * than <code>newFormats.length</code> are replaced.
+ *
+ * This method is only supported if the format does not use
+ * named arguments, otherwise an IllegalArgumentException is thrown.
+ *
+ * @param newFormats the new formats to use
+ * @throws java.lang.NullPointerException if <code>newFormats</code> is null
+ * @throws java.lang.IllegalArgumentException if this formatter uses named arguments
+ */
+
+public void setFormatsByArgumentIndex(java.text.Format[] newFormats) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the Format objects to use for the values passed into
+ * <code>format</code> methods or returned from <code>parse</code>
+ * methods. The keys in <code>newFormats</code> are the argument
+ * names in the previously set pattern string, and the values
+ * are the formats.
+ * <p>
+ * Only argument names from the pattern string are considered.
+ * Extra keys in <code>newFormats</code> that do not correspond
+ * to an argument name are ignored.  Similarly, if there is no
+ * format in newFormats for an argument name, the formatter
+ * for that argument remains unchanged.
+ * <p>
+ * This may be called on formats that do not use named arguments.
+ * In this case the map will be queried for key Strings that
+ * represent argument indices, e.g. "0", "1", "2" etc.
+ *
+ * @param newFormats a map from String to Format providing new
+ *        formats for named arguments.
+ */
+
+public void setFormatsByArgumentName(java.util.Map<java.lang.String,java.text.Format> newFormats) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format objects to use for the format elements in the
+ * previously set pattern string.
+ * The order of formats in <code>newFormats</code> corresponds to
+ * the order of format elements in the pattern string.
+ * <p>
+ * If more formats are provided than needed by the pattern string,
+ * the remaining ones are ignored. If fewer formats are provided
+ * than needed, then only the first <code>newFormats.length</code>
+ * formats are replaced.
+ * <p>
+ * Since the order of format elements in a pattern string often
+ * changes during localization, it is generally better to use the
+ * {@link #setFormatsByArgumentIndex setFormatsByArgumentIndex}
+ * method, which assumes an order of formats corresponding to the
+ * order of elements in the <code>arguments</code> array passed to
+ * the <code>format</code> methods or the result array returned by
+ * the <code>parse</code> methods.
+ *
+ * @param newFormats the new formats to use
+ * @exception java.lang.NullPointerException if <code>newFormats</code> is null
+ */
+
+public void setFormats(java.text.Format[] newFormats) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format object to use for the format elements within the
+ * previously set pattern string that use the given argument
+ * index.
+ * The argument index is part of the format element definition and
+ * represents an index into the <code>arguments</code> array passed
+ * to the <code>format</code> methods or the result array returned
+ * by the <code>parse</code> methods.
+ * <p>
+ * If the argument index is used for more than one format element
+ * in the pattern string, then the new format is used for all such
+ * format elements. If the argument index is not used for any format
+ * element in the pattern string, then the new format is ignored.
+ *
+ * This method is only supported when exclusively numbers are used for
+ * argument names. Otherwise an IllegalArgumentException is thrown.
+ *
+ * @param argumentIndex the argument index for which to use the new format
+ * @param newFormat the new format to use
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public void setFormatByArgumentIndex(int argumentIndex, java.text.Format newFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the Format object to use for the format elements within the
+ * previously set pattern string that use the given argument
+ * name.
+ * <p>
+ * If the argument name is used for more than one format element
+ * in the pattern string, then the new format is used for all such
+ * format elements. If the argument name is not used for any format
+ * element in the pattern string, then the new format is ignored.
+ * <p>
+ * This API may be used on formats that do not use named arguments.
+ * In this case <code>argumentName</code> should be a String that names
+ * an argument index, e.g. "0", "1", "2"... etc.  If it does not name
+ * a valid index, the format will be ignored.  No error is thrown.
+ *
+ * @param argumentName the name of the argument to change
+ * @param newFormat the new format to use
+ */
+
+public void setFormatByArgumentName(java.lang.String argumentName, java.text.Format newFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format object to use for the format element with the given
+ * format element index within the previously set pattern string.
+ * The format element index is the zero-based number of the format
+ * element counting from the start of the pattern string.
+ * <p>
+ * Since the order of format elements in a pattern string often
+ * changes during localization, it is generally better to use the
+ * {@link #setFormatByArgumentIndex setFormatByArgumentIndex}
+ * method, which accesses format elements based on the argument
+ * index they specify.
+ *
+ * @param formatElementIndex the index of a format element within the pattern
+ * @param newFormat the format to use for the specified format element
+ * @exception java.lang.ArrayIndexOutOfBoundsException if formatElementIndex is equal to or
+ *            larger than the number of format elements in the pattern string
+ */
+
+public void setFormat(int formatElementIndex, java.text.Format newFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Format objects used for the values passed into
+ * <code>format</code> methods or returned from <code>parse</code>
+ * methods. The indices of elements in the returned array
+ * correspond to the argument indices used in the previously set
+ * pattern string.
+ * The order of formats in the returned array thus corresponds to
+ * the order of elements in the <code>arguments</code> array passed
+ * to the <code>format</code> methods or the result array returned
+ * by the <code>parse</code> methods.
+ * <p>
+ * If an argument index is used for more than one format element
+ * in the pattern string, then the format used for the last such
+ * format element is returned in the array. If an argument index
+ * is not used for any format element in the pattern string, then
+ * null is returned in the array.
+ *
+ * This method is only supported when exclusively numbers are used for
+ * argument names. Otherwise an IllegalArgumentException is thrown.
+ *
+ * @return the formats used for the arguments within the pattern
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.text.Format[] getFormatsByArgumentIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Format objects used for the format elements in the
+ * previously set pattern string.
+ * The order of formats in the returned array corresponds to
+ * the order of format elements in the pattern string.
+ * <p>
+ * Since the order of format elements in a pattern string often
+ * changes during localization, it's generally better to use the
+ * {@link #getFormatsByArgumentIndex()}
+ * method, which assumes an order of formats corresponding to the
+ * order of elements in the <code>arguments</code> array passed to
+ * the <code>format</code> methods or the result array returned by
+ * the <code>parse</code> methods.
+ *
+ * This method is only supported when exclusively numbers are used for
+ * argument names. Otherwise an IllegalArgumentException is thrown.
+ *
+ * @return the formats used for the format elements in the pattern
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.text.Format[] getFormats() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the top-level argument names. For more details, see
+ * {@link #setFormatByArgumentName(java.lang.String,java.text.Format)}.
+ * @return a Set of argument names
+ */
+
+public java.util.Set<java.lang.String> getArgumentNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the first top-level format associated with the given argument name.
+ * For more details, see {@link #setFormatByArgumentName(java.lang.String,java.text.Format)}.
+ * @param argumentName The name of the desired argument.
+ * @return the Format associated with the name, or null if there isn't one.
+ */
+
+public java.text.Format getFormatByArgumentName(java.lang.String argumentName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats an array of objects and appends the <code>MessageFormat</code>'s
+ * pattern, with arguments replaced by the formatted objects, to the
+ * provided <code>StringBuffer</code>.
+ * <p>
+ * The text substituted for the individual format elements is derived from
+ * the current subformat of the format element and the
+ * <code>arguments</code> element at the format element's argument index
+ * as indicated by the first matching line of the following table. An
+ * argument is <i>unavailable</i> if <code>arguments</code> is
+ * <code>null</code> or has fewer than argumentIndex+1 elements.  When
+ * an argument is unavailable no substitution is performed.
+ *
+ * <table border=1>
+ *    <tr>
+ *       <th>argType or Format
+ *       <th>value object
+ *       <th>Formatted Text
+ *    <tr>
+ *       <td><i>any</i>
+ *       <td><i>unavailable</i>
+ *       <td><code>"{" + argNameOrNumber + "}"</code>
+ *    <tr>
+ *       <td><i>any</i>
+ *       <td><code>null</code>
+ *       <td><code>"null"</code>
+ *    <tr>
+ *       <td>custom Format <code>!= null</code>
+ *       <td><i>any</i>
+ *       <td><code>customFormat.format(argument)</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><code>instanceof Number</code>
+ *       <td><code>NumberFormat.getInstance(getLocale()).format(argument)</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><code>instanceof Date</code>
+ *       <td><code>DateFormat.getDateTimeInstance(DateFormat.SHORT,
+ *           DateFormat.SHORT, getLocale()).format(argument)</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><code>instanceof String</code>
+ *       <td><code>argument</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><i>any</i>
+ *       <td><code>argument.toString()</code>
+ *    <tr>
+ *       <td>complexArg
+ *       <td><i>any</i>
+ *       <td>result of recursive formatting of a selected sub-message
+ * </table>
+ * <p>
+ * If <code>pos</code> is non-null, and refers to
+ * <code>Field.ARGUMENT</code>, the location of the first formatted
+ * string will be returned.
+ *
+ * This method is only supported when the format does not use named
+ * arguments, otherwise an IllegalArgumentException is thrown.
+ *
+ * @param arguments an array of objects to be formatted and substituted.
+ * @param result where text is appended.
+ * @param pos On input: an alignment field, if desired.
+ *            On output: the offsets of the alignment field.
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object[] arguments, java.lang.StringBuffer result, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a map of objects and appends the <code>MessageFormat</code>'s
+ * pattern, with arguments replaced by the formatted objects, to the
+ * provided <code>StringBuffer</code>.
+ * <p>
+ * The text substituted for the individual format elements is derived from
+ * the current subformat of the format element and the
+ * <code>arguments</code> value corresopnding to the format element's
+ * argument name.
+ * <p>
+ * A numbered pattern argument is matched with a map key that contains that number
+ * as an ASCII-decimal-digit string (without leading zero).
+ * <p>
+ * An argument is <i>unavailable</i> if <code>arguments</code> is
+ * <code>null</code> or does not have a value corresponding to an argument
+ * name in the pattern.  When an argument is unavailable no substitution
+ * is performed.
+ *
+ * @param arguments a map of objects to be formatted and substituted.
+ * @param result where text is appended.
+ * @param pos On input: an alignment field, if desired.
+ *            On output: the offsets of the alignment field.
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @return the passed-in StringBuffer
+ */
+
+public final java.lang.StringBuffer format(java.util.Map<java.lang.String,java.lang.Object> arguments, java.lang.StringBuffer result, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a MessageFormat with the given pattern and uses it
+ * to format the given arguments. This is equivalent to
+ * <blockquote>
+ *     <code>(new {@link #MessageFormat(java.lang.String) MessageFormat}(pattern)).{@link
+ *     #format(java.lang.Object[],java.lang.StringBuffer,java.text.FieldPosition)
+ *     format}(arguments, new StringBuffer(), null).toString()</code>
+ * </blockquote>
+ *
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public static java.lang.String format(java.lang.String pattern, java.lang.Object... arguments) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a MessageFormat with the given pattern and uses it to
+ * format the given arguments.  The pattern must identifyarguments
+ * by name instead of by number.
+ * <p>
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @see #format(Map, StringBuffer, FieldPosition)
+ * @see #format(String, Object[])
+ */
+
+public static java.lang.String format(java.lang.String pattern, java.util.Map<java.lang.String,java.lang.Object> arguments) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if this MessageFormat uses named arguments,
+ * and false otherwise.  See class description.
+ *
+ * @return true if named arguments are used.
+ */
+
+public boolean usesNamedArguments() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a map or array of objects and appends the <code>MessageFormat</code>'s
+ * pattern, with format elements replaced by the formatted objects, to the
+ * provided <code>StringBuffer</code>.
+ * This is equivalent to either of
+ * <blockquote>
+ *     <code>{@link #format(java.lang.Object[],java.lang.StringBuffer,java.text.FieldPosition) format}((Object[]) arguments, result, pos)</code>
+ *     <code>{@link #format(java.util.Map,java.lang.StringBuffer,java.text.FieldPosition) format}((Map) arguments, result, pos)</code>
+ * </blockquote>
+ * A map must be provided if this format uses named arguments, otherwise
+ * an IllegalArgumentException will be thrown.
+ * @param arguments a map or array of objects to be formatted
+ * @param result where text is appended
+ * @param pos On input: an alignment field, if desired
+ *            On output: the offsets of the alignment field
+ * @throws java.lang.IllegalArgumentException if an argument in
+ *         <code>arguments</code> is not of the type
+ *         expected by the format element(s) that use it
+ * @throws java.lang.IllegalArgumentException if <code>arguments</code> is
+ *         an array of Object and this format uses named arguments
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object arguments, java.lang.StringBuffer result, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats an array of objects and inserts them into the
+ * <code>MessageFormat</code>'s pattern, producing an
+ * <code>AttributedCharacterIterator</code>.
+ * You can use the returned <code>AttributedCharacterIterator</code>
+ * to build the resulting String, as well as to determine information
+ * about the resulting String.
+ * <p>
+ * The text of the returned <code>AttributedCharacterIterator</code> is
+ * the same that would be returned by
+ * <blockquote>
+ *     <code>{@link #format(java.lang.Object[],java.lang.StringBuffer,java.text.FieldPosition) format}(arguments, new StringBuffer(), null).toString()</code>
+ * </blockquote>
+ * <p>
+ * In addition, the <code>AttributedCharacterIterator</code> contains at
+ * least attributes indicating where text was generated from an
+ * argument in the <code>arguments</code> array. The keys of these attributes are of
+ * type <code>MessageFormat.Field</code>, their values are
+ * <code>Integer</code> objects indicating the index in the <code>arguments</code>
+ * array of the argument from which the text was generated.
+ * <p>
+ * The attributes/value from the underlying <code>Format</code>
+ * instances that <code>MessageFormat</code> uses will also be
+ * placed in the resulting <code>AttributedCharacterIterator</code>.
+ * This allows you to not only find where an argument is placed in the
+ * resulting String, but also which fields it contains in turn.
+ *
+ * @param arguments an array of objects to be formatted and substituted.
+ * @return AttributedCharacterIterator describing the formatted value.
+ * @exception java.lang.NullPointerException if <code>arguments</code> is null.
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object arguments) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses the string.
+ *
+ * <p>Caveats: The parse may fail in a number of circumstances.
+ * For example:
+ * <ul>
+ * <li>If one of the arguments does not occur in the pattern.
+ * <li>If the format of an argument loses information, such as
+ *     with a choice format where a large number formats to "many".
+ * <li>Does not yet handle recursion (where
+ *     the substituted strings contain {n} references.)
+ * <li>Will not always find a match (or the correct match)
+ *     if some part of the parse is ambiguous.
+ *     For example, if the pattern "{1},{2}" is used with the
+ *     string arguments {"a,b", "c"}, it will format as "a,b,c".
+ *     When the result is parsed, it will return {"a", "b,c"}.
+ * <li>If a single argument is parsed more than once in the string,
+ *     then the later parse wins.
+ * </ul>
+ * When the parse fails, use ParsePosition.getErrorIndex() to find out
+ * where in the string did the parsing failed. The returned error
+ * index is the starting offset of the sub-patterns that the string
+ * is comparing with. For example, if the parsing string "AAA {0} BBB"
+ * is comparing against the pattern "AAD {0} BBB", the error index is
+ * 0. When an error occurs, the call to this method will return null.
+ * If the source is null, return an empty array.
+ *
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.lang.Object[] parse(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Parses the string, returning the results in a Map.
+ * This is similar to the version that returns an array
+ * of Object.  This supports both named and numbered
+ * arguments-- if numbered, the keys in the map are the
+ * corresponding ASCII-decimal-digit strings (e.g. "0", "1", "2"...).
+ *
+ * @param source the text to parse
+ * @param pos the position at which to start parsing.  on return,
+ *        contains the result of the parse.
+ * @return a Map containing key/value pairs for each parsed argument.
+ */
+
+public java.util.Map<java.lang.String,java.lang.Object> parseToMap(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from the beginning of the given string to produce an object
+ * array.
+ * The method may not use the entire text of the given string.
+ * <p>
+ * See the {@link #parse(java.lang.String,java.text.ParsePosition)} method for more information
+ * on message parsing.
+ *
+ * @param source A <code>String</code> whose beginning should be parsed.
+ * @return An <code>Object</code> array parsed from the string.
+ * @exception java.text.ParseException if the beginning of the specified string cannot be parsed.
+ * @exception java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.lang.Object[] parse(java.lang.String source) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Parses text from the beginning of the given string to produce a map from
+ * argument to values. The method may not use the entire text of the given string.
+ *
+ * <p>See the {@link #parse(java.lang.String,java.text.ParsePosition)} method for more information on
+ * message parsing.
+ *
+ * @param source A <code>String</code> whose beginning should be parsed.
+ * @return A <code>Map</code> parsed from the string.
+ * @throws java.text.ParseException if the beginning of the specified string cannot
+ *         be parsed.
+ * @see #parseToMap(String, ParsePosition)
+ */
+
+public java.util.Map<java.lang.String,java.lang.Object> parseToMap(java.lang.String source) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from a string to produce an object array or Map.
+ * <p>
+ * The method attempts to parse text starting at the index given by
+ * <code>pos</code>.
+ * If parsing succeeds, then the index of <code>pos</code> is updated
+ * to the index after the last character used (parsing does not necessarily
+ * use all characters up to the end of the string), and the parsed
+ * object array is returned. The updated <code>pos</code> can be used to
+ * indicate the starting point for the next call to this method.
+ * If an error occurs, then the index of <code>pos</code> is not
+ * changed, the error index of <code>pos</code> is set to the index of
+ * the character where the error occurred, and null is returned.
+ * <p>
+ * See the {@link #parse(java.lang.String,java.text.ParsePosition)} method for more information
+ * on message parsing.
+ *
+ * @param source A <code>String</code>, part of which should be parsed.
+ * @param pos A <code>ParsePosition</code> object with index and error
+ *            index information as described above.
+ * @return An <code>Object</code> parsed from the string, either an
+ *         array of Object, or a Map, depending on whether named
+ *         arguments are used.  This can be queried using <code>usesNamedArguments</code>.
+ *         In case of error, returns null.
+ * @throws java.lang.NullPointerException if <code>pos</code> is null.
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts an 'apostrophe-friendly' pattern into a standard
+ * pattern.
+ * <em>This is obsolete for ICU 4.8 and higher MessageFormat pattern strings.</em>
+ * It can still be useful together with {@link java.text.MessageFormat}.
+ *
+ * <p>See the class description for more about apostrophes and quoting,
+ * and differences between ICU and {@link java.text.MessageFormat}.
+ *
+ * <p>{@link java.text.MessageFormat} and ICU 4.6 and earlier MessageFormat
+ * treat all ASCII apostrophes as
+ * quotes, which is problematic in some languages, e.g.
+ * French, where apostrophe is commonly used.  This utility
+ * assumes that only an unpaired apostrophe immediately before
+ * a brace is a true quote.  Other unpaired apostrophes are paired,
+ * and the resulting standard pattern string is returned.
+ *
+ * <p><b>Note</b>: It is not guaranteed that the returned pattern
+ * is indeed a valid pattern.  The only effect is to convert
+ * between patterns having different quoting semantics.
+ *
+ * <p><b>Note</b>: This method only works on top-level messageText,
+ * not messageText nested inside a complexArg.
+ *
+ * @param pattern the 'apostrophe-friendly' pattern to convert
+ * @return the standard equivalent of the original pattern
+ */
+
+public static java.lang.String autoQuoteApostrophe(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+/**
+ * Defines constants that are used as attribute keys in the
+ * <code>AttributedCharacterIterator</code> returned
+ * from <code>MessageFormat.formatToCharacterIterator</code>.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Field extends java.text.Format.Field {
+
+/**
+ * Create a <code>Field</code> with the specified name.
+ *
+ * @param name The name of the attribute
+ */
+
+protected Field(java.lang.String name) { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Resolves instances being deserialized to the predefined constants.
+ *
+ * @return resolved MessageFormat.Field constant
+ * @throws java.io.InvalidObjectException if the constant could not be resolved.
+ */
+
+protected java.lang.Object readResolve() throws java.io.InvalidObjectException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant identifying a portion of a message that was generated
+ * from an argument passed into <code>formatToCharacterIterator</code>.
+ * The value associated with the key will be an <code>Integer</code>
+ * indicating the index in the <code>arguments</code> array of the
+ * argument from which the text was generated.
+ */
+
+public static final android.icu.text.MessageFormat.Field ARGUMENT;
+static { ARGUMENT = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MessagePattern.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MessagePattern.java
new file mode 100644
index 0000000..252e0ee
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/MessagePattern.java
@@ -0,0 +1,685 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 2010-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*   created on: 2010aug21
+*   created by: Markus W. Scherer
+*/
+
+
+package android.icu.text;
+
+
+/**
+ * Parses and represents ICU MessageFormat patterns.
+ * Also handles patterns for ChoiceFormat, PluralFormat and SelectFormat.
+ * Used in the implementations of those classes as well as in tools
+ * for message validation, translation and format conversion.
+ * <p>
+ * The parser handles all syntax relevant for identifying message arguments.
+ * This includes "complex" arguments whose style strings contain
+ * nested MessageFormat pattern substrings.
+ * For "simple" arguments (with no nested MessageFormat pattern substrings),
+ * the argument style is not parsed any further.
+ * <p>
+ * The parser handles named and numbered message arguments and allows both in one message.
+ * <p>
+ * Once a pattern has been parsed successfully, iterate through the parsed data
+ * with countParts(), getPart() and related methods.
+ * <p>
+ * The data logically represents a parse tree, but is stored and accessed
+ * as a list of "parts" for fast and simple parsing and to minimize object allocations.
+ * Arguments and nested messages are best handled via recursion.
+ * For every _START "part", {@link #getLimitPartIndex(int)} efficiently returns
+ * the index of the corresponding _LIMIT "part".
+ * <p>
+ * List of "parts":
+ * <pre>
+ * message = MSG_START (SKIP_SYNTAX | INSERT_CHAR | REPLACE_NUMBER | argument)* MSG_LIMIT
+ * argument = noneArg | simpleArg | complexArg
+ * complexArg = choiceArg | pluralArg | selectArg
+ *
+ * noneArg = ARG_START.NONE (ARG_NAME | ARG_NUMBER) ARG_LIMIT.NONE
+ * simpleArg = ARG_START.SIMPLE (ARG_NAME | ARG_NUMBER) ARG_TYPE [ARG_STYLE] ARG_LIMIT.SIMPLE
+ * choiceArg = ARG_START.CHOICE (ARG_NAME | ARG_NUMBER) choiceStyle ARG_LIMIT.CHOICE
+ * pluralArg = ARG_START.PLURAL (ARG_NAME | ARG_NUMBER) pluralStyle ARG_LIMIT.PLURAL
+ * selectArg = ARG_START.SELECT (ARG_NAME | ARG_NUMBER) selectStyle ARG_LIMIT.SELECT
+ *
+ * choiceStyle = ((ARG_INT | ARG_DOUBLE) ARG_SELECTOR message)+
+ * pluralStyle = [ARG_INT | ARG_DOUBLE] (ARG_SELECTOR [ARG_INT | ARG_DOUBLE] message)+
+ * selectStyle = (ARG_SELECTOR message)+
+ * </pre>
+ * <ul>
+ *   <li>Literal output text is not represented directly by "parts" but accessed
+ *       between parts of a message, from one part's getLimit() to the next part's getIndex().
+ *   <li><code>ARG_START.CHOICE</code> stands for an ARG_START Part with ArgType CHOICE.
+ *   <li>In the choiceStyle, the ARG_SELECTOR has the '&lt;', the '#' or
+ *       the less-than-or-equal-to sign (U+2264).
+ *   <li>In the pluralStyle, the first, optional numeric Part has the "offset:" value.
+ *       The optional numeric Part between each (ARG_SELECTOR, message) pair
+ *       is the value of an explicit-number selector like "=2",
+ *       otherwise the selector is a non-numeric identifier.
+ *   <li>The REPLACE_NUMBER Part can occur only in an immediate sub-message of the pluralStyle.
+ * </ul>
+ * <p>
+ * This class is not intended for public subclassing.
+ *
+ * @author Markus Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class MessagePattern implements java.lang.Cloneable, android.icu.util.Freezable<android.icu.text.MessagePattern> {
+
+/**
+ * Constructs an empty MessagePattern with default ApostropheMode.
+ */
+
+public MessagePattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an empty MessagePattern.
+ * @param mode Explicit ApostropheMode.
+ */
+
+public MessagePattern(android.icu.text.MessagePattern.ApostropheMode mode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a MessagePattern with default ApostropheMode and
+ * parses the MessageFormat pattern string.
+ * @param pattern a MessageFormat pattern string
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public MessagePattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a MessageFormat pattern string.
+ * @param pattern a MessageFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parse(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a ChoiceFormat pattern string.
+ * @param pattern a ChoiceFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parseChoiceStyle(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a PluralFormat pattern string.
+ * @param pattern a PluralFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parsePluralStyle(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a SelectFormat pattern string.
+ * @param pattern a SelectFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parseSelectStyle(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears this MessagePattern.
+ * countParts() will return 0.
+ */
+
+public void clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears this MessagePattern and sets the ApostropheMode.
+ * countParts() will return 0.
+ * @param mode The new ApostropheMode.
+ */
+
+public void clearPatternAndSetApostropheMode(android.icu.text.MessagePattern.ApostropheMode mode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @param other another object to compare with.
+ * @return true if this object is equivalent to the other one.
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return this instance's ApostropheMode.
+ */
+
+public android.icu.text.MessagePattern.ApostropheMode getApostropheMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return the parsed pattern string (null if none was parsed).
+ */
+
+public java.lang.String getPatternString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Does the parsed pattern have named arguments like {first_name}?
+ * @return true if the parsed pattern has at least one named argument.
+ */
+
+public boolean hasNamedArguments() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Does the parsed pattern have numbered arguments like {2}?
+ * @return true if the parsed pattern has at least one numbered argument.
+ */
+
+public boolean hasNumberedArguments() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Validates and parses an argument name or argument number string.
+ * An argument name must be a "pattern identifier", that is, it must contain
+ * no Unicode Pattern_Syntax or Pattern_White_Space characters.
+ * If it only contains ASCII digits, then it must be a small integer with no leading zero.
+ * @param name Input string.
+ * @return &gt;=0 if the name is a valid number,
+ *         ARG_NAME_NOT_NUMBER (-1) if it is a "pattern identifier" but not all ASCII digits,
+ *         ARG_NAME_NOT_VALID (-2) if it is neither.
+ */
+
+public static int validateArgumentName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a version of the parsed pattern string where each ASCII apostrophe
+ * is doubled (escaped) if it is not already, and if it is not interpreted as quoting syntax.
+ * <p>
+ * For example, this turns "I don't '{know}' {gender,select,female{h''er}other{h'im}}."
+ * into "I don''t '{know}' {gender,select,female{h''er}other{h''im}}."
+ * @return the deep-auto-quoted version of the parsed pattern string.
+ * @see android.icu.text.MessageFormat#autoQuoteApostrophe(String)
+ */
+
+public java.lang.String autoQuoteApostropheDeep() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of "parts" created by parsing the pattern string.
+ * Returns 0 if no pattern has been parsed or clear() was called.
+ * @return the number of pattern parts.
+ */
+
+public int countParts() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the i-th pattern "part".
+ * @param i The index of the Part data. (0..countParts()-1)
+ * @return the i-th pattern "part".
+ * @throws java.lang.IndexOutOfBoundsException if i is outside the (0..countParts()-1) range
+ */
+
+public android.icu.text.MessagePattern.Part getPart(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Part.Type of the i-th pattern "part".
+ * Convenience method for getPart(i).getType().
+ * @param i The index of the Part data. (0..countParts()-1)
+ * @return The Part.Type of the i-th Part.
+ * @throws java.lang.IndexOutOfBoundsException if i is outside the (0..countParts()-1) range
+ */
+
+public android.icu.text.MessagePattern.Part.Type getPartType(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern index of the specified pattern "part".
+ * Convenience method for getPart(partIndex).getIndex().
+ * @param partIndex The index of the Part data. (0..countParts()-1)
+ * @return The pattern index of this Part.
+ * @throws java.lang.IndexOutOfBoundsException if partIndex is outside the (0..countParts()-1) range
+ */
+
+public int getPatternIndex(int partIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the substring of the pattern string indicated by the Part.
+ * Convenience method for getPatternString().substring(part.getIndex(), part.getLimit()).
+ * @param part a part of this MessagePattern.
+ * @return the substring associated with part.
+ */
+
+public java.lang.String getSubstring(android.icu.text.MessagePattern.Part part) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the part's substring with the input string s.
+ * @param part a part of this MessagePattern.
+ * @param s a string.
+ * @return true if getSubstring(part).equals(s).
+ */
+
+public boolean partSubstringMatches(android.icu.text.MessagePattern.Part part, java.lang.String s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numeric value associated with an ARG_INT or ARG_DOUBLE.
+ * @param part a part of this MessagePattern.
+ * @return the part's numeric value, or NO_NUMERIC_VALUE if this is not a numeric part.
+ */
+
+public double getNumericValue(android.icu.text.MessagePattern.Part part) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the "offset:" value of a PluralFormat argument, or 0 if none is specified.
+ * @param pluralStart the index of the first PluralFormat argument style part. (0..countParts()-1)
+ * @return the "offset:" value.
+ * @throws java.lang.IndexOutOfBoundsException if pluralStart is outside the (0..countParts()-1) range
+ */
+
+public double getPluralOffset(int pluralStart) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the ARG|MSG_LIMIT part corresponding to the ARG|MSG_START at start.
+ * @param start The index of some Part data (0..countParts()-1);
+ *        this Part should be of Type ARG_START or MSG_START.
+ * @return The first i&gt;start where getPart(i).getType()==ARG|MSG_LIMIT at the same nesting level,
+ *         or start itself if getPartType(msgStart)!=ARG|MSG_START.
+ * @throws java.lang.IndexOutOfBoundsException if start is outside the (0..countParts()-1) range
+ */
+
+public int getLimitPartIndex(int start) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates and returns a copy of this object.
+ * @return a copy of this object (or itself if frozen).
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates and returns an unfrozen copy of this object.
+ * @return a copy of this object.
+ */
+
+public android.icu.text.MessagePattern cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freezes this object, making it immutable and thread-safe.
+ * @return this
+ */
+
+public android.icu.text.MessagePattern freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether this object is frozen (immutable) or not.
+ * @return true if this object is frozen.
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return value from {@link #validateArgumentName(java.lang.String)} for when
+ * the string is a valid "pattern identifier" but not a number.
+ */
+
+public static final int ARG_NAME_NOT_NUMBER = -1; // 0xffffffff
+
+/**
+ * Return value from {@link #validateArgumentName(java.lang.String)} for when
+ * the string is invalid.
+ * It might not be a valid "pattern identifier",
+ * or it have only ASCII digits but there is a leading zero or the number is too large.
+ */
+
+public static final int ARG_NAME_NOT_VALID = -2; // 0xfffffffe
+
+/**
+ * Special value that is returned by getNumericValue(Part) when no
+ * numeric value is defined for a part.
+ * @see #getNumericValue
+ */
+
+public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+/**
+ * Mode for when an apostrophe starts quoted literal text for MessageFormat output.
+ * The default is DOUBLE_OPTIONAL unless overridden via ICUConfig
+ * (/com/ibm/icu/ICUConfig.properties).
+ * <p>
+ * A pair of adjacent apostrophes always results in a single apostrophe in the output,
+ * even when the pair is between two single, text-quoting apostrophes.
+ * <p>
+ * The following table shows examples of desired MessageFormat.format() output
+ * with the pattern strings that yield that output.
+ *
+ * <table>
+ *   <tr>
+ *     <th>Desired output</th>
+ *     <th>DOUBLE_OPTIONAL</th>
+ *     <th>DOUBLE_REQUIRED</th>
+ *   </tr>
+ *   <tr>
+ *     <td>I see {many}</td>
+ *     <td>I see '{many}'</td>
+ *     <td>(same)</td>
+ *   </tr>
+ *   <tr>
+ *     <td>I said {'Wow!'}</td>
+ *     <td>I said '{''Wow!''}'</td>
+ *     <td>(same)</td>
+ *   </tr>
+ *   <tr>
+ *     <td>I don't know</td>
+ *     <td>I don't know OR<br> I don''t know</td>
+ *     <td>I don''t know</td>
+ *   </tr>
+ * </table>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ApostropheMode {
+/**
+ * A literal apostrophe is represented by
+ * either a single or a double apostrophe pattern character.
+ * Within a MessageFormat pattern, a single apostrophe only starts quoted literal text
+ * if it immediately precedes a curly brace {},
+ * or a pipe symbol | if inside a choice format,
+ * or a pound symbol # if inside a plural format.
+ * <p>
+ * This is the default behavior starting with ICU 4.8.
+ */
+
+DOUBLE_OPTIONAL,
+/**
+ * A literal apostrophe must be represented by
+ * a double apostrophe pattern character.
+ * A single apostrophe always starts quoted literal text.
+ * <p>
+ * This is the behavior of ICU 4.6 and earlier, and of {@link java.text.MessageFormat}.
+ */
+
+DOUBLE_REQUIRED;
+}
+
+/**
+ * Argument type constants.
+ * Returned by Part.getArgType() for ARG_START and ARG_LIMIT parts.
+ *
+ * Messages nested inside an argument are each delimited by MSG_START and MSG_LIMIT,
+ * with a nesting level one greater than the surrounding message.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ArgType {
+/**
+ * The argument has no specified type.
+ */
+
+NONE,
+/**
+ * The argument has a "simple" type which is provided by the ARG_TYPE part.
+ * An ARG_STYLE part might follow that.
+ */
+
+SIMPLE,
+/**
+ * The argument is a ChoiceFormat with one or more
+ * ((ARG_INT | ARG_DOUBLE), ARG_SELECTOR, message) tuples.
+ */
+
+CHOICE,
+/**
+ * The argument is a cardinal-number PluralFormat with an optional ARG_INT or ARG_DOUBLE offset
+ * (e.g., offset:1)
+ * and one or more (ARG_SELECTOR [explicit-value] message) tuples.
+ * If the selector has an explicit value (e.g., =2), then
+ * that value is provided by the ARG_INT or ARG_DOUBLE part preceding the message.
+ * Otherwise the message immediately follows the ARG_SELECTOR.
+ */
+
+PLURAL,
+/**
+ * The argument is a SelectFormat with one or more (ARG_SELECTOR, message) pairs.
+ */
+
+SELECT,
+/**
+ * The argument is an ordinal-number PluralFormat
+ * with the same style parts sequence and semantics as {@link android.icu.text.MessagePattern.ArgType#PLURAL ArgType#PLURAL}.
+ */
+
+SELECTORDINAL;
+
+/**
+ * @return true if the argument type has a plural style part sequence and semantics,
+ * for example {@link android.icu.text.MessagePattern.ArgType#PLURAL ArgType#PLURAL} and {@link android.icu.text.MessagePattern.ArgType#SELECTORDINAL ArgType#SELECTORDINAL}.
+ */
+
+public boolean hasPluralStyle() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * A message pattern "part", representing a pattern parsing event.
+ * There is a part for the start and end of a message or argument,
+ * for quoting and escaping of and with ASCII apostrophes,
+ * and for syntax elements of "complex" arguments.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Part {
+
+private Part() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the type of this part.
+ * @return the part type.
+ */
+
+public android.icu.text.MessagePattern.Part.Type getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern string index associated with this Part.
+ * @return this part's pattern string index.
+ */
+
+public int getIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the pattern substring associated with this Part.
+ * This is 0 for some parts.
+ * @return this part's pattern substring length.
+ */
+
+public int getLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern string limit (exclusive-end) index associated with this Part.
+ * Convenience method for getIndex()+getLength().
+ * @return this part's pattern string limit index, same as getIndex()+getLength().
+ */
+
+public int getLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a value associated with this part.
+ * See the documentation of each part type for details.
+ * @return the part value.
+ */
+
+public int getValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the argument type if this part is of type ARG_START or ARG_LIMIT,
+ * otherwise ArgType.NONE.
+ * @return the argument type for this part.
+ */
+
+public android.icu.text.MessagePattern.ArgType getArgType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return a string representation of this part.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @param other another object to compare with.
+ * @return true if this object is equivalent to the other one.
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+/**
+ * Part type constants.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Type {
+/**
+ * Start of a message pattern (main or nested).
+ * The length is 0 for the top-level message
+ * and for a choice argument sub-message, otherwise 1 for the '{'.
+ * The value indicates the nesting level, starting with 0 for the main message.
+ * <p>
+ * There is always a later MSG_LIMIT part.
+ */
+
+MSG_START,
+/**
+ * End of a message pattern (main or nested).
+ * The length is 0 for the top-level message and
+ * the last sub-message of a choice argument,
+ * otherwise 1 for the '}' or (in a choice argument style) the '|'.
+ * The value indicates the nesting level, starting with 0 for the main message.
+ */
+
+MSG_LIMIT,
+/**
+ * Indicates a substring of the pattern string which is to be skipped when formatting.
+ * For example, an apostrophe that begins or ends quoted text
+ * would be indicated with such a part.
+ * The value is undefined and currently always 0.
+ */
+
+SKIP_SYNTAX,
+/**
+ * Indicates that a syntax character needs to be inserted for auto-quoting.
+ * The length is 0.
+ * The value is the character code of the insertion character. (U+0027=APOSTROPHE)
+ */
+
+INSERT_CHAR,
+/**
+ * Indicates a syntactic (non-escaped) # symbol in a plural variant.
+ * When formatting, replace this part's substring with the
+ * (value-offset) for the plural argument value.
+ * The value is undefined and currently always 0.
+ */
+
+REPLACE_NUMBER,
+/**
+ * Start of an argument.
+ * The length is 1 for the '{'.
+ * The value is the ordinal value of the ArgType. Use getArgType().
+ * <p>
+ * This part is followed by either an ARG_NUMBER or ARG_NAME,
+ * followed by optional argument sub-parts (see ArgType constants)
+ * and finally an ARG_LIMIT part.
+ */
+
+ARG_START,
+/**
+ * End of an argument.
+ * The length is 1 for the '}'.
+ * The value is the ordinal value of the ArgType. Use getArgType().
+ */
+
+ARG_LIMIT,
+/**
+ * The argument number, provided by the value.
+ */
+
+ARG_NUMBER,
+/**
+ * The argument name.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_NAME,
+/**
+ * The argument type.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_TYPE,
+/**
+ * The argument style text.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_STYLE,
+/**
+ * A selector substring in a "complex" argument style.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_SELECTOR,
+/**
+ * An integer value, for example the offset or an explicit selector value
+ * in a PluralFormat style.
+ * The part value is the integer value.
+ */
+
+ARG_INT,
+/**
+ * A numeric value, for example the offset or an explicit selector value
+ * in a PluralFormat style.
+ * The part value is an index into an internal array of numeric values;
+ * use getNumericValue().
+ */
+
+ARG_DOUBLE;
+
+/**
+ * Indicates whether this part has a numeric value.
+ * If so, then that numeric value can be retrieved via {@link android.icu.text.MessagePattern#getNumericValue(android.icu.text.MessagePattern.Part) MessagePattern#getNumericValue(Part)}.
+ * @return true if this part has a numeric value.
+ */
+
+public boolean hasNumericValue() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Normalizer.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Normalizer.java
new file mode 100644
index 0000000..8d880fd
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Normalizer.java
@@ -0,0 +1,370 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2000-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.CharacterIterator;
+import android.icu.lang.UCharacter;
+
+/**
+ * Old Unicode normalization API.
+ *
+ * <p>This API has been replaced by the {@link android.icu.text.Normalizer2 Normalizer2} class and is only available
+ * for backward compatibility. This class simply delegates to the Normalizer2 class.
+ * There are two exceptions: The new API does not provide a replacement for
+ * <code>QuickCheckResult</code> and <code>compare()</code>.
+ *
+ * <p><code>normalize</code> transforms Unicode text into an equivalent composed or
+ * decomposed form, allowing for easier sorting and searching of text.
+ * <code>normalize</code> supports the standard normalization forms described in
+ * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode">
+ * Unicode Standard Annex #15 &mdash; Unicode Normalization Forms</a>.
+ *
+ * <p>Characters with accents or other adornments can be encoded in
+ * several different ways in Unicode.  For example, take the character A-acute.
+ * In Unicode, this can be encoded as a single character (the
+ * "composed" form):
+ *
+ * <pre>
+ *      00C1    LATIN CAPITAL LETTER A WITH ACUTE
+ * </pre>
+ *
+ * or as two separate characters (the "decomposed" form):
+ *
+ * <pre>
+ *      0041    LATIN CAPITAL LETTER A
+ *      0301    COMBINING ACUTE ACCENT
+ * </pre>
+ *
+ * <p>To a user of your program, however, both of these sequences should be
+ * treated as the same "user-level" character "A with acute accent".  When you
+ * are searching or comparing text, you must ensure that these two sequences are
+ * treated equivalently.  In addition, you must handle characters with more than
+ * one accent.  Sometimes the order of a character's combining accents is
+ * significant, while in other cases accent sequences in different orders are
+ * really equivalent.
+ *
+ * <p>Similarly, the string "ffi" can be encoded as three separate letters:
+ *
+ * <pre>
+ *      0066    LATIN SMALL LETTER F
+ *      0066    LATIN SMALL LETTER F
+ *      0069    LATIN SMALL LETTER I
+ * </pre>
+ *
+ * or as the single character
+ *
+ * <pre>
+ *      FB03    LATIN SMALL LIGATURE FFI
+ * </pre>
+ *
+ * <p>The ffi ligature is not a distinct semantic character, and strictly speaking
+ * it shouldn't be in Unicode at all, but it was included for compatibility
+ * with existing character sets that already provided it.  The Unicode standard
+ * identifies such characters by giving them "compatibility" decompositions
+ * into the corresponding semantic characters.  When sorting and searching, you
+ * will often want to use these mappings.
+ *
+ * <p><code>normalize</code> helps solve these problems by transforming text into
+ * the canonical composed and decomposed forms as shown in the first example
+ * above. In addition, you can have it perform compatibility decompositions so
+ * that you can treat compatibility characters the same as their equivalents.
+ * Finally, <code>normalize</code> rearranges accents into the proper canonical
+ * order, so that you do not have to worry about accent rearrangement on your
+ * own.
+ *
+ * <p>Form FCD, "Fast C or D", is also designed for collation.
+ * It allows to work on strings that are not necessarily normalized
+ * with an algorithm (like in collation) that works under "canonical closure",
+ * i.e., it treats precomposed characters and their decomposed equivalents the
+ * same.
+ *
+ * <p>It is not a normalization form because it does not provide for uniqueness of
+ * representation. Multiple strings may be canonically equivalent (their NFDs
+ * are identical) and may all conform to FCD without being identical themselves.
+ *
+ * <p>The form is defined such that the "raw decomposition", the recursive
+ * canonical decomposition of each character, results in a string that is
+ * canonically ordered. This means that precomposed characters are allowed for
+ * as long as their decompositions do not need canonical reordering.
+ *
+ * <p>Its advantage for a process like collation is that all NFD and most NFC texts
+ * - and many unnormalized texts - already conform to FCD and do not need to be
+ * normalized (NFD) for such a process. The FCD quick check will return YES for
+ * most strings in practice.
+ *
+ * <p>normalize(FCD) may be implemented with NFD.
+ *
+ * <p>For more details on FCD see Unicode Technical Note #5 (Canonical Equivalence in Applications):
+ * http://www.unicode.org/notes/tn5/#FCD
+ *
+ * <p>ICU collation performs either NFD or FCD normalization automatically if
+ * normalization is turned on for the collator object. Beyond collation and
+ * string search, normalized strings may be useful for string equivalence
+ * comparisons, transliteration/transcription, unique representations, etc.
+ *
+ * <p>The W3C generally recommends to exchange texts in NFC.
+ * Note also that most legacy character encodings use only precomposed forms and
+ * often do not encode any combining marks by themselves. For conversion to such
+ * character encodings the Unicode text needs to be normalized to NFC.
+ * For more usage examples, see the Unicode Standard Annex.
+ *
+ * <p>Note: The Normalizer class also provides API for iterative normalization.
+ * While the setIndex() and getIndex() refer to indices in the
+ * underlying Unicode input text, the next() and previous() methods
+ * iterate through characters in the normalized output.
+ * This means that there is not necessarily a one-to-one correspondence
+ * between characters returned by next() and previous() and the indices
+ * passed to and returned from setIndex() and getIndex().
+ * It is for this reason that Normalizer does not implement the CharacterIterator interface.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class Normalizer implements java.lang.Cloneable {
+
+Normalizer() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clones this <tt>Normalizer</tt> object.  All properties of this
+ * object are duplicated in the new object, including the cloning of any
+ * {@link java.text.CharacterIterator CharacterIterator} that was passed in to the constructor
+ * or to {@link #setText(java.text.CharacterIterator) setText}.
+ * However, the text storage underlying
+ * the <tt>CharacterIterator</tt> is not duplicated unless the
+ * iterator's <tt>clone</tt> method does so.
+ *
+ * @deprecated ICU 56 Use {@link android.icu.text.Normalizer2 Normalizer2} instead.
+ * @hide original deprecated declaration
+ */
+
+@Deprecated
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare two strings for canonical equivalence.
+ * Further options include case-insensitive comparison and
+ * code point order (as opposed to code unit order).
+ *
+ * Canonical equivalence between two strings is defined as their normalized
+ * forms (NFD or NFC) being identical.
+ * This function compares strings incrementally instead of normalizing
+ * (and optionally case-folding) both strings entirely,
+ * improving performance significantly.
+ *
+ * Bulk normalization is only necessary if the strings do not fulfill the
+ * FCD conditions. Only in this case, and only if the strings are relatively
+ * long, is memory allocated temporarily.
+ * For FCD strings and short non-FCD strings there is no memory allocation.
+ *
+ * Semantically, this is equivalent to
+ *   strcmp[CodePointOrder](foldCase(NFD(s1)), foldCase(NFD(s2)))
+ * where code point order and foldCase are all optional.
+ *
+ * @param s1        First source character array.
+ * @param s1Start   start index of source
+ * @param s1Limit   limit of the source
+ *
+ * @param s2        Second source character array.
+ * @param s2Start   start index of the source
+ * @param s2Limit   limit of the source
+ *
+ * @param options A bit set of options:
+ *   - FOLD_CASE_DEFAULT or 0 is used for default options:
+ *     Case-sensitive comparison in code unit order, and the input strings
+ *     are quick-checked for FCD.
+ *
+ *   - INPUT_IS_FCD
+ *     Set if the caller knows that both s1 and s2 fulfill the FCD
+ *     conditions.If not set, the function will quickCheck for FCD
+ *     and normalize if necessary.
+ *
+ *   - COMPARE_CODE_POINT_ORDER
+ *     Set to choose code point order instead of code unit order
+ *
+ *   - COMPARE_IGNORE_CASE
+ *     Set to compare strings case-insensitively using case folding,
+ *     instead of case-sensitively.
+ *     If set, then the following case folding options are used.
+ *
+ *
+ * @return &lt;0 or 0 or &gt;0 as usual for string comparisons
+ */
+
+public static int compare(char[] s1, int s1Start, int s1Limit, char[] s2, int s2Start, int s2Limit, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare two strings for canonical equivalence.
+ * Further options include case-insensitive comparison and
+ * code point order (as opposed to code unit order).
+ *
+ * Canonical equivalence between two strings is defined as their normalized
+ * forms (NFD or NFC) being identical.
+ * This function compares strings incrementally instead of normalizing
+ * (and optionally case-folding) both strings entirely,
+ * improving performance significantly.
+ *
+ * Bulk normalization is only necessary if the strings do not fulfill the
+ * FCD conditions. Only in this case, and only if the strings are relatively
+ * long, is memory allocated temporarily.
+ * For FCD strings and short non-FCD strings there is no memory allocation.
+ *
+ * Semantically, this is equivalent to
+ *   strcmp[CodePointOrder](foldCase(NFD(s1)), foldCase(NFD(s2)))
+ * where code point order and foldCase are all optional.
+ *
+ * @param s1 First source string.
+ * @param s2 Second source string.
+ *
+ * @param options A bit set of options:
+ *   - FOLD_CASE_DEFAULT or 0 is used for default options:
+ *     Case-sensitive comparison in code unit order, and the input strings
+ *     are quick-checked for FCD.
+ *
+ *   - INPUT_IS_FCD
+ *     Set if the caller knows that both s1 and s2 fulfill the FCD
+ *     conditions. If not set, the function will quickCheck for FCD
+ *     and normalize if necessary.
+ *
+ *   - COMPARE_CODE_POINT_ORDER
+ *     Set to choose code point order instead of code unit order
+ *
+ *   - COMPARE_IGNORE_CASE
+ *     Set to compare strings case-insensitively using case folding,
+ *     instead of case-sensitively.
+ *     If set, then the following case folding options are used.
+ *
+ * @return &lt;0 or 0 or &gt;0 as usual for string comparisons
+ */
+
+public static int compare(java.lang.String s1, java.lang.String s2, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare two strings for canonical equivalence.
+ * Further options include case-insensitive comparison and
+ * code point order (as opposed to code unit order).
+ * Convenience method.
+ *
+ * @param s1 First source string.
+ * @param s2 Second source string.
+ *
+ * @param options A bit set of options:
+ *   - FOLD_CASE_DEFAULT or 0 is used for default options:
+ *     Case-sensitive comparison in code unit order, and the input strings
+ *     are quick-checked for FCD.
+ *
+ *   - INPUT_IS_FCD
+ *     Set if the caller knows that both s1 and s2 fulfill the FCD
+ *     conditions. If not set, the function will quickCheck for FCD
+ *     and normalize if necessary.
+ *
+ *   - COMPARE_CODE_POINT_ORDER
+ *     Set to choose code point order instead of code unit order
+ *
+ *   - COMPARE_IGNORE_CASE
+ *     Set to compare strings case-insensitively using case folding,
+ *     instead of case-sensitively.
+ *     If set, then the following case folding options are used.
+ *
+ * @return &lt;0 or 0 or &gt;0 as usual for string comparisons
+ */
+
+public static int compare(char[] s1, char[] s2, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method that can have faster implementation
+ * by not allocating buffers.
+ * @param char32a    the first code point to be checked against the
+ * @param char32b    the second code point
+ * @param options    A bit set of options
+ */
+
+public static int compare(int char32a, int char32b, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method that can have faster implementation
+ * by not allocating buffers.
+ * @param char32a   the first code point to be checked against
+ * @param str2      the second string
+ * @param options   A bit set of options
+ */
+
+public static int compare(int char32a, java.lang.String str2, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Option bit for compare:
+ * Compare strings in code point order instead of code unit order.
+ */
+
+public static final int COMPARE_CODE_POINT_ORDER = 32768; // 0x8000
+
+/**
+ * Option bit for compare:
+ * Perform case-insensitive comparison.
+ */
+
+public static final int COMPARE_IGNORE_CASE = 65536; // 0x10000
+
+/**
+ * Option bit for compare:
+ * Case sensitively compare the strings
+ */
+
+public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+
+/**
+ * Option value for case folding:
+ * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I
+ * and dotless i appropriately for Turkic languages (tr, az).
+ * @see android.icu.lang.UCharacter#FOLD_CASE_EXCLUDE_SPECIAL_I
+ */
+
+public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+
+/**
+ * Option bit for compare:
+ * Both input strings are assumed to fulfill FCD conditions.
+ */
+
+public static final int INPUT_IS_FCD = 131072; // 0x20000
+
+/**
+ * Indicates it cannot be determined if string is in the normalized
+ * format without further thorough checks.
+ */
+
+public static final android.icu.text.Normalizer.QuickCheckResult MAYBE;
+static { MAYBE = null; }
+
+/**
+ * Indicates that string is not in the normalized format
+ */
+
+public static final android.icu.text.Normalizer.QuickCheckResult NO;
+static { NO = null; }
+
+/**
+ * Indicates that string is in the normalized format
+ */
+
+public static final android.icu.text.Normalizer.QuickCheckResult YES;
+static { YES = null; }
+/**
+ * Result values for quickCheck().
+ * For details see Unicode Technical Report 15.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class QuickCheckResult {
+
+private QuickCheckResult() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Normalizer2.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Normalizer2.java
new file mode 100644
index 0000000..2128331
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Normalizer2.java
@@ -0,0 +1,401 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ *   Copyright (C) 2009-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import android.icu.util.ICUUncheckedIOException;
+import java.io.IOException;
+
+/**
+ * Unicode normalization functionality for standard Unicode normalization or
+ * for using custom mapping tables.
+ * All instances of this class are unmodifiable/immutable.
+ * The Normalizer2 class is not intended for public subclassing.
+ * <p>
+ * The primary functions are to produce a normalized string and to detect whether
+ * a string is already normalized.
+ * The most commonly used normalization forms are those defined in
+ * http://www.unicode.org/unicode/reports/tr15/
+ * However, this API supports additional normalization forms for specialized purposes.
+ * For example, NFKC_Casefold is provided via getInstance("nfkc_cf", COMPOSE)
+ * and can be used in implementations of UTS #46.
+ * <p>
+ * Not only are the standard compose and decompose modes supplied,
+ * but additional modes are provided as documented in the Mode enum.
+ * <p>
+ * Some of the functions in this class identify normalization boundaries.
+ * At a normalization boundary, the portions of the string
+ * before it and starting from it do not interact and can be handled independently.
+ * <p>
+ * The spanQuickCheckYes() stops at a normalization boundary.
+ * When the goal is a normalized string, then the text before the boundary
+ * can be copied, and the remainder can be processed with normalizeSecondAndAppend().
+ * <p>
+ * The hasBoundaryBefore(), hasBoundaryAfter() and isInert() functions test whether
+ * a character is guaranteed to be at a normalization boundary,
+ * regardless of context.
+ * This is used for moving from one normalization boundary to the next
+ * or preceding boundary, and for performing iterative normalization.
+ * <p>
+ * Iterative normalization is useful when only a small portion of a
+ * longer string needs to be processed.
+ * For example, in ICU, iterative normalization is used by the NormalizationTransliterator
+ * (to avoid replacing already-normalized text) and ucol_nextSortKeyPart()
+ * (to process only the substring for which sort key bytes are computed).
+ * <p>
+ * The set of normalization boundaries returned by these functions may not be
+ * complete: There may be more boundaries that could be returned.
+ * Different functions may return different boundaries.
+ * @author Markus W. Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Normalizer2 {
+
+Normalizer2() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFC normalization.
+ * Same as getInstance(null, "nfc", Mode.COMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFCInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFD normalization.
+ * Same as getInstance(null, "nfc", Mode.DECOMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFDInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFKC normalization.
+ * Same as getInstance(null, "nfkc", Mode.COMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFKCInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFKD normalization.
+ * Same as getInstance(null, "nfkc", Mode.DECOMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFKDInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFKC_Casefold normalization.
+ * Same as getInstance(null, "nfkc_cf", Mode.COMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFKCCasefoldInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance which uses the specified data file
+ * (an ICU data file if data=null, or else custom binary data)
+ * and which composes or decomposes text according to the specified mode.
+ * Returns an unmodifiable singleton instance.
+ * <ul>
+ * <li>Use data=null for data files that are part of ICU's own data.
+ * <li>Use name="nfc" and COMPOSE/DECOMPOSE for Unicode standard NFC/NFD.
+ * <li>Use name="nfkc" and COMPOSE/DECOMPOSE for Unicode standard NFKC/NFKD.
+ * <li>Use name="nfkc_cf" and COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold.
+ * </ul>
+ * If data!=null, then the binary data is read once and cached using the provided
+ * name as the key.
+ * If you know or expect the data to be cached already, you can use data!=null
+ * for non-ICU data as well.
+ * <p>Any {@link java.io.IOException} is wrapped into a {@link android.icu.util.ICUUncheckedIOException}.
+ * @param data the binary, big-endian normalization (.nrm file) data, or null for ICU data
+ * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file
+ * @param mode normalization mode (compose or decompose etc.)
+ * @return the requested Normalizer2, if successful
+ * @deprecated Don't use because the binary {@code data} format is not stable across API levels.
+ */
+
+@Deprecated
+public static android.icu.text.Normalizer2 getInstance(java.io.InputStream data, java.lang.String name, android.icu.text.Normalizer2.Mode mode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the normalized form of the source string.
+ * @param src source string
+ * @return normalized src
+ */
+
+public java.lang.String normalize(java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Writes the normalized form of the source string to the destination string
+ * (replacing its contents) and returns the destination string.
+ * The source and destination strings must be different objects.
+ * @param src source string
+ * @param dest destination string; its contents is replaced with normalized src
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder normalize(java.lang.CharSequence src, java.lang.StringBuilder dest);
+
+/**
+ * Writes the normalized form of the source string to the destination Appendable
+ * and returns the destination Appendable.
+ * The source and destination strings must be different objects.
+ *
+ * <p>Any {@link java.io.IOException} is wrapped into a {@link android.icu.util.ICUUncheckedIOException}.
+ *
+ * @param src source string
+ * @param dest destination Appendable; gets normalized src appended
+ * @return dest
+ */
+
+public abstract java.lang.Appendable normalize(java.lang.CharSequence src, java.lang.Appendable dest);
+
+/**
+ * Appends the normalized form of the second string to the first string
+ * (merging them at the boundary) and returns the first string.
+ * The result is normalized if the first string was normalized.
+ * The first and second strings must be different objects.
+ * @param first string, should be normalized
+ * @param second string, will be normalized
+ * @return first
+ */
+
+public abstract java.lang.StringBuilder normalizeSecondAndAppend(java.lang.StringBuilder first, java.lang.CharSequence second);
+
+/**
+ * Appends the second string to the first string
+ * (merging them at the boundary) and returns the first string.
+ * The result is normalized if both the strings were normalized.
+ * The first and second strings must be different objects.
+ * @param first string, should be normalized
+ * @param second string, should be normalized
+ * @return first
+ */
+
+public abstract java.lang.StringBuilder append(java.lang.StringBuilder first, java.lang.CharSequence second);
+
+/**
+ * Gets the decomposition mapping of c.
+ * Roughly equivalent to normalizing the String form of c
+ * on a DECOMPOSE Normalizer2 instance, but much faster, and except that this function
+ * returns null if c does not have a decomposition mapping in this instance's data.
+ * This function is independent of the mode of the Normalizer2.
+ * @param c code point
+ * @return c's decomposition mapping, if any; otherwise null
+ */
+
+public abstract java.lang.String getDecomposition(int c);
+
+/**
+ * Gets the raw decomposition mapping of c.
+ *
+ * <p>This is similar to the getDecomposition() method but returns the
+ * raw decomposition mapping as specified in UnicodeData.txt or
+ * (for custom data) in the mapping files processed by the gennorm2 tool.
+ * By contrast, getDecomposition() returns the processed,
+ * recursively-decomposed version of this mapping.
+ *
+ * <p>When used on a standard NFKC Normalizer2 instance,
+ * getRawDecomposition() returns the Unicode Decomposition_Mapping (dm) property.
+ *
+ * <p>When used on a standard NFC Normalizer2 instance,
+ * it returns the Decomposition_Mapping only if the Decomposition_Type (dt) is Canonical (Can);
+ * in this case, the result contains either one or two code points (=1..4 Java chars).
+ *
+ * <p>This function is independent of the mode of the Normalizer2.
+ * The default implementation returns null.
+ * @param c code point
+ * @return c's raw decomposition mapping, if any; otherwise null
+ */
+
+public java.lang.String getRawDecomposition(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Performs pairwise composition of a &amp; b and returns the composite if there is one.
+ *
+ * <p>Returns a composite code point c only if c has a two-way mapping to a+b.
+ * In standard Unicode normalization, this means that
+ * c has a canonical decomposition to a+b
+ * and c does not have the Full_Composition_Exclusion property.
+ *
+ * <p>This function is independent of the mode of the Normalizer2.
+ * The default implementation returns a negative value.
+ * @param a A (normalization starter) code point.
+ * @param b Another code point.
+ * @return The non-negative composite code point if there is one; otherwise a negative value.
+ */
+
+public int composePair(int a, int b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the combining class of c.
+ * The default implementation returns 0
+ * but all standard implementations return the Unicode Canonical_Combining_Class value.
+ * @param c code point
+ * @return c's combining class
+ */
+
+public int getCombiningClass(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tests if the string is normalized.
+ * Internally, in cases where the quickCheck() method would return "maybe"
+ * (which is only possible for the two COMPOSE modes) this method
+ * resolves to "yes" or "no" to provide a definitive result,
+ * at the cost of doing more work in those cases.
+ * @param s input string
+ * @return true if s is normalized
+ */
+
+public abstract boolean isNormalized(java.lang.CharSequence s);
+
+/**
+ * Tests if the string is normalized.
+ * For the two COMPOSE modes, the result could be "maybe" in cases that
+ * would take a little more work to resolve definitively.
+ * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster
+ * combination of quick check + normalization, to avoid
+ * re-checking the "yes" prefix.
+ * @param s input string
+ * @return the quick check result
+ */
+
+public abstract android.icu.text.Normalizer.QuickCheckResult quickCheck(java.lang.CharSequence s);
+
+/**
+ * Returns the end of the normalized substring of the input string.
+ * In other words, with <code>end=spanQuickCheckYes(s);</code>
+ * the substring <code>s.subSequence(0, end)</code>
+ * will pass the quick check with a "yes" result.
+ * <p>
+ * The returned end index is usually one or more characters before the
+ * "no" or "maybe" character: The end index is at a normalization boundary.
+ * (See the class documentation for more about normalization boundaries.)
+ * <p>
+ * When the goal is a normalized string and most input strings are expected
+ * to be normalized already, then call this method,
+ * and if it returns a prefix shorter than the input string,
+ * copy that prefix and use normalizeSecondAndAppend() for the remainder.
+ * @param s input string
+ * @return "yes" span end index
+ */
+
+public abstract int spanQuickCheckYes(java.lang.CharSequence s);
+
+/**
+ * Tests if the character always has a normalization boundary before it,
+ * regardless of context.
+ * If true, then the character does not normalization-interact with
+ * preceding characters.
+ * In other words, a string containing this character can be normalized
+ * by processing portions before this character and starting from this
+ * character independently.
+ * This is used for iterative normalization. See the class documentation for details.
+ * @param c character to test
+ * @return true if c has a normalization boundary before it
+ */
+
+public abstract boolean hasBoundaryBefore(int c);
+
+/**
+ * Tests if the character always has a normalization boundary after it,
+ * regardless of context.
+ * If true, then the character does not normalization-interact with
+ * following characters.
+ * In other words, a string containing this character can be normalized
+ * by processing portions up to this character and after this
+ * character independently.
+ * This is used for iterative normalization. See the class documentation for details.
+ * <p>
+ * Note that this operation may be significantly slower than hasBoundaryBefore().
+ * @param c character to test
+ * @return true if c has a normalization boundary after it
+ */
+
+public abstract boolean hasBoundaryAfter(int c);
+
+/**
+ * Tests if the character is normalization-inert.
+ * If true, then the character does not change, nor normalization-interact with
+ * preceding or following characters.
+ * In other words, a string containing this character can be normalized
+ * by processing portions before this character and after this
+ * character independently.
+ * This is used for iterative normalization. See the class documentation for details.
+ * <p>
+ * Note that this operation may be significantly slower than hasBoundaryBefore().
+ * @param c character to test
+ * @return true if c is normalization-inert
+ */
+
+public abstract boolean isInert(int c);
+/**
+ * Constants for normalization modes.
+ * For details about standard Unicode normalization forms
+ * and about the algorithms which are also used with custom mapping tables
+ * see http://www.unicode.org/unicode/reports/tr15/
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Mode {
+/**
+ * Decomposition followed by composition.
+ * Same as standard NFC when using an "nfc" instance.
+ * Same as standard NFKC when using an "nfkc" instance.
+ * For details about standard Unicode normalization forms
+ * see http://www.unicode.org/unicode/reports/tr15/
+ */
+
+COMPOSE,
+/**
+ * Map, and reorder canonically.
+ * Same as standard NFD when using an "nfc" instance.
+ * Same as standard NFKD when using an "nfkc" instance.
+ * For details about standard Unicode normalization forms
+ * see http://www.unicode.org/unicode/reports/tr15/
+ */
+
+DECOMPOSE,
+/**
+ * "Fast C or D" form.
+ * If a string is in this form, then further decomposition <i>without reordering</i>
+ * would yield the same form as DECOMPOSE.
+ * Text in "Fast C or D" form can be processed efficiently with data tables
+ * that are "canonically closed", that is, that provide equivalent data for
+ * equivalent text, without having to be fully normalized.<br>
+ * Not a standard Unicode normalization form.<br>
+ * Not a unique form: Different FCD strings can be canonically equivalent.<br>
+ * For details see http://www.unicode.org/notes/tn5/#FCD
+ */
+
+FCD,
+/**
+ * Compose only contiguously.
+ * Also known as "FCC" or "Fast C Contiguous".
+ * The result will often but not always be in NFC.
+ * The result will conform to FCD which is useful for processing.<br>
+ * Not a standard Unicode normalization form.<br>
+ * For details see http://www.unicode.org/notes/tn5/#FCC
+ */
+
+COMPOSE_CONTIGUOUS;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/NumberFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/NumberFormat.java
new file mode 100644
index 0000000..f0d98dd
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/NumberFormat.java
@@ -0,0 +1,1002 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import android.icu.number.NumberFormatter;
+import java.text.Format;
+import java.math.BigInteger;
+import android.icu.util.CurrencyAmount;
+import java.text.ParseException;
+import java.util.Set;
+import android.icu.util.ULocale.Category;
+import android.icu.util.Currency;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.NumberFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>
+ * <strong>IMPORTANT:</strong> New users are strongly encouraged to see if
+ * {@code NumberFormatter} fits their use case.  Although not deprecated, this
+ * class, NumberFormat, is only provided for java.text.NumberFormat compatibility.
+ * <hr>
+ *
+ * <code>NumberFormat</code> is the abstract base class for all number
+ * formats. This class provides the interface for formatting and parsing
+ * numbers. <code>NumberFormat</code> also provides methods for determining
+ * which locales have number formats, and what their names are.
+ *
+ * <code>NumberFormat</code> helps you to format and parse numbers for any locale.
+ * Your code can be completely independent of the locale conventions for
+ * decimal points, thousands-separators, or even the particular decimal
+ * digits used, or whether the number format is even decimal.
+ *
+ * <p>
+ * To format a number for the current Locale, use one of the factory
+ * class methods:
+ * <blockquote>
+ * <pre>
+ *  myString = NumberFormat.getInstance().format(myNumber);
+ * </pre>
+ * </blockquote>
+ * If you are formatting multiple numbers, it is
+ * more efficient to get the format and use it multiple times so that
+ * the system doesn't have to fetch the information about the local
+ * language and country conventions multiple times.
+ * <blockquote>
+ * <pre>
+ * NumberFormat nf = NumberFormat.getInstance();
+ * for (int i = 0; i &lt; a.length; ++i) {
+ *     output.println(nf.format(myNumber[i]) + "; ");
+ * }
+ * </pre>
+ * </blockquote>
+ * To format a number for a different Locale, specify it in the
+ * call to <code>getInstance</code>.
+ * <blockquote>
+ * <pre>
+ * NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
+ * </pre>
+ * </blockquote>
+ * You can also use a <code>NumberFormat</code> to parse numbers:
+ * <blockquote>
+ * <pre>
+ * myNumber = nf.parse(myString);
+ * </pre>
+ * </blockquote>
+ * Use <code>getInstance</code> or <code>getNumberInstance</code> to get the
+ * normal number format. Use <code>getIntegerInstance</code> to get an
+ * integer number format. Use <code>getCurrencyInstance</code> to get the
+ * currency number format. And use <code>getPercentInstance</code> to get a
+ * format for displaying percentages. Some factory methods are found within
+ * subclasses of NumberFormat. With this format, a fraction like
+ * 0.53 is displayed as 53%.
+ *
+ * <p>
+ * Starting from ICU 4.2, you can use getInstance() by passing in a 'style'
+ * as parameter to get the correct instance.
+ * For example,
+ * use getInstance(...NUMBERSTYLE) to get the normal number format,
+ * getInstance(...PERCENTSTYLE) to get a format for displaying percentage,
+ * getInstance(...SCIENTIFICSTYLE) to get a format for displaying scientific number,
+ * getInstance(...INTEGERSTYLE) to get an integer number format,
+ * getInstance(...CURRENCYSTYLE) to get the currency number format,
+ * in which the currency is represented by its symbol, for example, "$3.00".
+ * getInstance(...ISOCURRENCYSTYLE)  to get the currency number format,
+ * in which the currency is represented by its ISO code, for example "USD3.00".
+ * getInstance(...PLURALCURRENCYSTYLE) to get the currency number format,
+ * in which the currency is represented by its full name in plural format,
+ * for example, "3.00 US dollars" or "1.00 US dollar".
+ *
+ *
+ * <p>
+ * You can also control the display of numbers with such methods as
+ * <code>setMinimumFractionDigits</code>.
+ * If you want even more control over the format or parsing,
+ * or want to give your users more control,
+ * you can try casting the <code>NumberFormat</code> you get from the factory methods
+ * to a <code>DecimalFormat</code>. This will work for the vast majority
+ * of locales; just remember to put it in a <code>try</code> block in case you
+ * encounter an unusual one.
+ *
+ * <p>
+ * NumberFormat is designed such that some controls
+ * work for formatting and others work for parsing.  The following is
+ * the detailed description for each these control methods,
+ * <p>
+ * setParseIntegerOnly : only affects parsing, e.g.
+ * if true,  "3456.78" -&gt; 3456 (and leaves the parse position just after '6')
+ * if false, "3456.78" -&gt; 3456.78 (and leaves the parse position just after '8')
+ * This is independent of formatting.  If you want to not show a decimal point
+ * where there might be no digits after the decimal point, use
+ * setDecimalSeparatorAlwaysShown on DecimalFormat.
+ * <p>
+ * You can also use forms of the <code>parse</code> and <code>format</code>
+ * methods with <code>ParsePosition</code> and <code>FieldPosition</code> to
+ * allow you to:
+ * <ul>
+ * <li> progressively parse through pieces of a string
+ * <li> align the decimal point and other areas
+ * </ul>
+ * For example, you can align numbers in two ways:
+ * <ol>
+ * <li> If you are using a monospaced font with spacing for alignment,
+ *      you can pass the <code>FieldPosition</code> in your format call, with
+ *      <code>field</code> = <code>INTEGER_FIELD</code>. On output,
+ *      <code>getEndIndex</code> will be set to the offset between the
+ *      last character of the integer and the decimal. Add
+ *      (desiredSpaceCount - getEndIndex) spaces at the front of the string.
+ *
+ * <li> If you are using proportional fonts,
+ *      instead of padding with spaces, measure the width
+ *      of the string in pixels from the start to <code>getEndIndex</code>.
+ *      Then move the pen by
+ *      (desiredPixelWidth - widthToAlignmentPoint) before drawing the text.
+ *      It also works where there is no decimal, but possibly additional
+ *      characters at the end, e.g., with parentheses in negative
+ *      numbers: "(12)" for -12.
+ * </ol>
+ *
+ * <h3>Synchronization</h3>
+ * <p>
+ * Number formats are generally not synchronized. It is recommended to create
+ * separate format instances for each thread. If multiple threads access a format
+ * concurrently, it must be synchronized externally.
+ *
+ * <h4>DecimalFormat</h4>
+ * <p>DecimalFormat is the concrete implementation of NumberFormat, and the
+ * NumberFormat API is essentially an abstraction from DecimalFormat's API.
+ * Refer to DecimalFormat for more information about this API.</p>
+ *
+ * see          DecimalFormat
+ * see          java.text.ChoiceFormat
+ * @author       Mark Davis
+ * @author       Helena Shih
+ * @author       Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberFormat extends android.icu.text.UFormat {
+
+/**
+ * Empty constructor.  Public for API compatibility with historic versions of
+ * {@link java.text.NumberFormat} which had public constructor even though this is
+ * an abstract class.
+ */
+
+public NumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a number and appends the resulting text to the given string buffer.
+ * <strong>[icu] Note:</strong> recognizes <code>BigInteger</code>
+ * and <code>BigDecimal</code> objects.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public java.lang.StringBuffer format(java.lang.Object number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from a string to produce a number.
+ * @param source the String to parse
+ * @param parsePosition the position at which to start the parse
+ * @return the parsed number, or null
+ * @see java.text.NumberFormat#parseObject(String, ParsePosition)
+ */
+
+public final java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object)
+ */
+
+public final java.lang.String format(double number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object)
+ */
+
+public final java.lang.String format(long number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Convenience method to format a BigInteger.
+ */
+
+public final java.lang.String format(java.math.BigInteger number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method to format a BigDecimal.
+ */
+
+public final java.lang.String format(java.math.BigDecimal number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Convenience method to format an ICU BigDecimal.
+ */
+
+public final java.lang.String format(android.icu.math.BigDecimal number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Convenience method to format a CurrencyAmount.
+ */
+
+public final java.lang.String format(android.icu.util.CurrencyAmount currAmt) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(double number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(long number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats a BigInteger. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(java.math.BigInteger number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats a BigDecimal. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(java.math.BigDecimal number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats an ICU BigDecimal. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(android.icu.math.BigDecimal number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats a CurrencyAmount. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public java.lang.StringBuffer format(android.icu.util.CurrencyAmount currAmt, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Long if possible (e.g., within the range [Long.MIN_VALUE,
+ * Long.MAX_VALUE] and with no decimals); otherwise, returns another type,
+ * such as a BigDecimal, BigInteger, or Double. The return type is not
+ * guaranteed other than for the Long case.
+ *
+ * <p>If IntegerOnly is set, will stop at a decimal
+ * point (or equivalent; e.g., for rational numbers "1 2/3", will stop
+ * after the 1).
+ *
+ * <p>Does not throw an exception; if no object can be parsed, index is
+ * unchanged!
+ *
+ * <p>For more detail on parsing, see the "Parsing" header in the class
+ * documentation of {@link android.icu.text.DecimalFormat DecimalFormat}.
+ *
+ * @see #isParseIntegerOnly
+ * @see android.icu.text.DecimalFormat#setParseBigDecimal
+ * @see java.text.Format#parseObject(String, ParsePosition)
+ */
+
+public abstract java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition);
+
+/**
+ * Parses text from the beginning of the given string to produce a number.
+ * The method might not use the entire text of the given string.
+ *
+ * @param text A String whose beginning should be parsed.
+ * @return A Number parsed from the string.
+ * @throws java.text.ParseException if the beginning of the specified string
+ * cannot be parsed.
+ * @see #format
+ */
+
+public java.lang.Number parse(java.lang.String text) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from the given string as a CurrencyAmount.  Unlike
+ * the parse() method, this method will attempt to parse a generic
+ * currency name, searching for a match of this object's locale's
+ * currency display names, or for a 3-letter ISO currency code.
+ * This method will fail if this format is not a currency format,
+ * that is, if it does not contain the currency pattern symbol
+ * (U+00A4) in its prefix or suffix.
+ *
+ * @param text the text to parse
+ * @param pos input-output position; on input, the position within
+ * text to match; must have 0 &lt;= pos.getIndex() &lt; text.length();
+ * on output, the position after the last matched character. If
+ * the parse fails, the position in unchanged upon output.
+ * @return a CurrencyAmount, or null upon failure
+ */
+
+public android.icu.util.CurrencyAmount parseCurrency(java.lang.CharSequence text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this format will parse numbers as integers only.
+ * For example in the English locale, with ParseIntegerOnly true, the
+ * string "1234." would be parsed as the integer value 1234 and parsing
+ * would stop at the "." character.  The decimal separator accepted
+ * by the parse operation is locale-dependent and determined by the
+ * subclass.
+ *
+ * @return true if this will parse integers only
+ */
+
+public boolean isParseIntegerOnly() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether to ignore the fraction part of a number when parsing
+ * (defaults to false). If a string contains a decimal point, parsing will stop before the decimal
+ * point. Note that determining whether a character is a decimal point depends on the locale.
+ *
+ * <p>For example, in <em>en-US</em>, parsing the string "123.45" will return the number 123 and
+ * parse position 3.
+ *
+ * @param value true if this should parse integers only
+ * @see #isParseIntegerOnly
+ */
+
+public void setParseIntegerOnly(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets whether strict parsing is in effect.  When this is true, the string
+ * is required to be a stronger match to the pattern than when lenient parsing is in
+ * effect.  More specifically, the following conditions cause a parse failure relative
+ * to lenient mode (examples use the pattern "#,##0.#"):<ul>
+ * <li>The presence and position of special symbols, including currency, must match the
+ * pattern.<br>
+ * '+123' fails (there is no plus sign in the pattern)</li>
+ * <li>Leading or doubled grouping separators<br>
+ * ',123' and '1,,234" fail</li>
+ * <li>Groups of incorrect length when grouping is used<br>
+ * '1,23' and '1234,567' fail, but '1234' passes</li>
+ * <li>Grouping separators used in numbers followed by exponents<br>
+ * '1,234E5' fails, but '1234E5' and '1,234E' pass ('E' is not an exponent when
+ * not followed by a number)</li>
+ * </ul>
+ * When strict parsing is off,  all grouping separators are ignored.
+ * This is the default behavior.
+ * @param value True to enable strict parsing.  Default is false.
+ * @see #isParseStrict
+ */
+
+public void setParseStrict(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether strict parsing is in effect.
+ * @return true if strict parsing is in effect
+ * @see #setParseStrict
+ */
+
+public boolean isParseStrict() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set a particular DisplayContext value in the formatter,
+ * such as CAPITALIZATION_FOR_STANDALONE.
+ *
+ * @param context The DisplayContext value to set.
+ */
+
+public void setContext(android.icu.text.DisplayContext context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Get the formatter's DisplayContext value for the specified DisplayContext.Type,
+ * such as CAPITALIZATION.
+ *
+ * @param type the DisplayContext.Type whose value to return
+ * @return the current DisplayContext setting for the specified type
+ */
+
+public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default number format for the current default <code>FORMAT</code> locale.
+ * The default format is one of the styles provided by the other
+ * factory methods: getNumberInstance, getIntegerInstance,
+ * getCurrencyInstance or getPercentInstance.
+ * Exactly which one is locale-dependent.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default number format for the specified locale.
+ * The default format is one of the styles provided by the other
+ * factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
+ * Exactly which one is locale-dependent.
+ */
+
+public static android.icu.text.NumberFormat getInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the default number format for the specified locale.
+ * The default format is one of the styles provided by the other
+ * factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
+ * Exactly which one is locale-dependent.
+ */
+
+public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a specific style number format for default <code>FORMAT</code> locale.
+ * @param style  number format style
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getInstance(int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a specific style number format for a specific locale.
+ * @param inLocale  the specific locale.
+ * @param style     number format style
+ */
+
+public static android.icu.text.NumberFormat getInstance(java.util.Locale inLocale, int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a general-purpose number format for the current default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getNumberInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a general-purpose number format for the specified locale.
+ */
+
+public static android.icu.text.NumberFormat getNumberInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a general-purpose number format for the specified locale.
+ */
+
+public static android.icu.text.NumberFormat getNumberInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an integer number format for the current default <code>FORMAT</code> locale. The
+ * returned number format is configured to round floating point numbers
+ * to the nearest integer using IEEE half-even rounding (see {@link
+ * android.icu.math.BigDecimal#ROUND_HALF_EVEN ROUND_HALF_EVEN}) for formatting,
+ * and to parse only the integer part of an input string (see {@link
+ * #isParseIntegerOnly isParseIntegerOnly}).
+ *
+ * @return a number format for integer values
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getIntegerInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an integer number format for the specified locale. The
+ * returned number format is configured to round floating point numbers
+ * to the nearest integer using IEEE half-even rounding (see {@link
+ * android.icu.math.BigDecimal#ROUND_HALF_EVEN ROUND_HALF_EVEN}) for formatting,
+ * and to parse only the integer part of an input string (see {@link
+ * #isParseIntegerOnly isParseIntegerOnly}).
+ *
+ * @param inLocale the locale for which a number format is needed
+ * @return a number format for integer values
+ */
+
+public static android.icu.text.NumberFormat getIntegerInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an integer number format for the specified locale. The
+ * returned number format is configured to round floating point numbers
+ * to the nearest integer using IEEE half-even rounding (see {@link
+ * android.icu.math.BigDecimal#ROUND_HALF_EVEN ROUND_HALF_EVEN}) for formatting,
+ * and to parse only the integer part of an input string (see {@link
+ * #isParseIntegerOnly isParseIntegerOnly}).
+ *
+ * @param inLocale the locale for which a number format is needed
+ * @return a number format for integer values
+ */
+
+public static android.icu.text.NumberFormat getIntegerInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency format for the current default <code>FORMAT</code> locale.
+ * @return a number format for currency
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getCurrencyInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency format for the specified locale.
+ * @return a number format for currency
+ */
+
+public static android.icu.text.NumberFormat getCurrencyInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a currency format for the specified locale.
+ * @return a number format for currency
+ */
+
+public static android.icu.text.NumberFormat getCurrencyInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a percentage format for the current default <code>FORMAT</code> locale.
+ * @return a number format for percents
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getPercentInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a percentage format for the specified locale.
+ * @return a number format for percents
+ */
+
+public static android.icu.text.NumberFormat getPercentInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a percentage format for the specified locale.
+ * @return a number format for percents
+ */
+
+public static android.icu.text.NumberFormat getPercentInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a scientific format for the current default <code>FORMAT</code> locale.
+ * @return a scientific number format
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getScientificInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a scientific format for the specified locale.
+ * @return a scientific number format
+ */
+
+public static android.icu.text.NumberFormat getScientificInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a scientific format for the specified locale.
+ * @return a scientific number format
+ */
+
+public static android.icu.text.NumberFormat getScientificInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the list of Locales for which NumberFormats are available.
+ * @return the available locales
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ * Two NumberFormats are equal they are of the same class
+ * and the user-specified values for settings
+ * (groupingUsed, parseIntegerOnly, maximumIntegerDigits, etc.)
+ * are equal.
+ * @param obj the object to compare against
+ * @return true if the object is equal to this.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if grouping is used in this format. For example, in the
+ * en_US locale, with grouping on, the number 1234567 will be formatted
+ * as "1,234,567". The grouping separator as well as the size of each group
+ * is locale-dependent and is determined by subclasses of NumberFormat.
+ * Grouping affects both parsing and formatting.
+ * @return true if grouping is used
+ * @see #setGroupingUsed
+ */
+
+public boolean isGroupingUsed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether or not grouping will be used in this format.  Grouping
+ * affects both parsing and formatting.
+ * @see #isGroupingUsed
+ * @param newValue true to use grouping.
+ */
+
+public void setGroupingUsed(boolean newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum number of digits allowed in the integer portion of a
+ * number.  The default value is 40, which subclasses can override.
+ *
+ * When formatting, if the number of digits exceeds this value, the highest-
+ * significance digits are truncated until the limit is reached, in accordance
+ * with UTS#35.
+ *
+ * This setting has no effect on parsing.
+ *
+ * @return the maximum number of integer digits
+ * @see #setMaximumIntegerDigits
+ */
+
+public int getMaximumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the maximum number of digits allowed in the integer portion of a
+ * number. This must be &gt;= minimumIntegerDigits.  If the
+ * new value for maximumIntegerDigits is less than the current value
+ * of minimumIntegerDigits, then minimumIntegerDigits will also be set to
+ * the new value.
+ * @param newValue the maximum number of integer digits to be shown; if
+ * less than zero, then zero is used.  Subclasses might enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMaximumIntegerDigits
+ */
+
+public void setMaximumIntegerDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum number of digits allowed in the integer portion of a
+ * number.  The default value is 1, which subclasses can override.
+ * When formatting, if this value is not reached, numbers are padded on the
+ * left with the locale-specific '0' character to ensure at least this
+ * number of integer digits.  When parsing, this has no effect.
+ * @return the minimum number of integer digits
+ * @see #setMinimumIntegerDigits
+ */
+
+public int getMinimumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the minimum number of digits allowed in the integer portion of a
+ * number.  This must be &lt;= maximumIntegerDigits.  If the
+ * new value for minimumIntegerDigits is more than the current value
+ * of maximumIntegerDigits, then maximumIntegerDigits will also be set to
+ * the new value.
+ * @param newValue the minimum number of integer digits to be shown; if
+ * less than zero, then zero is used. Subclasses might enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMinimumIntegerDigits
+ */
+
+public void setMinimumIntegerDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum number of digits allowed in the fraction
+ * portion of a number.  The default value is 3, which subclasses
+ * can override.  When formatting, the exact behavior when this
+ * value is exceeded is subclass-specific.  When parsing, this has
+ * no effect.
+ * @return the maximum number of fraction digits
+ * @see #setMaximumFractionDigits
+ */
+
+public int getMaximumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the maximum number of digits allowed in the fraction portion of a
+ * number. This must be &gt;= minimumFractionDigits.  If the
+ * new value for maximumFractionDigits is less than the current value
+ * of minimumFractionDigits, then minimumFractionDigits will also be set to
+ * the new value.
+ * @param newValue the maximum number of fraction digits to be shown; if
+ * less than zero, then zero is used. The concrete subclass may enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMaximumFractionDigits
+ */
+
+public void setMaximumFractionDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum number of digits allowed in the fraction portion of a
+ * number.  The default value is 0, which subclasses can override.
+ * When formatting, if this value is not reached, numbers are padded on
+ * the right with the locale-specific '0' character to ensure at least
+ * this number of fraction digits.  When parsing, this has no effect.
+ * @return the minimum number of fraction digits
+ * @see #setMinimumFractionDigits
+ */
+
+public int getMinimumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the minimum number of digits allowed in the fraction portion of a
+ * number.  This must be &lt;= maximumFractionDigits.  If the
+ * new value for minimumFractionDigits exceeds the current value
+ * of maximumFractionDigits, then maximumFractionDigits will also be set to
+ * the new value.
+ * @param newValue the minimum number of fraction digits to be shown; if
+ * less than zero, then zero is used.  Subclasses might enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMinimumFractionDigits
+ */
+
+public void setMinimumFractionDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the <tt>Currency</tt> object used to display currency
+ * amounts.  This takes effect immediately, if this format is a
+ * currency format.  If this format is not a currency format, then
+ * the currency object is used if and when this object becomes a
+ * currency format.
+ * @param theCurrency new currency object to use.  May be null for
+ * some subclasses.
+ */
+
+public void setCurrency(android.icu.util.Currency theCurrency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <tt>Currency</tt> object used to display currency
+ * amounts.  This may be null.
+ */
+
+public android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding mode used in this NumberFormat.  The default implementation of
+ * tis method in NumberFormat always throws <code>UnsupportedOperationException</code>.
+ * @return A rounding mode, between <code>BigDecimal.ROUND_UP</code>
+ * and <code>BigDecimal.ROUND_UNNECESSARY</code>.
+ * @see #setRoundingMode(int)
+ */
+
+public int getRoundingMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the rounding mode used in this NumberFormat.  The default implementation of
+ * tis method in NumberFormat always throws <code>UnsupportedOperationException</code>.
+ * @param roundingMode A rounding mode, between
+ * <code>BigDecimal.ROUND_UP</code> and
+ * <code>BigDecimal.ROUND_UNNECESSARY</code>.
+ * @see #getRoundingMode()
+ */
+
+public void setRoundingMode(int roundingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a specific style number format for a specific locale.
+ * @param desiredLocale  the specific locale.
+ * @param choice         number format style
+ * @throws java.lang.IllegalArgumentException  if choice is not one of
+ *                                   NUMBERSTYLE, CURRENCYSTYLE,
+ *                                   PERCENTSTYLE, SCIENTIFICSTYLE,
+ *                                   INTEGERSTYLE, ISOCURRENCYSTYLE,
+ *                                   PLURALCURRENCYSTYLE, ACCOUNTINGCURRENCYSTYLE.
+ *                                   CASHCURRENCYSTYLE, STANDARDCURRENCYSTYLE.
+ */
+
+public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale desiredLocale, int choice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for the provided locale and choice.
+ * @param forLocale the locale of the data.
+ * @param choice the pattern format.
+ * @return the pattern
+ */
+
+protected static java.lang.String getPattern(android.icu.util.ULocale forLocale, int choice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency symbol
+ * to represent currency for accounting, for example: "($3.00), instead of
+ * "-$3.00" ({@link #CURRENCYSTYLE}).
+ * Overrides any style specified using -cf- key in locale.
+ */
+
+public static final int ACCOUNTINGCURRENCYSTYLE = 7; // 0x7
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency cash style of format which uses currency
+ * ISO code to represent currency, for example: "NT$3" instead of "NT$3.23".
+ */
+
+public static final int CASHCURRENCYSTYLE = 8; // 0x8
+
+/**
+ * <strong>[icu]</strong> Constant to specify general currency style of format. Defaults to
+ * STANDARDCURRENCYSTYLE, using currency symbol, for example "$3.00", with
+ * non-accounting style for negative values (e.g. minus sign).
+ * The specific style may be specified using the -cf- locale key.
+ */
+
+public static final int CURRENCYSTYLE = 1; // 0x1
+
+/**
+ * Field constant used to construct a FieldPosition object. Signifies that
+ * the position of the fraction part of a formatted number should be returned.
+ * @see java.text.FieldPosition
+ */
+
+public static final int FRACTION_FIELD = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant to specify a integer number style format.
+ */
+
+public static final int INTEGERSTYLE = 4; // 0x4
+
+/**
+ * Field constant used to construct a FieldPosition object. Signifies that
+ * the position of the integer part of a formatted number should be returned.
+ * @see java.text.FieldPosition
+ */
+
+public static final int INTEGER_FIELD = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency
+ * ISO code to represent currency, for example: "USD3.00".
+ */
+
+public static final int ISOCURRENCYSTYLE = 5; // 0x5
+
+/**
+ * <strong>[icu]</strong> Constant to specify normal number style of format.
+ */
+
+public static final int NUMBERSTYLE = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant to specify a style of format to display percent.
+ */
+
+public static final int PERCENTSTYLE = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency
+ * long name with plural format to represent currency, for example,
+ * "3.00 US Dollars".
+ */
+
+public static final int PLURALCURRENCYSTYLE = 6; // 0x6
+
+/**
+ * <strong>[icu]</strong> Constant to specify a style of format to display scientific number.
+ */
+
+public static final int SCIENTIFICSTYLE = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency symbol
+ * to represent currency, for example "$3.00", using non-accounting style for
+ * negative values (e.g. minus sign).
+ * Overrides any style specified using -cf- key in locale.
+ */
+
+public static final int STANDARDCURRENCYSTYLE = 9; // 0x9
+/**
+ * The instances of this inner class are used as attribute keys and values
+ * in AttributedCharacterIterator that
+ * NumberFormat.formatToCharacterIterator() method returns.
+ * <p>
+ * There is no public constructor to this class, the only instances are the
+ * constants defined here.
+ * <p>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Field extends java.text.Format.Field {
+
+/**
+ * Constructs a new instance of NumberFormat.Field with the given field
+ * name.
+ */
+
+protected Field(java.lang.String fieldName) { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * serizalization method resolve instances to the constant
+ * NumberFormat.Field values
+ */
+
+protected java.lang.Object readResolve() throws java.io.InvalidObjectException { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field COMPACT;
+static { COMPACT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field CURRENCY;
+static { CURRENCY = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field DECIMAL_SEPARATOR;
+static { DECIMAL_SEPARATOR = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field EXPONENT;
+static { EXPONENT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field EXPONENT_SIGN;
+static { EXPONENT_SIGN = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field EXPONENT_SYMBOL;
+static { EXPONENT_SYMBOL = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field FRACTION;
+static { FRACTION = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field GROUPING_SEPARATOR;
+static { GROUPING_SEPARATOR = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field INTEGER;
+static { INTEGER = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field MEASURE_UNIT;
+static { MEASURE_UNIT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field PERCENT;
+static { PERCENT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field PERMILLE;
+static { PERMILLE = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field SIGN;
+static { SIGN = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/NumberingSystem.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/NumberingSystem.java
new file mode 100644
index 0000000..f80482c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/NumberingSystem.java
@@ -0,0 +1,143 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>NumberingSystem</code> is the base class for all number
+ * systems. This class provides the interface for setting different numbering
+ * system types, whether it be a simple alternate digit system such as
+ * Thai digits or Devanagari digits, or an algorithmic numbering system such
+ * as Hebrew numbering or Chinese numbering.
+ *
+ * @author       John Emmons
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class NumberingSystem {
+
+/**
+ * Default constructor.  Returns a numbering system that uses the Latin-script decimal
+ * digits 0 through 9.  This should be equivalent to NumberingSystem.LATIN.
+ */
+
+public NumberingSystem() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Factory method for creating a numbering system.
+ * @param radix_in The radix for this numbering system.  ICU currently
+ * supports only numbering systems whose radix is 10.
+ * @param isAlgorithmic_in Specifies whether the numbering system is algorithmic
+ * (true) or numeric (false).
+ * @param desc_in String used to describe the characteristics of the numbering
+ * system.  For numeric systems, this string contains the digits used by the
+ * numbering system, in order, starting from zero.  For algorithmic numbering
+ * systems, the string contains the name of the RBNF ruleset in the locale's
+ * NumberingSystemRules section that will be used to format numbers using
+ * this numbering system.
+ */
+
+public static android.icu.text.NumberingSystem getInstance(int radix_in, boolean isAlgorithmic_in, java.lang.String desc_in) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default numbering system for the specified locale.
+ */
+
+public static android.icu.text.NumberingSystem getInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default numbering system for the specified ULocale.
+ */
+
+public static android.icu.text.NumberingSystem getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default numbering system for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.text.NumberingSystem getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a numbering system from one of the predefined numbering systems
+ * known to ICU.  Numbering system names are based on the numbering systems
+ * defined in CLDR.  To get a list of available numbering systems, use the
+ * getAvailableNames method.
+ * @param name The name of the desired numbering system.  Numbering system
+ * names often correspond with the name of the script they are associated
+ * with.  For example, "thai" for Thai digits, "hebr" for Hebrew numerals.
+ * @return The NumberingSystem instance, or null if not available.
+ */
+
+public static android.icu.text.NumberingSystem getInstanceByName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string array containing a list of the names of numbering systems
+ * currently known to ICU.
+ *
+ * @return An array of strings in alphabetical (invariant) order.
+ */
+
+public static java.lang.String[] getAvailableNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method to determine if a given digit string is valid for use as a
+ * descriptor of a numeric ( non-algorithmic ) numbering system.  In order for
+ * a digit string to be valid, it must contain exactly ten Unicode code points.
+ */
+
+public static boolean isValidDigitString(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the radix of the current numbering system.
+ */
+
+public int getRadix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the description string of the current numbering system.
+ * The description string describes the characteristics of the numbering
+ * system.  For numeric systems, this string contains the digits used by the
+ * numbering system, in order, starting from zero.  For algorithmic numbering
+ * systems, the string contains the name of the RBNF ruleset in the locale's
+ * NumberingSystemRules section that will be used to format numbers using
+ * this numbering system.
+ */
+
+public java.lang.String getDescription() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the string representing the name of the numbering system.
+ */
+
+public java.lang.String getName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numbering system's algorithmic status.  If true,
+ * the numbering system is algorithmic and uses an RBNF formatter to
+ * format numerals.  If false, the numbering system is numeric and
+ * uses a fixed set of digits.
+ */
+
+public boolean isAlgorithmic() { throw new RuntimeException("Stub!"); }
+
+/**
+ * For convenience, an instance representing the <em>latn</em> numbering system, which
+ * corresponds to digits in the ASCII range '0' through '9'.
+ */
+
+public static final android.icu.text.NumberingSystem LATIN;
+static { LATIN = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/PluralFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/PluralFormat.java
new file mode 100644
index 0000000..78b198f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/PluralFormat.java
@@ -0,0 +1,384 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2007-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import java.util.Locale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>PluralFormat</code> supports the creation of internationalized
+ * messages with plural inflection. It is based on <i>plural
+ * selection</i>, i.e. the caller specifies messages for each
+ * plural case that can appear in the user's language and the
+ * <code>PluralFormat</code> selects the appropriate message based on
+ * the number.
+ *
+ * <h3>The Problem of Plural Forms in Internationalized Messages</h3>
+ * <p>
+ * Different languages have different ways to inflect
+ * plurals. Creating internationalized messages that include plural
+ * forms is only feasible when the framework is able to handle plural
+ * forms of <i>all</i> languages correctly. <code>ChoiceFormat</code>
+ * doesn't handle this well, because it attaches a number interval to
+ * each message and selects the message whose interval contains a
+ * given number. This can only handle a finite number of
+ * intervals. But in some languages, like Polish, one plural case
+ * applies to infinitely many intervals (e.g., the paucal case applies to
+ * numbers ending with 2, 3, or 4 except those ending with 12, 13, or
+ * 14). Thus <code>ChoiceFormat</code> is not adequate.
+ * <p>
+ * <code>PluralFormat</code> deals with this by breaking the problem
+ * into two parts:
+ * <ul>
+ * <li>It uses <code>PluralRules</code> that can define more complex
+ *     conditions for a plural case than just a single interval. These plural
+ *     rules define both what plural cases exist in a language, and to
+ *     which numbers these cases apply.
+ * <li>It provides predefined plural rules for many languages. Thus, the programmer
+ *     need not worry about the plural cases of a language and
+ *     does not have to define the plural cases; they can simply
+ *     use the predefined keywords. The whole plural formatting of messages can
+ *     be done using localized patterns from resource bundles. For predefined plural
+ *     rules, see the CLDR <i>Language Plural Rules</i> page at
+ *    http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ * </ul>
+ *
+ * <h4>Usage of <code>PluralFormat</code></h4>
+ * <p>Note: Typically, plural formatting is done via <code>MessageFormat</code>
+ * with a <code>plural</code> argument type,
+ * rather than using a stand-alone <code>PluralFormat</code>.
+ * <p>
+ * This discussion assumes that you use <code>PluralFormat</code> with
+ * a predefined set of plural rules. You can create one using one of
+ * the constructors that takes a <code>ULocale</code> object. To
+ * specify the message pattern, you can either pass it to the
+ * constructor or set it explicitly using the
+ * <code>applyPattern()</code> method. The <code>format()</code>
+ * method takes a number object and selects the message of the
+ * matching plural case. This message will be returned.
+ *
+ * <h5>Patterns and Their Interpretation</h5>
+ * <p>
+ * The pattern text defines the message output for each plural case of the
+ * specified locale. Syntax:
+ * <blockquote><pre>
+ * pluralStyle = [offsetValue] (selector '{' message '}')+
+ * offsetValue = "offset:" number
+ * selector = explicitValue | keyword
+ * explicitValue = '=' number  // adjacent, no white space in between
+ * keyword = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
+ * message: see {@link android.icu.text.MessageFormat MessageFormat}
+ * </pre></blockquote>
+ * Pattern_White_Space between syntax elements is ignored, except
+ * between the {curly braces} and their sub-message,
+ * and between the '=' and the number of an explicitValue.
+ * <p>
+ * There are 6 predefined case keywords in CLDR/ICU - 'zero', 'one', 'two', 'few', 'many' and
+ * 'other'. You always have to define a message text for the default plural case
+ * "<code>other</code>" which is contained in every rule set.
+ * If you do not specify a message text for a particular plural case, the
+ * message text of the plural case "<code>other</code>" gets assigned to this
+ * plural case.
+ * <p>
+ * When formatting, the input number is first matched against the explicitValue clauses.
+ * If there is no exact-number match, then a keyword is selected by calling
+ * the <code>PluralRules</code> with the input number <em>minus the offset</em>.
+ * (The offset defaults to 0 if it is omitted from the pattern string.)
+ * If there is no clause with that keyword, then the "other" clauses is returned.
+ * <p>
+ * An unquoted pound sign (<code>#</code>) in the selected sub-message
+ * itself (i.e., outside of arguments nested in the sub-message)
+ * is replaced by the input number minus the offset.
+ * The number-minus-offset value is formatted using a
+ * <code>NumberFormat</code> for the <code>PluralFormat</code>'s locale. If you
+ * need special number formatting, you have to use a <code>MessageFormat</code>
+ * and explicitly specify a <code>NumberFormat</code> argument.
+ * <strong>Note:</strong> That argument is formatting without subtracting the offset!
+ * If you need a custom format and have a non-zero offset, then you need to pass the
+ * number-minus-offset value as a separate parameter.
+ *
+ * <p>For a usage example, see the {@link android.icu.text.MessageFormat MessageFormat} class documentation.
+ *
+ * <h4>Defining Custom Plural Rules</h4>
+ * <p>If you need to use <code>PluralFormat</code> with custom rules, you can
+ * create a <code>PluralRules</code> object and pass it to
+ * <code>PluralFormat</code>'s constructor. If you also specify a locale in this
+ * constructor, this locale will be used to format the number in the message
+ * texts.
+ * <p>
+ * For more information about <code>PluralRules</code>, see
+ * {@link android.icu.text.PluralRules PluralRules}.
+ *
+ * @author tschumann (Tim Schumann)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class PluralFormat extends android.icu.text.UFormat {
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for the default <code>FORMAT</code> locale.
+ * This locale will be used to get the set of plural rules and for standard
+ * number formatting.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given locale.
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given
+ * {@link java.util.Locale}.
+ * @param locale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ */
+
+public PluralFormat(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules.
+ * The standard number formatting will be done using the default <code>FORMAT</code> locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat(android.icu.text.PluralRules rules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules.
+ * The standard number formatting will be done using the given locale.
+ * @param ulocale the default number formatting will be done using this
+ *        locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules rules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules.
+ * The standard number formatting will be done using the given locale.
+ * @param locale the default number formatting will be done using this
+ *        locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ */
+
+public PluralFormat(java.util.Locale locale, android.icu.text.PluralRules rules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new <code>PluralFormat</code> for the plural type.
+ * The standard number formatting will be done using the given locale.
+ * @param ulocale the default number formatting will be done using this
+ *        locale.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new <code>PluralFormat</code> for the plural type.
+ * The standard number formatting will be done using the given {@link java.util.Locale}.
+ * @param locale the default number formatting will be done using this
+ *        locale.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ */
+
+public PluralFormat(java.util.Locale locale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given pattern string.
+ * The default <code>FORMAT</code> locale will be used to get the set of plural rules and for
+ * standard number formatting.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given pattern string and
+ * locale.
+ * The locale will be used to get the set of plural rules and for
+ * standard number formatting.
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/pluralformat/PluralFormatSample.java PluralFormatExample}
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules and a
+ * pattern.
+ * The standard number formatting will be done using the default <code>FORMAT</code> locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat(android.icu.text.PluralRules rules, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules, a
+ * pattern and a locale.
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules rules, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new <code>PluralFormat</code> for a plural type, a
+ * pattern and a locale.
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules.PluralType type, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the pattern used by this plural format.
+ * The method parses the pattern and creates a map of format strings
+ * for the plural rules.
+ * Patterns and their interpretation are specified in the class description.
+ *
+ * @param pattern the pattern for this plural format.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public void applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for this PluralFormat.
+ *
+ * @return the pattern string
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a plural message for a given number.
+ *
+ * @param number a number for which the plural message should be formatted.
+ *        If no pattern has been applied to this
+ *        <code>PluralFormat</code> object yet, the formatted number will
+ *        be returned.
+ * @return the string containing the formatted plural message.
+ */
+
+public final java.lang.String format(double number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a plural message for a given number and appends the formatted
+ * message to the given <code>StringBuffer</code>.
+ * @param number a number object (instance of <code>Number</code> for which
+ *        the plural message should be formatted. If no pattern has been
+ *        applied to this <code>PluralFormat</code> object yet, the
+ *        formatted number will be returned.
+ *        Note: If this object is not an instance of <code>Number</code>,
+ *              the <code>toAppendTo</code> will not be modified.
+ * @param toAppendTo the formatted message will be appended to this
+ *        <code>StringBuffer</code>.
+ * @param pos will be ignored by this method.
+ * @return the string buffer passed in as toAppendTo, with formatted text
+ *         appended.
+ * @throws java.lang.IllegalArgumentException if number is not an instance of Number
+ */
+
+public java.lang.StringBuffer format(java.lang.Object number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method is not yet supported by <code>PluralFormat</code>.
+ * @param text the string to be parsed.
+ * @param parsePosition defines the position where parsing is to begin,
+ * and upon return, the position where parsing left off.  If the position
+ * has not changed upon return, then parsing failed.
+ * @return nothing because this method is not yet implemented.
+ * @throws java.lang.UnsupportedOperationException will always be thrown by this method.
+ */
+
+public java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method is not yet supported by <code>PluralFormat</code>.
+ * @param source the string to be parsed.
+ * @param pos defines the position where parsing is to begin,
+ * and upon return, the position where parsing left off.  If the position
+ * has not changed upon return, then parsing failed.
+ * @return nothing because this method is not yet implemented.
+ * @throws java.lang.UnsupportedOperationException will always be thrown by this method.
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the number format used by this formatter.  You only need to
+ * call this if you want a different number format than the default
+ * formatter for the locale.
+ * @param format the number format to use.
+ */
+
+public void setNumberFormat(android.icu.text.NumberFormat format) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this equals the provided PluralFormat.
+ * @param rhs the PluralFormat to compare against
+ * @return true if this equals rhs
+ */
+
+public boolean equals(android.icu.text.PluralFormat rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/PluralRules.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/PluralRules.java
new file mode 100644
index 0000000..f16a5ff
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/PluralRules.java
@@ -0,0 +1,421 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2007-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import java.util.Locale;
+import android.icu.number.FormattedNumber;
+import android.icu.number.NumberFormatter;
+
+/**
+ * <p>
+ * Defines rules for mapping non-negative numeric values onto a small set of keywords.
+ * </p>
+ * <p>
+ * Rules are constructed from a text description, consisting of a series of keywords and conditions. The {@link #select}
+ * method examines each condition in order and returns the keyword for the first condition that matches the number. If
+ * none match, {@link #KEYWORD_OTHER} is returned.
+ * </p>
+ * <p>
+ * A PluralRules object is immutable. It contains caches for sample values, but those are synchronized.
+ * <p>
+ * PluralRules is Serializable so that it can be used in formatters, which are serializable.
+ * </p>
+ * <p>
+ * For more information, details, and tips for writing rules, see the <a
+ * href="http://www.unicode.org/draft/reports/tr35/tr35.html#Language_Plural_Rules">LDML spec, C.11 Language Plural
+ * Rules</a>
+ * </p>
+ * <p>
+ * Examples:
+ * </p>
+ *
+ * <pre>
+ * &quot;one: n is 1; few: n in 2..4&quot;
+ * </pre>
+ * <p>
+ * This defines two rules, for 'one' and 'few'. The condition for 'one' is "n is 1" which means that the number must be
+ * equal to 1 for this condition to pass. The condition for 'few' is "n in 2..4" which means that the number must be
+ * between 2 and 4 inclusive - and be an integer - for this condition to pass. All other numbers are assigned the
+ * keyword "other" by the default rule.
+ * </p>
+ *
+ * <pre>
+ * &quot;zero: n is 0; one: n is 1; zero: n mod 100 in 1..19&quot;
+ * </pre>
+ * <p>
+ * This illustrates that the same keyword can be defined multiple times. Each rule is examined in order, and the first
+ * keyword whose condition passes is the one returned. Also notes that a modulus is applied to n in the last rule. Thus
+ * its condition holds for 119, 219, 319...
+ * </p>
+ *
+ * <pre>
+ * &quot;one: n is 1; few: n mod 10 in 2..4 and n mod 100 not in 12..14&quot;
+ * </pre>
+ * <p>
+ * This illustrates conjunction and negation. The condition for 'few' has two parts, both of which must be met:
+ * "n mod 10 in 2..4" and "n mod 100 not in 12..14". The first part applies a modulus to n before the test as in the
+ * previous example. The second part applies a different modulus and also uses negation, thus it matches all numbers
+ * _not_ in 12, 13, 14, 112, 113, 114, 212, 213, 214...
+ * </p>
+ * <p>
+ * Syntax:
+ * </p>
+ * <pre>
+ * rules         = rule (';' rule)*
+ * rule          = keyword ':' condition
+ * keyword       = &lt;identifier&gt;
+ * condition     = and_condition ('or' and_condition)*
+ * and_condition = relation ('and' relation)*
+ * relation      = not? expr not? rel not? range_list
+ * expr          = ('n' | 'i' | 'f' | 'v' | 't') (mod value)?
+ * not           = 'not' | '!'
+ * rel           = 'in' | 'is' | '=' | '?' | 'within'
+ * mod           = 'mod' | '%'
+ * range_list    = (range | value) (',' range_list)*
+ * value         = digit+
+ * digit         = 0|1|2|3|4|5|6|7|8|9
+ * range         = value'..'value
+ * </pre>
+ * <p>Each <b>not</b> term inverts the meaning; however, there should not be more than one of them.</p>
+ * <p>
+ * The i, f, t, and v values are defined as follows:
+ * </p>
+ * <ul>
+ * <li>i to be the integer digits.</li>
+ * <li>f to be the visible decimal digits, as an integer.</li>
+ * <li>t to be the visible decimal digits?without trailing zeros?as an integer.</li>
+ * <li>v to be the number of visible fraction digits.</li>
+ * <li>j is defined to only match integers. That is j is 3 fails if v != 0 (eg for 3.1 or 3.0).</li>
+ * </ul>
+ * <p>
+ * Examples are in the following table:
+ * </p>
+ * <table border='1' style="border-collapse:collapse">
+ * <tbody>
+ * <tr>
+ * <th>n</th>
+ * <th>i</th>
+ * <th>f</th>
+ * <th>v</th>
+ * </tr>
+ * <tr>
+ * <td>1.0</td>
+ * <td>1</td>
+ * <td align="right">0</td>
+ * <td>1</td>
+ * </tr>
+ * <tr>
+ * <td>1.00</td>
+ * <td>1</td>
+ * <td align="right">0</td>
+ * <td>2</td>
+ * </tr>
+ * <tr>
+ * <td>1.3</td>
+ * <td>1</td>
+ * <td align="right">3</td>
+ * <td>1</td>
+ * </tr>
+ * <tr>
+ * <td>1.03</td>
+ * <td>1</td>
+ * <td align="right">3</td>
+ * <td>2</td>
+ * </tr>
+ * <tr>
+ * <td>1.23</td>
+ * <td>1</td>
+ * <td align="right">23</td>
+ * <td>2</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ * <p>
+ * An "identifier" is a sequence of characters that do not have the Unicode Pattern_Syntax or Pattern_White_Space
+ * properties.
+ * <p>
+ * The difference between 'in' and 'within' is that 'in' only includes integers in the specified range, while 'within'
+ * includes all values. Using 'within' with a range_list consisting entirely of values is the same as using 'in' (it's
+ * not an error).
+ * </p>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class PluralRules implements java.io.Serializable {
+
+private PluralRules() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a plural rules description and returns a PluralRules.
+ * @param description the rule description.
+ * @throws java.text.ParseException if the description cannot be parsed.
+ *    The exception index is typically not set, it will be -1.
+ */
+
+public static android.icu.text.PluralRules parseDescription(java.lang.String description) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a PluralRules from a description if it is parsable,
+ * otherwise returns null.
+ * @param description the rule description.
+ * @return the PluralRules
+ */
+
+public static android.icu.text.PluralRules createRules(java.lang.String description) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined cardinal-number <code>PluralRules</code> for a given
+ * locale.
+ * Same as forLocale(locale, PluralType.CARDINAL).
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined cardinal-number <code>PluralRules</code> for a given
+ * {@link java.util.Locale}.
+ * Same as forLocale(locale, PluralType.CARDINAL).
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined <code>PluralRules</code> for a given
+ * locale and the plural type.
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale locale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined <code>PluralRules</code> for a given
+ * {@link java.util.Locale} and the plural type.
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(java.util.Locale locale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a floating-point number, returns the keyword of the first rule
+ * that applies to the number.
+ *
+ * @param number The number for which the rule has to be determined.
+ * @return The keyword of the selected rule.
+ */
+
+public java.lang.String select(double number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a formatted number, returns the keyword of the first rule that
+ * applies to the number.
+ *
+ * A FormattedNumber allows you to specify an exponent or trailing zeros,
+ * which can affect the plural category. To get a FormattedNumber, see
+ * {@link android.icu.number.NumberFormatter NumberFormatter}.
+ *
+ * @param number The number for which the rule has to be determined.
+ * @return The keyword of the selected rule.
+ */
+
+public java.lang.String select(android.icu.number.FormattedNumber number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a set of all rule keywords used in this <code>PluralRules</code>
+ * object.  The rule "other" is always present by default.
+ *
+ * @return The set of keywords.
+ */
+
+public java.util.Set<java.lang.String> getKeywords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the unique value that this keyword matches, or {@link #NO_UNIQUE_VALUE}
+ * if the keyword matches multiple values or is not defined for this PluralRules.
+ *
+ * @param keyword the keyword to check for a unique value
+ * @return The unique value for the keyword, or NO_UNIQUE_VALUE.
+ */
+
+public double getUniqueKeywordValue(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns all the values that trigger this keyword, or null if the number of such
+ * values is unlimited.
+ *
+ * @param keyword the keyword
+ * @return the values that trigger this keyword, or null.  The returned collection
+ * is immutable. It will be empty if the keyword is not defined.
+ */
+
+public java.util.Collection<java.lang.Double> getAllKeywordValues(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of integer values for which select() would return that keyword,
+ * or null if the keyword is not defined. The returned collection is unmodifiable.
+ * The returned list is not complete, and there might be additional values that
+ * would return the keyword.
+ *
+ * @param keyword the keyword to test
+ * @return a list of values matching the keyword.
+ */
+
+public java.util.Collection<java.lang.Double> getSamples(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if rhs is equal to this.
+ * @param rhs the PluralRules to compare to.
+ * @return true if this and rhs are equal.
+ */
+
+public boolean equals(android.icu.text.PluralRules rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The default rules that accept any number and return
+ * {@link #KEYWORD_OTHER}.
+ */
+
+public static final android.icu.text.PluralRules DEFAULT;
+static { DEFAULT = null; }
+
+/**
+ * Common name for the 'paucal' or other special plural form.
+ */
+
+public static final java.lang.String KEYWORD_FEW = "few";
+
+/**
+ * Common name for the arabic (11 to 99) plural form.
+ */
+
+public static final java.lang.String KEYWORD_MANY = "many";
+
+/**
+ * Common name for the 'singular' plural form.
+ */
+
+public static final java.lang.String KEYWORD_ONE = "one";
+
+/**
+ * Common name for the default plural form.  This name is returned
+ * for values to which no other form in the rule applies.  It
+ * can additionally be assigned rules of its own.
+ */
+
+public static final java.lang.String KEYWORD_OTHER = "other";
+
+/**
+ * Common name for the 'dual' plural form.
+ */
+
+public static final java.lang.String KEYWORD_TWO = "two";
+
+/**
+ * Common name for the 'zero' plural form.
+ */
+
+public static final java.lang.String KEYWORD_ZERO = "zero";
+
+/**
+ * Value returned by {@link #getUniqueKeywordValue} when there is no
+ * unique value to return.
+ */
+
+public static final double NO_UNIQUE_VALUE = -0.00123456777;
+/**
+ * Type of plurals and PluralRules.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum PluralType {
+/**
+ * Plural rules for cardinal numbers: 1 file vs. 2 files.
+ */
+
+CARDINAL,
+/**
+ * Plural rules for ordinal numbers: 1st file, 2nd file, 3rd file, 4th file, etc.
+ */
+
+ORDINAL;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/RelativeDateTimeFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/RelativeDateTimeFormatter.java
new file mode 100644
index 0000000..759ba3d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/RelativeDateTimeFormatter.java
@@ -0,0 +1,655 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2013-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import java.text.Format;
+
+/**
+ * Formats simple relative dates. There are two types of relative dates that
+ * it handles:
+ * <ul>
+ *   <li>relative dates with a quantity e.g "in 5 days"</li>
+ *   <li>relative dates without a quantity e.g "next Tuesday"</li>
+ * </ul>
+ * <p>
+ * This API is very basic and is intended to be a building block for more
+ * fancy APIs. The caller tells it exactly what to display in a locale
+ * independent way. While this class automatically provides the correct plural
+ * forms, the grammatical form is otherwise as neutral as possible. It is the
+ * caller's responsibility to handle cut-off logic such as deciding between
+ * displaying "in 7 days" or "in 1 week." This API supports relative dates
+ * involving one single unit. This API does not support relative dates
+ * involving compound units.
+ * e.g "in 5 days and 4 hours" nor does it support parsing.
+ * This class is both immutable and thread-safe.
+ * <p>
+ * Here are some examples of use:
+ * <blockquote>
+ * <pre>
+ * RelativeDateTimeFormatter fmt = RelativeDateTimeFormatter.getInstance();
+ * fmt.format(1, Direction.NEXT, RelativeUnit.DAYS); // "in 1 day"
+ * fmt.format(3, Direction.NEXT, RelativeUnit.DAYS); // "in 3 days"
+ * fmt.format(3.2, Direction.LAST, RelativeUnit.YEARS); // "3.2 years ago"
+ *
+ * fmt.format(Direction.LAST, AbsoluteUnit.SUNDAY); // "last Sunday"
+ * fmt.format(Direction.THIS, AbsoluteUnit.SUNDAY); // "this Sunday"
+ * fmt.format(Direction.NEXT, AbsoluteUnit.SUNDAY); // "next Sunday"
+ * fmt.format(Direction.PLAIN, AbsoluteUnit.SUNDAY); // "Sunday"
+ *
+ * fmt.format(Direction.LAST, AbsoluteUnit.DAY); // "yesterday"
+ * fmt.format(Direction.THIS, AbsoluteUnit.DAY); // "today"
+ * fmt.format(Direction.NEXT, AbsoluteUnit.DAY); // "tomorrow"
+ *
+ * fmt.format(Direction.PLAIN, AbsoluteUnit.NOW); // "now"
+ * </pre>
+ * </blockquote>
+ * <p>
+ * In the future, we may add more forms, such as abbreviated/short forms
+ * (3 secs ago), and relative day periods ("yesterday afternoon"), etc.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class RelativeDateTimeFormatter {
+
+private RelativeDateTimeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for the default locale.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular locale.
+ *
+ * @param locale the locale.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular {@link java.util.Locale}.
+ *
+ * @param locale the {@link java.util.Locale}.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular locale that uses a particular
+ * NumberFormat object.
+ *
+ * @param locale the locale
+ * @param nf the number format object. It is defensively copied to ensure thread-safety
+ * and immutability of this class.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale locale, android.icu.text.NumberFormat nf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular locale that uses a particular
+ * NumberFormat object, style, and capitalization context
+ *
+ * @param locale the locale
+ * @param nf the number format object. It is defensively copied to ensure thread-safety
+ * and immutability of this class. May be null.
+ * @param style the style.
+ * @param capitalizationContext the capitalization context.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale locale, android.icu.text.NumberFormat nf, android.icu.text.RelativeDateTimeFormatter.Style style, android.icu.text.DisplayContext capitalizationContext) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular {@link java.util.Locale} that uses a
+ * particular NumberFormat object.
+ *
+ * @param locale the {@link java.util.Locale}
+ * @param nf the number format object. It is defensively copied to ensure thread-safety
+ * and immutability of this class.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale locale, android.icu.text.NumberFormat nf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date with a quantity such as "in 5 days" or
+ * "3 months ago".
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatToValue().
+ *
+ * @param quantity The numerical amount e.g 5. This value is formatted
+ * according to this object's {@link android.icu.text.NumberFormat NumberFormat} object.
+ * @param direction NEXT means a future relative date; LAST means a past
+ * relative date.
+ * @param unit the unit e.g day? month? year?
+ * @return the formatted string
+ * @throws java.lang.IllegalArgumentException if direction is something other than
+ * NEXT or LAST.
+ */
+
+public java.lang.String format(double quantity, android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date with a quantity such as "in 5 days" or
+ * "3 months ago".
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by format().
+ *
+ * @param quantity The numerical amount e.g 5. This value is formatted
+ * according to this object's {@link android.icu.text.NumberFormat NumberFormat} object.
+ * @param direction NEXT means a future relative date; LAST means a past
+ * relative date.
+ * @param unit the unit e.g day? month? year?
+ * @return the formatted relative datetime
+ * @throws java.lang.IllegalArgumentException if direction is something other than
+ * NEXT or LAST.
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double quantity, android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a numeric style, e.g. "1 week ago", "in 1 week",
+ * "5 weeks ago", "in 5 weeks".
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatNumericToValue().
+ *
+ * @param offset    The signed offset for the specified unit. This
+ *                  will be formatted according to this object's
+ *                  NumberFormat object.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public java.lang.String formatNumeric(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a numeric style, e.g. "1 week ago", "in 1 week",
+ * "5 weeks ago", "in 5 weeks".
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by formatNumeric().
+ *
+ * @param offset    The signed offset for the specified unit. This
+ *                  will be formatted according to this object's
+ *                  NumberFormat object.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatNumericToValue(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date without a quantity.
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatToValue().
+ *
+ * @param direction NEXT, LAST, THIS, etc.
+ * @param unit e.g SATURDAY, DAY, MONTH
+ * @return the formatted string. If direction has a value that is documented as not being
+ *  fully supported in every locale (for example NEXT_2 or LAST_2) then this function may
+ *  return null to signal that no formatted string is available.
+ * @throws java.lang.IllegalArgumentException if the direction is incompatible with
+ * unit this can occur with NOW which can only take PLAIN.
+ */
+
+public java.lang.String format(android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date without a quantity.
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by format().
+ *
+ * @param direction NEXT, LAST, THIS, etc.
+ * @param unit e.g SATURDAY, DAY, MONTH
+ * @return the formatted string. If direction has a value that is documented as not being
+ *  fully supported in every locale (for example NEXT_2 or LAST_2) then this function may
+ *  return null to signal that no formatted string is available.
+ * @throws java.lang.IllegalArgumentException if the direction is incompatible with
+ * unit this can occur with NOW which can only take PLAIN.
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a text style if possible, e.g. "last week", "this week",
+ * "next week", "yesterday", "tomorrow". Falls back to numeric
+ * style if no appropriate text term is available for the specified
+ * offset in the object?s locale.
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatToValue().
+ *
+ * @param offset    The signed offset for the specified field.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public java.lang.String format(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a text style if possible, e.g. "last week", "this week",
+ * "next week", "yesterday", "tomorrow". Falls back to numeric
+ * style if no appropriate text term is available for the specified
+ * offset in the object?s locale.
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by format().
+ *
+ * @param offset    The signed offset for the specified field.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Combines a relative date string and a time string in this object's
+ * locale. This is done with the same date-time separator used for the
+ * default calendar in this locale.
+ * @param relativeDateString the relative date e.g 'yesterday'
+ * @param timeString the time e.g '3:45'
+ * @return the date and time concatenated according to the default
+ * calendar in this locale e.g 'yesterday, 3:45'
+ */
+
+public java.lang.String combineDateAndTime(java.lang.String relativeDateString, java.lang.String timeString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a copy of the NumberFormat this object is using.
+ * @return A copy of the NumberFormat.
+ */
+
+public android.icu.text.NumberFormat getNumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return capitalization context.
+ * @return The capitalization context.
+ */
+
+public android.icu.text.DisplayContext getCapitalizationContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return style
+ * @return The formatting style.
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle() { throw new RuntimeException("Stub!"); }
+/**
+ * Represents an absolute unit.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum AbsoluteUnit {
+/**
+ * Sunday
+ */
+
+SUNDAY,
+/**
+ * Monday
+ */
+
+MONDAY,
+/**
+ * Tuesday
+ */
+
+TUESDAY,
+/**
+ * Wednesday
+ */
+
+WEDNESDAY,
+/**
+ * Thursday
+ */
+
+THURSDAY,
+/**
+ * Friday
+ */
+
+FRIDAY,
+/**
+ * Saturday
+ */
+
+SATURDAY,
+/**
+ * Day
+ */
+
+DAY,
+/**
+ * Week
+ */
+
+WEEK,
+/**
+ * Month
+ */
+
+MONTH,
+/**
+ * Year
+ */
+
+YEAR,
+/**
+ * Now
+ */
+
+NOW,
+/**
+ * Quarter
+ */
+
+QUARTER,
+/**
+ * Hour
+ */
+
+HOUR,
+/**
+ * Minute
+ */
+
+MINUTE;
+}
+
+/**
+ * Represents a direction for an absolute unit e.g "Next Tuesday"
+ * or "Last Tuesday"
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Direction {
+/**
+ * Two before. Not fully supported in every locale
+ */
+
+LAST_2,
+/**
+ * Last
+ */
+
+LAST,
+/**
+ * This
+ */
+
+THIS,
+/**
+ * Next
+ */
+
+NEXT,
+/**
+ * Two after. Not fully supported in every locale
+ */
+
+NEXT_2,
+/**
+ * Plain, which means the absence of a qualifier
+ */
+
+PLAIN;
+}
+
+/**
+ * Represents the result of a formatting operation of a relative datetime.
+ * Access the string value or field information.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * Not intended for public subclassing.
+ *
+ * @author sffc
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class FormattedRelativeDateTime implements android.icu.text.FormattedValue {
+
+private FormattedRelativeDateTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Represents the unit for formatting a relative date. e.g "in 5 days"
+ * or "next year"
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RelativeDateTimeUnit {
+/**
+ * Specifies that relative unit is year, e.g. "last year",
+ * "in 5 years".
+ */
+
+YEAR,
+/**
+ * Specifies that relative unit is quarter, e.g. "last quarter",
+ * "in 5 quarters".
+ */
+
+QUARTER,
+/**
+ * Specifies that relative unit is month, e.g. "last month",
+ * "in 5 months".
+ */
+
+MONTH,
+/**
+ * Specifies that relative unit is week, e.g. "last week",
+ * "in 5 weeks".
+ */
+
+WEEK,
+/**
+ * Specifies that relative unit is day, e.g. "yesterday",
+ * "in 5 days".
+ */
+
+DAY,
+/**
+ * Specifies that relative unit is hour, e.g. "1 hour ago",
+ * "in 5 hours".
+ */
+
+HOUR,
+/**
+ * Specifies that relative unit is minute, e.g. "1 minute ago",
+ * "in 5 minutes".
+ */
+
+MINUTE,
+/**
+ * Specifies that relative unit is second, e.g. "1 second ago",
+ * "in 5 seconds".
+ */
+
+SECOND,
+/**
+ * Specifies that relative unit is Sunday, e.g. "last Sunday",
+ * "this Sunday", "next Sunday", "in 5 Sundays".
+ */
+
+SUNDAY,
+/**
+ * Specifies that relative unit is Monday, e.g. "last Monday",
+ * "this Monday", "next Monday", "in 5 Mondays".
+ */
+
+MONDAY,
+/**
+ * Specifies that relative unit is Tuesday, e.g. "last Tuesday",
+ * "this Tuesday", "next Tuesday", "in 5 Tuesdays".
+ */
+
+TUESDAY,
+/**
+ * Specifies that relative unit is Wednesday, e.g. "last Wednesday",
+ * "this Wednesday", "next Wednesday", "in 5 Wednesdays".
+ */
+
+WEDNESDAY,
+/**
+ * Specifies that relative unit is Thursday, e.g. "last Thursday",
+ * "this Thursday", "next Thursday", "in 5 Thursdays".
+ */
+
+THURSDAY,
+/**
+ * Specifies that relative unit is Friday, e.g. "last Friday",
+ * "this Friday", "next Friday", "in 5 Fridays".
+ */
+
+FRIDAY,
+/**
+ * Specifies that relative unit is Saturday, e.g. "last Saturday",
+ * "this Saturday", "next Saturday", "in 5 Saturdays".
+ */
+
+SATURDAY;
+}
+
+/**
+ * Represents the unit for formatting a relative date. e.g "in 5 days"
+ * or "in 3 months"
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RelativeUnit {
+/**
+ * Seconds
+ */
+
+SECONDS,
+/**
+ * Minutes
+ */
+
+MINUTES,
+/**
+ * Hours
+ */
+
+HOURS,
+/**
+ * Days
+ */
+
+DAYS,
+/**
+ * Weeks
+ */
+
+WEEKS,
+/**
+ * Months
+ */
+
+MONTHS,
+/**
+ * Years
+ */
+
+YEARS;
+}
+
+/**
+ * The formatting style
+ *
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Style {
+/**
+ * Everything spelled out.
+ */
+
+LONG,
+/**
+ * Abbreviations used when possible.
+ */
+
+SHORT,
+/**
+ * Use single letters when possible.
+ */
+
+NARROW;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Replaceable.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Replaceable.java
new file mode 100644
index 0000000..5e4788f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Replaceable.java
@@ -0,0 +1,189 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <code>Replaceable</code> is an interface representing a
+ * string of characters that supports the replacement of a range of
+ * itself with a new string of characters.  It is used by APIs that
+ * change a piece of text while retaining metadata.  Metadata is data
+ * other than the Unicode characters returned by char32At().  One
+ * example of metadata is style attributes; another is an edit
+ * history, marking each character with an author and revision number.
+ *
+ * <p>An implicit aspect of the <code>Replaceable</code> API is that
+ * during a replace operation, new characters take on the metadata of
+ * the old characters.  For example, if the string "the <b>bold</b>
+ * font" has range (4, 8) replaced with "strong", then it becomes "the
+ * <b>strong</b> font".
+ *
+ * <p><code>Replaceable</code> specifies ranges using a start
+ * offset and a limit offset.  The range of characters thus specified
+ * includes the characters at offset start..limit-1.  That is, the
+ * start offset is inclusive, and the limit offset is exclusive.
+ *
+ * <p><code>Replaceable</code> also includes API to access characters
+ * in the string: <code>length()</code>, <code>charAt()</code>,
+ * <code>char32At()</code>, and <code>extractBetween()</code>.
+ *
+ * <p>For a subclass to support metadata, typical behavior of
+ * <code>replace()</code> is the following:
+ * <ul>
+ *   <li>Set the metadata of the new text to the metadata of the first
+ *   character replaced</li>
+ *   <li>If no characters are replaced, use the metadata of the
+ *   previous character</li>
+ *   <li>If there is no previous character (i.e. start == 0), use the
+ *   following character</li>
+ *   <li>If there is no following character (i.e. the replaceable was
+ *   empty), use default metadata<br>
+ *   <li>If the code point U+FFFF is seen, it should be interpreted as
+ *   a special marker having no metadata<li>
+ *   </li>
+ * </ul>
+ * If this is not the behavior, the subclass should document any differences.
+ *
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface Replaceable {
+
+/**
+ * Returns the number of 16-bit code units in the text.
+ * @return number of 16-bit code units in text
+ */
+
+public int length();
+
+/**
+ * Returns the 16-bit code unit at the given offset into the text.
+ * @param offset an integer between 0 and <code>length()</code>-1
+ * inclusive
+ * @return 16-bit code unit of text at given offset
+ */
+
+public char charAt(int offset);
+
+/**
+ * Returns the 32-bit code point at the given 16-bit offset into
+ * the text.  This assumes the text is stored as 16-bit code units
+ * with surrogate pairs intermixed.  If the offset of a leading or
+ * trailing code unit of a surrogate pair is given, return the
+ * code point of the surrogate pair.
+ *
+ * <p>Most subclasses can return
+ * <code>android.icu.text.UTF16.charAt(this, offset)</code>.
+ * @param offset an integer between 0 and <code>length()</code>-1
+ * inclusive
+ * @return 32-bit code point of text at given offset
+ */
+
+public int char32At(int offset);
+
+/**
+ * Copies characters from this object into the destination
+ * character array.  The first character to be copied is at index
+ * <code>srcStart</code>; the last character to be copied is at
+ * index <code>srcLimit-1</code> (thus the total number of
+ * characters to be copied is <code>srcLimit-srcStart</code>). The
+ * characters are copied into the subarray of <code>dst</code>
+ * starting at index <code>dstStart</code> and ending at index
+ * <code>dstStart + (srcLimit-srcStart) - 1</code>.
+ *
+ * @param srcStart the beginning index to copy, inclusive; <code>0
+ * &lt;= start &lt;= limit</code>.
+ * @param srcLimit the ending index to copy, exclusive;
+ * <code>start &lt;= limit &lt;= length()</code>.
+ * @param dst the destination array.
+ * @param dstStart the start offset in the destination array.
+ */
+
+public void getChars(int srcStart, int srcLimit, char[] dst, int dstStart);
+
+/**
+ * Replaces a substring of this object with the given text.
+ *
+ * <p>Subclasses must ensure that if the text between start and
+ * limit is equal to the replacement text, that replace has no
+ * effect. That is, any metadata
+ * should be unaffected. In addition, subclasses are encouraged to
+ * check for initial and trailing identical characters, and make a
+ * smaller replacement if possible. This will preserve as much
+ * metadata as possible.
+ * @param start the beginning index, inclusive; <code>0 &lt;= start
+ * &lt;= limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit
+ * &lt;= length()</code>.
+ * @param text the text to replace characters <code>start</code>
+ * to <code>limit - 1</code>
+ */
+
+public void replace(int start, int limit, java.lang.String text);
+
+/**
+ * Replaces a substring of this object with the given text.
+ *
+ * <p>Subclasses must ensure that if the text between start and
+ * limit is equal to the replacement text, that replace has no
+ * effect. That is, any metadata
+ * should be unaffected. In addition, subclasses are encouraged to
+ * check for initial and trailing identical characters, and make a
+ * smaller replacement if possible. This will preserve as much
+ * metadata as possible.
+ * @param start the beginning index, inclusive; <code>0 &lt;= start
+ * &lt;= limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit
+ * &lt;= length()</code>.
+ * @param chars the text to replace characters <code>start</code>
+ * to <code>limit - 1</code>
+ * @param charsStart the beginning index into <code>chars</code>,
+ * inclusive; <code>0 &lt;= start &lt;= limit</code>.
+ * @param charsLen the number of characters of <code>chars</code>.
+ */
+
+public void replace(int start, int limit, char[] chars, int charsStart, int charsLen);
+
+/**
+ * Copies a substring of this object, retaining metadata.
+ * This method is used to duplicate or reorder substrings.
+ * The destination index must not overlap the source range.
+ * If <code>hasMetaData()</code> returns false, subclasses
+ * may use the naive implementation:
+ *
+ * <pre> char[] text = new char[limit - start];
+ * getChars(start, limit, text, 0);
+ * replace(dest, dest, text, 0, limit - start);</pre>
+ *
+ * @param start the beginning index, inclusive; <code>0 &lt;= start &lt;=
+ * limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit &lt;=
+ * length()</code>.
+ * @param dest the destination index.  The characters from
+ * <code>start..limit-1</code> will be copied to <code>dest</code>.
+ * Implementations of this method may assume that <code>dest &lt;= start ||
+ * dest &gt;= limit</code>.
+ */
+
+public void copy(int start, int limit, int dest);
+
+/**R
+ * Returns true if this object contains metadata.  If a
+ * Replaceable object has metadata, calls to the Replaceable API
+ * must be made so as to preserve metadata.  If it does not, calls
+ * to the Replaceable API may be optimized to improve performance.
+ * @return true if this object contains metadata
+ */
+
+public boolean hasMetaData();
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/RuleBasedCollator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/RuleBasedCollator.java
new file mode 100644
index 0000000..6c4d041
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/RuleBasedCollator.java
@@ -0,0 +1,767 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.ParseException;
+import java.text.CharacterIterator;
+import android.icu.lang.UScript;
+
+/**
+ * <p>
+ * RuleBasedCollator is a concrete subclass of Collator. It allows customization of the Collator via user-specified rule
+ * sets. RuleBasedCollator is designed to be fully compliant to the <a
+ * href="http://www.unicode.org/unicode/reports/tr10/">Unicode Collation Algorithm (UCA)</a> and conforms to ISO 14651.
+ *
+ * <p>A Collator is thread-safe only when frozen. See {{@link #isFrozen()} and {@link android.icu.util.Freezable}.
+ *
+ * <p>
+ * Users are strongly encouraged to read the <a href="https://unicode-org.github.io/icu/userguide/collation">User
+ * Guide</a> for more information about the collation service before using this class.
+ *
+ * <p>
+ * Create a RuleBasedCollator from a locale by calling the getInstance(Locale) factory method in the base class
+ * Collator. Collator.getInstance(Locale) creates a RuleBasedCollator object based on the collation rules defined by the
+ * argument locale. If a customized collation ordering or attributes is required, use the RuleBasedCollator(String)
+ * constructor with the appropriate rules. The customized RuleBasedCollator will base its ordering on the CLDR root collation, while
+ * re-adjusting the attributes and orders of the characters in the specified rule accordingly.
+ *
+ * <p>
+ * RuleBasedCollator provides correct collation orders for most locales supported in ICU. If specific data for a locale
+ * is not available, the orders eventually falls back to the
+ * <a href="http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation">CLDR root sort order</a>.
+ *
+ * <p>
+ * For information about the collation rule syntax and details about customization, please refer to the <a
+ * href="https://unicode-org.github.io/icu/userguide/collation/customization">Collation customization</a>
+ * section of the User Guide.
+ *
+ * <p>
+ * <strong>Note</strong> that there are some differences between the Collation rule syntax used in Java and ICU4J:
+ *
+ * <ul>
+ * <li>According to the JDK documentation: <br>
+ * <i>Modifier '!' : Turns on Thai/Lao vowel-consonant swapping. If this rule is in force when a Thai vowel of the range
+ * &#92;U0E40-&#92;U0E44 precedes a Thai consonant of the range &#92;U0E01-&#92;U0E2E OR a Lao vowel of the range
+ * &#92;U0EC0-&#92;U0EC4 precedes a Lao consonant of the range &#92;U0E81-&#92;U0EAE then the vowel is placed after the
+ * consonant for collation purposes.
+ * <br>
+ * If a rule is without the modifier '!', the Thai/Lao vowel-consonant swapping is not turned on.
+ * </i>
+ * <br>
+ * ICU4J's RuleBasedCollator does not support turning off the Thai/Lao vowel-consonant swapping, since the UCA clearly
+ * states that it has to be supported to ensure a correct sorting order. If a '!' is encountered, it is ignored.</li>
+ * <li>As mentioned in the documentation of the base class Collator, compatibility decomposition mode is not supported.</li>
+ * </ul>
+ * <p>
+ * <strong>Examples</strong>
+ * <p>
+ * Creating Customized RuleBasedCollators: <blockquote>
+ *
+ * <pre>
+ * String simple = "&amp; a &lt; b &lt; c &lt; d";
+ * RuleBasedCollator simpleCollator = new RuleBasedCollator(simple);
+ *
+ * String norwegian = "&amp; a , A &lt; b , B &lt; c , C &lt; d , D &lt; e , E "
+ *                    + "&lt; f , F &lt; g , G &lt; h , H &lt; i , I &lt; j , "
+ *                    + "J &lt; k , K &lt; l , L &lt; m , M &lt; n , N &lt; "
+ *                    + "o , O &lt; p , P &lt; q , Q &lt;r , R &lt;s , S &lt; "
+ *                    + "t , T &lt; u , U &lt; v , V &lt; w , W &lt; x , X "
+ *                    + "&lt; y , Y &lt; z , Z &lt; &#92;u00E5 = a&#92;u030A "
+ *                    + ", &#92;u00C5 = A&#92;u030A ; aa , AA &lt; &#92;u00E6 "
+ *                    + ", &#92;u00C6 &lt; &#92;u00F8 , &#92;u00D8";
+ * RuleBasedCollator norwegianCollator = new RuleBasedCollator(norwegian);
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * Concatenating rules to combine <code>Collator</code>s: <blockquote>
+ *
+ * <pre>
+ * // Create an en_US Collator object
+ * RuleBasedCollator en_USCollator = (RuleBasedCollator)
+ *     Collator.getInstance(new Locale("en", "US", ""));
+ * // Create a da_DK Collator object
+ * RuleBasedCollator da_DKCollator = (RuleBasedCollator)
+ *     Collator.getInstance(new Locale("da", "DK", ""));
+ * // Combine the two
+ * // First, get the collation rules from en_USCollator
+ * String en_USRules = en_USCollator.getRules();
+ * // Second, get the collation rules from da_DKCollator
+ * String da_DKRules = da_DKCollator.getRules();
+ * RuleBasedCollator newCollator =
+ *                             new RuleBasedCollator(en_USRules + da_DKRules);
+ * // newCollator has the combined rules
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * Making changes to an existing RuleBasedCollator to create a new <code>Collator</code> object, by appending changes to
+ * the existing rule: <blockquote>
+ *
+ * <pre>
+ * // Create a new Collator object with additional rules
+ * String addRules = "&amp; C &lt; ch, cH, Ch, CH";
+ * RuleBasedCollator myCollator =
+ *     new RuleBasedCollator(en_USCollator.getRules() + addRules);
+ * // myCollator contains the new rules
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * How to change the order of non-spacing accents: <blockquote>
+ *
+ * <pre>
+ * // old rule with main accents
+ * String oldRules = "= &#92;u0301 ; &#92;u0300 ; &#92;u0302 ; &#92;u0308 "
+ *                 + "; &#92;u0327 ; &#92;u0303 ; &#92;u0304 ; &#92;u0305 "
+ *                 + "; &#92;u0306 ; &#92;u0307 ; &#92;u0309 ; &#92;u030A "
+ *                 + "; &#92;u030B ; &#92;u030C ; &#92;u030D ; &#92;u030E "
+ *                 + "; &#92;u030F ; &#92;u0310 ; &#92;u0311 ; &#92;u0312 "
+ *                 + "&lt; a , A ; ae, AE ; &#92;u00e6 , &#92;u00c6 "
+ *                 + "&lt; b , B &lt; c, C &lt; e, E &amp; C &lt; d , D";
+ * // change the order of accent characters
+ * String addOn = "&amp; &#92;u0300 ; &#92;u0308 ; &#92;u0302";
+ * RuleBasedCollator myCollator = new RuleBasedCollator(oldRules + addOn);
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * Putting in a new primary ordering before the default setting, e.g. sort English characters before or after Japanese
+ * characters in the Japanese <code>Collator</code>: <blockquote>
+ *
+ * <pre>
+ * // get en_US Collator rules
+ * RuleBasedCollator en_USCollator
+ *                        = (RuleBasedCollator)Collator.getInstance(Locale.US);
+ * // add a few Japanese characters to sort before English characters
+ * // suppose the last character before the first base letter 'a' in
+ * // the English collation rule is &#92;u2212
+ * String jaString = "&amp; &#92;u2212 &lt;&#92;u3041, &#92;u3042 &lt;&#92;u3043, "
+ *                   + "&#92;u3044";
+ * RuleBasedCollator myJapaneseCollator
+ *              = new RuleBasedCollator(en_USCollator.getRules() + jaString);
+ * </pre>
+ *
+ * </blockquote>
+ * <p>
+ * This class is not subclassable
+ *
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class RuleBasedCollator extends android.icu.text.Collator {
+
+/**
+ * <p>
+ * Constructor that takes the argument rules for customization.
+ * The collator will be based on the CLDR root collation, with the
+ * attributes and re-ordering of the characters specified in the argument rules.
+ * <p>
+ * See the User Guide's section on <a href="https://unicode-org.github.io/icu/userguide/collation/customization">
+ * Collation Customization</a> for details on the rule syntax.
+ *
+ * @param rules
+ *            the collation rules to build the collation table from.
+ * @exception java.text.ParseException
+ *                and IOException thrown. ParseException thrown when argument rules have an invalid syntax.
+ *                IOException thrown when an error occurred while reading internal data.
+ */
+
+public RuleBasedCollator(java.lang.String rules) throws java.lang.Exception { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clones the RuleBasedCollator
+ *
+ * @return a new instance of this RuleBasedCollator object
+ */
+
+public java.lang.Object clone() throws java.lang.CloneNotSupportedException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a CollationElementIterator for the given String.
+ *
+ * @see android.icu.text.CollationElementIterator
+ */
+
+public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a CollationElementIterator for the given CharacterIterator. The source iterator's integrity will be
+ * preserved since a new copy will be created for use.
+ *
+ * @see android.icu.text.CollationElementIterator
+ */
+
+public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a CollationElementIterator for the given UCharacterIterator. The source iterator's integrity will be
+ * preserved since a new copy will be created for use.
+ *
+ * @see android.icu.text.CollationElementIterator
+ */
+
+public android.icu.text.CollationElementIterator getCollationElementIterator(android.icu.text.UCharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether the object has been frozen or not.
+ *
+ * <p>An unfrozen Collator is mutable and not thread-safe.
+ * A frozen Collator is immutable and thread-safe.
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freezes the collator.
+ * @return the collator itself.
+ */
+
+public android.icu.text.Collator freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides for the clone operation. Any clone is initially unfrozen.
+ */
+
+public android.icu.text.RuleBasedCollator cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether uppercase characters sort before lowercase characters or vice versa, in strength TERTIARY. The
+ * default mode is false, and so lowercase characters sort before uppercase characters. If true, sort upper case
+ * characters first.
+ *
+ * @param upperfirst
+ *            true to sort uppercase characters before lowercase characters, false to sort lowercase characters
+ *            before uppercase characters
+ * @see #isLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setLowerCaseFirst
+ * @see #setCaseFirstDefault
+ */
+
+public void setUpperCaseFirst(boolean upperfirst) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the orders of lower cased characters to sort before upper cased characters, in strength TERTIARY. The
+ * default mode is false. If true is set, the RuleBasedCollator will sort lower cased characters before the upper
+ * cased ones. Otherwise, if false is set, the RuleBasedCollator will ignore case preferences.
+ *
+ * @param lowerfirst
+ *            true for sorting lower cased characters before upper cased characters, false to ignore case
+ *            preferences.
+ * @see #isLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setUpperCaseFirst
+ * @see #setCaseFirstDefault
+ */
+
+public void setLowerCaseFirst(boolean lowerfirst) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the case first mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setUpperCaseFirst(boolean) and setLowerCaseFirst(boolean) for more details.
+ *
+ * @see #isLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setLowerCaseFirst(boolean)
+ * @see #setUpperCaseFirst(boolean)
+ */
+
+public void setCaseFirstDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the alternate handling mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setAlternateHandling(boolean) for more details.
+ *
+ * @see #setAlternateHandlingShifted(boolean)
+ * @see #isAlternateHandlingShifted()
+ */
+
+public void setAlternateHandlingDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the case level mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setCaseLevel(boolean) for more details.
+ *
+ * @see #setCaseLevel(boolean)
+ * @see #isCaseLevel
+ */
+
+public void setCaseLevelDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decomposition mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setDecomposition(int) for more details.
+ *
+ * @see #getDecomposition
+ * @see #setDecomposition(int)
+ */
+
+public void setDecompositionDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the French collation mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setFrenchCollation(boolean) for more details.
+ *
+ * @see #isFrenchCollation
+ * @see #setFrenchCollation(boolean)
+ */
+
+public void setFrenchCollationDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the collation strength to the initial mode set during the construction of the RuleBasedCollator. See
+ * setStrength(int) for more details.
+ *
+ * @see #setStrength(int)
+ * @see #getStrength
+ */
+
+public void setStrengthDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Method to set numeric collation to its default value.
+ *
+ * @see #getNumericCollation
+ * @see #setNumericCollation
+ */
+
+public void setNumericCollationDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the mode for the direction of SECONDARY weights to be used in French collation. The default value is false,
+ * which treats SECONDARY weights in the order they appear. If set to true, the SECONDARY weights will be sorted
+ * backwards. See the section on <a href="https://unicode-org.github.io/icu/userguide/collation/architecture">
+ * French collation</a> for more information.
+ *
+ * @param flag
+ *            true to set the French collation on, false to set it off
+ * @see #isFrenchCollation
+ * @see #setFrenchCollationDefault
+ */
+
+public void setFrenchCollation(boolean flag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the alternate handling for QUATERNARY strength to be either shifted or non-ignorable. See the UCA definition
+ * on <a href="http://www.unicode.org/unicode/reports/tr10/#Variable_Weighting">Variable Weighting</a>. This
+ * attribute will only be effective when QUATERNARY strength is set. The default value for this mode is false,
+ * corresponding to the NON_IGNORABLE mode in UCA. In the NON_IGNORABLE mode, the RuleBasedCollator treats all
+ * the code points with non-ignorable primary weights in the same way. If the mode is set to true, the behavior
+ * corresponds to SHIFTED defined in UCA, this causes code points with PRIMARY orders that are equal or below the
+ * variable top value to be ignored in PRIMARY order and moved to the QUATERNARY order.
+ *
+ * @param shifted
+ *            true if SHIFTED behavior for alternate handling is desired, false for the NON_IGNORABLE behavior.
+ * @see #isAlternateHandlingShifted
+ * @see #setAlternateHandlingDefault
+ */
+
+public void setAlternateHandlingShifted(boolean shifted) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * When case level is set to true, an additional weight is formed between the SECONDARY and TERTIARY weight, known
+ * as the case level. The case level is used to distinguish large and small Japanese Kana characters. Case level
+ * could also be used in other situations. For example to distinguish certain Pinyin characters. The default value
+ * is false, which means the case level is not generated. The contents of the case level are affected by the case
+ * first mode. A simple way to ignore accent differences in a string is to set the strength to PRIMARY and enable
+ * case level.
+ * <p>
+ * See the section on <a href="https://unicode-org.github.io/icu/userguide/collation/architecture">case
+ * level</a> for more information.
+ *
+ * @param flag
+ *            true if case level sorting is required, false otherwise
+ * @see #setCaseLevelDefault
+ * @see #isCaseLevel
+ */
+
+public void setCaseLevel(boolean flag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decomposition mode of this Collator.  Setting this
+ * decomposition attribute with CANONICAL_DECOMPOSITION allows the
+ * Collator to handle un-normalized text properly, producing the
+ * same results as if the text were normalized. If
+ * NO_DECOMPOSITION is set, it is the user's responsibility to
+ * insure that all text is already in the appropriate form before
+ * a comparison or before getting a CollationKey. Adjusting
+ * decomposition mode allows the user to select between faster and
+ * more complete collation behavior.
+ *
+ * <p>Since a great many of the world's languages do not require
+ * text normalization, most locales set NO_DECOMPOSITION as the
+ * default decomposition mode.
+ *
+ * The default decompositon mode for the Collator is
+ * NO_DECOMPOSITON, unless specified otherwise by the locale used
+ * to create the Collator.
+ *
+ * <p>See getDecomposition for a description of decomposition
+ * mode.
+ *
+ * @param decomposition the new decomposition mode
+ * @see #getDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ * @throws java.lang.IllegalArgumentException If the given value is not a valid
+ *            decomposition mode.
+ */
+
+public void setDecomposition(int decomposition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Collator's strength attribute. The strength attribute determines the minimum level of difference
+ * considered significant during comparison.
+ *
+ * <p>See the Collator class description for an example of use.
+ *
+ * @param newStrength
+ *            the new strength value.
+ * @see #getStrength
+ * @see #setStrengthDefault
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ * @exception java.lang.IllegalArgumentException
+ *                If the new strength value is not one of PRIMARY, SECONDARY, TERTIARY, QUATERNARY or IDENTICAL.
+ */
+
+public void setStrength(int newStrength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the variable top to the top of the specified reordering group.
+ * The variable top determines the highest-sorting character
+ * which is affected by the alternate handling behavior.
+ * If that attribute is set to NON_IGNORABLE, then the variable top has no effect.
+ * @param group one of Collator.ReorderCodes.SPACE, Collator.ReorderCodes.PUNCTUATION,
+ *              Collator.ReorderCodes.SYMBOL, Collator.ReorderCodes.CURRENCY;
+ *              or Collator.ReorderCodes.DEFAULT to restore the default max variable group
+ * @return this
+ * @see #getMaxVariable
+ */
+
+public android.icu.text.RuleBasedCollator setMaxVariable(int group) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the maximum reordering group whose characters are affected by
+ * the alternate handling behavior.
+ * @return the maximum variable reordering group.
+ * @see #setMaxVariable
+ */
+
+public int getMaxVariable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> When numeric collation is turned on, this Collator makes
+ * substrings of digits sort according to their numeric values.
+ *
+ * <p>This is a way to get '100' to sort AFTER '2'. Note that the longest
+ * digit substring that can be treated as a single unit is
+ * 254 digits (not counting leading zeros). If a digit substring is
+ * longer than that, the digits beyond the limit will be treated as a
+ * separate digit substring.
+ *
+ * <p>A "digit" in this sense is a code point with General_Category=Nd,
+ * which does not include circled numbers, roman numerals, etc.
+ * Only a contiguous digit substring is considered, that is,
+ * non-negative integers without separators.
+ * There is no support for plus/minus signs, decimals, exponents, etc.
+ *
+ * @param flag
+ *            true to turn numeric collation on and false to turn it off
+ * @see #getNumericCollation
+ * @see #setNumericCollationDefault
+ */
+
+public void setNumericCollation(boolean flag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ *
+ * @param order the reordering codes to apply to this collator; if this is null or an empty array
+ * then this clears any existing reordering
+ * @throws java.lang.IllegalArgumentException if the reordering codes are malformed in any way (e.g. duplicates, multiple reset codes, overlapping equivalent scripts)
+ * @see #getReorderCodes
+ * @see android.icu.text.Collator#getEquivalentReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public void setReorderCodes(int... order) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the collation tailoring rules for this RuleBasedCollator.
+ * Equivalent to String getRules(false).
+ *
+ * <p>On Android, the returned string will be empty unless this instance was
+ * constructed using {@link #RuleBasedCollator(java.lang.String)}.
+ *
+ * @return the collation tailoring rules
+ * @see #getRules(boolean)
+ */
+
+public java.lang.String getRules() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns current rules.
+ * The argument defines whether full rules (root collation + tailored) rules are returned
+ * or just the tailoring.
+ *
+ * <p>The root collation rules are an <i>approximation</i> of the root collator's sort order.
+ * They are almost never used or useful at runtime and can be removed from the data.
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/customization#building-on-existing-locales">User Guide:
+ * Collation Customization, Building on Existing Locales</a>
+ *
+ * <p>{@link #getRules()} should normally be used instead.
+ * @param fullrules
+ *            true if the rules that defines the full set of collation order is required, otherwise false for
+ *            returning only the tailored rules
+ * @return the current rules that defines this Collator.
+ * @see #getRules()
+ */
+
+public java.lang.String getRules(boolean fullrules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a UnicodeSet that contains all the characters and sequences tailored in this collator.
+ *
+ * @return a pointer to a UnicodeSet object containing all the code points and sequences that may sort differently
+ *         than in the root collator.
+ */
+
+public android.icu.text.UnicodeSet getTailoredSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets unicode sets containing contractions and/or expansions of a collator
+ *
+ * @param contractions
+ *            if not null, set to contain contractions
+ * @param expansions
+ *            if not null, set to contain expansions
+ * @param addPrefixes
+ *            add the prefix contextual elements to contractions
+ * @throws java.lang.Exception
+ *             Throws an exception if any errors occurs.
+ */
+
+public void getContractionsAndExpansions(android.icu.text.UnicodeSet contractions, android.icu.text.UnicodeSet expansions, boolean addPrefixes) throws java.lang.Exception { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * Get a Collation key for the argument String source from this RuleBasedCollator.
+ * <p>
+ * General recommendation: <br>
+ * If comparison are to be done to the same String multiple times, it would be more efficient to generate
+ * CollationKeys for the Strings and use CollationKey.compareTo(CollationKey) for the comparisons. If the each
+ * Strings are compared to only once, using the method RuleBasedCollator.compare(String, String) will have a better
+ * performance.
+ * <p>
+ * See the class documentation for an explanation about CollationKeys.
+ *
+ * @param source
+ *            the text String to be transformed into a collation key.
+ * @return the CollationKey for the given String based on this RuleBasedCollator's collation rules. If the source
+ *         String is null, a null CollationKey is returned.
+ * @see android.icu.text.CollationKey
+ * @see #compare(String, String)
+ */
+
+public android.icu.text.CollationKey getCollationKey(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Collator's strength attribute. The strength attribute
+ * determines the minimum level of difference considered significant.
+ *
+ * <p><strong>[icu] Note:</strong> This can return QUATERNARY strength, which is not supported by the
+ * JDK version.
+ *
+ * <p>See the Collator class description for more details.
+ *
+ * @return this Collator's current strength attribute.
+ * @see #setStrength
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ */
+
+public int getStrength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the decomposition mode of this Collator. The decomposition mode
+ * determines how Unicode composed characters are handled.
+ *
+ * <p>See the Collator class description for more details.
+ *
+ * @return the decomposition mode
+ * @see #setDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ */
+
+public int getDecomposition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if an uppercase character is sorted before the corresponding lowercase character. See
+ * setCaseFirst(boolean) for details.
+ *
+ * @see #setUpperCaseFirst
+ * @see #setLowerCaseFirst
+ * @see #isLowerCaseFirst
+ * @see #setCaseFirstDefault
+ * @return true if upper cased characters are sorted before lower cased characters, false otherwise
+ */
+
+public boolean isUpperCaseFirst() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if a lowercase character is sorted before the corresponding uppercase character. See
+ * setCaseFirst(boolean) for details.
+ *
+ * @see #setUpperCaseFirst
+ * @see #setLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setCaseFirstDefault
+ * @return true lower cased characters are sorted before upper cased characters, false otherwise
+ */
+
+public boolean isLowerCaseFirst() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if the alternate handling behavior is the UCA defined SHIFTED or NON_IGNORABLE. If return value is true,
+ * then the alternate handling attribute for the Collator is SHIFTED. Otherwise if return value is false, then the
+ * alternate handling attribute for the Collator is NON_IGNORABLE See setAlternateHandlingShifted(boolean) for more
+ * details.
+ *
+ * @return true or false
+ * @see #setAlternateHandlingShifted(boolean)
+ * @see #setAlternateHandlingDefault
+ */
+
+public boolean isAlternateHandlingShifted() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if case level is set to true. See setCaseLevel(boolean) for details.
+ *
+ * @return the case level mode
+ * @see #setCaseLevelDefault
+ * @see #isCaseLevel
+ * @see #setCaseLevel(boolean)
+ */
+
+public boolean isCaseLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if French Collation is set to true. See setFrenchCollation(boolean) for details.
+ *
+ * @return true if French Collation is set to true, false otherwise
+ * @see #setFrenchCollation(boolean)
+ * @see #setFrenchCollationDefault
+ */
+
+public boolean isFrenchCollation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Gets the variable top value of a Collator.
+ *
+ * @return the variable top primary weight
+ * @see #getMaxVariable
+ */
+
+public int getVariableTop() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Method to retrieve the numeric collation value. When numeric collation is turned on, this Collator generates a
+ * collation key for the numeric value of substrings of digits. This is a way to get '100' to sort AFTER '2'
+ *
+ * @see #setNumericCollation
+ * @see #setNumericCollationDefault
+ * @return true if numeric collation is turned on, false otherwise
+ */
+
+public boolean getNumericCollation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves the reordering codes for this collator.
+ * These reordering codes are a combination of UScript codes and ReorderCodes.
+ * @return a copy of the reordering codes for this collator;
+ * if none are set then returns an empty array
+ * @see #setReorderCodes
+ * @see android.icu.text.Collator#getEquivalentReorderCodes
+ */
+
+public int[] getReorderCodes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generates a unique hash code for this RuleBasedCollator.
+ *
+ * @return the unique hash code for this Collator
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the source text String to the target text String according to the collation rules, strength and
+ * decomposition mode for this RuleBasedCollator. Returns an integer less than, equal to or greater than zero
+ * depending on whether the source String is less than, equal to or greater than the target String. See the Collator
+ * class description for an example of use.
+ * <p>
+ * General recommendation: <br>
+ * If comparison are to be done to the same String multiple times, it would be more efficient to generate
+ * CollationKeys for the Strings and use CollationKey.compareTo(CollationKey) for the comparisons. If speed
+ * performance is critical and object instantiation is to be reduced, further optimization may be achieved by
+ * generating a simpler key of the form RawCollationKey and reusing this RawCollationKey object with the method
+ * RuleBasedCollator.getRawCollationKey. Internal byte representation can be directly accessed via RawCollationKey
+ * and stored for future use. Like CollationKey, RawCollationKey provides a method RawCollationKey.compareTo for key
+ * comparisons. If the each Strings are compared to only once, using the method RuleBasedCollator.compare(String,
+ * String) will have a better performance.
+ *
+ * @param source
+ *            the source text String.
+ * @param target
+ *            the target text String.
+ * @return Returns an integer value. Value is less than zero if source is less than target, value is zero if source
+ *         and target are equal, value is greater than zero if source is greater than target.
+ * @see android.icu.text.CollationKey
+ * @see #getCollationKey
+ */
+
+public int compare(java.lang.String source, java.lang.String target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the version of this collator object.
+ *
+ * @return the version object associated with this collator
+ */
+
+public android.icu.util.VersionInfo getVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the UCA version of this collator object.
+ *
+ * @return the version object associated with this collator
+ */
+
+public android.icu.util.VersionInfo getUCAVersion() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ScientificNumberFormatter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ScientificNumberFormatter.java
new file mode 100644
index 0000000..ce6ac4c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/ScientificNumberFormatter.java
@@ -0,0 +1,91 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2014-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+
+/**
+ *A formatter that formats numbers in user-friendly scientific notation.
+ *
+ * ScientificNumberFormatter instances are immutable and thread-safe.
+ *
+ * Sample code:
+ * <pre>
+ * ULocale en = new ULocale("en");
+ * ScientificNumberFormatter fmt = ScientificNumberFormatter.getMarkupInstance(
+ *         en, "&lt;sup&gt;", "&lt;/sup&gt;");
+ * </pre>
+ * <pre>
+ * // Output: "1.23456?10&lt;sup&gt;-78&lt;/sup&gt;"
+ * System.out.println(fmt.format(1.23456e-78));
+ * </pre>
+ *
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class ScientificNumberFormatter {
+
+private ScientificNumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * superscript characters for exponents for this locale.
+ * @param locale The locale
+ * @return The ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * superscript characters for exponents.
+ * @param df The DecimalFormat must be configured for scientific
+ *   notation. Caller may safely change df after this call as this method
+ *   clones it when creating the ScientificNumberFormatter.
+ * @return the ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.text.DecimalFormat df) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * markup for exponents for this locale.
+ * @param locale The locale
+ * @param beginMarkup the markup to start superscript e.g {@code <sup>}
+ * @param endMarkup the markup to end superscript e.g {@code </sup>}
+ * @return The ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.util.ULocale locale, java.lang.String beginMarkup, java.lang.String endMarkup) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * markup for exponents.
+ * @param df The DecimalFormat must be configured for scientific
+ *   notation. Caller may safely change df after this call as this method
+ *   clones it when creating the ScientificNumberFormatter.
+ * @param beginMarkup the markup to start superscript e.g {@code <sup>}
+ * @param endMarkup the markup to end superscript e.g {@code </sup>}
+ * @return The ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.text.DecimalFormat df, java.lang.String beginMarkup, java.lang.String endMarkup) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a number
+ * @param number Can be a double, int, Number or
+ *  anything that DecimalFormat#format(Object) accepts.
+ * @return the formatted string.
+ */
+
+public java.lang.String format(java.lang.Object number) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SearchIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SearchIterator.java
new file mode 100644
index 0000000..481da3f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SearchIterator.java
@@ -0,0 +1,499 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2015, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.text.CharacterIterator;
+
+/**
+ * <tt>SearchIterator</tt> is an abstract base class that provides
+ * methods to search for a pattern within a text string. Instances of
+ * <tt>SearchIterator</tt> maintain a current position and scan over the
+ * target text, returning the indices the pattern is matched and the length
+ * of each match.
+ * <p>
+ * <tt>SearchIterator</tt> defines a protocol for text searching.
+ * Subclasses provide concrete implementations of various search algorithms.
+ * For example, <tt>StringSearch</tt> implements language-sensitive pattern
+ * matching based on the comparison rules defined in a
+ * <tt>RuleBasedCollator</tt> object.
+ * <p>
+ * Other options for searching include using a BreakIterator to restrict
+ * the points at which matches are detected.
+ * <p>
+ * <tt>SearchIterator</tt> provides an API that is similar to that of
+ * other text iteration classes such as <tt>BreakIterator</tt>. Using
+ * this class, it is easy to scan through text looking for all occurrences of
+ * a given pattern. The following example uses a <tt>StringSearch</tt>
+ * object to find all instances of "fox" in the target string. Any other
+ * subclass of <tt>SearchIterator</tt> can be used in an identical
+ * manner.
+ * <pre><code>
+ * String target = "The quick brown fox jumped over the lazy fox";
+ * String pattern = "fox";
+ * SearchIterator iter = new StringSearch(pattern, target);
+ * for (int pos = iter.first(); pos != SearchIterator.DONE;
+ *         pos = iter.next()) {
+ *     System.out.println("Found match at " + pos +
+ *             ", length is " + iter.getMatchLength());
+ * }
+ * </code></pre>
+ *
+ * @author Laura Werner, synwee
+ * @see android.icu.text.BreakIterator
+ * @see android.icu.text.RuleBasedCollator
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class SearchIterator {
+
+/**
+ * Protected constructor for use by subclasses.
+ * Initializes the iterator with the argument target text for searching
+ * and sets the BreakIterator.
+ * See class documentation for more details on the use of the target text
+ * and {@link android.icu.text.BreakIterator BreakIterator}.
+ *
+ * @param target The target text to be searched.
+ * @param breaker A {@link android.icu.text.BreakIterator BreakIterator} that is used to determine the
+ *                boundaries of a logical match. This argument can be null.
+ * @exception java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0
+ * @see android.icu.text.BreakIterator
+ */
+
+protected SearchIterator(java.text.CharacterIterator target, android.icu.text.BreakIterator breaker) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * Sets the position in the target text at which the next search will start.
+ * This method clears any previous match.
+ * </p>
+ * @param position position from which to start the next search
+ * @exception java.lang.IndexOutOfBoundsException thrown if argument position is out
+ *            of the target text range.
+ * @see #getIndex
+ */
+
+public void setIndex(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether overlapping matches are returned. See the class
+ * documentation for more information about overlapping matches.
+ * <p>
+ * The default setting of this property is false
+ *
+ * @param allowOverlap flag indicator if overlapping matches are allowed
+ * @see #isOverlapping
+ */
+
+public void setOverlapping(boolean allowOverlap) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the BreakIterator that will be used to restrict the points
+ * at which matches are detected.
+ *
+ * @param breakiter A BreakIterator that will be used to restrict the
+ *                points at which matches are detected. If a match is
+ *                found, but the match's start or end index is not a
+ *                boundary as determined by the {@link android.icu.text.BreakIterator BreakIterator},
+ *                the match will be rejected and another will be searched
+ *                for. If this parameter is <tt>null</tt>, no break
+ *                detection is attempted.
+ * @see android.icu.text.BreakIterator
+ */
+
+public void setBreakIterator(android.icu.text.BreakIterator breakiter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the target text to be searched. Text iteration will then begin at
+ * the start of the text string. This method is useful if you want to
+ * reuse an iterator to search within a different body of text.
+ *
+ * @param text new text iterator to look for match,
+ * @exception java.lang.IllegalArgumentException thrown when text is null or has
+ *               0 length
+ * @see #getTarget
+ */
+
+public void setTarget(java.text.CharacterIterator text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index to the match in the text string that was searched.
+ * This call returns a valid result only after a successful call to
+ * {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+ * Just after construction, or after a searching method returns
+ * {@link #DONE}, this method will return {@link #DONE}.
+ * <p>
+ * Use {@link #getMatchLength} to get the matched string length.
+ *
+ * @return index of a substring within the text string that is being
+ *         searched.
+ * @see #first
+ * @see #next
+ * @see #previous
+ * @see #last
+ */
+
+public int getMatchStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the current index in the text being searched.
+ * If the iteration has gone past the end of the text
+ * (or past the beginning for a backwards search), {@link #DONE}
+ * is returned.
+ *
+ * @return current index in the text being searched.
+ */
+
+public abstract int getIndex();
+
+/**
+ * Returns the length of text in the string which matches the search
+ * pattern. This call returns a valid result only after a successful call
+ * to {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+ * Just after construction, or after a searching method returns
+ * {@link #DONE}, this method will return 0.
+ *
+ * @return The length of the match in the target text, or 0 if there
+ *         is no match currently.
+ * @see #first
+ * @see #next
+ * @see #previous
+ * @see #last
+ */
+
+public int getMatchLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the BreakIterator that is used to restrict the indexes at which
+ * matches are detected. This will be the same object that was passed to
+ * the constructor or to {@link #setBreakIterator}.
+ * If the {@link android.icu.text.BreakIterator BreakIterator} has not been set, <tt>null</tt> will be returned.
+ * See {@link #setBreakIterator} for more information.
+ *
+ * @return the BreakIterator set to restrict logic matches
+ * @see #setBreakIterator
+ * @see android.icu.text.BreakIterator
+ */
+
+public android.icu.text.BreakIterator getBreakIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the string text to be searched.
+ * @return text string to be searched.
+ */
+
+public java.text.CharacterIterator getTarget() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the text that was matched by the most recent call to
+ * {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+ * If the iterator is not pointing at a valid match (e.g. just after
+ * construction or after {@link #DONE} has been returned,
+ * returns an empty string.
+ *
+ * @return  the substring in the target test of the most recent match,
+ *          or null if there is no match currently.
+ * @see #first
+ * @see #next
+ * @see #previous
+ * @see #last
+ */
+
+public java.lang.String getMatchedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the next point at which the text matches the
+ * search pattern, starting from the current position
+ * The iterator is adjusted so that its current index (as returned by
+ * {@link #getIndex}) is the match position if one was found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to a position after the end of the text
+ * string.
+ *
+ * @return The index of the next match after the current position,
+ *          or {@link #DONE} if there are no more matches.
+ * @see #getIndex
+ */
+
+public int next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the previous point at which the string text
+ * matches the search pattern, starting at the current position.
+ * The iterator is adjusted so that its current index (as returned by
+ * {@link #getIndex}) is the match position if one was found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to the index {@link #DONE}.
+ *
+ * @return The index of the previous match before the current position,
+ *          or {@link #DONE} if there are no more matches.
+ * @see #getIndex
+ */
+
+public int previous() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the overlapping property has been set.
+ * See {@link #setOverlapping(boolean)} for more information.
+ *
+ * @see #setOverlapping
+ * @return true if the overlapping property has been set, false otherwise
+ */
+
+public boolean isOverlapping() { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Resets the iteration.
+ * Search will begin at the start of the text string if a forward
+ * iteration is initiated before a backwards iteration. Otherwise if a
+ * backwards iteration is initiated before a forwards iteration, the
+ * search will begin at the end of the text string.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first index at which the string text matches the search
+ * pattern. The iterator is adjusted so that its current index (as
+ * returned by {@link #getIndex()}) is the match position if one
+ *
+ * was found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to the index {@link #DONE}.
+ * @return The character index of the first match, or
+ *         {@link #DONE} if there are no matches.
+ *
+ * @see #getIndex
+ */
+
+public final int first() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first index equal or greater than <tt>position</tt> at which the
+ * string text matches the search pattern. The iterator is adjusted so
+ * that its current index (as returned by {@link #getIndex()}) is the
+ * match position if one was found.
+ * If a match is not found, {@link #DONE} will be returned and the
+ * iterator will be adjusted to the index {@link #DONE}.
+ *
+ * @param  position where search if to start from.
+ * @return The character index of the first match following
+ *         <tt>position</tt>, or {@link #DONE} if there are no matches.
+ * @throws java.lang.IndexOutOfBoundsException    If position is less than or greater
+ *      than the text range for searching.
+ * @see #getIndex
+ */
+
+public final int following(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the last index in the target text at which it matches the
+ * search pattern. The iterator is adjusted so that its current index
+ * (as returned by {@link #getIndex}) is the match position if one was
+ * found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to the index {@link #DONE}.
+ *
+ * @return The index of the first match, or {@link #DONE} if
+ *         there are no matches.
+ * @see #getIndex
+ */
+
+public final int last() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first index less than <tt>position</tt> at which the string
+ * text matches the search pattern. The iterator is adjusted so that its
+ * current index (as returned by {@link #getIndex}) is the match
+ * position if one was found. If a match is not found,
+ * {@link #DONE} will be returned and the iterator will be
+ * adjusted to the index {@link #DONE}
+ * <p>
+ * When the overlapping option ({@link #isOverlapping}) is off, the last index of the
+ * result match is always less than <tt>position</tt>.
+ * When the overlapping option is on, the result match may span across
+ * <tt>position</tt>.
+ *
+ * @param  position where search is to start from.
+ * @return The character index of the first match preceding
+ *         <tt>position</tt>, or {@link #DONE} if there are
+ *         no matches.
+ * @throws java.lang.IndexOutOfBoundsException If position is less than or greater than
+ *                                   the text range for searching
+ * @see #getIndex
+ */
+
+public final int preceding(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the length of the most recent match in the target text.
+ * Subclasses' handleNext() and handlePrevious() methods should call this
+ * after they find a match in the target text.
+ *
+ * @param length new length to set
+ * @see #handleNext
+ * @see #handlePrevious
+ */
+
+protected void setMatchLength(int length) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Abstract method which subclasses override to provide the mechanism
+ * for finding the next match in the target text. This allows different
+ * subclasses to provide different search algorithms.
+ * <p>
+ * If a match is found, the implementation should return the index at
+ * which the match starts and should call
+ * {@link #setMatchLength} with the number of characters
+ * in the target text that make up the match. If no match is found, the
+ * method should return {@link #DONE}.
+ *
+ * @param start The index in the target text at which the search
+ *              should start.
+ * @return index at which the match starts, else if match is not found
+ *         {@link #DONE} is returned
+ * @see #setMatchLength
+ */
+
+protected abstract int handleNext(int start);
+
+/**
+ * Abstract method which subclasses override to provide the mechanism for
+ * finding the previous match in the target text. This allows different
+ * subclasses to provide different search algorithms.
+ * <p>
+ * If a match is found, the implementation should return the index at
+ * which the match starts and should call
+ * {@link #setMatchLength} with the number of characters
+ * in the target text that make up the match. If no match is found, the
+ * method should return {@link #DONE}.
+ *
+ * @param startAt   The index in the target text at which the search
+ *                  should start.
+ * @return index at which the match starts, else if match is not found
+ *         {@link #DONE} is returned
+ * @see #setMatchLength
+ */
+
+protected abstract int handlePrevious(int startAt);
+
+/**
+ * Sets the collation element comparison type.
+ * <p>
+ * The default comparison type is {@link android.icu.text.SearchIterator.ElementComparisonType#STANDARD_ELEMENT_COMPARISON ElementComparisonType#STANDARD_ELEMENT_COMPARISON}.
+ *
+ * @see android.icu.text.SearchIterator.ElementComparisonType
+ * @see #getElementComparisonType()
+ */
+
+public void setElementComparisonType(android.icu.text.SearchIterator.ElementComparisonType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the collation element comparison type.
+ *
+ * @see android.icu.text.SearchIterator.ElementComparisonType
+ * @see #setElementComparisonType(ElementComparisonType)
+ */
+
+public android.icu.text.SearchIterator.ElementComparisonType getElementComparisonType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * DONE is returned by previous() and next() after all valid matches have
+ * been returned, and by first() and last() if there are no matches at all.
+ * @see #previous
+ * @see #next
+ */
+
+public static final int DONE = -1; // 0xffffffff
+
+/**
+ * The BreakIterator to define the boundaries of a logical match.
+ * This value can be a null.
+ * See class documentation for more information.
+ * @see #setBreakIterator(BreakIterator)
+ * @see #getBreakIterator
+ * @see android.icu.text.BreakIterator
+ */
+
+protected android.icu.text.BreakIterator breakIterator;
+
+/**
+ * Length of the most current match in target text.
+ * Value 0 is the default value.
+ * @see #setMatchLength
+ * @see #getMatchLength
+ */
+
+protected int matchLength;
+
+/**
+ * Target text for searching.
+ * @see #setTarget(CharacterIterator)
+ * @see #getTarget
+ */
+
+protected java.text.CharacterIterator targetText;
+/**
+ * Option to control how collation elements are compared.
+ * The default value will be {@link #STANDARD_ELEMENT_COMPARISON}.
+ * <p>
+ * PATTERN_BASE_WEIGHT_IS_WILDCARD supports "asymmetric search" as described in
+ * <a href="http://www.unicode.org/reports/tr10/#Asymmetric_Search">
+ * UTS #10 Unicode Collation Algorithm</a>, while ANY_BASE_WEIGHT_IS_WILDCARD
+ * supports a related option in which "unmarked" characters in either the
+ * pattern or the searched text are treated as wildcards that match marked or
+ * unmarked versions of the same character.
+ *
+ * @see #setElementComparisonType(ElementComparisonType)
+ * @see #getElementComparisonType()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ElementComparisonType {
+/**
+ * Standard collation element comparison at the specified collator strength.
+ */
+
+STANDARD_ELEMENT_COMPARISON,
+/**
+ * Collation element comparison is modified to effectively provide behavior
+ * between the specified strength and strength - 1.
+ * <p>
+ * Collation elements in the pattern that have the base weight for the specified
+ * strength are treated as "wildcards" that match an element with any other
+ * weight at that collation level in the searched text. For example, with a
+ * secondary-strength English collator, a plain 'e' in the pattern will match
+ * a plain e or an e with any diacritic in the searched text, but an e with
+ * diacritic in the pattern will only match an e with the same diacritic in
+ * the searched text.
+ */
+
+PATTERN_BASE_WEIGHT_IS_WILDCARD,
+/**
+ * Collation element comparison is modified to effectively provide behavior
+ * between the specified strength and strength - 1.
+ * <p>
+ * Collation elements in either the pattern or the searched text that have the
+ * base weight for the specified strength are treated as "wildcards" that match
+ * an element with any other weight at that collation level. For example, with
+ * a secondary-strength English collator, a plain 'e' in the pattern will match
+ * a plain e or an e with any diacritic in the searched text, but an e with
+ * diacritic in the pattern will only match an e with the same diacritic or a
+ * plain e in the searched text.
+ */
+
+ANY_BASE_WEIGHT_IS_WILDCARD;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SelectFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SelectFormat.java
new file mode 100644
index 0000000..dae53f3
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SelectFormat.java
@@ -0,0 +1,228 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2004-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ * Copyright (C) 2009 , Yahoo! Inc.                                            *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <p><code>SelectFormat</code> supports the creation of  internationalized
+ * messages by selecting phrases based on keywords. The pattern  specifies
+ * how to map keywords to phrases and provides a default phrase. The
+ * object provided to the format method is a string that's matched
+ * against the keywords. If there is a match, the corresponding phrase
+ * is selected; otherwise, the default phrase is used.
+ *
+ * <h3>Using <code>SelectFormat</code> for Gender Agreement</h3>
+ *
+ * <p>Note: Typically, select formatting is done via <code>MessageFormat</code>
+ * with a <code>select</code> argument type,
+ * rather than using a stand-alone <code>SelectFormat</code>.
+ *
+ * <p>The main use case for the select format is gender based  inflection.
+ * When names or nouns are inserted into sentences, their gender can  affect pronouns,
+ * verb forms, articles, and adjectives. Special care needs to be
+ * taken for the case where the gender cannot be determined.
+ * The impact varies between languages:
+ *
+ * <ul>
+ * <li>English has three genders, and unknown gender is handled as a  special
+ * case. Names use the gender of the named person (if known), nouns  referring
+ * to people use natural gender, and inanimate objects are usually  neutral.
+ * The gender only affects pronouns: "he", "she", "it", "they".
+ *
+ * <li>German differs from English in that the gender of nouns is  rather
+ * arbitrary, even for nouns referring to people ("M&#xE4;dchen", girl, is  neutral).
+ * The gender affects pronouns ("er", "sie", "es"), articles ("der",  "die",
+ * "das"), and adjective forms ("guter Mann", "gute Frau", "gutes  M&#xE4;dchen").
+ *
+ * <li>French has only two genders; as in German the gender of nouns
+ * is rather arbitrary - for sun and moon, the genders
+ * are the opposite of those in German. The gender affects
+ * pronouns ("il", "elle"), articles ("le", "la"),
+ * adjective forms ("bon", "bonne"), and sometimes
+ * verb forms ("all&#xE9;", "all&#xE9;e").
+ *
+ * <li>Polish distinguishes five genders (or noun classes),
+ * human masculine, animate non-human masculine, inanimate masculine,
+ * feminine, and neuter.
+ * </ul>
+ *
+ * <p>Some other languages have noun classes that are not related to  gender,
+ * but similar in grammatical use.
+ * Some African languages have around 20 noun classes.
+ *
+ * <p><b>Note:</b>For the gender of a <i>person</i> in a given sentence,
+ * we usually need to distinguish only between female, male and other/unknown.
+ *
+ * <p>To enable localizers to create sentence patterns that take their
+ * language's gender dependencies into consideration, software has to  provide
+ * information about the gender associated with a noun or name to
+ * <code>MessageFormat</code>.
+ * Two main cases can be distinguished:
+ *
+ * <ul>
+ * <li>For people, natural gender information should be maintained  for each person.
+ * Keywords like "male", "female", "mixed" (for groups of people)
+ * and "unknown" could be used.
+ *
+ * <li>For nouns, grammatical gender information should be maintained  for
+ * each noun and per language, e.g., in resource bundles.
+ * The keywords "masculine", "feminine", and "neuter" are commonly  used,
+ * but some languages may require other keywords.
+ * </ul>
+ *
+ * <p>The resulting keyword is provided to <code>MessageFormat</code>  as a
+ * parameter separate from the name or noun it's associated with. For  example,
+ * to generate a message such as "Jean went to Paris", three separate  arguments
+ * would be provided: The name of the person as argument 0, the  gender of
+ * the person as argument 1, and the name of the city as argument 2.
+ * The sentence pattern for English, where the gender of the person has
+ * no impact on this simple sentence, would not refer to argument 1  at all:
+ *
+ * <pre>{0} went to {2}.</pre>
+ *
+ * <p><b>Note:</b> The entire sentence should be included (and partially repeated)
+ * inside each phrase. Otherwise translators would have to be trained on how to
+ * move bits of the sentence in and out of the select argument of a message.
+ * (The examples below do not follow this recommendation!)
+ *
+ * <p>The sentence pattern for French, where the gender of the person affects
+ * the form of the participle, uses a select format based on argument 1:
+ *
+ * <pre>{0} est {1, select, female {all&#xE9;e} other {all&#xE9;}} &#xE0; {2}.</pre>
+ *
+ * <p>Patterns can be nested, so that it's possible to handle  interactions of
+ * number and gender where necessary. For example, if the above  sentence should
+ * allow for the names of several people to be inserted, the  following sentence
+ * pattern can be used (with argument 0 the list of people's names,
+ * argument 1 the number of people, argument 2 their combined gender, and
+ * argument 3 the city name):
+ *
+ * <pre>{0} {1, plural,
+ * one {est {2, select, female {all&#xE9;e} other  {all&#xE9;}}}
+ * other {sont {2, select, female {all&#xE9;es} other {all&#xE9;s}}}
+ * }&#xE0; {3}.</pre>
+ *
+ * <h4>Patterns and Their Interpretation</h4>
+ *
+ * <p>The <code>SelectFormat</code> pattern string defines the phrase  output
+ * for each user-defined keyword.
+ * The pattern is a sequence of (keyword, message) pairs.
+ * A keyword is a "pattern identifier": [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
+ *
+ * <p>Each message is a MessageFormat pattern string enclosed in {curly braces}.
+ *
+ * <p>You always have to define a phrase for the default keyword
+ * <code>other</code>; this phrase is returned when the keyword
+ * provided to
+ * the <code>format</code> method matches no other keyword.
+ * If a pattern does not provide a phrase for <code>other</code>, the  method
+ * it's provided to returns the error  <code>U_DEFAULT_KEYWORD_MISSING</code>.
+ * <br>
+ * Pattern_White_Space between keywords and messages is ignored.
+ * Pattern_White_Space within a message is preserved and output.
+ *
+ * <pre>Example:
+ * MessageFormat msgFmt = new MessageFormat("{0} est " +
+ *     "{1, select, female {all&#xE9;e} other {all&#xE9;}} &#xE0; Paris.",
+ *     new ULocale("fr"));
+ * Object args[] = {"Kirti","female"};
+ * System.out.println(msgFmt.format(args));
+ * </pre>
+ * <p>
+ * Produces the output:<br>
+ * <code>Kirti est all&#xE9;e &#xE0; Paris.</code>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class SelectFormat extends java.text.Format {
+
+/**
+ * Creates a new <code>SelectFormat</code> for a given pattern string.
+ * @param  pattern the pattern for this <code>SelectFormat</code>.
+ */
+
+public SelectFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the pattern used by this select format.
+ * Patterns and their interpretation are specified in the class description.
+ *
+ * @param pattern the pattern for this select format.
+ * @throws java.lang.IllegalArgumentException when the pattern is not a valid select format pattern.
+ */
+
+public void applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for this <code>SelectFormat</code>
+ *
+ * @return the pattern string
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Selects the phrase for the given keyword.
+ *
+ * @param keyword a phrase selection keyword.
+ * @return the string containing the formatted select message.
+ * @throws java.lang.IllegalArgumentException when the given keyword is not a "pattern identifier"
+ */
+
+public final java.lang.String format(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Selects the phrase for the given keyword.
+ * and appends the formatted message to the given <code>StringBuffer</code>.
+ * @param keyword a phrase selection keyword.
+ * @param toAppendTo the selected phrase will be appended to this
+ *        <code>StringBuffer</code>.
+ * @param pos will be ignored by this method.
+ * @throws java.lang.IllegalArgumentException when the given keyword is not a String
+ *         or not a "pattern identifier"
+ * @return the string buffer passed in as toAppendTo, with formatted text
+ *         appended.
+ */
+
+public java.lang.StringBuffer format(java.lang.Object keyword, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method is not supported by <code>SelectFormat</code>.
+ * @param source the string to be parsed.
+ * @param pos defines the position where parsing is to begin,
+ * and upon return, the position where parsing left off.  If the position
+ * has not changed upon return, then parsing failed.
+ * @return nothing because this method is not supported.
+ * @throws java.lang.UnsupportedOperationException thrown always.
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SimpleDateFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SimpleDateFormat.java
new file mode 100644
index 0000000..36d964c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SimpleDateFormat.java
@@ -0,0 +1,1028 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.lang.UCharacter;
+import android.icu.util.Calendar;
+import java.util.Date;
+import android.icu.util.TimeZone;
+import java.text.Format;
+import java.text.ParsePosition;
+import android.icu.util.ULocale.Category;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.SimpleDateFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>SimpleDateFormat</code> is a concrete class for formatting and
+ * parsing dates in a locale-sensitive manner. It allows for formatting
+ * (date -&gt; text), parsing (text -&gt; date), and normalization.
+ *
+ * <p>
+ * <code>SimpleDateFormat</code> allows you to start by choosing
+ * any user-defined patterns for date-time formatting. However, you
+ * are encouraged to create a date-time formatter with either
+ * <code>getTimeInstance</code>, <code>getDateInstance</code>, or
+ * <code>getDateTimeInstance</code> in <code>DateFormat</code>. Each
+ * of these class methods can return a date/time formatter initialized
+ * with a default format pattern. You may modify the format pattern
+ * using the <code>applyPattern</code> methods as desired.
+ * For more information on using these methods, see
+ * {@link android.icu.text.DateFormat DateFormat}.
+ *
+ * <p><strong>Date and Time Patterns:</strong></p>
+ *
+ * <p>Date and time formats are specified by <em>date and time pattern</em> strings.
+ * Within date and time pattern strings, all unquoted ASCII letters [A-Za-z] are reserved
+ * as pattern letters representing calendar fields. <code>SimpleDateFormat</code> supports
+ * the date and time formatting algorithm and pattern letters defined by <a href="http://www.unicode.org/reports/tr35/">UTS#35
+ * Unicode Locale Data Markup Language (LDML)</a>. The following pattern letters are
+ * currently available (note that the actual values depend on CLDR and may change from the
+ * examples shown here):</p>
+ * <blockquote>
+ * <table border="1">
+ *     <tr>
+ *         <th>Field</th>
+ *         <th style="text-align: center">Sym.</th>
+ *         <th style="text-align: center">No.</th>
+ *         <th>Example</th>
+ *         <th>Description</th>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="3">era</th>
+ *         <td style="text-align: center" rowspan="3">G</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>AD</td>
+ *         <td rowspan="3">Era - Replaced with the Era string for the current date. One to three letters for the
+ *         abbreviated form, four letters for the long (wide) form, five for the narrow form.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Anno Domini</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>A</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="6">year</th>
+ *         <td style="text-align: center">y</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>1996</td>
+ *         <td>Year. Normally the length specifies the padding, but for two letters it also specifies the maximum
+ *         length. Example:<div style="text-align: center">
+ *             <center>
+ *             <table border="1" cellpadding="2" cellspacing="0">
+ *                 <tr>
+ *                     <th>Year</th>
+ *                     <th style="text-align: right">y</th>
+ *                     <th style="text-align: right">yy</th>
+ *                     <th style="text-align: right">yyy</th>
+ *                     <th style="text-align: right">yyyy</th>
+ *                     <th style="text-align: right">yyyyy</th>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 1</td>
+ *                     <td style="text-align: right">1</td>
+ *                     <td style="text-align: right">01</td>
+ *                     <td style="text-align: right">001</td>
+ *                     <td style="text-align: right">0001</td>
+ *                     <td style="text-align: right">00001</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 12</td>
+ *                     <td style="text-align: right">12</td>
+ *                     <td style="text-align: right">12</td>
+ *                     <td style="text-align: right">012</td>
+ *                     <td style="text-align: right">0012</td>
+ *                     <td style="text-align: right">00012</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 123</td>
+ *                     <td style="text-align: right">123</td>
+ *                     <td style="text-align: right">23</td>
+ *                     <td style="text-align: right">123</td>
+ *                     <td style="text-align: right">0123</td>
+ *                     <td style="text-align: right">00123</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 1234</td>
+ *                     <td style="text-align: right">1234</td>
+ *                     <td style="text-align: right">34</td>
+ *                     <td style="text-align: right">1234</td>
+ *                     <td style="text-align: right">1234</td>
+ *                     <td style="text-align: right">01234</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 12345</td>
+ *                     <td style="text-align: right">12345</td>
+ *                     <td style="text-align: right">45</td>
+ *                     <td style="text-align: right">12345</td>
+ *                     <td style="text-align: right">12345</td>
+ *                     <td style="text-align: right">12345</td>
+ *                 </tr>
+ *             </table>
+ *             </center></div>
+ *         </td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">Y</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>1997</td>
+ *         <td>Year (in "Week of Year" based calendars). Normally the length specifies the padding,
+ *         but for two letters it also specifies the maximum length. This year designation is used in ISO
+ *         year-week calendar as defined by ISO 8601, but can be used in non-Gregorian based calendar systems
+ *         where week date processing is desired. May not always be the same value as calendar year.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">u</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>4601</td>
+ *         <td>Extended year. This is a single number designating the year of this calendar system, encompassing
+ *         all supra-year fields. For example, for the Julian calendar system, year numbers are positive, with an
+ *         era of BCE or CE. An extended year value for the Julian calendar system assigns positive values to CE
+ *         years and negative values to BCE years, with 1 BCE being year 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center" rowspan="3">U</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>??</td>
+ *         <td rowspan="3">Cyclic year name. Calendars such as the Chinese lunar calendar (and related calendars)
+ *         and the Hindu calendars use 60-year cycles of year names. Use one through three letters for the abbreviated
+ *         name, four for the full (wide) name, or five for the narrow name (currently the data only provides abbreviated names,
+ *         which will be used for all requested name widths). If the calendar does not provide cyclic year name data,
+ *         or if the year value to be formatted is out of the range of years for which cyclic name data is provided,
+ *         then numeric formatting is used (behaves like 'y').</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>(currently also ??)</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>(currently also ??)</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="6">quarter</th>
+ *         <td rowspan="3" style="text-align: center">Q</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>02</td>
+ *         <td rowspan="3">Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four
+ *         for the full (wide) name (five for the narrow name is not yet supported).</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Q2</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>2nd quarter</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="3" style="text-align: center">q</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>02</td>
+ *         <td rowspan="3"><b>Stand-Alone</b> Quarter - Use one or two for the numerical quarter, three for the abbreviation,
+ *         or four for the full name (five for the narrow name is not yet supported).</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Q2</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>2nd quarter</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="8">month</th>
+ *         <td rowspan="4" style="text-align: center">M</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>09</td>
+ *         <td rowspan="4">Month - Use one or two for the numerical month, three for the abbreviation, four for
+ *         the full (wide) name, or five for the narrow name. With two ("MM"), the month number is zero-padded
+ *         if necessary (e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Sep</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>September</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>S</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="4" style="text-align: center">L</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>09</td>
+ *         <td rowspan="4"><b>Stand-Alone</b> Month - Use one or two for the numerical month, three for the abbreviation,
+ *         four for the full (wide) name, or 5 for the narrow name. With two ("LL"), the month number is zero-padded if
+ *         necessary (e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Sep</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>September</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>S</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="2">week</th>
+ *         <td style="text-align: center">w</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>27</td>
+ *         <td>Week of Year. Use "w" to show the minimum number of digits, or "ww" to always show two digits
+ *         (zero-padding if necessary, e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">W</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>3</td>
+ *         <td>Week of Month</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="4">day</th>
+ *         <td style="text-align: center">d</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>1</td>
+ *         <td>Date - Day of the month. Use "d" to show the minimum number of digits, or "dd" to always show
+ *         two digits (zero-padding if necessary, e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">D</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>345</td>
+ *         <td>Day of year</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">F</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>2</td>
+ *         <td>Day of Week in Month. The example is for the 2nd Wed in July</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">g</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>2451334</td>
+ *         <td>Modified Julian day. This is different from the conventional Julian day number in two regards.
+ *         First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number;
+ *         that is, it depends on the local time zone. It can be thought of as a single number that encompasses
+ *         all the date-related fields.</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="14">week<br>
+ *         day</th>
+ *         <td rowspan="4" style="text-align: center">E</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>Tue</td>
+ *         <td rowspan="4">Day of week - Use one through three letters for the short day, four for the full (wide) name,
+ *         five for the narrow name, or six for the short name.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Tuesday</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>T</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">6</td>
+ *         <td>Tu</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">e</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>2</td>
+ *         <td rowspan="5">Local day of week. Same as E except adds a numeric value that will depend on the local
+ *         starting day of the week, using one or two letters. For this example, Monday is the first day of the week.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Tue</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Tuesday</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>T</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">6</td>
+ *         <td>Tu</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">c</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>2</td>
+ *         <td rowspan="5"><b>Stand-Alone</b> local day of week - Use one letter for the local numeric value (same
+ *         as 'e'), three for the short day, four for the full (wide) name, five for the narrow name, or six for
+ *         the short name.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Tue</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Tuesday</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>T</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">6</td>
+ *         <td>Tu</td>
+ *     </tr>
+ *     <tr>
+ *         <th>period</th>
+ *         <td style="text-align: center">a</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>AM</td>
+ *         <td>AM or PM</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="4">hour</th>
+ *         <td style="text-align: center">h</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>11</td>
+ *         <td>Hour [1-12]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern
+ *         generation, it should match the 12-hour-cycle format preferred by the locale (h or K); it should not match
+ *         a 24-hour-cycle format (H or k). Use hh for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">H</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>13</td>
+ *         <td>Hour [0-23]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern
+ *         generation, it should match the 24-hour-cycle format preferred by the locale (H or k); it should not match a
+ *         12-hour-cycle format (h or K). Use HH for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">K</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>0</td>
+ *         <td>Hour [0-11]. When used in a skeleton, only matches K or h, see above. Use KK for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">k</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>24</td>
+ *         <td>Hour [1-24]. When used in a skeleton, only matches k or H, see above. Use kk for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <th>minute</th>
+ *         <td style="text-align: center">m</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>59</td>
+ *         <td>Minute. Use "m" to show the minimum number of digits, or "mm" to always show two digits
+ *         (zero-padding if necessary, e.g. "08")..</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="3">second</th>
+ *         <td style="text-align: center">s</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>12</td>
+ *         <td>Second. Use "s" to show the minimum number of digits, or "ss" to always show two digits
+ *         (zero-padding if necessary, e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">S</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>3450</td>
+ *         <td>Fractional Second - truncates (like other time fields) to the count of letters when formatting. Appends zeros if more than 3 letters specified. Truncates at three significant digits when parsing.
+ *         (example shows display using pattern SSSS for seconds value 12.34567)</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">A</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>69540000</td>
+ *         <td>Milliseconds in day. This field behaves <i>exactly</i> like a composite of all time-related fields,
+ *         not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition
+ *         days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This
+ *         reflects the fact that is must be combined with the offset field to obtain a unique local time value.</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="23">zone</th>
+ *         <td rowspan="2" style="text-align: center">z</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>PDT</td>
+ *         <td>The <i>short specific non-location format</i>.
+ *         Where that is unavailable, falls back to the <i>short localized GMT format</i> ("O").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Pacific Daylight Time</td>
+ *         <td>The <i>long specific non-location format</i>.
+ *         Where that is unavailable, falls back to the <i>long localized GMT format</i> ("OOOO").</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="3" style="text-align: center">Z</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>-0800</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
+ *         The format is equivalent to RFC 822 zone format (when optional seconds field is absent).
+ *         This is equivalent to the "xxxx" specifier.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>GMT-8:00</td>
+ *         <td>The <i>long localized GMT format</i>.
+ *         This is equivalent to the "OOOO" specifier.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>-08:00<br>
+ *         -07:52:58</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.
+ *         This is equivalent to the "XXXXX" specifier.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="2" style="text-align: center">O</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>GMT-8</td>
+ *         <td>The <i>short localized GMT format</i>.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>GMT-08:00</td>
+ *         <td>The <i>long localized GMT format</i>.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="2" style="text-align: center">v</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>PT</td>
+ *         <td>The <i>short generic non-location format</i>.
+ *         Where that is unavailable, falls back to the <i>generic location format</i> ("VVVV"),
+ *         then the <i>short localized GMT format</i> as the final fallback.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Pacific Time</td>
+ *         <td>The <i>long generic non-location format</i>.
+ *         Where that is unavailable, falls back to <i>generic location format</i> ("VVVV").
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="4" style="text-align: center">V</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>uslax</td>
+ *         <td>The short time zone ID.
+ *         Where that is unavailable, the special short time zone ID <i>unk</i> (Unknown Zone) is used.<br>
+ *         <i><b>Note</b>: This specifier was originally used for a variant of the short specific non-location format,
+ *         but it was deprecated in the later version of the LDML specification. In CLDR 23/ICU 51, the definition of
+ *         the specifier was changed to designate a short time zone ID.</i></td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">2</td>
+ *         <td>America/Los_Angeles</td>
+ *         <td>The long time zone ID.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Los Angeles</td>
+ *         <td>The exemplar city (location) for the time zone.
+ *         Where that is unavailable, the localized exemplar city name for the special zone <i>Etc/Unknown</i> is used
+ *         as the fallback (for example, "Unknown City"). </td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Los Angeles Time</td>
+ *         <td>The <i>generic location format</i>.
+ *         Where that is unavailable, falls back to the <i>long localized GMT format</i> ("OOOO";
+ *         Note: Fallback is only necessary with a GMT-style Time Zone ID, like Etc/GMT-830.)<br>
+ *         This is especially useful when presenting possible timezone choices for user selection,
+ *         since the naming is more uniform than the "v" format.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">X</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>-08<br>
+ *         +0530<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours field and optional minutes field.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">2</td>
+ *         <td>-0800<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours and minutes fields.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>-08:00<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours and minutes fields.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>-0800<br>
+ *         -075258<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>-08:00<br>
+ *         -07:52:58<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">x</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>-08<br>
+ *         +0530</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours field and optional minutes field.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">2</td>
+ *         <td>-0800</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours and minutes fields.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>-08:00</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours and minutes fields.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>-0800<br>
+ *         -075258</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>-08:00<br>
+ *         -07:52:58</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)</td>
+ *     </tr>
+ * </table>
+ *
+ * </blockquote>
+ * <p>
+ * Any characters in the pattern that are not in the ranges of ['a'..'z']
+ * and ['A'..'Z'] will be treated as quoted text. For instance, characters
+ * like ':', '.', ' ', '#' and '@' will appear in the resulting time text
+ * even they are not embraced within single quotes.
+ * <p>
+ * A pattern containing any invalid pattern letter will result in a thrown
+ * exception during formatting or parsing.
+ *
+ * <p>
+ * <strong>Examples Using the US Locale:</strong>
+ * <blockquote>
+ * <pre>
+ * Format Pattern                         Result
+ * --------------                         -------
+ * "yyyy.MM.dd G 'at' HH:mm:ss vvvv" -&gt;&gt;  1996.07.10 AD at 15:08:56 Pacific Time
+ * "EEE, MMM d, ''yy"                -&gt;&gt;  Wed, July 10, '96
+ * "h:mm a"                          -&gt;&gt;  12:08 PM
+ * "hh 'o''clock' a, zzzz"           -&gt;&gt;  12 o'clock PM, Pacific Daylight Time
+ * "K:mm a, vvv"                     -&gt;&gt;  0:00 PM, PT
+ * "yyyyy.MMMMM.dd GGG hh:mm aaa"    -&gt;&gt;  01996.July.10 AD 12:08 PM
+ * </pre>
+ * </blockquote>
+ * <strong>Code Sample:</strong>
+ * <blockquote>
+ * <pre>
+ * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST");
+ * pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2*60*60*1000);
+ * pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*60*60*1000);
+ * <br>
+ * // Format the current time.
+ * SimpleDateFormat formatter
+ *     = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz");
+ * Date currentTime_1 = new Date();
+ * String dateString = formatter.format(currentTime_1);
+ * <br>
+ * // Parse the previous string back into a Date.
+ * ParsePosition pos = new ParsePosition(0);
+ * Date currentTime_2 = formatter.parse(dateString, pos);
+ * </pre>
+ * </blockquote>
+ * In the example, the time value <code>currentTime_2</code> obtained from
+ * parsing will be equal to <code>currentTime_1</code>. However, they may not be
+ * equal if the am/pm marker 'a' is left out from the format pattern while
+ * the "hour in am/pm" pattern symbol is used. This information loss can
+ * happen when formatting the time in PM.
+ *
+ * <p>When parsing a date string using the abbreviated year pattern ("yy"),
+ * SimpleDateFormat must interpret the abbreviated year
+ * relative to some century.  It does this by adjusting dates to be
+ * within 80 years before and 20 years after the time the SimpleDateFormat
+ * instance is created. For example, using a pattern of "MM/dd/yy" and a
+ * SimpleDateFormat instance created on Jan 1, 1997,  the string
+ * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64"
+ * would be interpreted as May 4, 1964.
+ * During parsing, only strings consisting of exactly two digits, as defined by
+ * {@link android.icu.lang.UCharacter#isDigit(int)}, will be parsed into the default
+ * century.
+ * Any other numeric string, such as a one digit string, a three or more digit
+ * string, or a two digit string that isn't all digits (for example, "-1"), is
+ * interpreted literally.  So "01/02/3" or "01/02/003" are parsed, using the
+ * same pattern, as Jan 2, 3 AD.  Likewise, "01/02/-3" is parsed as Jan 2, 4 BC.
+ *
+ * <p>If the year pattern does not have exactly two 'y' characters, the year is
+ * interpreted literally, regardless of the number of digits.  So using the
+ * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
+ *
+ * <p>When numeric fields abut one another directly, with no intervening delimiter
+ * characters, they constitute a run of abutting numeric fields.  Such runs are
+ * parsed specially.  For example, the format "HHmmss" parses the input text
+ * "123456" to 12:34:56, parses the input text "12345" to 1:23:45, and fails to
+ * parse "1234".  In other words, the leftmost field of the run is flexible,
+ * while the others keep a fixed width.  If the parse fails anywhere in the run,
+ * then the leftmost field is shortened by one character, and the entire run is
+ * parsed again. This is repeated until either the parse succeeds or the
+ * leftmost field is one character in length.  If the parse still fails at that
+ * point, the parse of the run fails.
+ *
+ * <p>For time zones that have no names, use strings GMT+hours:minutes or
+ * GMT-hours:minutes.
+ *
+ * <p>The calendar defines what is the first day of the week, the first week
+ * of the year, whether hours are zero based or not (0 vs 12 or 24), and the
+ * time zone. There is one common decimal format to handle all the numbers;
+ * the digit count is handled programmatically according to the pattern.
+ *
+ * <h3>Synchronization</h3>
+ *
+ * Date formats are not synchronized. It is recommended to create separate
+ * format instances for each thread. If multiple threads access a format
+ * concurrently, it must be synchronized externally.
+ *
+ * @see          android.icu.util.Calendar
+ * @see          android.icu.util.GregorianCalendar
+ * @see          android.icu.util.TimeZone
+ * @see          android.icu.text.DateFormat
+ * @see          android.icu.text.DateFormatSymbols
+ * @see          android.icu.text.DecimalFormat
+ * @see          android.icu.text.TimeZoneFormat
+ * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class SimpleDateFormat extends android.icu.text.DateFormat {
+
+/**
+ * Constructs a SimpleDateFormat using the default pattern for the default <code>FORMAT</code>
+ * locale.  <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ *
+ * @see android.icu.text.DateFormat
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public SimpleDateFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern in the default <code>FORMAT</code>
+ * locale.  <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public SimpleDateFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern and locale.
+ * <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ */
+
+public SimpleDateFormat(java.lang.String pattern, java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern and locale.
+ * <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ */
+
+public SimpleDateFormat(java.lang.String pattern, android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern , override and locale.
+ * @param pattern The pattern to be used
+ * @param override The override string.  A numbering system override string can take one of the following forms:
+ *     1). If just a numbering system name is specified, it applies to all numeric fields in the date format pattern.
+ *     2). To specify an alternate numbering system on a field by field basis, use the field letters from the pattern
+ *         followed by an = sign, followed by the numbering system name.  For example, to specify that just the year
+ *         be formatted using Hebrew digits, use the override "y=hebr".  Multiple overrides can be specified in a single
+ *         string by separating them with a semi-colon. For example, the override string "m=thai;y=deva" would format using
+ *         Thai digits for the month and Devanagari digits for the year.
+ * @param loc The locale to be used
+ */
+
+public SimpleDateFormat(java.lang.String pattern, java.lang.String override, android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern and
+ * locale-specific symbol data.
+ * Warning: uses default <code>FORMAT</code> locale for digits!
+ */
+
+public SimpleDateFormat(java.lang.String pattern, android.icu.text.DateFormatSymbols formatData) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the 100-year period 2-digit years will be interpreted as being in
+ * to begin on the date the user specifies.
+ * @param startDate During parsing, two digit years will be placed in the range
+ * <code>startDate</code> to <code>startDate + 100 years</code>.
+ */
+
+public void set2DigitYearStart(java.util.Date startDate) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the beginning date of the 100-year period 2-digit years are interpreted
+ * as being within.
+ * @return the start of the 100-year period into which two digit years are
+ * parsed
+ */
+
+public java.util.Date get2DigitYearStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set a particular DisplayContext value in the formatter,
+ * such as CAPITALIZATION_FOR_STANDALONE. Note: For getContext, see
+ * DateFormat.
+ *
+ * @param context The DisplayContext value to set.
+ */
+
+public void setContext(android.icu.text.DisplayContext context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a date or time, which is the standard millis
+ * since January 1, 1970, 00:00:00 GMT.
+ * <p>Example: using the US locale:
+ * "yyyy.MM.dd G 'at' HH:mm:ss zzz" -&gt;&gt; 1996.07.10 AD at 15:08:56 PDT
+ * @param cal the calendar whose date-time value is to be formatted into a date-time string
+ * @param toAppendTo where the new date-time text is to be appended
+ * @param pos the formatting position. On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field.
+ * @return the formatted date-time string.
+ * @see android.icu.text.DateFormat
+ */
+
+public java.lang.StringBuffer format(android.icu.util.Calendar cal, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DateFormat.Field constant associated with the specified format pattern
+ * character.
+ *
+ * @param ch The pattern character
+ * @return DateFormat.Field associated with the pattern character
+ */
+
+protected android.icu.text.DateFormat.Field patternCharToDateFormatField(char ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a single field, given its pattern character.  Subclasses may
+ * override this method in order to modify or add formatting
+ * capabilities.
+ * @param ch the pattern character
+ * @param count the number of times ch is repeated in the pattern
+ * @param beginOffset the offset of the output string at the start of
+ * this field; used to set pos when appropriate
+ * @param pos receives the position of a field, when appropriate
+ * @param fmtData the symbols for this formatter
+ */
+
+protected java.lang.String subFormat(char ch, int count, int beginOffset, java.text.FieldPosition pos, android.icu.text.DateFormatSymbols fmtData, android.icu.util.Calendar cal) throws java.lang.IllegalArgumentException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides superclass method and
+ * This method also clears per field NumberFormat instances
+ * previously set by {@link #setNumberFormat(java.lang.String,android.icu.text.NumberFormat)}
+ */
+
+public void setNumberFormat(android.icu.text.NumberFormat newNumberFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a number with the specified minimum and maximum number of digits.
+ */
+
+protected java.lang.String zeroPaddingNumber(long value, int minDigits, int maxDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides DateFormat
+ * @see android.icu.text.DateFormat
+ */
+
+public void parse(java.lang.String text, android.icu.util.Calendar cal, java.text.ParsePosition parsePos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Attempt to match the text at a given position against an array of
+ * strings.  Since multiple strings in the array may match (for
+ * example, if the array contains "a", "ab", and "abc", all will match
+ * the input string "abcd") the longest match is returned.  As a side
+ * effect, the given field of <code>cal</code> is set to the index
+ * of the best match, if there is one.
+ * @param text the time text being parsed.
+ * @param start where to start parsing.
+ * @param field the date field being parsed.
+ * @param data the string array to parsed.
+ * @param cal
+ * @return the new start position if matching succeeded; a negative
+ * number indicating matching failure, otherwise.  As a side effect,
+ * sets the <code>cal</code> field <code>field</code> to the index
+ * of the best match, if matching succeeded.
+ */
+
+protected int matchString(java.lang.String text, int start, int field, java.lang.String[] data, android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Attempt to match the text at a given position against an array of quarter
+ * strings.  Since multiple strings in the array may match (for
+ * example, if the array contains "a", "ab", and "abc", all will match
+ * the input string "abcd") the longest match is returned.  As a side
+ * effect, the given field of <code>cal</code> is set to the index
+ * of the best match, if there is one.
+ * @param text the time text being parsed.
+ * @param start where to start parsing.
+ * @param field the date field being parsed.
+ * @param data the string array to parsed.
+ * @return the new start position if matching succeeded; a negative
+ * number indicating matching failure, otherwise.  As a side effect,
+ * sets the <code>cal</code> field <code>field</code> to the index
+ * of the best match, if matching succeeded.
+ */
+
+protected int matchQuarterString(java.lang.String text, int start, int field, java.lang.String[] data, android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Protected method that converts one field of the input string into a
+ * numeric field value in <code>cal</code>.  Returns -start (for
+ * ParsePosition) if failed.  Subclasses may override this method to
+ * modify or add parsing capabilities.
+ * @param text the time text to be parsed.
+ * @param start where to start parsing.
+ * @param ch the pattern character for the date field text to be parsed.
+ * @param count the count of a pattern character.
+ * @param obeyCount if true, then the next field directly abuts this one,
+ * and we should use the count to know when to stop parsing.
+ * @param ambiguousYear return parameter; upon return, if ambiguousYear[0]
+ * is true, then a two-digit year was parsed and may need to be readjusted.
+ * @param cal
+ * @return the new start position if matching succeeded; a negative
+ * number indicating matching failure, otherwise.  As a side effect,
+ * set the appropriate field of <code>cal</code> with the parsed
+ * value.
+ */
+
+protected int subParse(java.lang.String text, int start, char ch, int count, boolean obeyCount, boolean allowNegative, boolean[] ambiguousYear, android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a pattern string describing this date format.
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a localized pattern string describing this date format.
+ * <p>
+ * <b>Note:</b> This implementation depends on {@link android.icu.text.DateFormatSymbols#getLocalPatternChars() DateFormatSymbols#getLocalPatternChars()}
+ * to get localized format pattern characters. ICU does not include
+ * localized pattern character data, therefore, unless user sets localized
+ * pattern characters manually, this method returns the same result as
+ * {@link #toPattern()}.
+ */
+
+public java.lang.String toLocalizedPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Apply the given unlocalized pattern string to this date format.
+ */
+
+public void applyPattern(java.lang.String pat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Apply the given localized pattern string to this date format.
+ */
+
+public void applyLocalizedPattern(java.lang.String pat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the date/time formatting data.
+ * @return a copy of the date-time formatting data associated
+ * with this date-time formatter.
+ */
+
+public android.icu.text.DateFormatSymbols getDateFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Allows you to set the date/time formatting data.
+ * @param newFormatSymbols the new symbols
+ */
+
+public void setDateFormatSymbols(android.icu.text.DateFormatSymbols newFormatSymbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Method for subclasses to access the DateFormatSymbols.
+ */
+
+protected android.icu.text.DateFormatSymbols getSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Gets the time zone formatter which this date/time
+ * formatter uses to format and parse a time zone.
+ *
+ * @return the time zone formatter which this date/time
+ * formatter uses.
+ */
+
+public android.icu.text.TimeZoneFormat getTimeZoneFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Allows you to set the time zone formatter.
+ *
+ * @param tzfmt the new time zone formatter
+ */
+
+public void setTimeZoneFormat(android.icu.text.TimeZoneFormat tzfmt) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides Cloneable
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode.
+ * Generates the hash code for the SimpleDateFormat object
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the object to an attributed string, and return the corresponding iterator
+ * Overrides superclass method.
+ *
+ * @param obj The object to format
+ * @return <code>AttributedCharacterIterator</code> describing the formatted value.
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * allow the user to set the NumberFormat for several fields
+ * It can be a single field like: "y"(year) or "M"(month)
+ * It can be several field combined together: "yMd"(year, month and date)
+ * Note:
+ * 1 symbol field is enough for multiple symbol fields (so "y" will override "yy", "yyy")
+ * If the field is not numeric, then override has no effect (like "MMM" will use abbreviation, not numerical field)
+ *
+ * @param fields the fields to override
+ * @param overrideNF the NumbeferFormat used
+ * @exception java.lang.IllegalArgumentException when the fields contain invalid field
+ */
+
+public void setNumberFormat(java.lang.String fields, android.icu.text.NumberFormat overrideNF) { throw new RuntimeException("Stub!"); }
+
+/**
+ * give the NumberFormat used for the field like 'y'(year) and 'M'(year)
+ *
+ * @param field the field the user wants
+ * @return override NumberFormat used for the field
+ */
+
+public android.icu.text.NumberFormat getNumberFormat(char field) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/StringPrepParseException.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/StringPrepParseException.java
new file mode 100644
index 0000000..5aedccc
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/StringPrepParseException.java
@@ -0,0 +1,159 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2003-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.ParseException;
+
+/**
+ * Exception that signals an error has occurred while parsing the
+ * input to StringPrep or IDNA.
+ *
+ * @author Ram Viswanadha
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class StringPrepParseException extends java.text.ParseException {
+
+/**
+ * Construct a ParseException object with the given message
+ * and error code
+ *
+ * @param message A string describing the type of error that occurred
+ * @param error   The error that has occurred
+ */
+
+public StringPrepParseException(java.lang.String message, int error) { super(null, 0); throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a ParseException object with the given message and
+ * error code
+ *
+ * @param message A string describing the type of error that occurred
+ * @param error   The error that has occurred
+ * @param rules   The input rules string
+ * @param pos     The position of error in the rules string
+ */
+
+public StringPrepParseException(java.lang.String message, int error, java.lang.String rules, int pos) { super(null, 0); throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct  a ParseException object with the given message and error code
+ *
+ * @param message    A string describing the type of error that occurred
+ * @param error      The error that has occurred
+ * @param rules      The input rules string
+ * @param pos        The position of error in the rules string
+ * @param lineNumber The line number at which the error has occurred.
+ *                   If the parse engine is not using this field, it should set it to zero.  Otherwise
+ *                   it should be a positive integer. The default value of this field
+ *                   is -1. It will be set to 0 if the code populating this struct is not
+ *                   using line numbers.
+ */
+
+public StringPrepParseException(java.lang.String message, int error, java.lang.String rules, int pos, int lineNumber) { super(null, 0); throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this ParseException to another and evaluate if they are equal.
+ * The comparison works only on the type of error and does not compare
+ * the rules strings, if any, for equality.
+ *
+ * @param other The exception that this object should be compared to
+ * @return true if the objects are equal, false if unequal
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Mock implementation of hashCode(). This implementation always returns a constant
+ * value. When Java assertion is enabled, this method triggers an assertion failure.
+ * @return a hash code value for this object.
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the position of error in the rules string
+ *
+ * @return String
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the error code of this exception.
+ * This method is only used for testing to verify the error.
+ * @return The error code
+ */
+
+public int getError() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final int ACE_PREFIX_ERROR = 6; // 0x6
+
+/**
+ */
+
+public static final int BUFFER_OVERFLOW_ERROR = 9; // 0x9
+
+/**
+ */
+
+public static final int CHECK_BIDI_ERROR = 4; // 0x4
+
+/**
+ */
+
+public static final int DOMAIN_NAME_TOO_LONG_ERROR = 11; // 0xb
+
+/**
+ */
+
+public static final int ILLEGAL_CHAR_FOUND = 1; // 0x1
+
+/**
+ */
+
+public static final int INVALID_CHAR_FOUND = 0; // 0x0
+
+/**
+ */
+
+public static final int LABEL_TOO_LONG_ERROR = 8; // 0x8
+
+/**
+ */
+
+public static final int PROHIBITED_ERROR = 2; // 0x2
+
+/**
+ */
+
+public static final int STD3_ASCII_RULES_ERROR = 5; // 0x5
+
+/**
+ */
+
+public static final int UNASSIGNED_ERROR = 3; // 0x3
+
+/**
+ */
+
+public static final int VERIFICATION_ERROR = 7; // 0x7
+
+/**
+ */
+
+public static final int ZERO_LENGTH_LABEL = 10; // 0xa
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/StringSearch.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/StringSearch.java
new file mode 100644
index 0000000..13233a1
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/StringSearch.java
@@ -0,0 +1,290 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ *
+ * <tt>StringSearch</tt> is a {@link android.icu.text.SearchIterator SearchIterator} that provides
+ * language-sensitive text searching based on the comparison rules defined
+ * in a {@link android.icu.text.RuleBasedCollator RuleBasedCollator} object.
+ * StringSearch ensures that language eccentricity can be
+ * handled, e.g. for the German collator, characters &szlig; and SS will be matched
+ * if case is chosen to be ignored.
+ * See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
+ * "ICU Collation Design Document"</a> for more information.
+ * <p>
+ * There are 2 match options for selection:<br>
+ * Let S' be the sub-string of a text string S between the offsets start and
+ * end [start, end].
+ * <br>
+ * A pattern string P matches a text string S at the offsets [start, end]
+ * if
+ * <pre>
+ * option 1. Some canonical equivalent of P matches some canonical equivalent
+ *           of S'
+ * option 2. P matches S' and if P starts or ends with a combining mark,
+ *           there exists no non-ignorable combining mark before or after S?
+ *           in S respectively.
+ * </pre>
+ * Option 2. is the default.
+ * <p>
+ * This search has APIs similar to that of other text iteration mechanisms
+ * such as the break iterators in {@link android.icu.text.BreakIterator BreakIterator}. Using these
+ * APIs, it is easy to scan through text looking for all occurrences of
+ * a given pattern. This search iterator allows changing of direction by
+ * calling a {@link #reset} followed by a {@link #next} or {@link #previous}.
+ * Though a direction change can occur without calling {@link #reset} first,
+ * this operation comes with some speed penalty.
+ * Match results in the forward direction will match the result matches in
+ * the backwards direction in the reverse order
+ * <p>
+ * {@link android.icu.text.SearchIterator SearchIterator} provides APIs to specify the starting position
+ * within the text string to be searched, e.g. {@link android.icu.text.SearchIterator#setIndex setIndex},
+ * {@link android.icu.text.SearchIterator#preceding preceding} and {@link android.icu.text.SearchIterator#following following}.
+ * Since the starting position will be set as it is specified, please take note that
+ * there are some danger points at which the search may render incorrect
+ * results:
+ * <ul>
+ * <li> In the midst of a substring that requires normalization.
+ * <li> If the following match is to be found, the position should not be the
+ *      second character which requires swapping with the preceding
+ *      character. Vice versa, if the preceding match is to be found, the
+ *      position to search from should not be the first character which
+ *      requires swapping with the next character. E.g certain Thai and
+ *      Lao characters require swapping.
+ * <li> If a following pattern match is to be found, any position within a
+ *      contracting sequence except the first will fail. Vice versa if a
+ *      preceding pattern match is to be found, an invalid starting point
+ *      would be any character within a contracting sequence except the last.
+ * </ul>
+ * <p>
+ * A {@link android.icu.text.BreakIterator BreakIterator} can be used if only matches at logical breaks are desired.
+ * Using a {@link android.icu.text.BreakIterator BreakIterator} will only give you results that exactly matches the
+ * boundaries given by the {@link android.icu.text.BreakIterator BreakIterator}. For instance the pattern "e" will
+ * not be found in the string "\u00e9" if a character break iterator is used.
+ * <p>
+ * Options are provided to handle overlapping matches.
+ * E.g. In English, overlapping matches produces the result 0 and 2
+ * for the pattern "abab" in the text "ababab", where mutually
+ * exclusive matches only produces the result of 0.
+ * <p>
+ * Options are also provided to implement "asymmetric search" as described in
+ * <a href="http://www.unicode.org/reports/tr10/#Asymmetric_Search">
+ * UTS #10 Unicode Collation Algorithm</a>, specifically the ElementComparisonType
+ * values.
+ * <p>
+ * Though collator attributes will be taken into consideration while
+ * performing matches, there are no APIs here for setting and getting the
+ * attributes. These attributes can be set by getting the collator
+ * from {@link #getCollator} and using the APIs in {@link android.icu.text.RuleBasedCollator RuleBasedCollator}.
+ * Lastly to update <tt>StringSearch</tt> to the new collator attributes,
+ * {@link #reset} has to be called.
+ * <p>
+ * Restriction: <br>
+ * Currently there are no composite characters that consists of a
+ * character with combining class &gt; 0 before a character with combining
+ * class == 0. However, if such a character exists in the future,
+ * <tt>StringSearch</tt> does not guarantee the results for option 1.
+ * <p>
+ * Consult the {@link android.icu.text.SearchIterator SearchIterator} documentation for information on
+ * and examples of how to use instances of this class to implement text
+ * searching.
+ * <p>
+ * Note, <tt>StringSearch</tt> is not to be subclassed.
+ * </p>
+ * @see android.icu.text.SearchIterator
+ * @see android.icu.text.RuleBasedCollator
+ * @author Laura Werner, synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class StringSearch extends android.icu.text.SearchIterator {
+
+/**
+ * Initializes the iterator to use the language-specific rules defined in
+ * the argument collator to search for argument pattern in the argument
+ * target text. The argument <code>breakiter</code> is used to define logical matches.
+ * See super class documentation for more details on the use of the target
+ * text and {@link android.icu.text.BreakIterator BreakIterator}.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param collator {@link android.icu.text.RuleBasedCollator RuleBasedCollator} that defines the language rules
+ * @param breakiter A {@link android.icu.text.BreakIterator BreakIterator} that is used to determine the
+ *                boundaries of a logical match. This argument can be null.
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0
+ * @see android.icu.text.BreakIterator
+ * @see android.icu.text.RuleBasedCollator
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, android.icu.text.RuleBasedCollator collator, android.icu.text.BreakIterator breakiter) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules defined in
+ * the argument collator to search for argument pattern in the argument
+ * target text. No {@link android.icu.text.BreakIterator BreakIterator}s are set to test for logical matches.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param collator {@link android.icu.text.RuleBasedCollator RuleBasedCollator} that defines the language rules
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0
+ * @see android.icu.text.RuleBasedCollator
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, android.icu.text.RuleBasedCollator collator) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules and
+ * break iterator rules defined in the argument locale to search for
+ * argument pattern in the argument target text.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param locale locale to use for language and break iterator rules
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0. ClassCastException thrown if the collator for
+ *            the specified locale is not a RuleBasedCollator.
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, java.util.Locale locale) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules and
+ * break iterator rules defined in the argument locale to search for
+ * argument pattern in the argument target text.
+ * See super class documentation for more details on the use of the target
+ * text and {@link android.icu.text.BreakIterator BreakIterator}.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param locale locale to use for language and break iterator rules
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0. ClassCastException thrown if the collator for
+ *            the specified locale is not a RuleBasedCollator.
+ * @see android.icu.text.BreakIterator
+ * @see android.icu.text.RuleBasedCollator
+ * @see android.icu.text.SearchIterator
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, android.icu.util.ULocale locale) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules and
+ * break iterator rules defined in the default locale to search for
+ * argument pattern in the argument target text.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0. ClassCastException thrown if the collator for
+ *            the default locale is not a RuleBasedCollator.
+ */
+
+public StringSearch(java.lang.String pattern, java.lang.String target) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the {@link android.icu.text.RuleBasedCollator RuleBasedCollator} used for the language rules.
+ * <p>
+ * Since <tt>StringSearch</tt> depends on the returned {@link android.icu.text.RuleBasedCollator RuleBasedCollator}, any
+ * changes to the {@link android.icu.text.RuleBasedCollator RuleBasedCollator} result should follow with a call to
+ * either {@link #reset()} or {@link #setCollator(android.icu.text.RuleBasedCollator)} to ensure the correct
+ * search behavior.
+ * </p>
+ * @return {@link android.icu.text.RuleBasedCollator RuleBasedCollator} used by this <tt>StringSearch</tt>
+ * @see android.icu.text.RuleBasedCollator
+ * @see #setCollator
+ */
+
+public android.icu.text.RuleBasedCollator getCollator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the {@link android.icu.text.RuleBasedCollator RuleBasedCollator} to be used for language-specific searching.
+ * <p>
+ * The iterator's position will not be changed by this method.
+ * @param collator to use for this <tt>StringSearch</tt>
+ * @throws java.lang.IllegalArgumentException thrown when collator is null
+ * @see #getCollator
+ */
+
+public void setCollator(android.icu.text.RuleBasedCollator collator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for which <tt>StringSearch</tt> is searching for.
+ * @return the pattern searched for
+ */
+
+public java.lang.String getPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the pattern to search for.
+ * The iterator's position will not be changed by this method.
+ * @param pattern for searching
+ * @see #getPattern
+ * @exception java.lang.IllegalArgumentException thrown if pattern is null or of
+ *               length 0
+ */
+
+public void setPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether canonical matches (option 1, as described in the
+ * class documentation) is set.
+ * See setCanonical(boolean) for more information.
+ * @see #setCanonical
+ * @return true if canonical matches is set, false otherwise
+ */
+
+public boolean isCanonical() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the canonical match mode. See class documentation for details.
+ * The default setting for this property is false.
+ * @param allowCanonical flag indicator if canonical matches are allowed
+ * @see #isCanonical
+ */
+
+public void setCanonical(boolean allowCanonical) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public void setTarget(java.text.CharacterIterator text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int getIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public void setIndex(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleNext(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handlePrevious(int position) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SymbolTable.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SymbolTable.java
new file mode 100644
index 0000000..fabbf95
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/SymbolTable.java
@@ -0,0 +1,91 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2005, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * An interface that defines both lookup protocol and parsing of
+ * symbolic names.
+ *
+ * <p>This interface is used by UnicodeSet to resolve $Variable style
+ * references that appear in set patterns.  RBBI and Transliteration
+ * both independently implement this interface.
+ *
+ * <p>A symbol table maintains two kinds of mappings.  The first is
+ * between symbolic names and their values.  For example, if the
+ * variable with the name "start" is set to the value "alpha"
+ * (perhaps, though not necessarily, through an expression such as
+ * "$start=alpha"), then the call lookup("start") will return the
+ * char[] array ['a', 'l', 'p', 'h', 'a'].
+ *
+ * <p>The second kind of mapping is between character values and
+ * UnicodeMatcher objects.  This is used by RuleBasedTransliterator,
+ * which uses characters in the private use area to represent objects
+ * such as UnicodeSets.  If U+E015 is mapped to the UnicodeSet [a-z],
+ * then lookupMatcher(0xE015) will return the UnicodeSet [a-z].
+ *
+ * <p>Finally, a symbol table defines parsing behavior for symbolic
+ * names.  All symbolic names start with the SYMBOL_REF character.
+ * When a parser encounters this character, it calls parseReference()
+ * with the position immediately following the SYMBOL_REF.  The symbol
+ * table parses the name, if there is one, and returns it.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface SymbolTable {
+
+/**
+ * Lookup the characters associated with this string and return it.
+ * Return <tt>null</tt> if no such name exists.  The resultant
+ * array may have length zero.
+ * @param s the symbolic name to lookup
+ * @return a char array containing the name's value, or null if
+ * there is no mapping for s.
+ */
+
+public char[] lookup(java.lang.String s);
+
+/**
+ * Lookup the UnicodeMatcher associated with the given character, and
+ * return it.  Return <tt>null</tt> if not found.
+ * @param ch a 32-bit code point from 0 to 0x10FFFF inclusive.
+ * @return the UnicodeMatcher object represented by the given
+ * character, or null if there is no mapping for ch.
+ */
+
+public android.icu.text.UnicodeMatcher lookupMatcher(int ch);
+
+/**
+ * Parse a symbol reference name from the given string, starting
+ * at the given position.  If no valid symbol reference name is
+ * found, return null and leave pos unchanged.  That is, if the
+ * character at pos cannot start a name, or if pos is at or after
+ * text.length(), then return null.  This indicates an isolated
+ * SYMBOL_REF character.
+ * @param text the text to parse for the name
+ * @param pos on entry, the index of the first character to parse.
+ * This is the character following the SYMBOL_REF character.  On
+ * exit, the index after the last parsed character.  If the parse
+ * failed, pos is unchanged on exit.
+ * @param limit the index after the last character to be parsed.
+ * @return the parsed name, or null if there is no valid symbolic
+ * name at the given position.
+ */
+
+public java.lang.String parseReference(java.lang.String text, java.text.ParsePosition pos, int limit);
+
+/**
+ * The character preceding a symbol reference name.
+ */
+
+public static final char SYMBOL_REF = 36; // 0x0024 '$'
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneFormat.java
new file mode 100644
index 0000000..a43cae8
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneFormat.java
@@ -0,0 +1,690 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2011-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import java.text.ParsePosition;
+import android.icu.util.TimeZone;
+import android.icu.util.Output;
+import java.util.EnumSet;
+import java.text.ParseException;
+
+/**
+ * <code>TimeZoneFormat</code> supports time zone display name formatting and parsing.
+ * An instance of TimeZoneFormat works as a subformatter of {@link android.icu.text.SimpleDateFormat SimpleDateFormat},
+ * but you can also directly get a new instance of <code>TimeZoneFormat</code> and
+ * formatting/parsing time zone display names.
+ * <p>
+ * ICU implements the time zone display names defined by <a href="http://www.unicode.org/reports/tr35/">UTS#35
+ * Unicode Locale Data Markup Language (LDML)</a>. {@link android.icu.text.TimeZoneNames TimeZoneNames} represents the
+ * time zone display name data model and this class implements the algorithm for actual
+ * formatting and parsing.
+ *
+ * @see android.icu.text.SimpleDateFormat
+ * @see android.icu.text.TimeZoneNames
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class TimeZoneFormat extends android.icu.text.UFormat implements android.icu.util.Freezable<android.icu.text.TimeZoneFormat>, java.io.Serializable {
+
+/**
+ * The protected constructor for subclassing.
+ * @param locale the locale
+ */
+
+protected TimeZoneFormat(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a frozen instance of <code>TimeZoneFormat</code> for the given locale.
+ * <p><b>Note</b>: The instance returned by this method is frozen. If you want to
+ * customize a TimeZoneFormat, you must use {@link #cloneAsThawed()} to get a
+ * thawed copy first.
+ *
+ * @param locale the locale.
+ * @return a frozen instance of <code>TimeZoneFormat</code> for the given locale.
+ */
+
+public static android.icu.text.TimeZoneFormat getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a frozen instance of <code>TimeZoneFormat</code> for the given
+ * {@link java.util.Locale}.
+ * <p><b>Note</b>: The instance returned by this method is frozen. If you want to
+ * customize a TimeZoneFormat, you must use {@link #cloneAsThawed()} to get a
+ * thawed copy first.
+ *
+ * @param locale the {@link java.util.Locale Locale}.
+ * @return a frozen instance of <code>TimeZoneFormat</code> for the given locale.
+ */
+
+public static android.icu.text.TimeZoneFormat getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone display name data used by this instance.
+ *
+ * @return the time zone display name data.
+ * @see #setTimeZoneNames(TimeZoneNames)
+ */
+
+public android.icu.text.TimeZoneNames getTimeZoneNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone display name data to this instance.
+ *
+ * @param tznames the time zone display name data.
+ * @return this object.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getTimeZoneNames()
+ */
+
+public android.icu.text.TimeZoneFormat setTimeZoneNames(android.icu.text.TimeZoneNames tznames) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the localized GMT format pattern.
+ *
+ * @return the localized GMT format pattern.
+ * @see #setGMTPattern(String)
+ */
+
+public java.lang.String getGMTPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the localized GMT format pattern. The pattern must contain
+ * a single argument {0}, for example "GMT {0}".
+ *
+ * @param pattern the localized GMT format pattern string
+ * @return this object.
+ * @throws java.lang.IllegalArgumentException when the pattern string does not contain "{0}"
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTPattern()
+ */
+
+public android.icu.text.TimeZoneFormat setGMTPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the offset pattern used for localized GMT format.
+ *
+ * @param type the offset pattern enum
+ * @see #setGMTOffsetPattern(GMTOffsetPatternType, String)
+ */
+
+public java.lang.String getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the offset pattern for the given offset type.
+ *
+ * @param type the offset pattern.
+ * @param pattern the pattern string.
+ * @return this object.
+ * @throws java.lang.IllegalArgumentException when the pattern string does not have required time field letters.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTOffsetPattern(GMTOffsetPatternType)
+ */
+
+public android.icu.text.TimeZoneFormat setGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType type, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the decimal digit characters used for localized GMT format in a single string
+ * containing from 0 to 9 in the ascending order.
+ *
+ * @return the decimal digits for localized GMT format.
+ * @see #setGMTOffsetDigits(String)
+ */
+
+public java.lang.String getGMTOffsetDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decimal digit characters used for localized GMT format.
+ *
+ * @param digits a string contains the decimal digit characters from 0 to 9 n the ascending order.
+ * @return this object.
+ * @throws java.lang.IllegalArgumentException when the string did not contain ten characters.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTOffsetDigits()
+ */
+
+public android.icu.text.TimeZoneFormat setGMTOffsetDigits(java.lang.String digits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the localized GMT format string for GMT(UTC) itself (GMT offset is 0).
+ *
+ * @return the localized GMT string string for GMT(UTC) itself.
+ * @see #setGMTZeroFormat(String)
+ */
+
+public java.lang.String getGMTZeroFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the localized GMT format string for GMT(UTC) itself (GMT offset is 0).
+ *
+ * @param gmtZeroFormat the localized GMT format string for GMT(UTC).
+ * @return this object.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTZeroFormat()
+ */
+
+public android.icu.text.TimeZoneFormat setGMTZeroFormat(java.lang.String gmtZeroFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the default parse options.
+ * <p>
+ * <b>Note:</b> By default, an instance of <code>TimeZoneFormat</code>
+ * created by {@link #getInstance(android.icu.util.ULocale)} has no parse options set.
+ *
+ * @param options the default parse options.
+ * @return this object.
+ * @see android.icu.text.TimeZoneFormat.ParseOption
+ */
+
+public android.icu.text.TimeZoneFormat setDefaultParseOptions(java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default parse options used by this <code>TimeZoneFormat</code> instance.
+ * @return the default parse options.
+ * @see android.icu.text.TimeZoneFormat.ParseOption
+ */
+
+public java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> getDefaultParseOptions() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 8601 basic time zone string for the given offset.
+ * For example, "-08", "-0830" and "Z"
+ *
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0.
+ * @param isShort true if shortest form is used.
+ * @param ignoreSeconds true if non-zero offset seconds is appended.
+ * @return the ISO 8601 basic format.
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ * @see #formatOffsetISO8601Extended(int, boolean, boolean, boolean)
+ * @see #parseOffsetISO8601(String, ParsePosition)
+ */
+
+public final java.lang.String formatOffsetISO8601Basic(int offset, boolean useUtcIndicator, boolean isShort, boolean ignoreSeconds) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 8601 extended time zone string for the given offset.
+ * For example, "-08:00", "-08:30" and "Z"
+ *
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0.
+ * @param isShort true if shortest form is used.
+ * @param ignoreSeconds true if non-zero offset seconds is appended.
+ * @return the ISO 8601 extended format.
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ * @see #formatOffsetISO8601Basic(int, boolean, boolean, boolean)
+ * @see #parseOffsetISO8601(String, ParsePosition)
+ */
+
+public final java.lang.String formatOffsetISO8601Extended(int offset, boolean useUtcIndicator, boolean isShort, boolean ignoreSeconds) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the localized GMT(UTC) offset format for the given offset.
+ * The localized GMT offset is defined by;
+ * <ul>
+ * <li>GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern()})
+ * <li>Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType)})
+ * <li>Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits()})
+ * <li>GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat()})
+ * </ul>
+ * This format always uses 2 digit hours and minutes. When the given offset has non-zero
+ * seconds, 2 digit seconds field will be appended. For example,
+ * GMT+05:00 and GMT+05:28:06.
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @return the localized GMT format string
+ * @see #parseOffsetLocalizedGMT(String, ParsePosition)
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ */
+
+public java.lang.String formatOffsetLocalizedGMT(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the short localized GMT(UTC) offset format for the given offset.
+ * The short localized GMT offset is defined by;
+ * <ul>
+ * <li>GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern()})
+ * <li>Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType)})
+ * <li>Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits()})
+ * <li>GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat()})
+ * </ul>
+ * This format uses the shortest representation of offset. The hours field does not
+ * have leading zero and lower fields with zero will be truncated. For example,
+ * GMT+5 and GMT+530.
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @return the short localized GMT format string
+ * @see #parseOffsetLocalizedGMT(String, ParsePosition)
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ */
+
+public java.lang.String formatOffsetShortLocalizedGMT(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name of the time zone at the given date for
+ * the style.
+ *
+ * <p><b>Note</b>: A style may have fallback styles defined. For example,
+ * when <code>GENERIC_LONG</code> is requested, but there is no display name
+ * data available for <code>GENERIC_LONG</code> style, the implementation
+ * may use <code>GENERIC_LOCATION</code> or <code>LOCALIZED_GMT</code>.
+ * See UTS#35 UNICODE LOCALE DATA MARKUP LANGUAGE (LDML)
+ * <a href="http://www.unicode.org/reports/tr35/#Time_Zone_Fallback">Appendix J: Time Zone Display Name</a>
+ * for the details.
+ *
+ * @param style the style enum (e.g. <code>GENERIC_LONG</code>, <code>LOCALIZED_GMT</code>...)
+ * @param tz the time zone.
+ * @param date the date.
+ * @return the display name of the time zone.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #format(Style, TimeZone, long, Output)
+ */
+
+public final java.lang.String format(android.icu.text.TimeZoneFormat.Style style, android.icu.util.TimeZone tz, long date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name of the time zone at the given date for
+ * the style. This method takes an extra argument <code>Output&lt;TimeType&gt; timeType</code>
+ * in addition to the argument list of {@link #format(android.icu.text.TimeZoneFormat.Style,android.icu.util.TimeZone,long)}.
+ * The argument is used for receiving the time type (standard time
+ * or daylight saving time, or unknown) actually used for the display name.
+ *
+ * @param style the style enum (e.g. <code>GENERIC_LONG</code>, <code>LOCALIZED_GMT</code>...)
+ * @param tz the time zone.
+ * @param date the date.
+ * @param timeType the output argument for receiving the time type (standard/daylight/unknown)
+ * used for the display name, or specify null if the information is not necessary.
+ * @return the display name of the time zone.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #format(Style, TimeZone, long)
+ */
+
+public java.lang.String format(android.icu.text.TimeZoneFormat.Style style, android.icu.util.TimeZone tz, long date, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType> timeType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns offset from GMT(UTC) in milliseconds for the given ISO 8601
+ * basic or extended time zone string. When the given string is not an ISO 8601 time
+ * zone string, this method sets the current position as the error index
+ * to <code>ParsePosition pos</code> and returns 0.
+ *
+ * @param text the text contains ISO 8601 style time zone string (e.g. "-08", "-0800", "-08:00", and "Z")
+ * at the position.
+ * @param pos the position.
+ * @return the offset from GMT(UTC) in milliseconds for the given ISO 8601 style
+ * time zone string.
+ * @see #formatOffsetISO8601Basic(int, boolean, boolean, boolean)
+ * @see #formatOffsetISO8601Extended(int, boolean, boolean, boolean)
+ */
+
+public final int parseOffsetISO8601(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns offset from GMT(UTC) in milliseconds for the given localized GMT
+ * offset format string. When the given string cannot be parsed, this method
+ * sets the current position as the error index to <code>ParsePosition pos</code>
+ * and returns 0.
+ *
+ * @param text the text contains a localized GMT offset string at the position.
+ * @param pos the position.
+ * @return the offset from GMT(UTC) in milliseconds for the given localized GMT
+ * offset format string.
+ * @see #formatOffsetLocalizedGMT(int)
+ */
+
+public int parseOffsetLocalizedGMT(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns offset from GMT(UTC) in milliseconds for the given short localized GMT
+ * offset format string. When the given string cannot be parsed, this method
+ * sets the current position as the error index to <code>ParsePosition pos</code>
+ * and returns 0.
+ *
+ * @param text the text contains a short localized GMT offset string at the position.
+ * @param pos the position.
+ * @return the offset from GMT(UTC) in milliseconds for the given short localized GMT
+ * offset format string.
+ * @see #formatOffsetShortLocalizedGMT(int)
+ */
+
+public int parseOffsetShortLocalizedGMT(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> by parsing the time zone string according to
+ * the parse position, the style and the parse options.
+ *
+ * @param text the text contains a time zone string at the position.
+ * @param style the format style.
+ * @param pos the position.
+ * @param options the parse options.
+ * @param timeType The output argument for receiving the time type (standard/daylight/unknown),
+ * or specify null if the information is not necessary.
+ * @return A <code>TimeZone</code>, or null if the input could not be parsed.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #format(Style, TimeZone, long, Output)
+ */
+
+public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style style, java.lang.String text, java.text.ParsePosition pos, java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> options, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType> timeType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> by parsing the time zone string according to
+ * the parse position, the style and the default parse options.
+ * <p>
+ * <b>Note</b>: This method is equivalent to {@link #parse(android.icu.text.TimeZoneFormat.Style,java.lang.String,java.text.ParsePosition,java.util.EnumSet,android.icu.util.Output)
+ * parse(style, text, pos, null, timeType)}.
+ *
+ * @param text the text contains a time zone string at the position.
+ * @param style the format style
+ * @param pos the position.
+ * @param timeType The output argument for receiving the time type (standard/daylight/unknown),
+ * or specify null if the information is not necessary.
+ * @return A <code>TimeZone</code>, or null if the input could not be parsed.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #parse(Style, String, ParsePosition, EnumSet, Output)
+ * @see #format(Style, TimeZone, long, Output)
+ * @see #setDefaultParseOptions(EnumSet)
+ */
+
+public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style style, java.lang.String text, java.text.ParsePosition pos, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType> timeType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> by parsing the time zone string according to
+ * the given parse position.
+ * <p>
+ * <b>Note</b>: This method is equivalent to {@link #parse(android.icu.text.TimeZoneFormat.Style,java.lang.String,java.text.ParsePosition,java.util.EnumSet,android.icu.util.Output)
+ * parse(Style.GENERIC_LOCATION, text, pos, EnumSet.of(ParseOption.ALL_STYLES), timeType)}.
+ *
+ * @param text the text contains a time zone string at the position.
+ * @param pos the position.
+ * @return A <code>TimeZone</code>, or null if the input could not be parsed.
+ * @see #parse(Style, String, ParsePosition, EnumSet, Output)
+ */
+
+public final android.icu.util.TimeZone parse(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> for the given text.
+ * <p>
+ * <b>Note</b>: The behavior of this method is equivalent to {@link #parse(java.lang.String,java.text.ParsePosition)}.
+ * @param text the time zone string
+ * @return A <code>TimeZone</code>.
+ * @throws java.text.ParseException when the input could not be parsed as a time zone string.
+ * @see #parse(String, ParsePosition)
+ */
+
+public final android.icu.util.TimeZone parse(java.lang.String text) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.TimeZoneFormat freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.TimeZoneFormat cloneAsThawed() { throw new RuntimeException("Stub!"); }
+/**
+ * Offset pattern type enum.
+ *
+ * @see android.icu.text.TimeZoneFormat#getGMTOffsetPattern(GMTOffsetPatternType)
+ * @see android.icu.text.TimeZoneFormat#setGMTOffsetPattern(GMTOffsetPatternType, String)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum GMTOffsetPatternType {
+/**
+ * Positive offset with hours and minutes fields
+ */
+
+POSITIVE_HM,
+/**
+ * Positive offset with hours, minutes and seconds fields
+ */
+
+POSITIVE_HMS,
+/**
+ * Negative offset with hours and minutes fields
+ */
+
+NEGATIVE_HM,
+/**
+ * Negative offset with hours, minutes and seconds fields
+ */
+
+NEGATIVE_HMS,
+/**
+ * Positive offset with hours field
+ */
+
+POSITIVE_H,
+/**
+ * Negative offset with hours field
+ */
+
+NEGATIVE_H;
+}
+
+/**
+ * Parse option enum, used for specifying optional parse behavior.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ParseOption {
+/**
+ * When a time zone display name is not found within a set of display names
+ * used for the specified style, look for the name from display names used
+ * by other styles.
+ */
+
+ALL_STYLES,
+/**
+ * When parsing a time zone display name in {@link android.icu.text.TimeZoneFormat.Style#SPECIFIC_SHORT Style#SPECIFIC_SHORT},
+ * look for the IANA tz database compatible zone abbreviations in addition
+ * to the localized names coming from the {@link android.icu.text.TimeZoneNames TimeZoneNames} currently
+ * used by the {@link android.icu.text.TimeZoneFormat TimeZoneFormat}.
+ */
+
+TZ_DATABASE_ABBREVIATIONS;
+}
+
+/**
+ * Time zone display format style enum used by format/parse APIs in <code>TimeZoneFormat</code>.
+ *
+ * @see android.icu.text.TimeZoneFormat#format(Style, TimeZone, long)
+ * @see android.icu.text.TimeZoneFormat#format(Style, TimeZone, long, Output)
+ * @see android.icu.text.TimeZoneFormat#parse(Style, String, ParsePosition, Output)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Style {
+/**
+ * Generic location format, such as "United States Time (New York)" and "Italy Time".
+ * This style is equivalent to the LDML date format pattern "VVVV".
+ */
+
+GENERIC_LOCATION,
+/**
+ * Generic long non-location format, such as "Eastern Time".
+ * This style is equivalent to the LDML date format pattern "vvvv".
+ */
+
+GENERIC_LONG,
+/**
+ * Generic short non-location format, such as "ET".
+ * This style is equivalent to the LDML date format pattern "v".
+ */
+
+GENERIC_SHORT,
+/**
+ * Specific long format, such as "Eastern Standard Time".
+ * This style is equivalent to the LDML date format pattern "zzzz".
+ */
+
+SPECIFIC_LONG,
+/**
+ * Specific short format, such as "EST", "PDT".
+ * This style is equivalent to the LDML date format pattern "z".
+ */
+
+SPECIFIC_SHORT,
+/**
+ * Localized GMT offset format, such as "GMT-05:00", "UTC+0100"
+ * This style is equivalent to the LDML date format pattern "OOOO" and "ZZZZ"
+ */
+
+LOCALIZED_GMT,
+/**
+ * Short localized GMT offset format, such as "GMT-5", "UTC+1:30"
+ * This style is equivalent to the LDML date format pattern "O".
+ */
+
+LOCALIZED_GMT_SHORT,
+/**
+ * Short ISO 8601 local time difference (basic format) or the UTC indicator.
+ * For example, "-05", "+0530", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "X".
+ */
+
+ISO_BASIC_SHORT,
+/**
+ * Short ISO 8601 locale time difference (basic format).
+ * For example, "-05" and "+0530".
+ * This style is equivalent to the LDML date format pattern "x".
+ */
+
+ISO_BASIC_LOCAL_SHORT,
+/**
+ * Fixed width ISO 8601 local time difference (basic format) or the UTC indicator.
+ * For example, "-0500", "+0530", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XX".
+ */
+
+ISO_BASIC_FIXED,
+/**
+ * Fixed width ISO 8601 local time difference (basic format).
+ * For example, "-0500" and "+0530".
+ * This style is equivalent to the LDML date format pattern "xx".
+ */
+
+ISO_BASIC_LOCAL_FIXED,
+/**
+ * ISO 8601 local time difference (basic format) with optional seconds field, or the UTC indicator.
+ * For example, "-0500", "+052538", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XXXX".
+ */
+
+ISO_BASIC_FULL,
+/**
+ * ISO 8601 local time difference (basic format) with optional seconds field.
+ * For example, "-0500" and "+052538".
+ * This style is equivalent to the LDML date format pattern "xxxx".
+ */
+
+ISO_BASIC_LOCAL_FULL,
+/**
+ * Fixed width ISO 8601 local time difference (extended format) or the UTC indicator.
+ * For example, "-05:00", "+05:30", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XXX".
+ */
+
+ISO_EXTENDED_FIXED,
+/**
+ * Fixed width ISO 8601 local time difference (extended format).
+ * For example, "-05:00" and "+05:30".
+ * This style is equivalent to the LDML date format pattern "xxx" and "ZZZZZ".
+ */
+
+ISO_EXTENDED_LOCAL_FIXED,
+/**
+ * ISO 8601 local time difference (extended format) with optional seconds field, or the UTC indicator.
+ * For example, "-05:00", "+05:25:38", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XXXXX".
+ */
+
+ISO_EXTENDED_FULL,
+/**
+ * ISO 8601 local time difference (extended format) with optional seconds field.
+ * For example, "-05:00" and "+05:25:38".
+ * This style is equivalent to the LDML date format pattern "xxxxx".
+ */
+
+ISO_EXTENDED_LOCAL_FULL,
+/**
+ * Time Zone ID, such as "America/Los_Angeles".
+ */
+
+ZONE_ID,
+/**
+ * Short Time Zone ID (BCP 47 Unicode location extension, time zone type value), such as "uslax".
+ */
+
+ZONE_ID_SHORT,
+/**
+ * Exemplar location, such as "Los Angeles" and "Paris".
+ */
+
+EXEMPLAR_LOCATION;
+}
+
+/**
+ * Time type enum used for receiving time type (standard time, daylight time or unknown)
+ * in <code>TimeZoneFormat</code> APIs.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum TimeType {
+/**
+ * Unknown
+ */
+
+UNKNOWN,
+/**
+ * Standard time
+ */
+
+STANDARD,
+/**
+ * Daylight saving time
+ */
+
+DAYLIGHT;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneNames.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneNames.java
new file mode 100644
index 0000000..296cf54
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneNames.java
@@ -0,0 +1,269 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2011-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.TimeZone;
+import android.icu.util.ULocale;
+
+/**
+ * <code>TimeZoneNames</code> is an abstract class representing the time zone display name data model defined
+ * by <a href="http://www.unicode.org/reports/tr35/">UTS#35 Unicode Locale Data Markup Language (LDML)</a>.
+ * The model defines meta zone, which is used for storing a set of display names. A meta zone can be shared
+ * by multiple time zones. Also a time zone may have multiple meta zone historic mappings.
+ * <p>
+ * For example, people in the United States refer the zone used by the east part of North America as "Eastern Time".
+ * The tz database contains multiple time zones "America/New_York", "America/Detroit", "America/Montreal" and some
+ * others that belong to "Eastern Time". However, assigning different display names to these time zones does not make
+ * much sense for most of people.
+ * <p>
+ * In <a href="http://cldr.unicode.org/">CLDR</a> (which uses LDML for representing locale data), the display name
+ * "Eastern Time" is stored as long generic display name of a meta zone identified by the ID "America_Eastern".
+ * Then, there is another table maintaining the historic mapping to meta zones for each time zone. The time zones in
+ * the above example ("America/New_York", "America/Detroit"...) are mapped to the meta zone "America_Eastern".
+ * <p>
+ * Sometimes, a time zone is mapped to a different time zone in the past. For example, "America/Indiana/Knox"
+ * had been moving "Eastern Time" and "Central Time" back and forth. Therefore, it is necessary that time zone
+ * to meta zones mapping data are stored by date range.
+ *
+ * <p><b>Note:</b>
+ * <p>
+ * {@link android.icu.text.TimeZoneFormat TimeZoneFormat} assumes an instance of <code>TimeZoneNames</code> is immutable. If you want to provide
+ * your own <code>TimeZoneNames</code> implementation and use it with {@link android.icu.text.TimeZoneFormat TimeZoneFormat}, you must follow
+ * the contract.
+ * <p>
+ * The methods in this class assume that time zone IDs are already canonicalized. For example, you may not get proper
+ * result returned by a method with time zone ID "America/Indiana/Indianapolis", because it's not a canonical time zone
+ * ID (the canonical time zone ID for the time zone is "America/Indianapolis". See
+ * {@link android.icu.util.TimeZone#getCanonicalID(java.lang.String) TimeZone#getCanonicalID(String)} about ICU canonical time zone IDs.
+ *
+ * <p>
+ * In CLDR, most of time zone display names except location names are provided through meta zones. But a time zone may
+ * have a specific name that is not shared with other time zones.
+ *
+ * For example, time zone "Europe/London" has English long name for standard time "Greenwich Mean Time", which is also
+ * shared with other time zones. However, the long name for daylight saving time is "British Summer Time", which is only
+ * used for "Europe/London".
+ *
+ * <p>
+ * {@link #getTimeZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)} is designed for accessing a name only used by a single time zone.
+ * But is not necessarily mean that a subclass implementation use the same model with CLDR. A subclass implementation
+ * may provide time zone names only through {@link #getTimeZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)}, or only through
+ * {@link #getMetaZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)}, or both.
+ *
+ * <p>
+ * The default <code>TimeZoneNames</code> implementation returned by {@link #getInstance(android.icu.util.ULocale)} uses the locale data
+ * imported from CLDR. In CLDR, set of meta zone IDs and mappings between zone IDs and meta zone IDs are shared by all
+ * locales. Therefore, the behavior of {@link #getAvailableMetaZoneIDs()}, {@link #getAvailableMetaZoneIDs(java.lang.String)},
+ * {@link #getMetaZoneID(java.lang.String,long)}, and {@link #getReferenceZoneID(java.lang.String,java.lang.String)} won't be changed no matter
+ * what locale is used for getting an instance of <code>TimeZoneNames</code>.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class TimeZoneNames implements java.io.Serializable {
+
+TimeZoneNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>TimeZoneNames</code> for the specified locale.
+ *
+ * @param locale
+ *            The locale.
+ * @return An instance of <code>TimeZoneNames</code>
+ */
+
+public static android.icu.text.TimeZoneNames getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>TimeZoneNames</code> for the specified
+ * {@link java.util.Locale}.
+ *
+ * @param locale
+ *            The {@link java.util.Locale}.
+ * @return An instance of <code>TimeZoneDisplayNames</code>
+ */
+
+public static android.icu.text.TimeZoneNames getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>TimeZoneNames</code> containing only short specific
+ * zone names ({@link android.icu.text.TimeZoneNames.NameType#SHORT_STANDARD NameType#SHORT_STANDARD} and {@link android.icu.text.TimeZoneNames.NameType#SHORT_DAYLIGHT NameType#SHORT_DAYLIGHT}),
+ * compatible with the IANA tz database's zone abbreviations (not localized).
+ * <br>
+ * Note: The input locale is used for resolving ambiguous names (e.g. "IST" is parsed
+ * as Israel Standard Time for Israel, while it is parsed as India Standard Time for
+ * all other regions). The zone names returned by this instance are not localized.
+ */
+
+public static android.icu.text.TimeZoneNames getTZDBInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an immutable set of all available meta zone IDs.
+ * @return An immutable set of all available meta zone IDs.
+ */
+
+public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs();
+
+/**
+ * Returns an immutable set of all available meta zone IDs used by the given time zone.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @return An immutable set of all available meta zone IDs used by the given time zone.
+ */
+
+public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs(java.lang.String tzID);
+
+/**
+ * Returns the meta zone ID for the given canonical time zone ID at the given date.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @param date
+ *            The date.
+ * @return The meta zone ID for the given time zone ID at the given date. If the time zone does not have a
+ *         corresponding meta zone at the given date or the implementation does not support meta zones, null is
+ *         returned.
+ */
+
+public abstract java.lang.String getMetaZoneID(java.lang.String tzID, long date);
+
+/**
+ * Returns the reference zone ID for the given meta zone ID for the region.
+ *
+ * Note: Each meta zone must have a reference zone associated with a special region "001" (world).
+ * Some meta zones may have region specific reference zone IDs other than the special region
+ * "001". When a meta zone does not have any region specific reference zone IDs, this method
+ * return the reference zone ID for the special region "001" (world).
+ *
+ * @param mzID
+ *            The meta zone ID.
+ * @param region
+ *            The region.
+ * @return The reference zone ID ("golden zone" in the LDML specification) for the given time zone ID for the
+ *         region. If the meta zone is unknown or the implementation does not support meta zones, null is returned.
+ */
+
+public abstract java.lang.String getReferenceZoneID(java.lang.String mzID, java.lang.String region);
+
+/**
+ * Returns the display name of the meta zone.
+ *
+ * @param mzID
+ *            The meta zone ID.
+ * @param type
+ *            The display name type. See {@link android.icu.text.TimeZoneNames.NameType TimeZoneNames.NameType}.
+ * @return The display name of the meta zone. When this object does not have a localized display name for the given
+ *         meta zone with the specified type or the implementation does not provide any display names associated
+ *         with meta zones, null is returned.
+ */
+
+public abstract java.lang.String getMetaZoneDisplayName(java.lang.String mzID, android.icu.text.TimeZoneNames.NameType type);
+
+/**
+ * Returns the display name of the time zone at the given date.
+ *
+ * <p>
+ * <b>Note:</b> This method calls the subclass's {@link #getTimeZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)} first. When the
+ * result is null, this method calls {@link #getMetaZoneID(java.lang.String,long)} to get the meta zone ID mapped from the
+ * time zone, then calls {@link #getMetaZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)}.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @param type
+ *            The display name type. See {@link android.icu.text.TimeZoneNames.NameType TimeZoneNames.NameType}.
+ * @param date
+ *            The date
+ * @return The display name for the time zone at the given date. When this object does not have a localized display
+ *         name for the time zone with the specified type and date, null is returned.
+ */
+
+public final java.lang.String getDisplayName(java.lang.String tzID, android.icu.text.TimeZoneNames.NameType type, long date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name of the time zone. Unlike {@link #getDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType,long)},
+ * this method does not get a name from a meta zone used by the time zone.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @param type
+ *            The display name type. See {@link android.icu.text.TimeZoneNames.NameType TimeZoneNames.NameType}.
+ * @return The display name for the time zone. When this object does not have a localized display name for the given
+ *         time zone with the specified type, null is returned.
+ */
+
+public abstract java.lang.String getTimeZoneDisplayName(java.lang.String tzID, android.icu.text.TimeZoneNames.NameType type);
+
+/**
+ * Returns the exemplar location name for the given time zone. When this object does not have a localized location
+ * name, the default implementation may still returns a programmatically generated name with the logic described
+ * below.
+ * <ol>
+ * <li>Check if the ID contains "/". If not, return null.
+ * <li>Check if the ID does not start with "Etc/" or "SystemV/". If it does, return null.
+ * <li>Extract a substring after the last occurrence of "/".
+ * <li>Replace "_" with " ".
+ * </ol>
+ * For example, "New York" is returned for the time zone ID "America/New_York" when this object does not have the
+ * localized location name.
+ *
+ * @param tzID
+ *            The canonical time zone ID
+ * @return The exemplar location name for the given time zone, or null when a localized location name is not
+ *         available and the fallback logic described above cannot extract location from the ID.
+ */
+
+public java.lang.String getExemplarLocationName(java.lang.String tzID) { throw new RuntimeException("Stub!"); }
+/**
+ * Time zone display name types
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum NameType {
+/**
+ * Long display name, such as "Eastern Time".
+ */
+
+LONG_GENERIC,
+/**
+ * Long display name for standard time, such as "Eastern Standard Time".
+ */
+
+LONG_STANDARD,
+/**
+ * Long display name for daylight saving time, such as "Eastern Daylight Time".
+ */
+
+LONG_DAYLIGHT,
+/**
+ * Short display name, such as "ET".
+ */
+
+SHORT_GENERIC,
+/**
+ * Short display name for standard time, such as "EST".
+ */
+
+SHORT_STANDARD,
+/**
+ * Short display name for daylight saving time, such as "EDT".
+ */
+
+SHORT_DAYLIGHT,
+/**
+ * Exemplar location name, such as "Los Angeles".
+ */
+
+EXEMPLAR_LOCATION;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Transliterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Transliterator.java
new file mode 100644
index 0000000..980b130
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/Transliterator.java
@@ -0,0 +1,977 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+import java.util.Enumeration;
+
+/**
+ * <code>Transliterator</code> is an abstract class that transliterates text from one format to another. The most common
+ * kind of transliterator is a script, or alphabet, transliterator. For example, a Russian to Latin transliterator
+ * changes Russian text written in Cyrillic characters to phonetically equivalent Latin characters. It does not
+ * <em>translate</em> Russian to English! Transliteration, unlike translation, operates on characters, without reference
+ * to the meanings of words and sentences.
+ *
+ * <p>
+ * Although script conversion is its most common use, a transliterator can actually perform a more general class of
+ * tasks. In fact, <code>Transliterator</code> defines a very general API which specifies only that a segment of the
+ * input text is replaced by new text. The particulars of this conversion are determined entirely by subclasses of
+ * <code>Transliterator</code>.
+ *
+ * <p>
+ * <b>Transliterators are stateless</b>
+ *
+ * <p>
+ * <code>Transliterator</code> objects are <em>stateless</em>; they retain no information between calls to
+ * <code>transliterate()</code>. As a result, threads may share transliterators without synchronizing them. This might
+ * seem to limit the complexity of the transliteration operation. In practice, subclasses perform complex
+ * transliterations by delaying the replacement of text until it is known that no other replacements are possible. In
+ * other words, although the <code>Transliterator</code> objects are stateless, the source text itself embodies all the
+ * needed information, and delayed operation allows arbitrary complexity.
+ *
+ * <p>
+ * <b>Batch transliteration</b>
+ *
+ * <p>
+ * The simplest way to perform transliteration is all at once, on a string of existing text. This is referred to as
+ * <em>batch</em> transliteration. For example, given a string <code>input</code> and a transliterator <code>t</code>,
+ * the call
+ *
+ * <blockquote><code>String result = t.transliterate(input);
+ * </code></blockquote>
+ *
+ * will transliterate it and return the result. Other methods allow the client to specify a substring to be
+ * transliterated and to use {@link android.icu.text.Replaceable Replaceable} objects instead of strings, in order to preserve out-of-band
+ * information (such as text styles).
+ *
+ * <p>
+ * <b>Keyboard transliteration</b>
+ *
+ * <p>
+ * Somewhat more involved is <em>keyboard</em>, or incremental transliteration. This is the transliteration of text that
+ * is arriving from some source (typically the user's keyboard) one character at a time, or in some other piecemeal
+ * fashion.
+ *
+ * <p>
+ * In keyboard transliteration, a <code>Replaceable</code> buffer stores the text. As text is inserted, as much as
+ * possible is transliterated on the fly. This means a GUI that displays the contents of the buffer may show text being
+ * modified as each new character arrives.
+ *
+ * <p>
+ * Consider the simple rule-based Transliterator:
+ *
+ * <blockquote><code>
+ * th&gt;{theta}<br>
+ * t&gt;{tau}
+ * </code></blockquote>
+ *
+ * When the user types 't', nothing will happen, since the transliterator is waiting to see if the next character is
+ * 'h'. To remedy this, we introduce the notion of a cursor, marked by a '|' in the output string:
+ *
+ * <blockquote><code>
+ * t&gt;|{tau}<br>
+ * {tau}h&gt;{theta}
+ * </code></blockquote>
+ *
+ * Now when the user types 't', tau appears, and if the next character is 'h', the tau changes to a theta. This is
+ * accomplished by maintaining a cursor position (independent of the insertion point, and invisible in the GUI) across
+ * calls to <code>transliterate()</code>. Typically, the cursor will be coincident with the insertion point, but in a
+ * case like the one above, it will precede the insertion point.
+ *
+ * <p>
+ * Keyboard transliteration methods maintain a set of three indices that are updated with each call to
+ * <code>transliterate()</code>, including the cursor, start, and limit. These indices are changed by the method, and
+ * they are passed in and out via a Position object. The <code>start</code> index marks the beginning of the substring
+ * that the transliterator will look at. It is advanced as text becomes committed (but it is not the committed index;
+ * that's the <code>cursor</code>). The <code>cursor</code> index, described above, marks the point at which the
+ * transliterator last stopped, either because it reached the end, or because it required more characters to
+ * disambiguate between possible inputs. The <code>cursor</code> can also be explicitly set by rules.
+ * Any characters before the <code>cursor</code> index are frozen; future keyboard
+ * transliteration calls within this input sequence will not change them. New text is inserted at the <code>limit</code>
+ * index, which marks the end of the substring that the transliterator looks at.
+ *
+ * <p>
+ * Because keyboard transliteration assumes that more characters are to arrive, it is conservative in its operation. It
+ * only transliterates when it can do so unambiguously. Otherwise it waits for more characters to arrive. When the
+ * client code knows that no more characters are forthcoming, perhaps because the user has performed some input
+ * termination operation, then it should call <code>finishTransliteration()</code> to complete any pending
+ * transliterations.
+ *
+ * <p>
+ * <b>Inverses</b>
+ *
+ * <p>
+ * Pairs of transliterators may be inverses of one another. For example, if transliterator <b>A</b> transliterates
+ * characters by incrementing their Unicode value (so "abc" -&gt; "def"), and transliterator <b>B</b> decrements character
+ * values, then <b>A</b> is an inverse of <b>B</b> and vice versa. If we compose <b>A</b> with <b>B</b> in a compound
+ * transliterator, the result is the indentity transliterator, that is, a transliterator that does not change its input
+ * text.
+ *
+ * The <code>Transliterator</code> method <code>getInverse()</code> returns a transliterator's inverse, if one exists,
+ * or <code>null</code> otherwise. However, the result of <code>getInverse()</code> usually will <em>not</em> be a true
+ * mathematical inverse. This is because true inverse transliterators are difficult to formulate. For example, consider
+ * two transliterators: <b>AB</b>, which transliterates the character 'A' to 'B', and <b>BA</b>, which transliterates
+ * 'B' to 'A'. It might seem that these are exact inverses, since
+ *
+ * <blockquote>"A" x <b>AB</b> -&gt; "B"<br>
+ * "B" x <b>BA</b> -&gt; "A"</blockquote>
+ *
+ * where 'x' represents transliteration. However,
+ *
+ * <blockquote>"ABCD" x <b>AB</b> -&gt; "BBCD"<br>
+ * "BBCD" x <b>BA</b> -&gt; "AACD"</blockquote>
+ *
+ * so <b>AB</b> composed with <b>BA</b> is not the identity. Nonetheless, <b>BA</b> may be usefully considered to be
+ * <b>AB</b>'s inverse, and it is on this basis that <b>AB</b><code>.getInverse()</code> could legitimately return
+ * <b>BA</b>.
+ *
+ * <p>
+ * <b>Filtering</b>
+ * <p>Each transliterator has a filter, which restricts changes to those characters selected by the filter. The
+ * filter affects just the characters that are changed -- the characters outside of the filter are still part of the
+ * context for the filter. For example, in the following even though 'x' is filtered out, and doesn't convert to y, it does affect the conversion of 'a'.
+ *
+ * <pre>
+ * String rules = &quot;x &gt; y; x{a} &gt; b; &quot;;
+ * Transliterator tempTrans = Transliterator.createFromRules(&quot;temp&quot;, rules, Transliterator.FORWARD);
+ * tempTrans.setFilter(new UnicodeSet(&quot;[a]&quot;));
+ * String tempResult = tempTrans.transform(&quot;xa&quot;);
+ * // results in &quot;xb&quot;
+ *</pre>
+ * <p>
+ * <b>IDs and display names</b>
+ *
+ * <p>
+ * A transliterator is designated by a short identifier string or <em>ID</em>. IDs follow the format
+ * <em>source-destination</em>, where <em>source</em> describes the entity being replaced, and <em>destination</em>
+ * describes the entity replacing <em>source</em>. The entities may be the names of scripts, particular sequences of
+ * characters, or whatever else it is that the transliterator converts to or from. For example, a transliterator from
+ * Russian to Latin might be named "Russian-Latin". A transliterator from keyboard escape sequences to Latin-1
+ * characters might be named "KeyboardEscape-Latin1". By convention, system entity names are in English, with the
+ * initial letters of words capitalized; user entity names may follow any format so long as they do not contain dashes.
+ *
+ * <p>
+ * In addition to programmatic IDs, transliterator objects have display names for presentation in user interfaces,
+ * returned by {@link #getDisplayName}.
+ *
+ * <p>
+ * <b>Composed transliterators</b>
+ *
+ * <p>
+ * In addition to built-in system transliterators like "Latin-Greek", there are also built-in <em>composed</em>
+ * transliterators. These are implemented by composing two or more component transliterators. For example, if we have
+ * scripts "A", "B", "C", and "D", and we want to transliterate between all pairs of them, then we need to write 12
+ * transliterators: "A-B", "A-C", "A-D", "B-A",..., "D-A", "D-B", "D-C". If it is possible to convert all scripts to an
+ * intermediate script "M", then instead of writing 12 rule sets, we only need to write 8: "A~M", "B~M", "C~M", "D~M",
+ * "M~A", "M~B", "M~C", "M~D". (This might not seem like a big win, but it's really 2<em>n</em> vs. <em>n</em>
+ * <sup>2</sup> - <em>n</em>, so as <em>n</em> gets larger the gain becomes significant. With 9 scripts, it's 18 vs. 72
+ * rule sets, a big difference.) Note the use of "~" rather than "-" for the script separator here; this indicates that
+ * the given transliterator is intended to be composed with others, rather than be used as is.
+ *
+ * <p>
+ * Composed transliterators can be instantiated as usual. For example, the system transliterator "Devanagari-Gujarati"
+ * is a composed transliterator built internally as "Devanagari~InterIndic;InterIndic~Gujarati". When this
+ * transliterator is instantiated, it appears externally to be a standard transliterator (e.g., getID() returns
+ * "Devanagari-Gujarati").
+ *
+ * <p><b>Rule syntax</b>
+ *
+ * <p>A set of rules determines how to perform translations.
+ * Rules within a rule set are separated by semicolons (';').
+ * To include a literal semicolon, prefix it with a backslash ('\').
+ * Unicode Pattern_White_Space is ignored.
+ * If the first non-blank character on a line is '#',
+ * the entire line is ignored as a comment.
+ *
+ * <p>Each set of rules consists of two groups, one forward, and one
+ * reverse. This is a convention that is not enforced; rules for one
+ * direction may be omitted, with the result that translations in
+ * that direction will not modify the source text. In addition,
+ * bidirectional forward-reverse rules may be specified for
+ * symmetrical transformations.
+ *
+ * <p>Note: Another description of the Transliterator rule syntax is available in
+ * <a href="https://www.unicode.org/reports/tr35/tr35-general.html#Transform_Rules_Syntax">section
+ * Transform Rules Syntax of UTS #35: Unicode LDML</a>.
+ * The rules are shown there using arrow symbols ? and ? and ?.
+ * ICU supports both those and the equivalent ASCII symbols &lt; and &gt; and &lt;&gt;.
+ *
+ * <p>Rule statements take one of the following forms:
+ *
+ * <dl>
+ *     <dt><code>$alefmadda=\\u0622;</code></dt>
+ *     <dd><strong>Variable definition.</strong> The name on the
+ *         left is assigned the text on the right. In this example,
+ *         after this statement, instances of the left hand name,
+ *         &quot;<code>$alefmadda</code>&quot;, will be replaced by
+ *         the Unicode character U+0622. Variable names must begin
+ *         with a letter and consist only of letters, digits, and
+ *         underscores. Case is significant. Duplicate names cause
+ *         an exception to be thrown, that is, variables cannot be
+ *         redefined. The right hand side may contain well-formed
+ *         text of any length, including no text at all (&quot;<code>$empty=;</code>&quot;).
+ *         The right hand side may contain embedded <code>UnicodeSet</code>
+ *         patterns, for example, &quot;<code>$softvowel=[eiyEIY]</code>&quot;.</dd>
+ *     <dt><code>ai&gt;$alefmadda;</code></dt>
+ *     <dd><strong>Forward translation rule.</strong> This rule
+ *         states that the string on the left will be changed to the
+ *         string on the right when performing forward
+ *         transliteration.</dd>
+ *     <dt><code>ai&lt;$alefmadda;</code></dt>
+ *     <dd><strong>Reverse translation rule.</strong> This rule
+ *         states that the string on the right will be changed to
+ *         the string on the left when performing reverse
+ *         transliteration.</dd>
+ * </dl>
+ *
+ * <dl>
+ *     <dt><code>ai&lt;&gt;$alefmadda;</code></dt>
+ *     <dd><strong>Bidirectional translation rule.</strong> This
+ *         rule states that the string on the right will be changed
+ *         to the string on the left when performing forward
+ *         transliteration, and vice versa when performing reverse
+ *         transliteration.</dd>
+ * </dl>
+ *
+ * <p>Translation rules consist of a <em>match pattern</em> and an <em>output
+ * string</em>. The match pattern consists of literal characters,
+ * optionally preceded by context, and optionally followed by
+ * context. Context characters, like literal pattern characters,
+ * must be matched in the text being transliterated. However, unlike
+ * literal pattern characters, they are not replaced by the output
+ * text. For example, the pattern &quot;<code>abc{def}</code>&quot;
+ * indicates the characters &quot;<code>def</code>&quot; must be
+ * preceded by &quot;<code>abc</code>&quot; for a successful match.
+ * If there is a successful match, &quot;<code>def</code>&quot; will
+ * be replaced, but not &quot;<code>abc</code>&quot;. The final '<code>}</code>'
+ * is optional, so &quot;<code>abc{def</code>&quot; is equivalent to
+ * &quot;<code>abc{def}</code>&quot;. Another example is &quot;<code>{123}456</code>&quot;
+ * (or &quot;<code>123}456</code>&quot;) in which the literal
+ * pattern &quot;<code>123</code>&quot; must be followed by &quot;<code>456</code>&quot;.
+ *
+ * <p>The output string of a forward or reverse rule consists of
+ * characters to replace the literal pattern characters. If the
+ * output string contains the character '<code>|</code>', this is
+ * taken to indicate the location of the <em>cursor</em> after
+ * replacement. The cursor is the point in the text at which the
+ * next replacement, if any, will be applied. The cursor is usually
+ * placed within the replacement text; however, it can actually be
+ * placed into the precending or following context by using the
+ * special character '@'. Examples:
+ *
+ * <pre>
+ *     a {foo} z &gt; | @ bar; # foo -&gt; bar, move cursor before a
+ *     {foo} xyz &gt; bar @@|; #&nbsp;foo -&gt; bar, cursor between y and z
+ * </pre>
+ *
+ * <p><b>UnicodeSet</b>
+ *
+ * <p><code>UnicodeSet</code> patterns may appear anywhere that
+ * makes sense. They may appear in variable definitions.
+ * Contrariwise, <code>UnicodeSet</code> patterns may themselves
+ * contain variable references, such as &quot;<code>$a=[a-z];$not_a=[^$a]</code>&quot;,
+ * or &quot;<code>$range=a-z;$ll=[$range]</code>&quot;.
+ *
+ * <p><code>UnicodeSet</code> patterns may also be embedded directly
+ * into rule strings. Thus, the following two rules are equivalent:
+ *
+ * <pre>
+ *     $vowel=[aeiou]; $vowel&gt;'*'; # One way to do this
+ *     [aeiou]&gt;'*'; # Another way
+ * </pre>
+ *
+ * <p>See {@link android.icu.text.UnicodeSet UnicodeSet} for more documentation and examples.
+ *
+ * <p><b>Segments</b>
+ *
+ * <p>Segments of the input string can be matched and copied to the
+ * output string. This makes certain sets of rules simpler and more
+ * general, and makes reordering possible. For example:
+ *
+ * <pre>
+ *     ([a-z]) &gt; $1 $1; # double lowercase letters
+ *     ([:Lu:]) ([:Ll:]) &gt; $2 $1; # reverse order of Lu-Ll pairs
+ * </pre>
+ *
+ * <p>The segment of the input string to be copied is delimited by
+ * &quot;<code>(</code>&quot; and &quot;<code>)</code>&quot;. Up to
+ * nine segments may be defined. Segments may not overlap. In the
+ * output string, &quot;<code>$1</code>&quot; through &quot;<code>$9</code>&quot;
+ * represent the input string segments, in left-to-right order of
+ * definition.
+ *
+ * <p><b>Anchors</b>
+ *
+ * <p>Patterns can be anchored to the beginning or the end of the text. This is done with the
+ * special characters '<code>^</code>' and '<code>$</code>'. For example:
+ *
+ * <pre>
+ *   ^ a&nbsp;&nbsp; &gt; 'BEG_A'; &nbsp;&nbsp;# match 'a' at start of text
+ *   &nbsp; a&nbsp;&nbsp; &gt; 'A'; # match other instances of 'a'
+ *   &nbsp; z $ &gt; 'END_Z'; &nbsp;&nbsp;# match 'z' at end of text
+ *   &nbsp; z&nbsp;&nbsp; &gt; 'Z';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # match other instances of 'z'
+ * </pre>
+ *
+ * <p>It is also possible to match the beginning or the end of the text using a <code>UnicodeSet</code>.
+ * This is done by including a virtual anchor character '<code>$</code>' at the end of the
+ * set pattern. Although this is usually the match chafacter for the end anchor, the set will
+ * match either the beginning or the end of the text, depending on its placement. For
+ * example:
+ *
+ * <pre>
+ *   $x = [a-z$]; &nbsp;&nbsp;# match 'a' through 'z' OR anchor
+ *   $x 1&nbsp;&nbsp;&nbsp; &gt; 2;&nbsp;&nbsp; # match '1' after a-z or at the start
+ *   &nbsp;&nbsp; 3 $x &gt; 4; &nbsp;&nbsp;# match '3' before a-z or at the end
+ * </pre>
+ *
+ * <p><b>Example</b>
+ *
+ * <p>The following example rules illustrate many of the features of
+ * the rule language.
+ *
+ * <table border="0" cellpadding="4">
+ *     <tr>
+ *         <td style="vertical-align: top;">Rule 1.</td>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>abc{def}&gt;x|y</code></td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top;">Rule 2.</td>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>xyz&gt;r</code></td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top;">Rule 3.</td>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>yz&gt;q</code></td>
+ *     </tr>
+ * </table>
+ *
+ * <p>Applying these rules to the string &quot;<code>adefabcdefz</code>&quot;
+ * yields the following results:
+ *
+ * <table border="0" cellpadding="4">
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>|adefabcdefz</code></td>
+ *         <td style="vertical-align: top;">Initial state, no rules match. Advance
+ *         cursor.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>a|defabcdefz</code></td>
+ *         <td style="vertical-align: top;">Still no match. Rule 1 does not match
+ *         because the preceding context is not present.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>ad|efabcdefz</code></td>
+ *         <td style="vertical-align: top;">Still no match. Keep advancing until
+ *         there is a match...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>ade|fabcdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adef|abcdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefa|bcdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefab|cdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefabc|defz</code></td>
+ *         <td style="vertical-align: top;">Rule 1 matches; replace &quot;<code>def</code>&quot;
+ *         with &quot;<code>xy</code>&quot; and back up the cursor
+ *         to before the '<code>y</code>'.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefabcx|yz</code></td>
+ *         <td style="vertical-align: top;">Although &quot;<code>xyz</code>&quot; is
+ *         present, rule 2 does not match because the cursor is
+ *         before the '<code>y</code>', not before the '<code>x</code>'.
+ *         Rule 3 does match. Replace &quot;<code>yz</code>&quot;
+ *         with &quot;<code>q</code>&quot;.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefabcxq|</code></td>
+ *         <td style="vertical-align: top;">The cursor is at the end;
+ *         transliteration is complete.</td>
+ *     </tr>
+ * </table>
+ *
+ * <p>The order of rules is significant. If multiple rules may match
+ * at some point, the first matching rule is applied.
+ *
+ * <p>Forward and reverse rules may have an empty output string.
+ * Otherwise, an empty left or right hand side of any statement is a
+ * syntax error.
+ *
+ * <p>Single quotes are used to quote any character other than a
+ * digit or letter. To specify a single quote itself, inside or
+ * outside of quotes, use two single quotes in a row. For example,
+ * the rule &quot;<code>'&gt;'&gt;o''clock</code>&quot; changes the
+ * string &quot;<code>&gt;</code>&quot; to the string &quot;<code>o'clock</code>&quot;.
+ *
+ * <p><b>Notes</b>
+ *
+ * <p>While a Transliterator is being built from rules, it checks that
+ * the rules are added in proper order. For example, if the rule
+ * &quot;a&gt;x&quot; is followed by the rule &quot;ab&gt;y&quot;,
+ * then the second rule will throw an exception. The reason is that
+ * the second rule can never be triggered, since the first rule
+ * always matches anything it matches. In other words, the first
+ * rule <em>masks</em> the second rule.
+ *
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Transliterator {
+
+Transliterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates a segment of a string, with optional filtering.
+ *
+ * @param text the string to be transliterated
+ * @param start the beginning index, inclusive; <code>0 &lt;= start
+ * &lt;= limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit
+ * &lt;= text.length()</code>.
+ * @return The new limit index.  The text previously occupying <code>[start,
+ * limit)</code> has been transliterated, possibly to a string of a different
+ * length, at <code>[start, </code><em>new-limit</em><code>)</code>, where
+ * <em>new-limit</em> is the return value. If the input offsets are out of bounds,
+ * the returned value is -1 and the input string remains unchanged.
+ */
+
+public final int transliterate(android.icu.text.Replaceable text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates an entire string in place. Convenience method.
+ * @param text the string to be transliterated
+ */
+
+public final void transliterate(android.icu.text.Replaceable text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterate an entire string and returns the result. Convenience method.
+ *
+ * @param text the string to be transliterated
+ * @return The transliterated text
+ */
+
+public final java.lang.String transliterate(java.lang.String text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates the portion of the text buffer that can be
+ * transliterated unambiguosly after new text has been inserted,
+ * typically as a result of a keyboard event.  The new text in
+ * <code>insertion</code> will be inserted into <code>text</code>
+ * at <code>index.contextLimit</code>, advancing
+ * <code>index.contextLimit</code> by <code>insertion.length()</code>.
+ * Then the transliterator will try to transliterate characters of
+ * <code>text</code> between <code>index.start</code> and
+ * <code>index.contextLimit</code>.  Characters before
+ * <code>index.start</code> will not be changed.
+ *
+ * <p>Upon return, values in <code>index</code> will be updated.
+ * <code>index.contextStart</code> will be advanced to the first
+ * character that future calls to this method will read.
+ * <code>index.start</code> and <code>index.contextLimit</code> will
+ * be adjusted to delimit the range of text that future calls to
+ * this method may change.
+ *
+ * <p>Typical usage of this method begins with an initial call
+ * with <code>index.contextStart</code> and <code>index.contextLimit</code>
+ * set to indicate the portion of <code>text</code> to be
+ * transliterated, and <code>index.start == index.contextStart</code>.
+ * Thereafter, <code>index</code> can be used without
+ * modification in future calls, provided that all changes to
+ * <code>text</code> are made via this method.
+ *
+ * <p>This method assumes that future calls may be made that will
+ * insert new text into the buffer.  As a result, it only performs
+ * unambiguous transliterations.  After the last call to this
+ * method, there may be untransliterated text that is waiting for
+ * more input to resolve an ambiguity.  In order to perform these
+ * pending transliterations, clients should call {@link
+ * #finishTransliteration} after the last call to this
+ * method has been made.
+ *
+ * @param text the buffer holding transliterated and untransliterated text
+ * @param index the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @param insertion text to be inserted and possibly
+ * transliterated into the translation buffer at
+ * <code>index.contextLimit</code>.  If <code>null</code> then no text
+ * is inserted.
+ * @exception java.lang.IllegalArgumentException if <code>index</code>
+ * is invalid
+ */
+
+public final void transliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index, java.lang.String insertion) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates the portion of the text buffer that can be
+ * transliterated unambiguosly after a new character has been
+ * inserted, typically as a result of a keyboard event.  This is a
+ * convenience method; see {@link #transliterate(android.icu.text.Replaceable,android.icu.text.Transliterator.Position,java.lang.String)} for details.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @param insertion text to be inserted and possibly
+ * transliterated into the translation buffer at
+ * <code>index.contextLimit</code>.
+ * @see #transliterate(Replaceable, Transliterator.Position, String)
+ */
+
+public final void transliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index, int insertion) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates the portion of the text buffer that can be
+ * transliterated unambiguosly.  This is a convenience method; see
+ * {@link #transliterate(android.icu.text.Replaceable,android.icu.text.Transliterator.Position,java.lang.String)} for details.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @see #transliterate(Replaceable, Transliterator.Position, String)
+ */
+
+public final void transliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Finishes any pending transliterations that were waiting for
+ * more characters.  Clients should call this method as the last
+ * call after a sequence of one or more calls to
+ * <code>transliterate()</code>.
+ * @param text the buffer holding transliterated and
+ * untransliterated text.
+ * @param index the array of indices previously passed to {@link
+ * #transliterate}
+ */
+
+public final void finishTransliteration(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterate a substring of text, as specified by index, taking filters
+ * into account.  This method is for subclasses that need to delegate to
+ * another transliterator.
+ * @param text the text to be transliterated
+ * @param index the position indices
+ * @param incremental if TRUE, then assume more characters may be inserted
+ * at index.limit, and postpone processing to accomodate future incoming
+ * characters
+ */
+
+public void filteredTransliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index, boolean incremental) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the longest context required by this transliterator.
+ * This is <em>preceding</em> context.  The default value is zero, but
+ * subclasses can change this by calling <code>setMaximumContextLength()</code>.
+ * For example, if a transliterator translates "ddd" (where
+ * d is any digit) to "555" when preceded by "(ddd)", then the preceding
+ * context length is 5, the length of "(ddd)".
+ *
+ * @return The maximum number of preceding context characters this
+ * transliterator needs to examine
+ */
+
+public final int getMaximumContextLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a programmatic identifier for this transliterator.
+ * If this identifier is passed to <code>getInstance()</code>, it
+ * will return this object, if it has been registered.
+ * @see #getAvailableIDs
+ */
+
+public final java.lang.String getID() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name for this transliterator that is appropriate for
+ * display to the user in the default <code>DISPLAY</code> locale.  See {@link
+ * #getDisplayName(java.lang.String,java.util.Locale)} for details.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static final java.lang.String getDisplayName(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name for this transliterator that is appropriate for
+ * display to the user in the given locale.  This name is taken
+ * from the locale resource data in the standard manner of the
+ * <code>java.text</code> package.
+ *
+ * <p>If no localized names exist in the system resource bundles,
+ * a name is synthesized using a localized
+ * <code>MessageFormat</code> pattern from the resource data.  The
+ * arguments to this pattern are an integer followed by one or two
+ * strings.  The integer is the number of strings, either 1 or 2.
+ * The strings are formed by splitting the ID for this
+ * transliterator at the first '-'.  If there is no '-', then the
+ * entire ID forms the only string.
+ * @param inLocale the Locale in which the display name should be
+ * localized.
+ * @see java.text.MessageFormat
+ */
+
+public static java.lang.String getDisplayName(java.lang.String id, java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name for this transliterator that is appropriate for
+ * display to the user in the given locale.  This name is taken
+ * from the locale resource data in the standard manner of the
+ * <code>java.text</code> package.
+ *
+ * <p>If no localized names exist in the system resource bundles,
+ * a name is synthesized using a localized
+ * <code>MessageFormat</code> pattern from the resource data.  The
+ * arguments to this pattern are an integer followed by one or two
+ * strings.  The integer is the number of strings, either 1 or 2.
+ * The strings are formed by splitting the ID for this
+ * transliterator at the first '-'.  If there is no '-', then the
+ * entire ID forms the only string.
+ * @param inLocale the ULocale in which the display name should be
+ * localized.
+ * @see java.text.MessageFormat
+ */
+
+public static java.lang.String getDisplayName(java.lang.String id, android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the filter used by this transliterator, or <tt>null</tt>
+ * if this transliterator uses no filter.
+ */
+
+public final android.icu.text.UnicodeFilter getFilter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Changes the filter used by this transliterator.  If the filter
+ * is set to <tt>null</tt> then no filtering will occur.
+ *
+ * <p>Callers must take care if a transliterator is in use by
+ * multiple threads.  The filter should not be changed by one
+ * thread while another thread may be transliterating.
+ */
+
+public void setFilter(android.icu.text.UnicodeFilter filter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>Transliterator</code> object given its ID.
+ * The ID must be a system transliterator ID.
+ *
+ * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
+ * @return A <code>Transliterator</code> object with the given ID
+ * @exception java.lang.IllegalArgumentException if the given ID is invalid.
+ */
+
+public static final android.icu.text.Transliterator getInstance(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>Transliterator</code> object given its ID.
+ * The ID must be a system transliterator ID.
+ *
+ * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
+ * @param dir either FORWARD or REVERSE.  If REVERSE then the
+ * inverse of the given ID is instantiated.
+ * @return A <code>Transliterator</code> object with the given ID
+ * @exception java.lang.IllegalArgumentException if the given ID is invalid.
+ * @see #getAvailableIDs
+ * @see #getID
+ */
+
+public static android.icu.text.Transliterator getInstance(java.lang.String ID, int dir) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>Transliterator</code> object constructed from
+ * the given rule string.  This will be a rule-based Transliterator,
+ * if the rule string contains only rules, or a
+ * compound Transliterator, if it contains ID blocks, or a
+ * null Transliterator, if it contains ID blocks which parse as
+ * empty for the given direction.
+ *
+ * @param ID the id for the transliterator.
+ * @param rules rules, separated by ';'
+ * @param dir either FORWARD or REVERSE.
+ * @return a newly created Transliterator
+ * @throws java.lang.IllegalArgumentException if there is a problem with the ID or the rules
+ */
+
+public static final android.icu.text.Transliterator createFromRules(java.lang.String ID, java.lang.String rules, int dir) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a rule string for this transliterator.
+ * @param escapeUnprintable if true, then unprintable characters
+ * will be converted to escape form backslash-'u' or
+ * backslash-'U'.
+ */
+
+public java.lang.String toRules(boolean escapeUnprintable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the elements that make up this transliterator.  For
+ * example, if the transliterator "NFD;Jamo-Latin;Latin-Greek"
+ * were created, the return value of this method would be an array
+ * of the three transliterator objects that make up that
+ * transliterator: [NFD, Jamo-Latin, Latin-Greek].
+ *
+ * <p>If this transliterator is not composed of other
+ * transliterators, then this method will return an array of
+ * length one containing a reference to this transliterator.
+ * @return an array of one or more transliterators that make up
+ * this transliterator
+ */
+
+public android.icu.text.Transliterator[] getElements() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of all characters that may be modified in the
+ * input text by this Transliterator.  This incorporates this
+ * object's current filter; if the filter is changed, the return
+ * value of this function will change.  The default implementation
+ * returns an empty set. The return result is approximate in any case
+ * and is intended for use by tests, tools, or utilities.
+ * @see #getTargetSet
+ */
+
+public final android.icu.text.UnicodeSet getSourceSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of all characters that may be generated as
+ * replacement text by this transliterator.  The default
+ * implementation returns the empty set.  Some subclasses may
+ * override this method to return a more precise result.  The
+ * return result is approximate in any case and is intended for
+ * use by tests, tools, or utilities requiring such
+ * meta-information.
+ * <p>Warning. You might expect an empty filter to always produce an empty target.
+ * However, consider the following:
+ * <pre>
+ * [Pp]{}[\u03A3\u03C2\u03C3\u03F7\u03F8\u03FA\u03FB] &gt; \';
+ * </pre>
+ * With a filter of [], you still get some elements in the target set, because this rule will still match. It could
+ * be recast to the following if it were important.
+ * <pre>
+ * [Pp]{([\u03A3\u03C2\u03C3\u03F7\u03F8\u03FA\u03FB])} &gt; \' | $1;
+ * </pre>
+ * @see #getTargetSet
+ */
+
+public android.icu.text.UnicodeSet getTargetSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this transliterator's inverse.  See the class
+ * documentation for details.  This implementation simply inverts
+ * the two entities in the ID and attempts to retrieve the
+ * resulting transliterator.  That is, if <code>getID()</code>
+ * returns "A-B", then this method will return the result of
+ * <code>getInstance("B-A")</code>, or <code>null</code> if that
+ * call fails.
+ *
+ * <p>Subclasses with knowledge of their inverse may wish to
+ * override this method.
+ *
+ * @return a transliterator that is an inverse, not necessarily
+ * exact, of this transliterator, or <code>null</code> if no such
+ * transliterator is registered.
+ */
+
+public final android.icu.text.Transliterator getInverse() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the programmatic names of registered
+ * <code>Transliterator</code> objects.  This includes both system
+ * transliterators and user transliterators registered using
+ * <code>registerClass()</code>.  The enumerated names may be
+ * passed to <code>getInstance()</code>.
+ *
+ * @return An <code>Enumeration</code> over <code>String</code> objects
+ * @see #getInstance
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableIDs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the source names of registered
+ * transliterators.  Source names may be passed to
+ * getAvailableTargets() to obtain available targets for each
+ * source.
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableSources() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the target names of registered
+ * transliterators having a given source name.  Target names may
+ * be passed to getAvailableVariants() to obtain available
+ * variants for each source and target pair.
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableTargets(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the variant names of registered
+ * transliterators having a given source name and target name.
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableVariants(java.lang.String source, java.lang.String target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Direction constant indicating the forward direction in a transliterator,
+ * e.g., the forward rules of a rule-based Transliterator.  An "A-B"
+ * transliterator transliterates A to B when operating in the forward
+ * direction, and B to A when operating in the reverse direction.
+ */
+
+public static final int FORWARD = 0; // 0x0
+
+/**
+ * Direction constant indicating the reverse direction in a transliterator,
+ * e.g., the reverse rules of a rule-based Transliterator.  An "A-B"
+ * transliterator transliterates A to B when operating in the forward
+ * direction, and B to A when operating in the reverse direction.
+ */
+
+public static final int REVERSE = 1; // 0x1
+/**
+ * Position structure for incremental transliteration.  This data
+ * structure defines two substrings of the text being
+ * transliterated.  The first region, [contextStart,
+ * contextLimit), defines what characters the transliterator will
+ * read as context.  The second region, [start, limit), defines
+ * what characters will actually be transliterated.  The second
+ * region should be a subset of the first.
+ *
+ * <p>After a transliteration operation, some of the indices in this
+ * structure will be modified.  See the field descriptions for
+ * details.
+ *
+ * <p>contextStart &lt;= start &lt;= limit &lt;= contextLimit
+ *
+ * <p>Note: All index values in this structure must be at code point
+ * boundaries.  That is, none of them may occur between two code units
+ * of a surrogate pair.  If any index does split a surrogate pair,
+ * results are unspecified.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Position {
+
+/**
+ * Constructs a Position object with start, limit,
+ * contextStart, and contextLimit all equal to zero.
+ */
+
+public Position() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a Position object with the given start,
+ * contextStart, and contextLimit.  The limit is set to the
+ * contextLimit.
+ */
+
+public Position(int contextStart, int contextLimit, int start) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a Position object with the given start, limit,
+ * contextStart, and contextLimit.
+ */
+
+public Position(int contextStart, int contextLimit, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a Position object that is a copy of another.
+ */
+
+public Position(android.icu.text.Transliterator.Position pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Copies the indices of this position from another.
+ */
+
+public void set(android.icu.text.Transliterator.Position pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this Position is equal to the given object.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this Position.
+ * @return a string representation of the object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Check all bounds.  If they are invalid, throw an exception.
+ * @param length the length of the string this object applies to
+ * @exception java.lang.IllegalArgumentException if any indices are out
+ * of bounds
+ */
+
+public final void validate(int length) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ending index, exclusive, of the context to be considered for a
+ * transliteration operation.  The transliterator will ignore
+ * anything at or after this index.  INPUT/OUTPUT parameter: This
+ * parameter is updated to reflect changes in the length of the
+ * text, but points to the same logical position in the text.
+ */
+
+public int contextLimit;
+
+/**
+ * Beginning index, inclusive, of the context to be considered for
+ * a transliteration operation.  The transliterator will ignore
+ * anything before this index.  INPUT/OUTPUT parameter: This parameter
+ * is updated by a transliteration operation to reflect the maximum
+ * amount of antecontext needed by a transliterator.
+ */
+
+public int contextStart;
+
+/**
+ * Ending index, exclusive, of the text to be transliteratd.
+ * INPUT/OUTPUT parameter: This parameter is updated to reflect
+ * changes in the length of the text, but points to the same
+ * logical position in the text.
+ */
+
+public int limit;
+
+/**
+ * Beginning index, inclusive, of the text to be transliteratd.
+ * INPUT/OUTPUT parameter: This parameter is advanced past
+ * characters that have already been transliterated by a
+ * transliteration operation.
+ */
+
+public int start;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UCharacterIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UCharacterIterator.java
new file mode 100644
index 0000000..7065175
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UCharacterIterator.java
@@ -0,0 +1,313 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.CharacterIterator;
+
+/**
+ * Abstract class that defines an API for iteration on text objects.This is an interface for forward and backward
+ * iteration and random access into a text object. Forward iteration is done with post-increment and backward iteration
+ * is done with pre-decrement semantics, while the <code>java.text.CharacterIterator</code> interface methods provided
+ * forward iteration with "pre-increment" and backward iteration with pre-decrement semantics. This API is more
+ * efficient for forward iteration over code points. The other major difference is that this API can do both code unit
+ * and code point iteration, <code>java.text.CharacterIterator</code> can only iterate over code units and is limited to
+ * BMP (0 - 0xFFFF)
+ *
+ * @author Ram
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class UCharacterIterator implements java.lang.Cloneable {
+
+/**
+ * Protected default constructor for the subclasses
+ */
+
+protected UCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a <code>Replaceable</code> object.
+ *
+ * @param source
+ *            a valid source as a <code>Replaceable</code> object
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(android.icu.text.Replaceable source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source string.
+ *
+ * @param source
+ *            a string
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source character array.
+ *
+ * @param source
+ *            an array of UTF-16 code units
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(char[] source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source character array.
+ *
+ * @param source
+ *            an array of UTF-16 code units
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(char[] source, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source StringBuffer.
+ *
+ * @param source
+ *            an string buffer of UTF-16 code units
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(java.lang.StringBuffer source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a CharacterIterator.
+ *
+ * @param source
+ *            a valid CharacterIterator object.
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(java.text.CharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>java.text.CharacterIterator</code> object for the underlying text of this iterator. The returned
+ * iterator is independent of this iterator.
+ *
+ * @return java.text.CharacterIterator object
+ */
+
+public java.text.CharacterIterator getCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the code unit at the current index. If index is out of range, returns DONE. Index is not changed.
+ *
+ * @return current code unit
+ */
+
+public abstract int current();
+
+/**
+ * Returns the codepoint at the current index. If the current index is invalid, DONE is returned. If the current
+ * index points to a lead surrogate, and there is a following trail surrogate, then the code point is returned.
+ * Otherwise, the code unit at index is returned. Index is not changed.
+ *
+ * @return current codepoint
+ */
+
+public int currentCodePoint() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the text
+ *
+ * @return length of the text
+ */
+
+public abstract int getLength();
+
+/**
+ * Gets the current index in text.
+ *
+ * @return current index in text.
+ */
+
+public abstract int getIndex();
+
+/**
+ * Returns the UTF16 code unit at index, and increments to the next code unit (post-increment semantics). If index
+ * is out of range, DONE is returned, and the iterator is reset to the limit of the text.
+ *
+ * @return the next UTF16 code unit, or DONE if the index is at the limit of the text.
+ */
+
+public abstract int next();
+
+/**
+ * Returns the code point at index, and increments to the next code point (post-increment semantics). If index does
+ * not point to a valid surrogate pair, the behavior is the same as <code>next()</code>. Otherwise the iterator is
+ * incremented past the surrogate pair, and the code point represented by the pair is returned.
+ *
+ * @return the next codepoint in text, or DONE if the index is at the limit of the text.
+ */
+
+public int nextCodePoint() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Decrement to the position of the previous code unit in the text, and return it (pre-decrement semantics). If the
+ * resulting index is less than 0, the index is reset to 0 and DONE is returned.
+ *
+ * @return the previous code unit in the text, or DONE if the new index is before the start of the text.
+ */
+
+public abstract int previous();
+
+/**
+ * Retreat to the start of the previous code point in the text, and return it (pre-decrement semantics). If the
+ * index is not preceeded by a valid surrogate pair, the behavior is the same as <code>previous()</code>. Otherwise
+ * the iterator is decremented to the start of the surrogate pair, and the code point represented by the pair is
+ * returned.
+ *
+ * @return the previous code point in the text, or DONE if the new index is before the start of the text.
+ */
+
+public int previousCodePoint() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the index to the specified index in the text.
+ *
+ * @param index
+ *            the index within the text.
+ * @exception java.lang.IndexOutOfBoundsException
+ *                is thrown if an invalid index is supplied
+ */
+
+public abstract void setIndex(int index);
+
+/**
+ * Sets the current index to the limit.
+ */
+
+public void setToLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the current index to the start.
+ */
+
+public void setToStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fills the buffer with the underlying text storage of the iterator If the buffer capacity is not enough a
+ * exception is thrown. The capacity of the fill in buffer should at least be equal to length of text in the
+ * iterator obtained by calling <code>getLength()</code>). <b>Usage:</b>
+ *
+ * <pre>
+ *         UChacterIterator iter = new UCharacterIterator.getInstance(text);
+ *         char[] buf = new char[iter.getLength()];
+ *         iter.getText(buf);
+ *
+ *         OR
+ *         char[] buf= new char[1];
+ *         int len = 0;
+ *         for(;;){
+ *             try{
+ *                 len = iter.getText(buf);
+ *                 break;
+ *             }catch(IndexOutOfBoundsException e){
+ *                 buf = new char[iter.getLength()];
+ *             }
+ *         }
+ * </pre>
+ *
+ * @param fillIn
+ *            an array of chars to fill with the underlying UTF-16 code units.
+ * @param offset
+ *            the position within the array to start putting the data.
+ * @return the number of code units added to fillIn, as a convenience
+ * @exception java.lang.IndexOutOfBoundsException
+ *                exception if there is not enough room after offset in the array, or if offset &lt; 0.
+ */
+
+public abstract int getText(char[] fillIn, int offset);
+
+/**
+ * Convenience override for <code>getText(char[], int)</code> that provides an offset of 0.
+ *
+ * @param fillIn
+ *            an array of chars to fill with the underlying UTF-16 code units.
+ * @return the number of code units added to fillIn, as a convenience
+ * @exception java.lang.IndexOutOfBoundsException
+ *                exception if there is not enough room in the array.
+ */
+
+public final int getText(char[] fillIn) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method for returning the underlying text storage as as string
+ *
+ * @return the underlying text storage in the iterator as a string
+ */
+
+public java.lang.String getText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the current position by the number of code units specified, either forward or backward depending on the
+ * sign of delta (positive or negative respectively). If the resulting index would be less than zero, the index is
+ * set to zero, and if the resulting index would be greater than limit, the index is set to limit.
+ *
+ * @param delta
+ *            the number of code units to move the current index.
+ * @return the new index.
+ * @exception java.lang.IndexOutOfBoundsException
+ *                is thrown if an invalid index is supplied
+ *
+ */
+
+public int moveIndex(int delta) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the current position by the number of code points specified, either forward or backward depending on the
+ * sign of delta (positive or negative respectively). If the current index is at a trail surrogate then the first
+ * adjustment is by code unit, and the remaining adjustments are by code points. If the resulting index would be
+ * less than zero, the index is set to zero, and if the resulting index would be greater than limit, the index is
+ * set to limit.
+ *
+ * @param delta
+ *            the number of code units to move the current index.
+ * @return the new index
+ * @exception java.lang.IndexOutOfBoundsException
+ *                is thrown if an invalid delta is supplied
+ */
+
+public int moveCodePointIndex(int delta) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a copy of this iterator, independent from other iterators. If it is not possible to clone the iterator,
+ * returns null.
+ *
+ * @return copy of this iterator
+ */
+
+public java.lang.Object clone() throws java.lang.CloneNotSupportedException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Indicator that we have reached the ends of the UTF16 text.
+ */
+
+public static final int DONE = -1; // 0xffffffff
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UFormat.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UFormat.java
new file mode 100644
index 0000000..5473801
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UFormat.java
@@ -0,0 +1,35 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2003-2015, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.Format;
+import android.icu.util.ULocale;
+
+/**
+ * An abstract class that extends {@link java.text.Format} to provide
+ * additional ICU protocol, specifically, the <tt>getLocale()</tt>
+ * API.  All ICU format classes are subclasses of this class.
+ *
+ * @see android.icu.util.ULocale
+ * @author weiv
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class UFormat extends java.text.Format {
+
+/**
+ * Default constructor.
+ */
+
+public UFormat() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeFilter.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeFilter.java
new file mode 100644
index 0000000..33fc9f4
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeFilter.java
@@ -0,0 +1,40 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <code>UnicodeFilter</code> defines a protocol for selecting a
+ * subset of the full range (U+0000 to U+FFFF) of Unicode characters.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class UnicodeFilter implements android.icu.text.UnicodeMatcher {
+
+UnicodeFilter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns <tt>true</tt> for characters that are in the selected
+ * subset.  In other words, if a character is <b>to be
+ * filtered</b>, then <tt>contains()</tt> returns
+ * <b><tt>false</tt></b>.
+ */
+
+public abstract boolean contains(int c);
+
+/**
+ * Default implementation of UnicodeMatcher::matches() for Unicode
+ * filters.  Matches a single 16-bit code unit at offset.
+ */
+
+public int matches(android.icu.text.Replaceable text, int[] offset, int limit, boolean incremental) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeMatcher.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeMatcher.java
new file mode 100644
index 0000000..5d86b32
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeMatcher.java
@@ -0,0 +1,140 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2001-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <code>UnicodeMatcher</code> defines a protocol for objects that can
+ * match a range of characters in a Replaceable string.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface UnicodeMatcher {
+
+/**
+ * Return a UMatchDegree value indicating the degree of match for
+ * the given text at the given offset.  Zero, one, or more
+ * characters may be matched.
+ *
+ * Matching in the forward direction is indicated by limit &gt;
+ * offset.  Characters from offset forwards to limit-1 will be
+ * considered for matching.
+ *
+ * Matching in the reverse direction is indicated by limit &lt;
+ * offset.  Characters from offset backwards to limit+1 will be
+ * considered for matching.
+ *
+ * If limit == offset then the only match possible is a zero
+ * character match (which subclasses may implement if desired).
+ *
+ * If U_MATCH is returned, then as a side effect, advance the
+ * offset parameter to the limit of the matched substring.  In the
+ * forward direction, this will be the index of the last matched
+ * character plus one.  In the reverse direction, this will be the
+ * index of the last matched character minus one.
+ *
+ * @param text the text to be matched
+ * @param offset on input, the index into text at which to begin
+ * matching.  On output, the limit of the matched text.  The
+ * number of matched characters is the output value of offset
+ * minus the input value.  Offset should always point to the
+ * HIGH SURROGATE (leading code unit) of a pair of surrogates,
+ * both on entry and upon return.
+ * @param limit the limit index of text to be matched.  Greater
+ * than offset for a forward direction match, less than offset for
+ * a backward direction match.  The last character to be
+ * considered for matching will be text.charAt(limit-1) in the
+ * forward direction or text.charAt(limit+1) in the backward
+ * direction.
+ * @param incremental if TRUE, then assume further characters may
+ * be inserted at limit and check for partial matching.  Otherwise
+ * assume the text as given is complete.
+ * @return a match degree value indicating a full match, a partial
+ * match, or a mismatch.  If incremental is FALSE then
+ * U_PARTIAL_MATCH should never be returned.
+ */
+
+public int matches(android.icu.text.Replaceable text, int[] offset, int limit, boolean incremental);
+
+/**
+ * Returns a string representation of this matcher.  If the result of
+ * calling this function is passed to the appropriate parser, it
+ * will produce another matcher that is equal to this one.
+ * @param escapeUnprintable if TRUE then convert unprintable
+ * character to their hex escape representations, \\uxxxx or
+ * \\Uxxxxxxxx.  Unprintable characters are those other than
+ * U+000A, U+0020..U+007E.
+ */
+
+public java.lang.String toPattern(boolean escapeUnprintable);
+
+/**
+ * Returns TRUE if this matcher will match a character c, where c
+ * &amp; 0xFF == v, at offset, in the forward direction (with limit &gt;
+ * offset).  This is used by <tt>RuleBasedTransliterator</tt> for
+ * indexing.
+ *
+ * <p>Note:  This API uses an int even though the value will be
+ * restricted to 8 bits in order to avoid complications with
+ * signedness (bytes convert to ints in the range -128..127).
+ */
+
+public boolean matchesIndexValue(int v);
+
+/**
+ * Union the set of all characters that may be matched by this object
+ * into the given set.
+ * @param toUnionTo the set into which to union the source characters
+ */
+
+public void addMatchSetTo(android.icu.text.UnicodeSet toUnionTo);
+
+/**
+ * The character at index i, where i &lt; contextStart || i &gt;= contextLimit,
+ * is ETHER.  This allows explicit matching by rules and UnicodeSets
+ * of text outside the context.  In traditional terms, this allows anchoring
+ * at the start and/or end.
+ */
+
+public static final char ETHER = 65535; // 0xffff '\uffff'
+
+/**
+ * Constant returned by <code>matches()</code> indicating a
+ * complete match between the text and this matcher.  For an
+ * incremental variable-length match, this value is returned if
+ * the given text matches, and it is known that additional
+ * characters would not alter the extent of the match.
+ */
+
+public static final int U_MATCH = 2; // 0x2
+
+/**
+ * Constant returned by <code>matches()</code> indicating a
+ * mismatch between the text and this matcher.  The text contains
+ * a character which does not match, or the text does not contain
+ * all desired characters for a non-incremental match.
+ */
+
+public static final int U_MISMATCH = 0; // 0x0
+
+/**
+ * Constant returned by <code>matches()</code> indicating a
+ * partial match between the text and this matcher.  This value is
+ * only returned for incremental match operations.  All characters
+ * of the text match, but more characters are required for a
+ * complete match.  Alternatively, for variable-length matchers,
+ * all characters of the text match, and if more characters were
+ * supplied at limit, they might also match.
+ */
+
+public static final int U_PARTIAL_MATCH = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSet.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSet.java
new file mode 100644
index 0000000..624de68
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSet.java
@@ -0,0 +1,1464 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.lang.UCharacter;
+import java.util.Collection;
+import android.icu.lang.UProperty;
+import android.icu.util.Freezable;
+import java.util.Iterator;
+
+/**
+ * A mutable set of Unicode characters and multicharacter strings.
+ * Objects of this class represent <em>character classes</em> used
+ * in regular expressions. A character specifies a subset of Unicode
+ * code points.  Legal code points are U+0000 to U+10FFFF, inclusive.
+ *
+ * Note: method freeze() will not only make the set immutable, but
+ * also makes important methods much higher performance:
+ * contains(c), containsNone(...), span(...), spanBack(...) etc.
+ * After the object is frozen, any subsequent call that wants to change
+ * the object will throw UnsupportedOperationException.
+ *
+ * <p>The UnicodeSet class is not designed to be subclassed.
+ *
+ * <p><code>UnicodeSet</code> supports two APIs. The first is the
+ * <em>operand</em> API that allows the caller to modify the value of
+ * a <code>UnicodeSet</code> object. It conforms to Java 2's
+ * <code>java.util.Set</code> interface, although
+ * <code>UnicodeSet</code> does not actually implement that
+ * interface. All methods of <code>Set</code> are supported, with the
+ * modification that they take a character range or single character
+ * instead of an <code>Object</code>, and they take a
+ * <code>UnicodeSet</code> instead of a <code>Collection</code>.  The
+ * operand API may be thought of in terms of boolean logic: a boolean
+ * OR is implemented by <code>add</code>, a boolean AND is implemented
+ * by <code>retain</code>, a boolean XOR is implemented by
+ * <code>complement</code> taking an argument, and a boolean NOT is
+ * implemented by <code>complement</code> with no argument.  In terms
+ * of traditional set theory function names, <code>add</code> is a
+ * union, <code>retain</code> is an intersection, <code>remove</code>
+ * is an asymmetric difference, and <code>complement</code> with no
+ * argument is a set complement with respect to the superset range
+ * <code>MIN_VALUE-MAX_VALUE</code>
+ *
+ * <p>The second API is the
+ * <code>applyPattern()</code>/<code>toPattern()</code> API from the
+ * <code>java.text.Format</code>-derived classes.  Unlike the
+ * methods that add characters, add categories, and control the logic
+ * of the set, the method <code>applyPattern()</code> sets all
+ * attributes of a <code>UnicodeSet</code> at once, based on a
+ * string pattern.
+ *
+ * <p><b>Pattern syntax</b></p>
+ *
+ * Patterns are accepted by the constructors and the
+ * <code>applyPattern()</code> methods and returned by the
+ * <code>toPattern()</code> method.  These patterns follow a syntax
+ * similar to that employed by version 8 regular expression character
+ * classes.  Here are some simple examples:
+ *
+ * <blockquote>
+ *   <table>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[]</code></td>
+ *       <td style="vertical-align: top;">No characters</td>
+ *     </tr><tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[a]</code></td>
+ *       <td style="vertical-align: top;">The character 'a'</td>
+ *     </tr><tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[ae]</code></td>
+ *       <td style="vertical-align: top;">The characters 'a' and 'e'</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[a-e]</code></td>
+ *       <td style="vertical-align: top;">The characters 'a' through 'e' inclusive, in Unicode code
+ *       point order</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[\\u4E01]</code></td>
+ *       <td style="vertical-align: top;">The character U+4E01</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[a{ab}{ac}]</code></td>
+ *       <td style="vertical-align: top;">The character 'a' and the multicharacter strings &quot;ab&quot; and
+ *       &quot;ac&quot;</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[\p{Lu}]</code></td>
+ *       <td style="vertical-align: top;">All characters in the general category Uppercase Letter</td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ *
+ * Any character may be preceded by a backslash in order to remove any special
+ * meaning.  White space characters, as defined by the Unicode Pattern_White_Space property, are
+ * ignored, unless they are escaped.
+ *
+ * <p>Property patterns specify a set of characters having a certain
+ * property as defined by the Unicode standard.  Both the POSIX-like
+ * "[:Lu:]" and the Perl-like syntax "\p{Lu}" are recognized.  For a
+ * complete list of supported property patterns, see the User's Guide
+ * for UnicodeSet at
+ * <a href="http://www.icu-project.org/userguide/unicodeSet.html">
+ * http://www.icu-project.org/userguide/unicodeSet.html</a>.
+ * Actual determination of property data is defined by the underlying
+ * Unicode database as implemented by UCharacter.
+ *
+ * <p>Patterns specify individual characters, ranges of characters, and
+ * Unicode property sets.  When elements are concatenated, they
+ * specify their union.  To complement a set, place a '^' immediately
+ * after the opening '['.  Property patterns are inverted by modifying
+ * their delimiters; "[:^foo]" and "\P{foo}".  In any other location,
+ * '^' has no special meaning.
+ *
+ * <p>Ranges are indicated by placing two a '-' between two
+ * characters, as in "a-z".  This specifies the range of all
+ * characters from the left to the right, in Unicode order.  If the
+ * left character is greater than or equal to the
+ * right character it is a syntax error.  If a '-' occurs as the first
+ * character after the opening '[' or '[^', or if it occurs as the
+ * last character before the closing ']', then it is taken as a
+ * literal.  Thus "[a\\-b]", "[-ab]", and "[ab-]" all indicate the same
+ * set of three characters, 'a', 'b', and '-'.
+ *
+ * <p>Sets may be intersected using the '&amp;' operator or the asymmetric
+ * set difference may be taken using the '-' operator, for example,
+ * "[[:L:]&amp;[\\u0000-\\u0FFF]]" indicates the set of all Unicode letters
+ * with values less than 4096.  Operators ('&amp;' and '|') have equal
+ * precedence and bind left-to-right.  Thus
+ * "[[:L:]-[a-z]-[\\u0100-\\u01FF]]" is equivalent to
+ * "[[[:L:]-[a-z]]-[\\u0100-\\u01FF]]".  This only really matters for
+ * difference; intersection is commutative.
+ *
+ * <table>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[a]</code><td>The set containing 'a'
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[a-z]</code><td>The set containing 'a'
+ * through 'z' and all letters in between, in Unicode order
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[^a-z]</code><td>The set containing
+ * all characters but 'a' through 'z',
+ * that is, U+0000 through 'a'-1 and 'z'+1 through U+10FFFF
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[[<em>pat1</em>][<em>pat2</em>]]</code>
+ * <td>The union of sets specified by <em>pat1</em> and <em>pat2</em>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[[<em>pat1</em>]&amp;[<em>pat2</em>]]</code>
+ * <td>The intersection of sets specified by <em>pat1</em> and <em>pat2</em>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[[<em>pat1</em>]-[<em>pat2</em>]]</code>
+ * <td>The asymmetric difference of sets specified by <em>pat1</em> and
+ * <em>pat2</em>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[:Lu:] or \p{Lu}</code>
+ * <td>The set of characters having the specified
+ * Unicode property; in
+ * this case, Unicode uppercase letters
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[:^Lu:] or \P{Lu}</code>
+ * <td>The set of characters <em>not</em> having the given
+ * Unicode property
+ * </table>
+ *
+ * <p><b>Warning</b>: you cannot add an empty string ("") to a UnicodeSet.</p>
+ *
+ * <p><b>Formal syntax</b></p>
+ *
+ * <blockquote>
+ *   <table>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>pattern :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>('[' '^'? item* ']') |
+ *       property</code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>item :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>char | (char '-' char) | pattern-expr<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>pattern-expr :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>pattern | pattern-expr pattern |
+ *       pattern-expr op pattern<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>op :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>'&amp;' | '-'<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>special :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>'[' | ']' | '-'<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>char :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><em>any character that is not</em><code> special<br>
+ *       | ('\\' </code><em>any character</em><code>)<br>
+ *       | ('&#92;u' hex hex hex hex)<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>hex :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><em>any character for which
+ *       </em><code>Character.digit(c, 16)</code><em>
+ *       returns a non-negative result</em></td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>property :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><em>a Unicode property set pattern</em></td>
+ *     </tr>
+ *   </table>
+ *   <br>
+ *   <table border="1">
+ *     <tr>
+ *       <td>Legend: <table>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a := b</code></td>
+ *           <td style="width: 20; vertical-align: top;">&nbsp; </td>
+ *           <td style="vertical-align: top;"><code>a</code> may be replaced by <code>b</code> </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a?</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">zero or one instance of <code>a</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a*</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">one or more instances of <code>a</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a | b</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">either <code>a</code> or <code>b</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>'a'</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">the literal string between the quotes </td>
+ *         </tr>
+ *       </table>
+ *       </td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ * <p>To iterate over contents of UnicodeSet, the following are available:
+ * <ul><li>{@link #ranges()} to iterate through the ranges</li>
+ * <li>{@link #strings()} to iterate through the strings</li>
+ * <li>{@link #iterator()} to iterate through the entire contents in a single loop.
+ * That method is, however, not particularly efficient, since it "boxes" each code point into a String.
+ * </ul>
+ * All of the above can be used in <b>for</b> loops.
+ * The {@link android.icu.text.UnicodeSetIterator UnicodeSetIterator} can also be used, but not in <b>for</b> loops.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ *
+ * @author Alan Liu
+ * @see android.icu.text.UnicodeSetIterator
+ * @see android.icu.text.UnicodeSetSpanner
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnicodeSet extends android.icu.text.UnicodeFilter implements java.lang.Iterable<java.lang.String>, java.lang.Comparable<android.icu.text.UnicodeSet>, android.icu.util.Freezable<android.icu.text.UnicodeSet> {
+
+/**
+ * Constructs an empty set.
+ */
+
+public UnicodeSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a copy of an existing set.
+ */
+
+public UnicodeSet(android.icu.text.UnicodeSet other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set containing the given range. If <code>end &gt;
+ * start</code> then an empty set is created.
+ *
+ * @param start first character, inclusive, of range
+ * @param end last character, inclusive, of range
+ */
+
+public UnicodeSet(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Quickly constructs a set from a set of ranges &lt;s0, e0, s1, e1, s2, e2, ..., sn, en&gt;.
+ * There must be an even number of integers, and they must be all greater than zero,
+ * all less than or equal to Character.MAX_CODE_POINT.
+ * In each pair (..., si, ei, ...) it must be true that si &lt;= ei
+ * Between adjacent pairs (...ei, sj...), it must be true that ei+1 &lt; sj
+ * @param pairs pairs of character representing ranges
+ */
+
+public UnicodeSet(int... pairs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.  Whitespace is ignored.
+ * @param pattern a string specifying what characters are in the set
+ * @exception java.lang.IllegalArgumentException if the pattern contains
+ * a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param ignoreWhitespace if true, ignore Unicode Pattern_White_Space characters
+ * @exception java.lang.IllegalArgumentException if the pattern contains
+ * a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, boolean ignoreWhitespace) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param options a bitmask indicating which options to apply.
+ * Valid options are IGNORE_SPACE and CASE.
+ * @exception java.lang.IllegalArgumentException if the pattern contains
+ * a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param pos on input, the position in pattern at which to start parsing.
+ * On output, the position after the last character parsed.
+ * @param symbols a symbol table mapping variables to char[] arrays
+ * and chars to UnicodeSets
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, java.text.ParsePosition pos, android.icu.text.SymbolTable symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param pos on input, the position in pattern at which to start parsing.
+ * On output, the position after the last character parsed.
+ * @param symbols a symbol table mapping variables to char[] arrays
+ * and chars to UnicodeSets
+ * @param options a bitmask indicating which options to apply.
+ * Valid options are IGNORE_SPACE and CASE.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, java.text.ParsePosition pos, android.icu.text.SymbolTable symbols, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new set that is equivalent to this one.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Make this object represent the range <code>start - end</code>.
+ * If <code>end &gt; start</code> then this object is set to an empty range.
+ *
+ * @param start first character in the set, inclusive
+ * @param end last character in the set, inclusive
+ */
+
+public android.icu.text.UnicodeSet set(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Make this object represent the same set as <code>other</code>.
+ * @param other a <code>UnicodeSet</code> whose value will be
+ * copied to this object
+ */
+
+public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to represent the set specified by the given pattern.
+ * See the class description for the syntax of the pattern language.
+ * Whitespace is ignored.
+ * @param pattern a string specifying what characters are in the set
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public final android.icu.text.UnicodeSet applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to represent the set specified by the given pattern,
+ * optionally ignoring whitespace.
+ * See the class description for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param ignoreWhitespace if true then Unicode Pattern_White_Space characters are ignored
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public android.icu.text.UnicodeSet applyPattern(java.lang.String pattern, boolean ignoreWhitespace) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to represent the set specified by the given pattern,
+ * optionally ignoring whitespace.
+ * See the class description for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param options a bitmask indicating which options to apply.
+ * Valid options are IGNORE_SPACE and CASE.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public android.icu.text.UnicodeSet applyPattern(java.lang.String pattern, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this set.  If the result of
+ * calling this function is passed to a UnicodeSet constructor, it
+ * will produce another set that is equal to this one.
+ */
+
+public java.lang.String toPattern(boolean escapeUnprintable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generate and append a string representation of this set to result.
+ * This does not use this.pat, the cleaned up copy of the string
+ * passed to applyPattern().
+ * @param result the buffer into which to generate the pattern
+ * @param escapeUnprintable escape unprintable characters if true
+ */
+
+public java.lang.StringBuffer _generatePattern(java.lang.StringBuffer result, boolean escapeUnprintable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generate and append a string representation of this set to result.
+ * This does not use this.pat, the cleaned up copy of the string
+ * passed to applyPattern().
+ * @param includeStrings if false, doesn't include the strings.
+ */
+
+public java.lang.StringBuffer _generatePattern(java.lang.StringBuffer result, boolean escapeUnprintable, boolean includeStrings) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of elements in this set (its cardinality)
+ * Note than the elements of a set may include both individual
+ * codepoints and strings.
+ *
+ * @return the number of elements in this set (its cardinality).
+ */
+
+public int size() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns <tt>true</tt> if this set contains no elements.
+ *
+ * @return <tt>true</tt> if this set contains no elements.
+ */
+
+public boolean isEmpty() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implementation of UnicodeMatcher API.  Returns <tt>true</tt> if
+ * this set contains any character whose low byte is the given
+ * value.  This is used by <tt>RuleBasedTransliterator</tt> for
+ * indexing.
+ */
+
+public boolean matchesIndexValue(int v) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implementation of UnicodeMatcher.matches().  Always matches the
+ * longest possible multichar string.
+ */
+
+public int matches(android.icu.text.Replaceable text, int[] offset, int limit, boolean incremental) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implementation of UnicodeMatcher API.  Union the set of all
+ * characters that may be matched by this object into the given
+ * set.
+ * @param toUnionTo the set into which to union the source characters
+ */
+
+public void addMatchSetTo(android.icu.text.UnicodeSet toUnionTo) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the given character within this set, where
+ * the set is ordered by ascending code point.  If the character
+ * is not in this set, return -1.  The inverse of this method is
+ * <code>charAt()</code>.
+ * @return an index from 0..size()-1, or -1
+ */
+
+public int indexOf(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character at the given index within this set, where
+ * the set is ordered by ascending code point.  If the index is
+ * out of range, return -1.  The inverse of this method is
+ * <code>indexOf()</code>.
+ * @param index an index from 0..size()-1
+ * @return the character at the given index, or -1.
+ */
+
+public int charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds the specified range to this set if it is not already
+ * present.  If this set already contains the specified range,
+ * the call leaves this set unchanged.  If <code>end &gt; start</code>
+ * then an empty range is added, leaving the set unchanged.
+ *
+ * @param start first character, inclusive, of range to be added
+ * to this set.
+ * @param end last character, inclusive, of range to be added
+ * to this set.
+ */
+
+public android.icu.text.UnicodeSet add(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds all characters in range (uses preferred naming convention).
+ * @param start The index of where to start on adding all characters.
+ * @param end The index of where to end on adding all characters.
+ * @return a reference to this object
+ */
+
+public android.icu.text.UnicodeSet addAll(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds the specified character to this set if it is not already
+ * present.  If this set already contains the specified character,
+ * the call leaves this set unchanged.
+ */
+
+public final android.icu.text.UnicodeSet add(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds the specified multicharacter to this set if it is not already
+ * present.  If this set already contains the multicharacter,
+ * the call leaves this set unchanged.
+ * Thus "ch" =&gt; {"ch"}
+ * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet add(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds each of the characters in this string to the set. Thus "ch" =&gt; {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet addAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retains EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet retainAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complement EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet complementAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Remove EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet removeAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Remove all strings from this UnicodeSet
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet removeAllStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Makes a set from a multicharacter string. Thus "ch" =&gt; {"ch"}
+ * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * @param s the source string
+ * @return a newly created set containing the given string
+ */
+
+public static android.icu.text.UnicodeSet from(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Makes a set from each of the characters in the string. Thus "ch" =&gt; {"c", "h"}
+ * @param s the source string
+ * @return a newly created set containing the given characters
+ */
+
+public static android.icu.text.UnicodeSet fromAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retain only the elements in this set that are contained in the
+ * specified range.  If <code>end &gt; start</code> then an empty range is
+ * retained, leaving the set empty.
+ *
+ * @param start first character, inclusive, of range to be retained
+ * to this set.
+ * @param end last character, inclusive, of range to be retained
+ * to this set.
+ */
+
+public android.icu.text.UnicodeSet retain(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retain the specified character from this set if it is present.
+ * Upon return this set will be empty if it did not contain c, or
+ * will only contain c if it did contain c.
+ * @param c the character to be retained
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet retain(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retain the specified string in this set if it is present.
+ * Upon return this set will be empty if it did not contain s, or
+ * will only contain s if it did contain s.
+ * @param cs the string to be retained
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet retain(java.lang.CharSequence cs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes the specified range from this set if it is present.
+ * The set will not contain the specified range once the call
+ * returns.  If <code>end &gt; start</code> then an empty range is
+ * removed, leaving the set unchanged.
+ *
+ * @param start first character, inclusive, of range to be removed
+ * from this set.
+ * @param end last character, inclusive, of range to be removed
+ * from this set.
+ */
+
+public android.icu.text.UnicodeSet remove(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes the specified character from this set if it is present.
+ * The set will not contain the specified character once the call
+ * returns.
+ * @param c the character to be removed
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet remove(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes the specified string from this set if it is present.
+ * The set will not contain the specified string once the call
+ * returns.
+ * @param s the string to be removed
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet remove(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complements the specified range in this set.  Any character in
+ * the range will be removed if it is in this set, or will be
+ * added if it is not in this set.  If <code>end &gt; start</code>
+ * then an empty range is complemented, leaving the set unchanged.
+ *
+ * @param start first character, inclusive, of range to be removed
+ * from this set.
+ * @param end last character, inclusive, of range to be removed
+ * from this set.
+ */
+
+public android.icu.text.UnicodeSet complement(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complements the specified character in this set.  The character
+ * will be removed if it is in this set, or will be added if it is
+ * not in this set.
+ */
+
+public final android.icu.text.UnicodeSet complement(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is equivalent to
+ * <code>complement(MIN_VALUE, MAX_VALUE)</code>.
+ */
+
+public android.icu.text.UnicodeSet complement() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complement the specified string in this set.
+ * The set will not contain the specified string once the call
+ * returns.
+ * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * @param s the string to complement
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet complement(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains the given character.
+ * @param c character to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean contains(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains every character
+ * of the given range.
+ * @param start first character, inclusive, of the range
+ * @param end last character, inclusive, of the range
+ * @return true if the test condition is met
+ */
+
+public boolean contains(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns <tt>true</tt> if this set contains the given
+ * multicharacter string.
+ * @param s string to be checked for containment
+ * @return <tt>true</tt> if this set contains the specified string
+ */
+
+public final boolean contains(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains all the characters and strings
+ * of the given set.
+ * @param b set to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsAll(android.icu.text.UnicodeSet b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if there is a partition of the string such that this set contains each of the partitioned strings.
+ * For example, for the Unicode set [a{bc}{cd}]<br>
+ * containsAll is true for each of: "a", "bc", ""cdbca"<br>
+ * containsAll is false for each of: "acb", "bcda", "bcx"<br>
+ * @param s string containing characters to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsAll(java.lang.String s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains none of the characters
+ * of the given range.
+ * @param start first character, inclusive, of the range
+ * @param end last character, inclusive, of the range
+ * @return true if the test condition is met
+ */
+
+public boolean containsNone(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if none of the characters or strings in this UnicodeSet appears in the string.
+ * For example, for the Unicode set [a{bc}{cd}]<br>
+ * containsNone is true for: "xy", "cb"<br>
+ * containsNone is false for: "a", "bc", "bcd"<br>
+ * @param b set to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsNone(android.icu.text.UnicodeSet b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains none of the characters
+ * of the given string.
+ * @param s string containing characters to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsNone(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains one or more of the characters
+ * in the given range.
+ * @param start first character, inclusive, of the range
+ * @param end last character, inclusive, of the range
+ * @return true if the condition is met
+ */
+
+public final boolean containsSome(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains one or more of the characters
+ * and strings of the given set.
+ * @param s set to be checked for containment
+ * @return true if the condition is met
+ */
+
+public final boolean containsSome(android.icu.text.UnicodeSet s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains one or more of the characters
+ * of the given string.
+ * @param s string containing characters to be checked for containment
+ * @return true if the condition is met
+ */
+
+public final boolean containsSome(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds all of the elements in the specified set to this set if
+ * they're not already present.  This operation effectively
+ * modifies this set so that its value is the <i>union</i> of the two
+ * sets.  The behavior of this operation is unspecified if the specified
+ * collection is modified while the operation is in progress.
+ *
+ * @param c set whose elements are to be added to this set.
+ */
+
+public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retains only the elements in this set that are contained in the
+ * specified set.  In other words, removes from this set all of
+ * its elements that are not contained in the specified set.  This
+ * operation effectively modifies this set so that its value is
+ * the <i>intersection</i> of the two sets.
+ *
+ * @param c set that defines which elements this set will retain.
+ */
+
+public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes from this set all of its elements that are contained in the
+ * specified set.  This operation effectively modifies this
+ * set so that its value is the <i>asymmetric set difference</i> of
+ * the two sets.
+ *
+ * @param c set that defines which elements will be removed from
+ *          this set.
+ */
+
+public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complements in this set all elements contained in the specified
+ * set.  Any character in the other set will be removed if it is
+ * in this set, or will be added if it is not in this set.
+ *
+ * @param c set that defines which elements will be complemented from
+ *          this set.
+ */
+
+public android.icu.text.UnicodeSet complementAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes all of the elements from this set.  This set will be
+ * empty after this call returns.
+ */
+
+public android.icu.text.UnicodeSet clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iteration method that returns the number of ranges contained in
+ * this set.
+ * @see #getRangeStart
+ * @see #getRangeEnd
+ */
+
+public int getRangeCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iteration method that returns the first character in the
+ * specified range of this set.
+ * @exception java.lang.ArrayIndexOutOfBoundsException if index is outside
+ * the range <code>0..getRangeCount()-1</code>
+ * @see #getRangeCount
+ * @see #getRangeEnd
+ */
+
+public int getRangeStart(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iteration method that returns the last character in the
+ * specified range of this set.
+ * @exception java.lang.ArrayIndexOutOfBoundsException if index is outside
+ * the range <code>0..getRangeCount()-1</code>
+ * @see #getRangeStart
+ * @see #getRangeEnd
+ */
+
+public int getRangeEnd(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Reallocate this objects internal structures to take up the least
+ * possible space, without changing this object's value.
+ */
+
+public android.icu.text.UnicodeSet compact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the specified object with this set for equality.  Returns
+ * <tt>true</tt> if the specified object is also a set, the two sets
+ * have the same size, and every member of the specified set is
+ * contained in this set (or equivalently, every member of this set is
+ * contained in the specified set).
+ *
+ * @param o Object to be compared for equality with this set.
+ * @return <tt>true</tt> if the specified Object is equal to this set.
+ */
+
+public boolean equals(java.lang.Object o) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hash code value for this set.
+ *
+ * @return the hash code value for this set.
+ * @see java.lang.Object#hashCode()
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a programmer-readable string representation of this object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add the contents of the UnicodeSet (as strings) into a collection.
+ * @param target collection to add into
+ */
+
+public <T extends java.util.Collection<java.lang.String>> T addAllTo(T target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add the contents of the collection (as strings) into this UnicodeSet.
+ * The collection must not contain null.
+ * @param source the collection to add
+ * @return a reference to this object
+ */
+
+public android.icu.text.UnicodeSet add(java.lang.Iterable<?> source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a collection (as strings) into this UnicodeSet.
+ * Uses standard naming convention.
+ * @param source collection to add into
+ * @return a reference to this object
+ */
+
+public android.icu.text.UnicodeSet addAll(java.lang.Iterable<?> source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to contain those code points which have the
+ * given value for the given binary or enumerated property, as
+ * returned by UCharacter.getIntPropertyValue.  Prior contents of
+ * this set are lost.
+ *
+ * @param prop a property in the range
+ * UProperty.BIN_START..UProperty.BIN_LIMIT-1 or
+ * UProperty.INT_START..UProperty.INT_LIMIT-1 or.
+ * UProperty.MASK_START..UProperty.MASK_LIMIT-1.
+ *
+ * @param value a value in the range
+ * UCharacter.getIntPropertyMinValue(prop)..
+ * UCharacter.getIntPropertyMaxValue(prop), with one exception.
+ * If prop is UProperty.GENERAL_CATEGORY_MASK, then value should not be
+ * a UCharacter.getType() result, but rather a mask value produced
+ * by logically ORing (1 &lt;&lt; UCharacter.getType()) values together.
+ * This allows grouped categories such as [:L:] to be represented.
+ *
+ * @return a reference to this set
+ */
+
+public android.icu.text.UnicodeSet applyIntPropertyValue(int prop, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to contain those code points which have the
+ * given value for the given property.  Prior contents of this
+ * set are lost.
+ *
+ * @param propertyAlias a property alias, either short or long.
+ * The name is matched loosely.  See PropertyAliases.txt for names
+ * and a description of loose matching.  If the value string is
+ * empty, then this string is interpreted as either a
+ * General_Category value alias, a Script value alias, a binary
+ * property alias, or a special ID.  Special IDs are matched
+ * loosely and correspond to the following sets:
+ *
+ * "ANY" = [\\u0000-\\U0010FFFF],
+ * "ASCII" = [\\u0000-\\u007F].
+ *
+ * @param valueAlias a value alias, either short or long.  The
+ * name is matched loosely.  See PropertyValueAliases.txt for
+ * names and a description of loose matching.  In addition to
+ * aliases listed, numeric values and canonical combining classes
+ * may be expressed numerically, e.g., ("nv", "0.5") or ("ccc",
+ * "220").  The value string may also be empty.
+ *
+ * @return a reference to this set
+ */
+
+public android.icu.text.UnicodeSet applyPropertyAlias(java.lang.String propertyAlias, java.lang.String valueAlias) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to contain those code points which have the
+ * given value for the given property.  Prior contents of this
+ * set are lost.
+ * @param propertyAlias A string of the property alias.
+ * @param valueAlias A string of the value alias.
+ * @param symbols if not null, then symbols are first called to see if a property
+ * is available. If true, then everything else is skipped.
+ * @return this set
+ */
+
+public android.icu.text.UnicodeSet applyPropertyAlias(java.lang.String propertyAlias, java.lang.String valueAlias, android.icu.text.SymbolTable symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Close this set over the given attribute.  For the attribute
+ * CASE, the result is to modify this set so that:
+ *
+ * 1. For each character or string 'a' in this set, all strings
+ * 'b' such that foldCase(a) == foldCase(b) are added to this set.
+ * (For most 'a' that are single characters, 'b' will have
+ * b.length() == 1.)
+ *
+ * 2. For each string 'e' in the resulting set, if e !=
+ * foldCase(e), 'e' will be removed.
+ *
+ * Example: [aq\u00DF{Bc}{bC}{Fi}] =&gt; [aAqQ\u00DF\uFB01{ss}{bc}{fi}]
+ *
+ * (Here foldCase(x) refers to the operation
+ * UCharacter.foldCase(x, true), and a == b actually denotes
+ * a.equals(b), not pointer comparison.)
+ *
+ * @param attribute bitmask for attributes to close over.
+ * Currently only the CASE bit is supported.  Any undefined bits
+ * are ignored.
+ * @return a reference to this set.
+ */
+
+public android.icu.text.UnicodeSet closeOver(int attribute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is this frozen, according to the Freezable interface?
+ *
+ * @return value
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freeze this class, according to the Freezable interface.
+ *
+ * @return this
+ */
+
+public android.icu.text.UnicodeSet freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string using this UnicodeSet.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param spanCondition The span condition
+ * @return the length of the span
+ */
+
+public int span(java.lang.CharSequence s, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string using this UnicodeSet.
+ *   If the start index is less than 0, span will start from 0.
+ *   If the start index is greater than the string length, span returns the string length.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param start The start index that the span begins
+ * @param spanCondition The span condition
+ * @return the string index which ends the span (i.e. exclusive)
+ */
+
+public int span(java.lang.CharSequence s, int start, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string backwards (from the end) using this UnicodeSet.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param spanCondition The span condition
+ * @return The string index which starts the span (i.e. inclusive).
+ */
+
+public int spanBack(java.lang.CharSequence s, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string backwards (from the fromIndex) using this UnicodeSet.
+ * If the fromIndex is less than 0, spanBack will return 0.
+ * If fromIndex is greater than the string length, spanBack will start from the string length.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param fromIndex The index of the char (exclusive) that the string should be spanned backwards
+ * @param spanCondition The span condition
+ * @return The string index which starts the span (i.e. inclusive).
+ */
+
+public int spanBack(java.lang.CharSequence s, int fromIndex, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone a thawed version of this class, according to the Freezable interface.
+ * @return the clone, not frozen
+ */
+
+public android.icu.text.UnicodeSet cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provide for faster iteration than by String. Returns an Iterable/Iterator over ranges of code points.
+ * The UnicodeSet must not be altered during the iteration.
+ * The EntryRange instance is the same each time; the contents are just reset.
+ *
+ * <p><b>Warning: </b>To iterate over the full contents, you have to also iterate over the strings.
+ *
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ *
+ * <pre>
+ * // Sample code
+ * for (EntryRange range : us1.ranges()) {
+ *     // do something with code points between range.codepoint and range.codepointEnd;
+ * }
+ * for (String s : us1.strings()) {
+ *     // do something with each string;
+ * }
+ * </pre>
+ */
+
+public java.lang.Iterable<android.icu.text.UnicodeSet.EntryRange> ranges() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string iterator. Uses the same order of iteration as {@link android.icu.text.UnicodeSetIterator UnicodeSetIterator}.
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ * @see java.util.Set#iterator()
+ */
+
+public java.util.Iterator<java.lang.String> iterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #containsAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> boolean containsAll(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #containsNone(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> boolean containsNone(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #containsAll(android.icu.text.UnicodeSet)
+ */
+
+public final <T extends java.lang.CharSequence> boolean containsSome(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #addAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T... collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #removeAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #retainAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares UnicodeSets, where shorter come first, and otherwise lexigraphically
+ * (according to the comparison of the first characters that differ).
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+
+public int compareTo(android.icu.text.UnicodeSet o) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares UnicodeSets, in three different ways.
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+
+public int compareTo(android.icu.text.UnicodeSet o, android.icu.text.UnicodeSet.ComparisonStyle style) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public int compareTo(java.lang.Iterable<java.lang.String> other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * For iterating through the strings in the set. Example:
+ * <pre>
+ * for (String key : myUnicodeSet.strings()) {
+ *   doSomethingWith(key);
+ * }
+ * </pre>
+ */
+
+public java.util.Collection<java.lang.String> strings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Bitmask for constructor, applyPattern(), and closeOver()
+ * indicating letter case.  This may be ORed together with other
+ * selectors.
+ *
+ * Enable case insensitive matching.  E.g., "[ab]" with this flag
+ * will match 'a', 'A', 'b', and 'B'.  "[^ab]" with this flag will
+ * match all except 'a', 'A', 'b', and 'B'. This adds the lower-,
+ * title-, and uppercase mappings as well as the case folding
+ * of each existing element in the set.
+ */
+
+public static final int ADD_CASE_MAPPINGS = 4; // 0x4
+
+/**
+ * Constant for the set of all code points. (Since UnicodeSets can include strings, does not include everything that a UnicodeSet can.)
+ */
+
+public static final android.icu.text.UnicodeSet ALL_CODE_POINTS;
+static { ALL_CODE_POINTS = null; }
+
+/**
+ * Bitmask for constructor, applyPattern(), and closeOver()
+ * indicating letter case.  This may be ORed together with other
+ * selectors.
+ *
+ * Enable case insensitive matching.  E.g., "[ab]" with this flag
+ * will match 'a', 'A', 'b', and 'B'.  "[^ab]" with this flag will
+ * match all except 'a', 'A', 'b', and 'B'. This performs a full
+ * closure over case mappings, e.g. U+017F for s.
+ *
+ * The resulting set is a superset of the input for the code points but
+ * not for the strings.
+ * It performs a case mapping closure of the code points and adds
+ * full case folding strings for the code points, and reduces strings of
+ * the original set to their full case folding equivalents.
+ *
+ * This is designed for case-insensitive matches, for example
+ * in regular expressions. The full code point case closure allows checking of
+ * an input character directly against the closure set.
+ * Strings are matched by comparing the case-folded form from the closure
+ * set with an incremental case folding of the string in question.
+ *
+ * The closure set will also contain single code points if the original
+ * set contained case-equivalent strings (like U+00DF for "ss" or "Ss" etc.).
+ * This is not necessary (that is, redundant) for the above matching method
+ * but results in the same closure sets regardless of whether the original
+ * set contained the code point or a string.
+ */
+
+public static final int CASE = 2; // 0x2
+
+/**
+ * Alias for UnicodeSet.CASE, for ease of porting from C++ where ICU4C
+ * also has both USET_CASE and USET_CASE_INSENSITIVE (see uset.h).
+ * @see #CASE
+ */
+
+public static final int CASE_INSENSITIVE = 2; // 0x2
+
+/**
+ * Constant for the empty set.
+ */
+
+public static final android.icu.text.UnicodeSet EMPTY;
+static { EMPTY = null; }
+
+/**
+ * Bitmask for constructor and applyPattern() indicating that
+ * white space should be ignored.  If set, ignore Unicode Pattern_White_Space characters,
+ * unless they are quoted or escaped.  This may be ORed together
+ * with other selectors.
+ */
+
+public static final int IGNORE_SPACE = 1; // 0x1
+
+/**
+ * Maximum value that can be stored in a UnicodeSet.
+ */
+
+public static final int MAX_VALUE = 1114111; // 0x10ffff
+
+/**
+ * Minimum value that can be stored in a UnicodeSet.
+ */
+
+public static final int MIN_VALUE = 0; // 0x0
+/**
+ * Comparison style enums used by {@link android.icu.text.UnicodeSet#compareTo(android.icu.text.UnicodeSet,android.icu.text.UnicodeSet.ComparisonStyle) UnicodeSet#compareTo(UnicodeSet, ComparisonStyle)}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ComparisonStyle {
+/**
+ */
+
+SHORTER_FIRST,
+/**
+ */
+
+LEXICOGRAPHIC,
+/**
+ */
+
+LONGER_FIRST;
+}
+
+/**
+ * A struct-like class used for iteration through ranges, for faster iteration than by String.
+ * Read about the restrictions on usage in {@link android.icu.text.UnicodeSet#ranges() UnicodeSet#ranges()}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class EntryRange {
+
+EntryRange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The starting code point of the range.
+ */
+
+public int codepoint;
+
+/**
+ * The ending code point of the range
+ */
+
+public int codepointEnd;
+}
+
+/**
+ * Argument values for whether span() and similar functions continue while the current character is contained vs.
+ * not contained in the set.
+ * <p>
+ * The functionality is straightforward for sets with only single code points, without strings (which is the common
+ * case):
+ * <ul>
+ * <li>CONTAINED and SIMPLE work the same.
+ * <li>CONTAINED and SIMPLE are inverses of NOT_CONTAINED.
+ * <li>span() and spanBack() partition any string the
+ * same way when alternating between span(NOT_CONTAINED) and span(either "contained" condition).
+ * <li>Using a
+ * complemented (inverted) set and the opposite span conditions yields the same results.
+ * </ul>
+ * When a set contains multi-code point strings, then these statements may not be true, depending on the strings in
+ * the set (for example, whether they overlap with each other) and the string that is processed. For a set with
+ * strings:
+ * <ul>
+ * <li>The complement of the set contains the opposite set of code points, but the same set of strings.
+ * Therefore, complementing both the set and the span conditions may yield different results.
+ * <li>When starting spans
+ * at different positions in a string (span(s, ...) vs. span(s+1, ...)) the ends of the spans may be different
+ * because a set string may start before the later position.
+ * <li>span(SIMPLE) may be shorter than
+ * span(CONTAINED) because it will not recursively try all possible paths. For example, with a set which
+ * contains the three strings "xy", "xya" and "ax", span("xyax", CONTAINED) will return 4 but span("xyax",
+ * SIMPLE) will return 3. span(SIMPLE) will never be longer than span(CONTAINED).
+ * <li>With either "contained" condition, span() and spanBack() may partition a string in different ways. For example,
+ * with a set which contains the two strings "ab" and "ba", and when processing the string "aba", span() will yield
+ * contained/not-contained boundaries of { 0, 2, 3 } while spanBack() will yield boundaries of { 0, 1, 3 }.
+ * </ul>
+ * Note: If it is important to get the same boundaries whether iterating forward or backward through a string, then
+ * either only span() should be used and the boundaries cached for backward operation, or an ICU BreakIterator could
+ * be used.
+ * <p>
+ * Note: Unpaired surrogates are treated like surrogate code points. Similarly, set strings match only on code point
+ * boundaries, never in the middle of a surrogate pair.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum SpanCondition {
+/**
+ * Continues a span() while there is no set element at the current position.
+ * Increments by one code point at a time.
+ * Stops before the first set element (character or string).
+ * (For code points only, this is like while contains(current)==false).
+ * <p>
+ * When span() returns, the substring between where it started and the position it returned consists only of
+ * characters that are not in the set, and none of its strings overlap with the span.
+ */
+
+NOT_CONTAINED,
+/**
+ * Spans the longest substring that is a concatenation of set elements (characters or strings).
+ * (For characters only, this is like while contains(current)==true).
+ * <p>
+ * When span() returns, the substring between where it started and the position it returned consists only of set
+ * elements (characters or strings) that are in the set.
+ * <p>
+ * If a set contains strings, then the span will be the longest substring for which there
+ * exists at least one non-overlapping concatenation of set elements (characters or strings).
+ * This is equivalent to a POSIX regular expression for <code>(OR of each set element)*</code>.
+ * (Java/ICU/Perl regex stops at the first match of an OR.)
+ */
+
+CONTAINED,
+/**
+ * Continues a span() while there is a set element at the current position.
+ * Increments by the longest matching element at each position.
+ * (For characters only, this is like while contains(current)==true).
+ * <p>
+ * When span() returns, the substring between where it started and the position it returned consists only of set
+ * elements (characters or strings) that are in the set.
+ * <p>
+ * If a set only contains single characters, then this is the same as CONTAINED.
+ * <p>
+ * If a set contains strings, then the span will be the longest substring with a match at each position with the
+ * longest single set element (character or string).
+ * <p>
+ * Use this span condition together with other longest-match algorithms, such as ICU converters
+ * (ucnv_getUnicodeSet()).
+ */
+
+SIMPLE,
+/**
+ * One more than the last span condition.
+ */
+
+CONDITION_COUNT;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetIterator.java
new file mode 100644
index 0000000..34a5b07
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetIterator.java
@@ -0,0 +1,160 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * UnicodeSetIterator iterates over the contents of a UnicodeSet.  It
+ * iterates over either code points or code point ranges.  After all
+ * code points or ranges have been returned, it returns the
+ * multicharacter strings of the UnicodSet, if any.
+ *
+ * <p>To iterate over code points and multicharacter strings,
+ * use a loop like this:
+ * <pre>
+ * for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.next();) {
+ *   processString(it.getString());
+ * }
+ * </pre>
+ *
+ * <p>To iterate over code point ranges, use a loop like this:
+ * <pre>
+ * for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.nextRange();) {
+ *   if (it.codepoint != UnicodeSetIterator.IS_STRING) {
+ *     processCodepointRange(it.codepoint, it.codepointEnd);
+ *   } else {
+ *     processString(it.getString());
+ *   }
+ * }
+ * </pre>
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ * @author M. Davis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnicodeSetIterator {
+
+/**
+ * Create an iterator over the given set.
+ * @param set set to iterate over
+ */
+
+public UnicodeSetIterator(android.icu.text.UnicodeSet set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create an iterator over nothing.  <tt>next()</tt> and
+ * <tt>nextRange()</tt> return false. This is a convenience
+ * constructor allowing the target to be set later.
+ */
+
+public UnicodeSetIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the next element in the set, either a single code point
+ * or a string.  If there are no more elements in the set, return
+ * false.  If <tt>codepoint == IS_STRING</tt>, the value is a
+ * string in the <tt>string</tt> field.  Otherwise the value is a
+ * single code point in the <tt>codepoint</tt> field.
+ *
+ * <p>The order of iteration is all code points in sorted order,
+ * followed by all strings sorted order.  <tt>codepointEnd</tt> is
+ * undefined after calling this method.  <tt>string</tt> is
+ * undefined unless <tt>codepoint == IS_STRING</tt>.  Do not mix
+ * calls to <tt>next()</tt> and <tt>nextRange()</tt> without
+ * calling <tt>reset()</tt> between them.  The results of doing so
+ * are undefined.
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ * @return true if there was another element in the set and this
+ * object contains the element.
+ */
+
+public boolean next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the next element in the set, either a code point range
+ * or a string.  If there are no more elements in the set, return
+ * false.  If <tt>codepoint == IS_STRING</tt>, the value is a
+ * string in the <tt>string</tt> field.  Otherwise the value is a
+ * range of one or more code points from <tt>codepoint</tt> to
+ * <tt>codepointeEnd</tt> inclusive.
+ *
+ * <p>The order of iteration is all code points ranges in sorted
+ * order, followed by all strings sorted order.  Ranges are
+ * disjoint and non-contiguous.  <tt>string</tt> is undefined
+ * unless <tt>codepoint == IS_STRING</tt>.  Do not mix calls to
+ * <tt>next()</tt> and <tt>nextRange()</tt> without calling
+ * <tt>reset()</tt> between them.  The results of doing so are
+ * undefined.
+ *
+ * @return true if there was another element in the set and this
+ * object contains the element.
+ */
+
+public boolean nextRange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this iterator to visit the elements of the given set and
+ * resets it to the start of that set.  The iterator is valid only
+ * so long as <tt>set</tt> is valid.
+ * @param uset the set to iterate over.
+ */
+
+public void reset(android.icu.text.UnicodeSet uset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets this iterator to the start of the set.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the current string from the iterator. Only use after calling next(), not nextRange().
+ */
+
+public java.lang.String getString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Value of <tt>codepoint</tt> if the iterator points to a string.
+ * If <tt>codepoint == IS_STRING</tt>, then examine
+ * <tt>string</tt> for the current iteration result.
+ */
+
+public static int IS_STRING = -1; // 0xffffffff
+
+/**
+ * Current code point, or the special value <tt>IS_STRING</tt>, if
+ * the iterator points to a string.
+ */
+
+public int codepoint;
+
+/**
+ * When iterating over ranges using <tt>nextRange()</tt>,
+ * <tt>codepointEnd</tt> contains the inclusive end of the
+ * iteration range, if <tt>codepoint != IS_STRING</tt>.  If
+ * iterating over code points using <tt>next()</tt>, or if
+ * <tt>codepoint == IS_STRING</tt>, then the value of
+ * <tt>codepointEnd</tt> is undefined.
+ */
+
+public int codepointEnd;
+
+/**
+ * If <tt>codepoint == IS_STRING</tt>, then <tt>string</tt> points
+ * to the current string.  If <tt>codepoint != IS_STRING</tt>, the
+ * value of <tt>string</tt> is undefined.
+ */
+
+public java.lang.String string;
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetSpanner.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetSpanner.java
new file mode 100644
index 0000000..5c4f6b4
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetSpanner.java
@@ -0,0 +1,297 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2014-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.text.UnicodeSet.SpanCondition;
+
+/**
+ * A helper class used to count, replace, and trim CharSequences based on UnicodeSet matches.
+ * An instance is immutable (and thus thread-safe) iff the source UnicodeSet is frozen.
+ * <p><b>Note:</b> The counting, deletion, and replacement depend on alternating a {@link android.icu.text.UnicodeSet.SpanCondition SpanCondition} with
+ * its inverse. That is, the code spans, then spans for the inverse, then spans, and so on.
+ * For the inverse, the following mapping is used:
+ * <ul>
+ * <li>{@link android.icu.text.UnicodeSet.SpanCondition#SIMPLE UnicodeSet.SpanCondition#SIMPLE} ? {@link android.icu.text.UnicodeSet.SpanCondition#NOT_CONTAINED UnicodeSet.SpanCondition#NOT_CONTAINED}</li>
+ * <li>{@link android.icu.text.UnicodeSet.SpanCondition#CONTAINED UnicodeSet.SpanCondition#CONTAINED} ? {@link android.icu.text.UnicodeSet.SpanCondition#NOT_CONTAINED UnicodeSet.SpanCondition#NOT_CONTAINED}</li>
+ * <li>{@link android.icu.text.UnicodeSet.SpanCondition#NOT_CONTAINED UnicodeSet.SpanCondition#NOT_CONTAINED} ? {@link android.icu.text.UnicodeSet.SpanCondition#SIMPLE UnicodeSet.SpanCondition#SIMPLE}</li>
+ * </ul>
+ * These are actually not complete inverses. However, the alternating works because there are no gaps.
+ * For example, with [a{ab}{bc}], you get the following behavior when scanning forward:
+ *
+ * <table border="1">
+ * <tr><th>SIMPLE</th><td>xxx[ab]cyyy</td></tr>
+ * <tr><th>CONTAINED</th><td>xxx[abc]yyy</td></tr>
+ * <tr><th>NOT_CONTAINED</th><td>[xxx]ab[cyyy]</td></tr>
+ * </table>
+ * <p>So here is what happens when you alternate:
+ *
+ * <table border="1">
+ * <tr><th>start</th><td>|xxxabcyyy</td></tr>
+ * <tr><th>NOT_CONTAINED</th><td>xxx|abcyyy</td></tr>
+ * <tr><th>CONTAINED</th><td>xxxabc|yyy</td></tr>
+ * <tr><th>NOT_CONTAINED</th><td>xxxabcyyy|</td></tr>
+ * </table>
+ * <p>The entire string is traversed.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnicodeSetSpanner {
+
+/**
+ * Create a spanner from a UnicodeSet. For speed and safety, the UnicodeSet should be frozen. However, this class
+ * can be used with a non-frozen version to avoid the cost of freezing.
+ *
+ * @param source
+ *            the original UnicodeSet
+ */
+
+public UnicodeSetSpanner(android.icu.text.UnicodeSet source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the UnicodeSet used for processing. It is frozen iff the original was.
+ *
+ * @return the construction set.
+ */
+
+public android.icu.text.UnicodeSet getUnicodeSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of matching characters found in a character sequence,
+ * counting by CountMethod.MIN_ELEMENTS using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            the sequence to count characters in
+ * @return the count. Zero if there are none.
+ */
+
+public int countIn(java.lang.CharSequence sequence) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of matching characters found in a character sequence, using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            the sequence to count characters in
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @return the count. Zero if there are none.
+ */
+
+public int countIn(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.CountMethod countMethod) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of matching characters found in a character sequence.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            the sequence to count characters in
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @param spanCondition
+ *            the spanCondition to use. SIMPLE or CONTAINED means only count the elements in the span;
+ *            NOT_CONTAINED is the reverse.
+ *            <br><b>WARNING: </b> when a UnicodeSet contains strings, there may be unexpected behavior in edge cases.
+ * @return the count. Zero if there are none.
+ */
+
+public int countIn(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.CountMethod countMethod, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Delete all the matching spans in sequence, using SpanCondition.SIMPLE
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @return modified string.
+ */
+
+public java.lang.String deleteFrom(java.lang.CharSequence sequence) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Delete all matching spans in sequence, according to the spanCondition.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param spanCondition
+ *            specify whether to modify the matching spans (CONTAINED or SIMPLE) or the non-matching (NOT_CONTAINED)
+ * @return modified string.
+ */
+
+public java.lang.String deleteFrom(java.lang.CharSequence sequence, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Replace all matching spans in sequence by the replacement,
+ * counting by CountMethod.MIN_ELEMENTS using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param replacement
+ *            replacement sequence. To delete, use ""
+ * @return modified string.
+ */
+
+public java.lang.String replaceFrom(java.lang.CharSequence sequence, java.lang.CharSequence replacement) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Replace all matching spans in sequence by replacement, according to the CountMethod, using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ *
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param replacement
+ *            replacement sequence. To delete, use ""
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @return modified string.
+ */
+
+public java.lang.String replaceFrom(java.lang.CharSequence sequence, java.lang.CharSequence replacement, android.icu.text.UnicodeSetSpanner.CountMethod countMethod) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Replace all matching spans in sequence by replacement, according to the countMethod and spanCondition.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param replacement
+ *            replacement sequence. To delete, use ""
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @param spanCondition
+ *            specify whether to modify the matching spans (CONTAINED or SIMPLE) or the non-matching
+ *            (NOT_CONTAINED)
+ * @return modified string.
+ */
+
+public java.lang.String replaceFrom(java.lang.CharSequence sequence, java.lang.CharSequence replacement, android.icu.text.UnicodeSetSpanner.CountMethod countMethod, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a trimmed sequence (using CharSequence.subsequence()), that omits matching elements at the start and
+ * end of the string, using TrimOption.BOTH and SpanCondition.SIMPLE. For example:
+ *
+ * <pre>
+ * {@code
+ *
+ *   new UnicodeSet("[ab]").trim("abacatbab")}
+ * </pre>
+ *
+ * ... returns {@code "cat"}.
+ * @param sequence
+ *            the sequence to trim
+ * @return a subsequence
+ */
+
+public java.lang.CharSequence trim(java.lang.CharSequence sequence) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a trimmed sequence (using CharSequence.subsequence()), that omits matching elements at the start or
+ * end of the string, using the trimOption and SpanCondition.SIMPLE. For example:
+ *
+ * <pre>
+ * {@code
+ *
+ *   new UnicodeSet("[ab]").trim("abacatbab", TrimOption.LEADING)}
+ * </pre>
+ *
+ * ... returns {@code "catbab"}.
+ *
+ * @param sequence
+ *            the sequence to trim
+ * @param trimOption
+ *            LEADING, TRAILING, or BOTH
+ * @return a subsequence
+ */
+
+public java.lang.CharSequence trim(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.TrimOption trimOption) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a trimmed sequence (using CharSequence.subsequence()), that omits matching elements at the start or
+ * end of the string, depending on the trimOption and spanCondition. For example:
+ *
+ * <pre>
+ * {@code
+ *
+ *   new UnicodeSet("[ab]").trim("abacatbab", TrimOption.LEADING, SpanCondition.SIMPLE)}
+ * </pre>
+ *
+ * ... returns {@code "catbab"}.
+ *
+ * @param sequence
+ *            the sequence to trim
+ * @param trimOption
+ *            LEADING, TRAILING, or BOTH
+ * @param spanCondition
+ *            SIMPLE, CONTAINED or NOT_CONTAINED
+ * @return a subsequence
+ */
+
+public java.lang.CharSequence trim(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.TrimOption trimOption, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+/**
+ * Options for replaceFrom and countIn to control how to treat each matched span.
+ * It is similar to whether one is replacing [abc] by x, or [abc]* by x.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CountMethod {
+/**
+ * Collapse spans. That is, modify/count the entire matching span as a single item, instead of separate
+ * set elements.
+ */
+
+WHOLE_SPAN,
+/**
+ * Use the smallest number of elements in the spanned range for counting and modification,
+ * based on the {@link android.icu.text.UnicodeSet.SpanCondition UnicodeSet.SpanCondition}.
+ * If the set has no strings, this will be the same as the number of spanned code points.
+ * <p>For example, in the string "abab" with SpanCondition.SIMPLE:
+ * <ul>
+ * <li>spanning with [ab] will count four MIN_ELEMENTS.</li>
+ * <li>spanning with [{ab}] will count two MIN_ELEMENTS.</li>
+ * <li>spanning with [ab{ab}] will also count two MIN_ELEMENTS.</li>
+ * </ul>
+ */
+
+MIN_ELEMENTS;
+}
+
+/**
+ * Options for the trim() method
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum TrimOption {
+/**
+ * Trim leading spans.
+ */
+
+LEADING,
+/**
+ * Trim leading and trailing spans.
+ */
+
+BOTH,
+/**
+ * Trim trailing spans.
+ */
+
+TRAILING;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/BuddhistCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/BuddhistCalendar.java
new file mode 100644
index 0000000..157dc88
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/BuddhistCalendar.java
@@ -0,0 +1,183 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2012, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * <code>BuddhistCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since the birth of the Buddha.  This is the civil calendar
+ * in some predominantly Buddhist countries such as Thailand, and it is used for
+ * religious purposes elsewhere.
+ * <p>
+ * The Buddhist calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  Years are numbered since the birth of the
+ * Buddha in 543 BC (Gregorian), so that 1 AD (Gregorian) is equivalent to 544
+ * BE (Buddhist Era) and 1998 AD is 2541 BE.
+ * <p>
+ * The Buddhist Calendar has only one allowable era: <code>BE</code>.  If the
+ * calendar is not in lenient mode (see <code>setLenient</code>), dates before
+ * 1/1/1 BE are rejected with an <code>IllegalArgumentException</code>.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * BuddhistCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=buddhist"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BuddhistCalendar extends android.icu.util.GregorianCalendar {
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public BuddhistCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone the given time zone.
+ */
+
+public BuddhistCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public BuddhistCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public BuddhistCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param aLocale the given locale.
+ */
+
+public BuddhistCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param locale the given ulocale.
+ */
+
+public BuddhistCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public BuddhistCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public BuddhistCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a BuddhistCalendar with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public BuddhistCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override GregorianCalendar.  There is only one Buddhist ERA.  We
+ * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
+ * implement the 1..5000000 range, but it's not critical.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the Buddhist Era.  This is the only allowable <code>ERA</code>
+ * value for the Buddhist calendar.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int BE = 0; // 0x0
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Calendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Calendar.java
new file mode 100644
index 0000000..ca9c2ae
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Calendar.java
@@ -0,0 +1,2857 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *   Copyright (C) 1996-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.util;
+
+import android.icu.text.DateFormat;
+import java.util.Date;
+import android.icu.util.ULocale.Category;
+import android.icu.text.DateFormatSymbols;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.Calendar}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>Calendar</code> is an abstract base class for converting between
+ * a <code>Date</code> object and a set of integer fields such as
+ * <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>,
+ * and so on. (A <code>Date</code> object represents a specific instant in
+ * time with millisecond precision. See
+ * {@link java.util.Date Date}
+ * for information about the <code>Date</code> class.)
+ *
+ * <p>Subclasses of <code>Calendar</code> interpret a <code>Date</code>
+ * according to the rules of a specific calendar system.  ICU4J contains
+ * several subclasses implementing different international calendar systems.
+ *
+ * <p>
+ * Like other locale-sensitive classes, <code>Calendar</code> provides a
+ * class method, <code>getInstance</code>, for getting a generally useful
+ * object of this type. <code>Calendar</code>'s <code>getInstance</code> method
+ * returns a calendar of a type appropriate to the locale, whose
+ * time fields have been initialized with the current date and time:
+ * <blockquote>
+ * <pre>Calendar rightNow = Calendar.getInstance()</pre>
+ * </blockquote>
+ *
+ * <p>When a <code>ULocale</code> is used by <code>getInstance</code>, its
+ * '<code>calendar</code>' tag and value are retrieved if present.  If a recognized
+ * value is supplied, a calendar is provided and configured as appropriate.
+ * Currently recognized tags are "buddhist", "chinese", "coptic", "ethiopic",
+ * "gregorian", "hebrew", "islamic", "islamic-civil", "japanese", and "roc".  For
+ * example: <blockquote>
+ * <pre>Calendar cal = Calendar.getInstance(new ULocale("en_US@calendar=japanese"));</pre>
+ * </blockquote> will return an instance of JapaneseCalendar (using en_US conventions for
+ * minimum days in first week, start day of week, et cetera).
+ *
+ * <p>A <code>Calendar</code> object can produce all the time field values
+ * needed to implement the date-time formatting for a particular language and
+ * calendar style (for example, Japanese-Gregorian, Japanese-Traditional).
+ * <code>Calendar</code> defines the range of values returned by certain fields,
+ * as well as their meaning.  For example, the first month of the year has value
+ * <code>MONTH</code> == <code>JANUARY</code> for all calendars.  Other values
+ * are defined by the concrete subclass, such as <code>ERA</code> and
+ * <code>YEAR</code>.  See individual field documentation and subclass
+ * documentation for details.
+ *
+ * <p>When a <code>Calendar</code> is <em>lenient</em>, it accepts a wider range
+ * of field values than it produces.  For example, a lenient
+ * <code>GregorianCalendar</code> interprets <code>MONTH</code> ==
+ * <code>JANUARY</code>, <code>DAY_OF_MONTH</code> == 32 as February 1.  A
+ * non-lenient <code>GregorianCalendar</code> throws an exception when given
+ * out-of-range field settings.  When calendars recompute field values for
+ * return by <code>get()</code>, they normalize them.  For example, a
+ * <code>GregorianCalendar</code> always produces <code>DAY_OF_MONTH</code>
+ * values between 1 and the length of the month.
+ *
+ * <p><code>Calendar</code> defines a locale-specific seven day week using two
+ * parameters: the first day of the week and the minimal days in first week
+ * (from 1 to 7).  These numbers are taken from the locale resource data when a
+ * <code>Calendar</code> is constructed.  They may also be specified explicitly
+ * through the API.
+ *
+ * <p>When setting or getting the <code>WEEK_OF_MONTH</code> or
+ * <code>WEEK_OF_YEAR</code> fields, <code>Calendar</code> must determine the
+ * first week of the month or year as a reference point.  The first week of a
+ * month or year is defined as the earliest seven day period beginning on
+ * <code>getFirstDayOfWeek()</code> and containing at least
+ * <code>getMinimalDaysInFirstWeek()</code> days of that month or year.  Weeks
+ * numbered ..., -1, 0 precede the first week; weeks numbered 2, 3,... follow
+ * it.  Note that the normalized numbering returned by <code>get()</code> may be
+ * different.  For example, a specific <code>Calendar</code> subclass may
+ * designate the week before week 1 of a year as week <em>n</em> of the previous
+ * year.
+ *
+ * <p> When computing a <code>Date</code> from time fields, some special
+ * circumstances may arise: there may be insufficient information to compute the
+ * <code>Date</code> (such as only year and month but no day in the month),
+ * there may be inconsistent information (such as "Tuesday, July 15, 1996" --
+ * July 15, 1996 is actually a Monday), or the input time might be ambiguous
+ * because of time zone transition.
+ *
+ * <p><strong>Insufficient information.</strong> The calendar will use default
+ * information to specify the missing fields. This may vary by calendar; for
+ * the Gregorian calendar, the default for a field is the same as that of the
+ * start of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc.
+ *
+ * <p><strong>Inconsistent information.</strong> If fields conflict, the calendar
+ * will give preference to fields set more recently. For example, when
+ * determining the day, the calendar will look for one of the following
+ * combinations of fields.  The most recent combination, as determined by the
+ * most recently set single field, will be used.
+ *
+ * <blockquote>
+ * <pre>
+ * MONTH + DAY_OF_MONTH
+ * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+ * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+ * DAY_OF_YEAR
+ * DAY_OF_WEEK + WEEK_OF_YEAR</pre>
+ * </blockquote>
+ *
+ * For the time of day:
+ *
+ * <blockquote>
+ * <pre>
+ * HOUR_OF_DAY
+ * AM_PM + HOUR</pre>
+ * </blockquote>
+ *
+ * <p><strong>Ambiguous Wall Clock Time.</strong> When time offset from UTC has
+ * changed, it produces an ambiguous time slot around the transition. For example,
+ * many US locations observe daylight saving time. On the date switching to daylight
+ * saving time in US, wall clock time jumps from 12:59 AM (standard) to 2:00 AM
+ * (daylight). Therefore, wall clock time from 1:00 AM to 1:59 AM do not exist on
+ * the date. When the input wall time fall into this missing time slot, the ICU
+ * Calendar resolves the time using the UTC offset before the transition by default.
+ * In this example, 1:30 AM is interpreted as 1:30 AM standard time (non-exist),
+ * so the final result will be 2:30 AM daylight time.
+ *
+ * <p>On the date switching back to standard time, wall clock time is moved back one
+ * hour at 2:00 AM. So wall clock time from 1:00 AM to 1:59 AM occur twice. In this
+ * case, the ICU Calendar resolves the time using the UTC offset after the transition
+ * by default. For example, 1:30 AM on the date is resolved as 1:30 AM standard time.
+ *
+ * <p>Ambiguous wall clock time resolution behaviors can be customized by Calendar APIs
+ * {@link #setRepeatedWallTimeOption(int)} and {@link #setSkippedWallTimeOption(int)}.
+ * These methods are available in ICU 49 or later versions.
+ *
+ * <p><strong>Note:</strong> for some non-Gregorian calendars, different
+ * fields may be necessary for complete disambiguation. For example, a full
+ * specification of the historial Arabic astronomical calendar requires year,
+ * month, day-of-month <em>and</em> day-of-week in some cases.
+ *
+ * <p><strong>Note:</strong> There are certain possible ambiguities in
+ * interpretation of certain singular times, which are resolved in the
+ * following ways:
+ * <ol>
+ *     <li> 24:00:00 "belongs" to the following day. That is,
+ *          23:59 on Dec 31, 1969 &lt; 24:00 on Jan 1, 1970 &lt; 24:01:00 on Jan 1, 1970
+ *
+ *     <li> Although historically not precise, midnight also belongs to "am",
+ *          and noon belongs to "pm", so on the same day,
+ *          12:00 am (midnight) &lt; 12:01 am, and 12:00 pm (noon) &lt; 12:01 pm
+ * </ol>
+ *
+ * <p>The date or time format strings are not part of the definition of a
+ * calendar, as those must be modifiable or overridable by the user at
+ * runtime. Use {@link android.icu.text.DateFormat DateFormat}
+ * to format dates.
+ *
+ * <p><strong>Field manipulation methods</strong></p>
+ *
+ * <p><code>Calendar</code> fields can be changed using three methods:
+ * <code>set()</code>, <code>add()</code>, and <code>roll()</code>.</p>
+ *
+ * <p><strong><code>set(f, value)</code></strong> changes field
+ * <code>f</code> to <code>value</code>.  In addition, it sets an
+ * internal member variable to indicate that field <code>f</code> has
+ * been changed. Although field <code>f</code> is changed immediately,
+ * the calendar's milliseconds is not recomputed until the next call to
+ * <code>get()</code>, <code>getTime()</code>, or
+ * <code>getTimeInMillis()</code> is made. Thus, multiple calls to
+ * <code>set()</code> do not trigger multiple, unnecessary
+ * computations. As a result of changing a field using
+ * <code>set()</code>, other fields may also change, depending on the
+ * field, the field value, and the calendar system. In addition,
+ * <code>get(f)</code> will not necessarily return <code>value</code>
+ * after the fields have been recomputed. The specifics are determined by
+ * the concrete calendar class.</p>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>set(Calendar.MONTH,
+ * Calendar.SEPTEMBER)</code> sets the calendar to September 31,
+ * 1999. This is a temporary internal representation that resolves to
+ * October 1, 1999 if <code>getTime()</code>is then called. However, a
+ * call to <code>set(Calendar.DAY_OF_MONTH, 30)</code> before the call to
+ * <code>getTime()</code> sets the calendar to September 30, 1999, since
+ * no recomputation occurs after <code>set()</code> itself.</p>
+ *
+ * <p><strong><code>add(f, delta)</code></strong> adds <code>delta</code>
+ * to field <code>f</code>.  This is equivalent to calling <code>set(f,
+ * get(f) + delta)</code> with two adjustments:</p>
+ *
+ * <blockquote>
+ *   <p><strong>Add rule 1</strong>. The value of field <code>f</code>
+ *   after the call minus the value of field <code>f</code> before the
+ *   call is <code>delta</code>, modulo any overflow that has occurred in
+ *   field <code>f</code>. Overflow occurs when a field value exceeds its
+ *   range and, as a result, the next larger field is incremented or
+ *   decremented and the field value is adjusted back into its range.</p>
+ *
+ *   <p><strong>Add rule 2</strong>. If a smaller field is expected to be
+ *   invariant, but &nbsp; it is impossible for it to be equal to its
+ *   prior value because of changes in its minimum or maximum after field
+ *   <code>f</code> is changed, then its value is adjusted to be as close
+ *   as possible to its expected value. A smaller field represents a
+ *   smaller unit of time. <code>HOUR</code> is a smaller field than
+ *   <code>DAY_OF_MONTH</code>. No adjustment is made to smaller fields
+ *   that are not expected to be invariant. The calendar system
+ *   determines what fields are expected to be invariant.</p>
+ * </blockquote>
+ *
+ * <p>In addition, unlike <code>set()</code>, <code>add()</code> forces
+ * an immediate recomputation of the calendar's milliseconds and all
+ * fields.</p>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>add(Calendar.MONTH,
+ * 13)</code> sets the calendar to September 30, 2000. <strong>Add rule
+ * 1</strong> sets the <code>MONTH</code> field to September, since
+ * adding 13 months to August gives September of the next year. Since
+ * <code>DAY_OF_MONTH</code> cannot be 31 in September in a
+ * <code>GregorianCalendar</code>, <strong>add rule 2</strong> sets the
+ * <code>DAY_OF_MONTH</code> to 30, the closest possible value. Although
+ * it is a smaller field, <code>DAY_OF_WEEK</code> is not adjusted by
+ * rule 2, since it is expected to change when the month changes in a
+ * <code>GregorianCalendar</code>.</p>
+ *
+ * <p><strong><code>roll(f, delta)</code></strong> adds
+ * <code>delta</code> to field <code>f</code> without changing larger
+ * fields. This is equivalent to calling <code>add(f, delta)</code> with
+ * the following adjustment:</p>
+ *
+ * <blockquote>
+ *   <p><strong>Roll rule</strong>. Larger fields are unchanged after the
+ *   call. A larger field represents a larger unit of
+ *   time. <code>DAY_OF_MONTH</code> is a larger field than
+ *   <code>HOUR</code>.</p>
+ * </blockquote>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>roll(Calendar.MONTH,
+ * 8)</code> sets the calendar to April 30, <strong>1999</strong>.  Add
+ * rule 1 sets the <code>MONTH</code> field to April. Using a
+ * <code>GregorianCalendar</code>, the <code>DAY_OF_MONTH</code> cannot
+ * be 31 in the month April. Add rule 2 sets it to the closest possible
+ * value, 30. Finally, the <strong>roll rule</strong> maintains the
+ * <code>YEAR</code> field value of 1999.</p>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to Sunday June 6, 1999. Calling
+ * <code>roll(Calendar.WEEK_OF_MONTH, -1)</code> sets the calendar to
+ * Tuesday June 1, 1999, whereas calling
+ * <code>add(Calendar.WEEK_OF_MONTH, -1)</code> sets the calendar to
+ * Sunday May 30, 1999. This is because the roll rule imposes an
+ * additional constraint: The <code>MONTH</code> must not change when the
+ * <code>WEEK_OF_MONTH</code> is rolled. Taken together with add rule 1,
+ * the resultant date must be between Tuesday June 1 and Saturday June
+ * 5. According to add rule 2, the <code>DAY_OF_WEEK</code>, an invariant
+ * when changing the <code>WEEK_OF_MONTH</code>, is set to Tuesday, the
+ * closest possible value to Sunday (where Sunday is the first day of the
+ * week).</p>
+ *
+ * <p><strong>Usage model</strong>. To motivate the behavior of
+ * <code>add()</code> and <code>roll()</code>, consider a user interface
+ * component with increment and decrement buttons for the month, day, and
+ * year, and an underlying <code>GregorianCalendar</code>. If the
+ * interface reads January 31, 1999 and the user presses the month
+ * increment button, what should it read? If the underlying
+ * implementation uses <code>set()</code>, it might read March 3, 1999. A
+ * better result would be February 28, 1999. Furthermore, if the user
+ * presses the month increment button again, it should read March 31,
+ * 1999, not March 28, 1999. By saving the original date and using either
+ * <code>add()</code> or <code>roll()</code>, depending on whether larger
+ * fields should be affected, the user interface can behave as most users
+ * will intuitively expect.</p>
+ *
+ * <p><b>Note:</b> You should always use {@link #roll roll} and {@link #add add} rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ *
+ * <p><big><big><b>Calendar Architecture in ICU4J</b></big></big></p>
+ *
+ * <p>Recently the implementation of <code>Calendar</code> has changed
+ * significantly in order to better support subclassing. The original
+ * <code>Calendar</code> class was designed to support subclassing, but
+ * it had only one implemented subclass, <code>GregorianCalendar</code>.
+ * With the implementation of several new calendar subclasses, including
+ * the <code>BuddhistCalendar</code>, <code>ChineseCalendar</code>,
+ * <code>HebrewCalendar</code>, <code>IslamicCalendar</code>, and
+ * <code>JapaneseCalendar</code>, the subclassing API has been reworked
+ * thoroughly. This section details the new subclassing API and other
+ * ways in which <code>android.icu.util.Calendar</code> differs from
+ * <code>java.util.Calendar</code>.
+ * </p>
+ *
+ * <p><big><b>Changes</b></big></p>
+ *
+ * <p>Overview of changes between the classic <code>Calendar</code>
+ * architecture and the new architecture.
+ *
+ * <ul>
+ *
+ *   <li>The <code>fields[]</code> array is <code>private</code> now
+ *     instead of <code>protected</code>.  Subclasses must access it
+ *     using the methods {@link #internalSet} and
+ *     {@link #internalGet}.  <b>Motivation:</b> Subclasses should
+ *     not directly access data members.</li>
+ *
+ *   <li>The <code>time</code> long word is <code>private</code> now
+ *     instead of <code>protected</code>.  Subclasses may access it using
+ *     the method {@link #internalGetTimeInMillis}, which does not
+ *     provoke an update. <b>Motivation:</b> Subclasses should not
+ *     directly access data members.</li>
+ *
+ *   <li>The scope of responsibility of subclasses has been drastically
+ *     reduced. As much functionality as possible is implemented in the
+ *     <code>Calendar</code> base class. As a result, it is much easier
+ *     to subclass <code>Calendar</code>. <b>Motivation:</b> Subclasses
+ *     should not have to reimplement common code. Certain behaviors are
+ *     common across calendar systems: The definition and behavior of
+ *     week-related fields and time fields, the arithmetic
+ *     ({@link #add(int,int) add} and {@link #roll(int,int) roll}) behavior of many
+ *     fields, and the field validation system.</li>
+ *
+ *   <li>The subclassing API has been completely redesigned.</li>
+ *
+ *   <li>The <code>Calendar</code> base class contains some Gregorian
+ *     calendar algorithmic support that subclasses can use (specifically
+ *     in {@link #handleComputeFields}).  Subclasses can use the
+ *     methods <code>getGregorianXxx()</code> to obtain precomputed
+ *     values. <b>Motivation:</b> This is required by all
+ *     <code>Calendar</code> subclasses in order to implement consistent
+ *     time zone behavior, and Gregorian-derived systems can use the
+ *     already computed data.</li>
+ *
+ *   <li>The <code>FIELD_COUNT</code> constant has been removed. Use
+ *     {@link #getFieldCount}.  In addition, framework API has been
+ *     added to allow subclasses to define additional fields.
+ *     <b>Motivation: </b>The number of fields is not constant across
+ *     calendar systems.</li>
+ *
+ *   <li>The range of handled dates has been narrowed from +/-
+ *     ~300,000,000 years to +/- ~5,000,000 years. In practical terms
+ *     this should not affect clients. However, it does mean that client
+ *     code cannot be guaranteed well-behaved results with dates such as
+ *     <code>Date(Long.MIN_VALUE)</code> or
+ *     <code>Date(Long.MAX_VALUE)</code>. Instead, the
+ *     <code>Calendar</code> protected constants should be used.
+ *     <b>Motivation:</b> With
+ *     the addition of the {@link #JULIAN_DAY} field, Julian day
+ *     numbers must be restricted to a 32-bit <code>int</code>.  This
+ *     restricts the overall supported range. Furthermore, restricting
+ *     the supported range simplifies the computations by removing
+ *     special case code that was used to accomodate arithmetic overflow
+ *     at millis near <code>Long.MIN_VALUE</code> and
+ *     <code>Long.MAX_VALUE</code>.</li>
+ *
+ *   <li>New fields are implemented: {@link #JULIAN_DAY} defines
+ *     single-field specification of the
+ *     date. {@link #MILLISECONDS_IN_DAY} defines a single-field
+ *     specification of the wall time. {@link #DOW_LOCAL} and
+ *     {@link #YEAR_WOY} implement localized day-of-week and
+ *     week-of-year behavior.</li>
+ *
+ *   <li>Subclasses can access protected millisecond constants
+ *   defined in <code>Calendar</code>.</li>
+ *
+ *   <li>New API has been added to support calendar-specific subclasses
+ *     of <code>DateFormat</code>.</li>
+ *
+ *   <li>Several subclasses have been implemented, representing
+ *     various international calendar systems.</li>
+ *
+ * </ul>
+ *
+ * <p><big><b>Subclass API</b></big></p>
+ *
+ * <p>The original <code>Calendar</code> API was based on the experience
+ * of implementing a only a single subclass,
+ * <code>GregorianCalendar</code>. As a result, all of the subclassing
+ * kinks had not been worked out. The new subclassing API has been
+ * refined based on several implemented subclasses. This includes methods
+ * that must be overridden and methods for subclasses to call. Subclasses
+ * no longer have direct access to <code>fields</code> and
+ * <code>stamp</code>. Instead, they have new API to access
+ * these. Subclasses are able to allocate the <code>fields</code> array
+ * through a protected framework method; this allows subclasses to
+ * specify additional fields. </p>
+ *
+ * <p>More functionality has been moved into the base class. The base
+ * class now contains much of the computational machinery to support the
+ * Gregorian calendar. This is based on two things: (1) Many calendars
+ * are based on the Gregorian calendar (such as the Buddhist and Japanese
+ * imperial calendars). (2) <em>All</em> calendars require basic
+ * Gregorian support in order to handle timezone computations. </p>
+ *
+ * <p>Common computations have been moved into
+ * <code>Calendar</code>. Subclasses no longer compute the week related
+ * fields and the time related fields. These are commonly handled for all
+ * calendars by the base class. </p>
+ *
+ * <p><b>Subclass computation of time <tt>=&gt;</tt> fields</b>
+ *
+ * <p>The {@link #ERA}, {@link #YEAR},
+ * {@link #EXTENDED_YEAR}, {@link #MONTH},
+ * {@link #DAY_OF_MONTH}, and {@link #DAY_OF_YEAR} fields are
+ * computed by the subclass, based on the Julian day. All other fields
+ * are computed by <code>Calendar</code>.
+ *
+ * <ul>
+ *
+ *   <li>Subclasses should implement {@link #handleComputeFields}
+ *     to compute the {@link #ERA}, {@link #YEAR},
+ *     {@link #EXTENDED_YEAR}, {@link #MONTH},
+ *     {@link #DAY_OF_MONTH}, and {@link #DAY_OF_YEAR} fields,
+ *     based on the value of the {@link #JULIAN_DAY} field. If there
+ *     are calendar-specific fields not defined by <code>Calendar</code>,
+ *     they must also be computed. These are the only fields that the
+ *     subclass should compute. All other fields are computed by the base
+ *     class, so time and week fields behave in a consistent way across
+ *     all calendars. The default version of this method in
+ *     <code>Calendar</code> implements a proleptic Gregorian
+ *     calendar. Within this method, subclasses may call
+ *     <code>getGregorianXxx()</code> to obtain the Gregorian calendar
+ *     month, day of month, and extended year for the given date.</li>
+ *
+ * </ul>
+ *
+ * <p><b>Subclass computation of fields <tt>=&gt;</tt> time</b>
+ *
+ * <p>The interpretation of most field values is handled entirely by
+ * <code>Calendar</code>. <code>Calendar</code> determines which fields
+ * are set, which are not, which are set more recently, and so on. In
+ * addition, <code>Calendar</code> handles the computation of the time
+ * from the time fields and handles the week-related fields. The only
+ * thing the subclass must do is determine the extended year, based on
+ * the year fields, and then, given an extended year and a month, it must
+ * return a Julian day number.
+ *
+ * <ul>
+ *
+ *   <li>Subclasses should implement {@link #handleGetExtendedYear}
+ *     to return the extended year for this calendar system, based on the
+ *     {@link #YEAR}, {@link #EXTENDED_YEAR}, and any fields that
+ *     the calendar system uses that are larger than a year, such as
+ *     {@link #ERA}.</li>
+ *
+ *   <li>Subclasses should implement {@link #handleComputeMonthStart}
+ *     to return the Julian day number
+ *     associated with a month and extended year. This is the Julian day
+ *     number of the day before the first day of the month. The month
+ *     number is zero-based. This computation should not depend on any
+ *     field values.</li>
+ *
+ * </ul>
+ *
+ * <p><b>Other methods</b>
+ *
+ * <ul>
+ *
+ *   <li>Subclasses should implement {@link #handleGetMonthLength}
+ *     to return the number of days in a
+ *     given month of a given extended year. The month number, as always,
+ *     is zero-based.</li>
+ *
+ *   <li>Subclasses should implement {@link #handleGetYearLength}
+ *     to return the number of days in the given
+ *     extended year. This method is used by
+ *     <tt>computeWeekFields</tt> to compute the
+ *     {@link #WEEK_OF_YEAR} and {@link #YEAR_WOY} fields.</li>
+ *
+ *   <li>Subclasses should implement {@link #handleGetLimit}
+ *     to return the protected values of a field, depending on the value of
+ *     <code>limitType</code>. This method only needs to handle the
+ *     fields {@link #ERA}, {@link #YEAR}, {@link #MONTH},
+ *     {@link #WEEK_OF_YEAR}, {@link #WEEK_OF_MONTH},
+ *     {@link #DAY_OF_MONTH}, {@link #DAY_OF_YEAR},
+ *     {@link #DAY_OF_WEEK_IN_MONTH}, {@link #YEAR_WOY}, and
+ *     {@link #EXTENDED_YEAR}.  Other fields are invariant (with
+ *     respect to calendar system) and are handled by the base
+ *     class.</li>
+ *
+ *   <li>Optionally, subclasses may override {@link #validateField}
+ *     to check any subclass-specific fields. If the
+ *     field's value is out of range, the method should throw an
+ *     <code>IllegalArgumentException</code>. The method may call
+ *     <code>super.validateField(field)</code> to handle fields in a
+ *     generic way, that is, to compare them to the range
+ *     <code>getMinimum(field)</code>..<code>getMaximum(field)</code>.</li>
+ *
+ *   <li>Optionally, subclasses may override
+ *     {@link #handleCreateFields} to create an <code>int[]</code>
+ *     array large enough to hold the calendar's fields. This is only
+ *     necessary if the calendar defines additional fields beyond those
+ *     defined by <code>Calendar</code>. The length of the result must be
+ *     be between the base and maximum field counts.</li>
+ *
+ *   <li>Optionally, subclasses may override
+ *     {@link #handleGetDateFormat} to create a
+ *     <code>DateFormat</code> appropriate to this calendar. This is only
+ *     required if a calendar subclass redefines the use of a field (for
+ *     example, changes the {@link #ERA} field from a symbolic field
+ *     to a numeric one) or defines an additional field.</li>
+ *
+ *   <li>Optionally, subclasses may override {@link #roll roll} and
+ *     {@link #add add} to handle fields that are discontinuous. For
+ *     example, in the Hebrew calendar the month &quot;Adar I&quot; only
+ *     occurs in leap years; in other years the calendar jumps from
+ *     Shevat (month #4) to Adar (month #6). The {@link android.icu.util.HebrewCalendar#add HebrewCalendar.add} and {@link android.icu.util.HebrewCalendar#roll HebrewCalendar.roll} methods take this into
+ *     account, so that adding 1 month to Shevat gives the proper result
+ *     (Adar) in a non-leap year. The protected utility method {@link
+ *     #pinField pinField} is often useful when implementing these two
+ *     methods. </li>
+ *
+ * </ul>
+ *
+ * <p><big><b>Normalized behavior</b></big>
+ *
+ * <p>The behavior of certain fields has been made consistent across all
+ * calendar systems and implemented in <code>Calendar</code>.
+ *
+ * <ul>
+ *
+ *   <li>Time is normalized. Even though some calendar systems transition
+ *     between days at sunset or at other times, all ICU4J calendars
+ *     transition between days at <em>local zone midnight</em>.  This
+ *     allows ICU4J to centralize the time computations in
+ *     <code>Calendar</code> and to maintain basic correpsondences
+ *     between calendar systems. Affected fields: {@link #AM_PM},
+ *     {@link #HOUR}, {@link #HOUR_OF_DAY}, {@link #MINUTE},
+ *     {@link #SECOND}, {@link #MILLISECOND},
+ *     {@link #ZONE_OFFSET}, and {@link #DST_OFFSET}.</li>
+ *
+ *   <li>DST behavior is normalized. Daylight savings time behavior is
+ *     computed the same for all calendar systems, and depends on the
+ *     value of several <code>GregorianCalendar</code> fields: the
+ *     {@link #YEAR}, {@link #MONTH}, and
+ *     {@link #DAY_OF_MONTH}. As a result, <code>Calendar</code>
+ *     always computes these fields, even for non-Gregorian calendar
+ *     systems. These fields are available to subclasses.</li>
+ *
+ *   <li>Weeks are normalized. Although locales define the week
+ *     differently, in terms of the day on which it starts, and the
+ *     designation of week number one of a month or year, they all use a
+ *     common mechanism. Furthermore, the day of the week has a simple
+ *     and consistent definition throughout history. For example,
+ *     although the Gregorian calendar introduced a discontinuity when
+ *     first instituted, the day of week was not disrupted. For this
+ *     reason, the fields {@link #DAY_OF_WEEK}, <code>WEEK_OF_YEAR,
+ *     WEEK_OF_MONTH</code>, {@link #DAY_OF_WEEK_IN_MONTH},
+ *     {@link #DOW_LOCAL}, {@link #YEAR_WOY} are all computed in
+ *     a consistent way in the base class, based on the
+ *     {@link #EXTENDED_YEAR}, {@link #DAY_OF_YEAR},
+ *     {@link #MONTH}, and {@link #DAY_OF_MONTH}, which are
+ *     computed by the subclass.</li>
+ *
+ * </ul>
+ *
+ * <p><big><b>Supported range</b></big>
+ *
+ * <p>The allowable range of <code>Calendar</code> has been
+ * narrowed. <code>GregorianCalendar</code> used to attempt to support
+ * the range of dates with millisecond values from
+ * <code>Long.MIN_VALUE</code> to <code>Long.MAX_VALUE</code>. This
+ * introduced awkward constructions (hacks) which slowed down
+ * performance. It also introduced non-uniform behavior at the
+ * boundaries. The new <code>Calendar</code> protocol specifies the
+ * maximum range of supportable dates as those having Julian day numbers
+ * of <code>-0x7F000000</code> to <code>+0x7F000000</code>. This
+ * corresponds to years from ~5,800,000 BCE to ~5,800,000 CE. Programmers
+ * should use the protected constants in <code>Calendar</code> to
+ * specify an extremely early or extremely late date.</p>
+ *
+ * <p><big><b>General notes</b></big>
+ *
+ * <ul>
+ *
+ *   <li>Calendars implementations are <em>proleptic</em>. For example,
+ *     even though the Gregorian calendar was not instituted until the
+ *     16th century, the <code>GregorianCalendar</code> class supports
+ *     dates before the historical onset of the calendar by extending the
+ *     calendar system backward in time. Similarly, the
+ *     <code>HebrewCalendar</code> extends backward before the start of
+ *     its epoch into zero and negative years. Subclasses do not throw
+ *     exceptions because a date precedes the historical start of a
+ *     calendar system. Instead, they implement
+ *     {@link #handleGetLimit} to return appropriate limits on
+ *     {@link #YEAR}, {@link #ERA}, etc. fields. Then, if the
+ *     calendar is set to not be lenient, out-of-range field values will
+ *     trigger an exception.</li>
+ *
+ *   <li>Calendar system subclasses compute a <em>extended
+ *     year</em>. This differs from the {@link #YEAR} field in that
+ *     it ranges over all integer values, including zero and negative
+ *     values, and it encapsulates the information of the
+ *     {@link #YEAR} field and all larger fields.  Thus, for the
+ *     Gregorian calendar, the {@link #EXTENDED_YEAR} is computed as
+ *     <code>ERA==AD ? YEAR : 1-YEAR</code>. Another example is the Mayan
+ *     long count, which has years (<code>KUN</code>) and nested cycles
+ *     of years (<code>KATUN</code> and <code>BAKTUN</code>). The Mayan
+ *     {@link #EXTENDED_YEAR} is computed as <code>TUN + 20 * (KATUN
+ *     + 20 * BAKTUN)</code>. The <code>Calendar</code> base class uses
+ *     the {@link #EXTENDED_YEAR} field to compute the week-related
+ *     fields.</li>
+ *
+ * </ul>
+ *
+ * @see          java.util.Date
+ * @see          android.icu.util.GregorianCalendar
+ * @see          android.icu.util.TimeZone
+ * @see          android.icu.text.DateFormat
+ * @author Mark Davis, Deborah Goldsmith, Chen-Lieh Huang, Alan Liu, Laura Werner
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Calendar implements java.io.Serializable, java.lang.Cloneable, java.lang.Comparable<android.icu.util.Calendar> {
+
+/**
+ * Constructs a Calendar with the default time zone
+ * and the default <code>FORMAT</code> locale.
+ * @see     android.icu.util.TimeZone#getDefault
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+protected Calendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param aLocale the locale for the week data
+ */
+
+protected Calendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param locale the ulocale for the week data
+ */
+
+protected Calendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the default time zone and locale.
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the specified time zone and default locale.
+ * @param zone the time zone to use
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the default time zone and specified locale.
+ * @param aLocale the locale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the default time zone and specified locale.
+ * @param locale the ulocale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param aLocale the locale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param locale the ulocale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the list of locales for which Calendars are installed.
+ * @return the list of locales for which Calendars are installed.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a key and a locale, returns an array of string values in a preferred
+ * order that would make a difference. These are all and only those values where
+ * the open (creation) of the service with the locale formed from the input locale
+ * plus input keyword and that value has different behavior than creation with the
+ * input locale alone.
+ * @param key           one of the keys supported by this service.  For now, only
+ *                      "calendar" is supported.
+ * @param locale        the locale
+ * @param commonlyUsed  if set to true it will return only commonly used values
+ *                      with the given locale in preferred order.  Otherwise,
+ *                      it will return all the available values for the locale.
+ * @return an array of string values for the given key and the locale.
+ */
+
+public static final java.lang.String[] getKeywordValuesForLocale(java.lang.String key, android.icu.util.ULocale locale, boolean commonlyUsed) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Calendar's current time.
+ * @return the current time.
+ */
+
+public final java.util.Date getTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Calendar's current time with the given Date.
+ *
+ * <p>Note: Calling <code>setTime</code> with
+ * <code>Date(Long.MAX_VALUE)</code> or <code>Date(Long.MIN_VALUE)</code>
+ * may yield incorrect field values from {@link #get(int)}.
+ * @param date the given Date.
+ */
+
+public final void setTime(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Calendar's current time as a long.
+ * @return the current time as UTC milliseconds from the epoch.
+ */
+
+public long getTimeInMillis() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Calendar's current time from the given long value.
+ * An IllegalIcuArgumentException is thrown when millis is outside the range permitted
+ * by a Calendar object when in strict mode.
+ * When in lenient mode the out of range values are pinned to their respective min/max.
+ * @param millis the new time in UTC milliseconds from the epoch.
+ */
+
+public void setTimeInMillis(long millis) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the value for a given time field.
+ * @param field the given time field.
+ * @return the value for the given time field.
+ */
+
+public final int get(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the value for a given time field.  This is an internal method
+ * for subclasses that does <em>not</em> trigger any calculations.
+ * @param field the given time field.
+ * @return the value for the given time field.
+ */
+
+protected final int internalGet(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the value for a given time field, or return the given default
+ * value if the field is not set.  This is an internal method for
+ * subclasses that does <em>not</em> trigger any calculations.
+ * @param field the given time field.
+ * @param defaultValue value to return if field is not set
+ * @return the value for the given time field of defaultValue if the
+ * field is unset
+ */
+
+protected final int internalGet(int field, int defaultValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time field with the given value.
+ * @param field the given time field.
+ * @param value the value to be set for the given time field.
+ */
+
+public final void set(int field, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the values for the fields year, month, and date.
+ * Previous values of other fields are retained.  If this is not desired,
+ * call {@link #clear()} first.
+ * @param year the value used to set the YEAR time field.
+ * @param month the value used to set the MONTH time field.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field.
+ */
+
+public final void set(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the values for the fields year, month, date, hour, and minute.
+ * Previous values of other fields are retained.  If this is not desired,
+ * call {@link #clear()} first.
+ * @param year the value used to set the YEAR time field.
+ * @param month the value used to set the MONTH time field.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field.
+ * @param hour the value used to set the HOUR_OF_DAY time field.
+ * @param minute the value used to set the MINUTE time field.
+ */
+
+public final void set(int year, int month, int date, int hour, int minute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the values for the fields year, month, date, hour, minute, and second.
+ * Previous values of other fields are retained.  If this is not desired,
+ * call {@link #clear} first.
+ * @param year the value used to set the YEAR time field.
+ * @param month the value used to set the MONTH time field.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field.
+ * @param hour the value used to set the HOUR_OF_DAY time field.
+ * @param minute the value used to set the MINUTE time field.
+ * @param second the value used to set the SECOND time field.
+ */
+
+public final void set(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears the values of all the time fields.
+ */
+
+public final void clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears the value in the given time field.
+ * @param field the time field to be cleared.
+ */
+
+public final void clear(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the given time field has a value set.
+ * @return true if the given time field has a value set; false otherwise.
+ */
+
+public final boolean isSet(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fills in any unset fields in the time field list.
+ */
+
+protected void complete() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this calendar to the specified object.
+ * The result is <code>true</code> if and only if the argument is
+ * not <code>null</code> and is a <code>Calendar</code> object that
+ * represents the same calendar as this object.
+ * @param obj the object to compare with.
+ * @return <code>true</code> if the objects are the same;
+ * <code>false</code> otherwise.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if the given Calendar object is equivalent to this
+ * one.  An equivalent Calendar will behave exactly as this one
+ * does, but it may be set to a different time.  By contrast, for
+ * the equals() method to return true, the other Calendar must
+ * be set to the same time.
+ *
+ * @param other the Calendar to be compared with this Calendar
+ */
+
+public boolean isEquivalentTo(android.icu.util.Calendar other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a hash code for this calendar.
+ * @return a hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the time field records.
+ * Equivalent to comparing result of conversion to UTC.
+ * @param when the Calendar to be compared with this Calendar.
+ * @return true if the current time of this Calendar is before
+ * the time of Calendar when; false otherwise.
+ */
+
+public boolean before(java.lang.Object when) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the time field records.
+ * Equivalent to comparing result of conversion to UTC.
+ * @param when the Calendar to be compared with this Calendar.
+ * @return true if the current time of this Calendar is after
+ * the time of Calendar when; false otherwise.
+ */
+
+public boolean after(java.lang.Object when) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum value that this field could have, given the
+ * current date.  For example, with the Gregorian date February 3, 1997
+ * and the {@link #DAY_OF_MONTH DAY_OF_MONTH} field, the actual maximum
+ * is 28; for February 3, 1996 it is 29.
+ *
+ * <p>The actual maximum computation ignores smaller fields and the
+ * current value of like-sized fields.  For example, the actual maximum
+ * of the DAY_OF_YEAR or MONTH depends only on the year and supra-year
+ * fields.  The actual maximum of the DAY_OF_MONTH depends, in
+ * addition, on the MONTH field and any other fields at that
+ * granularity (such as IS_LEAP_MONTH).  The
+ * DAY_OF_WEEK_IN_MONTH field does not depend on the current
+ * DAY_OF_WEEK; it returns the maximum for any day of week in the
+ * current month.  Likewise for the WEEK_OF_MONTH and WEEK_OF_YEAR
+ * fields.
+ *
+ * @param field the field whose maximum is desired
+ * @return the maximum of the given field for the current date of this calendar
+ * @see #getMaximum
+ * @see #getLeastMaximum
+ */
+
+public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum value that this field could have, given the current date.
+ * For most fields, this is the same as {@link #getMinimum getMinimum}
+ * and {@link #getGreatestMinimum getGreatestMinimum}.  However, some fields,
+ * especially those related to week number, are more complicated.
+ * <p>
+ * For example, assume {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+ * returns 4 and {@link #getFirstDayOfWeek getFirstDayOfWeek} returns SUNDAY.
+ * If the first day of the month is Sunday, Monday, Tuesday, or Wednesday
+ * there will be four or more days in the first week, so it will be week number 1,
+ * and <code>getActualMinimum(WEEK_OF_MONTH)</code> will return 1.  However,
+ * if the first of the month is a Thursday, Friday, or Saturday, there are
+ * <em>not</em> four days in that week, so it is week number 0, and
+ * <code>getActualMinimum(WEEK_OF_MONTH)</code> will return 0.
+ * <p>
+ * @param field the field whose actual minimum value is desired.
+ * @return the minimum of the given field for the current date of this calendar
+ *
+ * @see #getMinimum
+ * @see #getGreatestMinimum
+ */
+
+public int getActualMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Prepare this calendar for computing the actual minimum or maximum.
+ * This method modifies this calendar's fields; it is called on a
+ * temporary calendar.
+ *
+ * <p>Rationale: The semantics of getActualXxx() is to return the
+ * maximum or minimum value that the given field can take, taking into
+ * account other relevant fields.  In general these other fields are
+ * larger fields.  For example, when computing the actual maximum
+ * DAY_OF_MONTH, the current value of DAY_OF_MONTH itself is ignored,
+ * as is the value of any field smaller.
+ *
+ * <p>The time fields all have fixed minima and maxima, so we don't
+ * need to worry about them.  This also lets us set the
+ * MILLISECONDS_IN_DAY to zero to erase any effects the time fields
+ * might have when computing date fields.
+ *
+ * <p>DAY_OF_WEEK is adjusted specially for the WEEK_OF_MONTH and
+ * WEEK_OF_YEAR fields to ensure that they are computed correctly.
+ */
+
+protected void prepareGetActual(int field, boolean isMinimum) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Rolls (up/down) a single unit of time on the given field.  If the
+ * field is rolled past its maximum allowable value, it will "wrap" back
+ * to its minimum and continue rolling. For
+ * example, to roll the current date up by one day, you can call:
+ * <p>
+ * <code>roll({@link #DATE}, true)</code>
+ * <p>
+ * When rolling on the {@link #YEAR} field, it will roll the year
+ * value in the range between 1 and the value returned by calling
+ * {@link #getMaximum getMaximum}({@link #YEAR}).
+ * <p>
+ * When rolling on certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when rolling the <code>MONTH</code> field
+ * for the Gregorian date 1/31/96 upward, the <code>DAY_OF_MONTH</code> field
+ * must be adjusted so that the result is 2/29/96 rather than the invalid
+ * 2/31/96.
+ * <p>
+ * Rolling up always means rolling forward in time (unless
+ * the limit of the field is reached, in which case it may pin or wrap), so for the
+ * Gregorian calendar, starting with 100 BC and rolling the year up results in 99 BC.
+ * When eras have a definite beginning and end (as in the Chinese calendar, or as in
+ * most eras in the Japanese calendar) then rolling the year past either limit of the
+ * era will cause the year to wrap around. When eras only have a limit at one end,
+ * then attempting to roll the year past that limit will result in pinning the year
+ * at that limit. Note that for most calendars in which era 0 years move forward in
+ * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to
+ * result in negative years for era 0 (that is the only way to represent years before
+ * the calendar epoch in such calendars).
+ * <p>
+ * <b>Note:</b> Calling <tt>roll(field, true)</tt> N times is <em>not</em>
+ * necessarily equivalent to calling <tt>roll(field, N)</tt>.  For example,
+ * imagine that you start with the date Gregorian date January 31, 1995.  If you call
+ * <tt>roll(Calendar.MONTH, 2)</tt>, the result will be March 31, 1995.
+ * But if you call <tt>roll(Calendar.MONTH, true)</tt>, the result will be
+ * February 28, 1995.  Calling it one more time will give March 28, 1995, which
+ * is usually not the desired result.
+ * <p>
+ * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ * <p>
+ * @param field the calendar field to roll.
+ *
+ * @param up    indicates if the value of the specified time field is to be
+ *              rolled up or rolled down. Use <code>true</code> if rolling up,
+ *              <code>false</code> otherwise.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ * @see #roll(int, int)
+ * @see #add
+ */
+
+public final void roll(int field, boolean up) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Rolls (up/down) a specified amount time on the given field.  For
+ * example, to roll the current date up by three days, you can call
+ * <code>roll(Calendar.DATE, 3)</code>.  If the
+ * field is rolled past its maximum allowable value, it will "wrap" back
+ * to its minimum and continue rolling.
+ * For example, calling <code>roll(Calendar.DATE, 10)</code>
+ * on a Gregorian calendar set to 4/25/96 will result in the date 4/5/96.
+ * <p>
+ * When rolling on certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when rolling the {@link #MONTH MONTH} field
+ * for the Gregorian date 1/31/96 by +1, the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is 2/29/96 rather than the invalid
+ * 2/31/96.
+ * <p>
+ * Rolling by a positive value always means rolling forward in time (unless
+ * the limit of the field is reached, in which case it may pin or wrap), so for the
+ * Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC.
+ * When eras have a definite beginning and end (as in the Chinese calendar, or as in
+ * most eras in the Japanese calendar) then rolling the year past either limit of the
+ * era will cause the year to wrap around. When eras only have a limit at one end,
+ * then attempting to roll the year past that limit will result in pinning the year
+ * at that limit. Note that for most calendars in which era 0 years move forward in
+ * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to
+ * result in negative years for era 0 (that is the only way to represent years before
+ * the calendar epoch in such calendars).
+ * <p>
+ * <strong>[icu] Note:</strong> the ICU implementation of this method is able to roll
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+ * additional fields in their overrides of <code>roll</code>.
+ * <p>
+ * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ * <p>
+ * <b>Subclassing:</b><br>
+ * This implementation of <code>roll</code> assumes that the behavior of the
+ * field is continuous between its minimum and maximum, which are found by
+ * calling {@link #getActualMinimum getActualMinimum} and {@link #getActualMaximum getActualMaximum}.
+ * For most such fields, simple addition, subtraction, and modulus operations
+ * are sufficient to perform the roll.  For week-related fields,
+ * the results of {@link #getFirstDayOfWeek getFirstDayOfWeek} and
+ * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} are also necessary.
+ * Subclasses can override these two methods if their values differ from the defaults.
+ * <p>
+ * Subclasses that have fields for which the assumption of continuity breaks
+ * down must overide <code>roll</code> to handle those fields specially.
+ * For example, in the Hebrew calendar the month "Adar I"
+ * only occurs in leap years; in other years the calendar jumps from
+ * Shevat (month #4) to Adar (month #6).  The
+ * {@link android.icu.util.HebrewCalendar#roll HebrewCalendar.roll} method takes this into account,
+ * so that rolling the month of Shevat by one gives the proper result (Adar) in a
+ * non-leap year.
+ * <p>
+ * @param field     the calendar field to roll.
+ * @param amount    the amount by which the field should be rolled.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ * @see #roll(int, boolean)
+ * @see #add
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a signed amount to a specified field, using this calendar's rules.
+ * For example, to add three days to the current date, you can call
+ * <code>add(Calendar.DATE, 3)</code>.
+ * <p>
+ * When adding to certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when adding one to the {@link #MONTH MONTH} field
+ * for the Gregorian date 1/31/96, the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is 2/29/96 rather than the invalid
+ * 2/31/96.
+ * <p>
+ * Adding a positive value always means moving forward in time, so for the Gregorian
+ * calendar, starting with 100 BC and adding +1 to year results in 99 BC (even though
+ * this actually reduces the numeric value of the field itself).
+ * <p>
+ * <strong>[icu] Note:</strong> The ICU implementation of this method is able to add to
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+ * additional fields in their overrides of <code>add</code>.
+ * <p>
+ * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ * <p>
+ * <b>Subclassing:</b><br>
+ * This implementation of <code>add</code> assumes that the behavior of the
+ * field is continuous between its minimum and maximum, which are found by
+ * calling {@link #getActualMinimum getActualMinimum} and
+ * {@link #getActualMaximum getActualMaximum}.
+ * For such fields, simple arithmetic operations are sufficient to
+ * perform the add.
+ * <p>
+ * Subclasses that have fields for which this assumption of continuity breaks
+ * down must overide <code>add</code> to handle those fields specially.
+ * For example, in the Hebrew calendar the month "Adar I"
+ * only occurs in leap years; in other years the calendar jumps from
+ * Shevat (month #4) to Adar (month #6).  The
+ * {@link android.icu.util.HebrewCalendar#add HebrewCalendar.add} method takes this into account,
+ * so that adding one month
+ * to a date in Shevat gives the proper result (Adar) in a non-leap year.
+ * <p>
+ * @param field     the time field.
+ * @param amount    the amount to add to the field.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ * @see #roll(int, int)
+ */
+
+public void add(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the name of this calendar in the language of the given locale.
+ */
+
+public java.lang.String getDisplayName(java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the name of this calendar in the language of the given locale.
+ */
+
+public java.lang.String getDisplayName(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the times (in millis) represented by two
+ * <code>Calendar</code> objects.
+ *
+ * @param that the <code>Calendar</code> to compare to this.
+ * @return <code>0</code> if the time represented by
+ * this <code>Calendar</code> is equal to the time represented
+ * by that <code>Calendar</code>, a value less than
+ * <code>0</code> if the time represented by this is before
+ * the time represented by that, and a value greater than
+ * <code>0</code> if the time represented by this
+ * is after the time represented by that.
+ * @throws java.lang.NullPointerException if that
+ * <code>Calendar</code> is null.
+ * @throws java.lang.IllegalArgumentException if the time of that
+ * <code>Calendar</code> can't be obtained because of invalid
+ * calendar values.
+ */
+
+public int compareTo(android.icu.util.Calendar that) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a <code>DateFormat</code> appropriate to this calendar.
+ * Subclasses wishing to specialize this behavior should override
+ * {@link #handleGetDateFormat}.
+ */
+
+public android.icu.text.DateFormat getDateTimeFormat(int dateStyle, int timeStyle, java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a <code>DateFormat</code> appropriate to this calendar.
+ * Subclasses wishing to specialize this behavior should override
+ * {@link #handleGetDateFormat}.
+ */
+
+public android.icu.text.DateFormat getDateTimeFormat(int dateStyle, int timeStyle, android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a <code>DateFormat</code> appropriate to this calendar.
+ * This is a framework method for subclasses to override.  This method
+ * is responsible for creating the calendar-specific DateFormat and
+ * DateFormatSymbols objects as needed.
+ * @param pattern the pattern, specific to the <code>DateFormat</code>
+ * subclass
+ * @param locale the locale for which the symbols should be drawn
+ * @return a <code>DateFormat</code> appropriate to this calendar
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a <code>DateFormat</code> appropriate to this calendar.
+ * This is a framework method for subclasses to override.  This method
+ * is responsible for creating the calendar-specific DateFormat and
+ * DateFormatSymbols objects as needed.
+ * @param pattern the pattern, specific to the <code>DateFormat</code>
+ * subclass
+ * @param override The override string.  A numbering system override string can take one of the following forms:
+ *     1). If just a numbering system name is specified, it applies to all numeric fields in the date format pattern.
+ *     2). To specify an alternate numbering system on a field by field basis, use the field letters from the pattern
+ *         followed by an = sign, followed by the numbering system name.  For example, to specify that just the year
+ *         be formatted using Hebrew digits, use the override "y=hebr".  Multiple overrides can be specified in a single
+ *         string by separating them with a semi-colon. For example, the override string "m=thai;y=deva" would format using
+ *         Thai digits for the month and Devanagari digits for the year.
+ * @param locale the locale for which the symbols should be drawn
+ * @return a <code>DateFormat</code> appropriate to this calendar
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, java.lang.String override, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a <code>DateFormat</code> appropriate to this calendar.
+ * This is a framework method for subclasses to override.  This method
+ * is responsible for creating the calendar-specific DateFormat and
+ * DateFormatSymbols objects as needed.
+ * @param pattern the pattern, specific to the <code>DateFormat</code>
+ * subclass
+ * @param locale the locale for which the symbols should be drawn
+ * @return a <code>DateFormat</code> appropriate to this calendar
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adjust the specified field so that it is within
+ * the allowable range for the date to which this calendar is set.
+ * For example, in a Gregorian calendar pinning the {@link #DAY_OF_MONTH DAY_OF_MONTH}
+ * field for a calendar set to April 31 would cause it to be set
+ * to April 30.
+ * <p>
+ * <b>Subclassing:</b>
+ * <br>
+ * This utility method is intended for use by subclasses that need to implement
+ * their own overrides of {@link #roll roll} and {@link #add add}.
+ * <p>
+ * <b>Note:</b>
+ * <code>pinField</code> is implemented in terms of
+ * {@link #getActualMinimum getActualMinimum}
+ * and {@link #getActualMaximum getActualMaximum}.  If either of those methods uses
+ * a slow, iterative algorithm for a particular field, it would be
+ * unwise to attempt to call <code>pinField</code> for that field.  If you
+ * really do need to do so, you should override this method to do
+ * something more efficient for that field.
+ * <p>
+ * @param field The calendar field whose value should be pinned.
+ *
+ * @see #getActualMinimum
+ * @see #getActualMaximum
+ */
+
+protected void pinField(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the week number of a day, within a period. This may be the week number in
+ * a year or the week number in a month. Usually this will be a value &gt;= 1, but if
+ * some initial days of the period are excluded from week 1, because
+ * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is &gt; 1, then
+ * the week number will be zero for those
+ * initial days. This method requires the day number and day of week for some
+ * known date in the period in order to determine the day of week
+ * on the desired day.
+ * <p>
+ * <b>Subclassing:</b>
+ * <br>
+ * This method is intended for use by subclasses in implementing their
+ * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
+ * It is often useful in {@link #getActualMinimum getActualMinimum} and
+ * {@link #getActualMaximum getActualMaximum} as well.
+ * <p>
+ * This variant is handy for computing the week number of some other
+ * day of a period (often the first or last day of the period) when its day
+ * of the week is not known but the day number and day of week for some other
+ * day in the period (e.g. the current date) <em>is</em> known.
+ * <p>
+ * @param desiredDay    The {@link #DAY_OF_YEAR DAY_OF_YEAR} or
+ *              {@link #DAY_OF_MONTH DAY_OF_MONTH} whose week number is desired.
+ *              Should be 1 for the first day of the period.
+ *
+ * @param dayOfPeriod   The {@link #DAY_OF_YEAR DAY_OF_YEAR}
+ *              or {@link #DAY_OF_MONTH DAY_OF_MONTH} for a day in the period whose
+ *              {@link #DAY_OF_WEEK DAY_OF_WEEK} is specified by the
+ *              <code>dayOfWeek</code> parameter.
+ *              Should be 1 for first day of period.
+ *
+ * @param dayOfWeek  The {@link #DAY_OF_WEEK DAY_OF_WEEK} for the day
+ *              corresponding to the <code>dayOfPeriod</code> parameter.
+ *              1-based with 1=Sunday.
+ *
+ * @return      The week number (one-based), or zero if the day falls before
+ *              the first week because
+ *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+ *              is more than one.
+ */
+
+protected int weekNumber(int desiredDay, int dayOfPeriod, int dayOfWeek) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the week number of a day, within a period. This may be the week number in
+ * a year, or the week number in a month. Usually this will be a value &gt;= 1, but if
+ * some initial days of the period are excluded from week 1, because
+ * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is &gt; 1,
+ * then the week number will be zero for those
+ * initial days. This method requires the day of week for the given date in order to
+ * determine the result.
+ * <p>
+ * <b>Subclassing:</b>
+ * <br>
+ * This method is intended for use by subclasses in implementing their
+ * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
+ * It is often useful in {@link #getActualMinimum getActualMinimum} and
+ * {@link #getActualMaximum getActualMaximum} as well.
+ * <p>
+ * @param dayOfPeriod   The {@link #DAY_OF_YEAR DAY_OF_YEAR} or
+ *                      {@link #DAY_OF_MONTH DAY_OF_MONTH} whose week number is desired.
+ *                      Should be 1 for the first day of the period.
+ *
+ * @param dayOfWeek     The {@link #DAY_OF_WEEK DAY_OF_WEEK} for the day
+ *                      corresponding to the <code>dayOfPeriod</code> parameter.
+ *                      1-based with 1=Sunday.
+ *
+ * @return      The week number (one-based), or zero if the day falls before
+ *              the first week because
+ *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+ *              is more than one.
+ */
+
+protected final int weekNumber(int dayOfPeriod, int dayOfWeek) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the difference between the given time and the time this
+ * calendar object is set to.  If this calendar is set
+ * <em>before</em> the given time, the returned value will be
+ * positive.  If this calendar is set <em>after</em> the given
+ * time, the returned value will be negative.  The
+ * <code>field</code> parameter specifies the units of the return
+ * value.  For example, if <code>fieldDifference(when,
+ * Calendar.MONTH)</code> returns 3, then this calendar is set to
+ * 3 months before <code>when</code>, and possibly some additional
+ * time less than one month.
+ *
+ * <p>As a side effect of this call, this calendar is advanced
+ * toward <code>when</code> by the given amount.  That is, calling
+ * this method has the side effect of calling <code>add(field,
+ * n)</code>, where <code>n</code> is the return value.
+ *
+ * <p>Usage: To use this method, call it first with the largest
+ * field of interest, then with progressively smaller fields.  For
+ * example:
+ *
+ * <pre>
+ * int y = cal.fieldDifference(when, Calendar.YEAR);
+ * int m = cal.fieldDifference(when, Calendar.MONTH);
+ * int d = cal.fieldDifference(when, Calendar.DATE);</pre>
+ *
+ * computes the difference between <code>cal</code> and
+ * <code>when</code> in years, months, and days.
+ *
+ * <p>Note: <code>fieldDifference()</code> is
+ * <em>asymmetrical</em>.  That is, in the following code:
+ *
+ * <pre>
+ * cal.setTime(date1);
+ * int m1 = cal.fieldDifference(date2, Calendar.MONTH);
+ * int d1 = cal.fieldDifference(date2, Calendar.DATE);
+ * cal.setTime(date2);
+ * int m2 = cal.fieldDifference(date1, Calendar.MONTH);
+ * int d2 = cal.fieldDifference(date1, Calendar.DATE);</pre>
+ *
+ * one might expect that <code>m1 == -m2 &amp;&amp; d1 == -d2</code>.
+ * However, this is not generally the case, because of
+ * irregularities in the underlying calendar system (e.g., the
+ * Gregorian calendar has a varying number of days per month).
+ *
+ * @param when the date to compare this calendar's time to
+ * @param field the field in which to compute the result
+ * @return the difference, either positive or negative, between
+ * this calendar's time and <code>when</code>, in terms of
+ * <code>field</code>.
+ */
+
+public int fieldDifference(java.util.Date when, int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone with the given time zone value.
+ * @param value the given time zone.
+ */
+
+public void setTimeZone(android.icu.util.TimeZone value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone.
+ * @return the time zone object associated with this calendar.
+ */
+
+public android.icu.util.TimeZone getTimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specify whether or not date/time interpretation is to be lenient.  With
+ * lenient interpretation, a date such as "February 942, 1996" will be
+ * treated as being equivalent to the 941st day after February 1, 1996.
+ * With strict interpretation, such dates will cause an exception to be
+ * thrown.
+ *
+ * @see android.icu.text.DateFormat#setLenient
+ */
+
+public void setLenient(boolean lenient) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tell whether date/time interpretation is to be lenient.
+ */
+
+public boolean isLenient() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Sets the behavior for handling wall time repeating multiple times
+ * at negative time zone offset transitions. For example, 1:30 AM on
+ * November 6, 2011 in US Eastern time (Ameirca/New_York) occurs twice;
+ * 1:30 AM EDT, then 1:30 AM EST one hour later. When <code>WALLTIME_FIRST</code>
+ * is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT
+ * (first occurrence). When <code>WALLTIME_LAST</code> is used, it will be
+ * interpreted as 1:30 AM EST (last occurrence). The default value is
+ * <code>WALLTIME_LAST</code>.
+ *
+ * @param option the behavior for handling repeating wall time, either
+ * <code>WALLTIME_FIRST</code> or <code>WALLTIME_LAST</code>.
+ * @throws java.lang.IllegalArgumentException when <code>option</code> is neither
+ * <code>WALLTIME_FIRST</code> nor <code>WALLTIME_LAST</code>.
+ *
+ * @see #getRepeatedWallTimeOption()
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ */
+
+public void setRepeatedWallTimeOption(int option) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Gets the behavior for handling wall time repeating multiple times
+ * at negative time zone offset transitions.
+ *
+ * @return the behavior for handling repeating wall time, either
+ * <code>WALLTIME_FIRST</code> or <code>WALLTIME_LAST</code>.
+ *
+ * @see #setRepeatedWallTimeOption(int)
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ */
+
+public int getRepeatedWallTimeOption() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Sets the behavior for handling skipped wall time at positive time zone offset
+ * transitions. For example, 2:30 AM on March 13, 2011 in US Eastern time (America/New_York)
+ * does not exist because the wall time jump from 1:59 AM EST to 3:00 AM EDT. When
+ * <code>WALLTIME_FIRST</code> is used, 2:30 AM is interpreted as 30 minutes before 3:00 AM
+ * EDT, therefore, it will be resolved as 1:30 AM EST. When <code>WALLTIME_LAST</code>
+ * is used, 2:30 AM is interpreted as 31 minutes after 1:59 AM EST, therefore, it will be
+ * resolved as 3:30 AM EDT. When <code>WALLTIME_NEXT_VALID</code> is used, 2:30 AM will
+ * be resolved as next valid wall time, that is 3:00 AM EDT. The default value is
+ * <code>WALLTIME_LAST</code>.
+ * <p>
+ * <b>Note:</b>This option is effective only when this calendar is {@link #isLenient() lenient}.
+ * When the calendar is strict, such non-existing wall time will cause an exception.
+ *
+ * @param option the behavior for handling skipped wall time at positive time zone
+ * offset transitions, one of <code>WALLTIME_FIRST</code>, <code>WALLTIME_LAST</code> and
+ * <code>WALLTIME_NEXT_VALID</code>.
+ * @throws java.lang.IllegalArgumentException when <code>option</code> is not any of
+ * <code>WALLTIME_FIRST</code>, <code>WALLTIME_LAST</code> and <code>WALLTIME_NEXT_VALID</code>.
+ *
+ * @see #getSkippedWallTimeOption()
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ * @see #WALLTIME_NEXT_VALID
+ */
+
+public void setSkippedWallTimeOption(int option) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Gets the behavior for handling skipped wall time at positive time zone offset
+ * transitions.
+ *
+ * @return the behavior for handling skipped wall time, one of
+ * <code>WALLTIME_FIRST</code>, <code>WALLTIME_LAST</code> and <code>WALLTIME_NEXT_VALID</code>.
+ *
+ * @see #setSkippedWallTimeOption(int)
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ * @see #WALLTIME_NEXT_VALID
+ */
+
+public int getSkippedWallTimeOption() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets what the first day of the week is,
+ * where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ * @param value the given first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ */
+
+public void setFirstDayOfWeek(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns what the first day of the week is,
+ * where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ * e.g., Sunday in US, Monday in France
+ * @return the first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ */
+
+public int getFirstDayOfWeek() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets what the minimal days required in the first week of the year are.
+ * For example, if the first week is defined as one that contains the first
+ * day of the first month of a year, call the method with value 1. If it
+ * must be a full week, use value 7.
+ * @param value the given minimal days required in the first week
+ * of the year.
+ */
+
+public void setMinimalDaysInFirstWeek(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns what the minimal days required in the first week of the year are.
+ * That is, if the first week is defined as one that contains the first day
+ * of the first month of a year, getMinimalDaysInFirstWeek returns 1. If
+ * the minimal days required must be a full week, getMinimalDaysInFirstWeek
+ * returns 7.
+ * @return the minimal days required in the first week of the year.
+ */
+
+public int getMinimalDaysInFirstWeek() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclass API for defining limits of different types.
+ * Subclasses must implement this method to return limits for the
+ * following fields:
+ *
+ * <pre>ERA
+ * YEAR
+ * MONTH
+ * WEEK_OF_YEAR
+ * WEEK_OF_MONTH
+ * DAY_OF_MONTH
+ * DAY_OF_YEAR
+ * DAY_OF_WEEK_IN_MONTH
+ * YEAR_WOY
+ * EXTENDED_YEAR</pre>
+ *
+ * @param field one of the above field numbers
+ * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,
+ * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
+ */
+
+protected abstract int handleGetLimit(int field, int limitType);
+
+/**
+ * Returns a limit for a field.
+ * @param field the field, from 0..<code>getFieldCount()-1</code>
+ * @param limitType the type specifier for the limit
+ * @see #MINIMUM
+ * @see #GREATEST_MINIMUM
+ * @see #LEAST_MAXIMUM
+ * @see #MAXIMUM
+ */
+
+protected int getLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum value for the given time field.
+ * e.g., for Gregorian DAY_OF_MONTH, 1.
+ * @param field the given time field.
+ * @return the minimum value for the given time field.
+ */
+
+public final int getMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum value for the given time field.
+ * e.g. for Gregorian DAY_OF_MONTH, 31.
+ * @param field the given time field.
+ * @return the maximum value for the given time field.
+ */
+
+public final int getMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the highest minimum value for the given field if varies.
+ * Otherwise same as getMinimum(). For Gregorian, no difference.
+ * @param field the given time field.
+ * @return the highest minimum value for the given time field.
+ */
+
+public final int getGreatestMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowest maximum value for the given field if varies.
+ * Otherwise same as getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.
+ * @param field the given time field.
+ * @return the lowest maximum value for the given time field.
+ */
+
+public final int getLeastMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if the given date and time is in the weekend in this calendar
+ * system.  Equivalent to calling setTime() followed by isWeekend().  Note: This
+ * method changes the time this calendar is set to.
+ * @param date the date and time
+ * @return true if the given date and time is part of the
+ * weekend
+ * @see #isWeekend()
+ */
+
+public boolean isWeekend(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if this Calendar's current date and time is in the weekend in
+ * this calendar system.
+ * @return true if the given date and time is part of the
+ * weekend
+ * @see #isWeekend(Date)
+ */
+
+public boolean isWeekend() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides Cloneable
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this calendar. This method
+ * is intended to be used only for debugging purposes, and the
+ * format of the returned string may vary between implementations.
+ * The returned string may be empty but may not be <code>null</code>.
+ *
+ * @return  a string representation of this calendar.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return simple, immutable struct-like class for access to the CLDR week data.
+ * @param region The input region. The results are undefined if the region code is not valid.
+ * @return the WeekData for the input region. It is never null.
+ */
+
+public static android.icu.util.Calendar.WeekData getWeekDataForRegion(java.lang.String region) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return simple, immutable struct-like class for access to the week data in this calendar.
+ * @return the WeekData for this calendar.
+ */
+
+public android.icu.util.Calendar.WeekData getWeekData() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set data in this calendar based on the WeekData input.
+ * @param wdata The week data to use
+ * @return this, for chaining
+ */
+
+public android.icu.util.Calendar setWeekData(android.icu.util.Calendar.WeekData wdata) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the current millisecond time value <code>time</code> to
+ * field values in <code>fields[]</code>.  This synchronizes the time
+ * field values with a new time that is set for the calendar.  The time
+ * is <em>not</em> recomputed first; to recompute the time, then the
+ * fields, call the <code>complete</code> method.
+ * @see #complete
+ */
+
+protected void computeFields() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the Gregorian calendar year, month, and day of month from the
+ * Julian day.  These values are not stored in fields, but in member
+ * variables gregorianXxx.  They are used for time zone computations and by
+ * subclasses that are Gregorian derivatives.  Subclasses may call this
+ * method to perform a Gregorian calendar millis-&gt;fields computation.
+ * To perform a Gregorian calendar fields-&gt;millis computation, call
+ * computeGregorianMonthStart().
+ * @see #computeGregorianMonthStart
+ */
+
+protected final void computeGregorianFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a precedence table, return the newest field combination in
+ * the table, or -1 if none is found.
+ *
+ * <p>The precedence table is a 3-dimensional array of integers.  It
+ * may be thought of as an array of groups.  Each group is an array of
+ * lines.  Each line is an array of field numbers.  Within a line, if
+ * all fields are set, then the time stamp of the line is taken to be
+ * the stamp of the most recently set field.  If any field of a line is
+ * unset, then the line fails to match.  Within a group, the line with
+ * the newest time stamp is selected.  The first field of the line is
+ * returned to indicate which line matched.
+ *
+ * <p>In some cases, it may be desirable to map a line to field that
+ * whose stamp is NOT examined.  For example, if the best field is
+ * DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used.  In
+ * order to do this, insert the value <code>REMAP_RESOLVE | F</code> at
+ * the start of the line, where <code>F</code> is the desired return
+ * field value.  This field will NOT be examined; it only determines
+ * the return value if the other fields in the line are the newest.
+ *
+ * <p>If all lines of a group contain at least one unset field, then no
+ * line will match, and the group as a whole will fail to match.  In
+ * that case, the next group will be processed.  If all groups fail to
+ * match, then -1 is returned.
+ */
+
+protected int resolveFields(int[][][] precedenceTable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the newest stamp of a given range of fields.
+ */
+
+protected int newestStamp(int first, int last, int bestStampSoFar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the timestamp of a field.
+ */
+
+protected final int getStamp(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the field that is newer, either defaultField, or
+ * alternateField.  If neither is newer or neither is set, return defaultField.
+ */
+
+protected int newerField(int defaultField, int alternateField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ensure that each field is within its valid range by calling {@link
+ * #validateField(int)} on each field that has been set.  This method
+ * should only be called if this calendar is not lenient.
+ * @see #isLenient
+ * @see #validateField(int)
+ */
+
+protected void validateFields() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Validate a single field of this calendar.  Subclasses should
+ * override this method to validate any calendar-specific fields.
+ * Generic fields can be handled by
+ * <code>Calendar.validateField()</code>.
+ * @see #validateField(int, int, int)
+ */
+
+protected void validateField(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Validate a single field of this calendar given its minimum and
+ * maximum allowed value.  If the field is out of range, throw a
+ * descriptive <code>IllegalArgumentException</code>.  Subclasses may
+ * use this method in their implementation of {@link
+ * #validateField(int)}.
+ */
+
+protected final void validateField(int field, int min, int max) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the current field values in <code>fields[]</code> to the
+ * millisecond time value <code>time</code>.
+ */
+
+protected void computeTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the milliseconds in the day from the fields.  This is a
+ * value from 0 to 23:59:59.999 inclusive, unless fields are out of
+ * range, in which case it can be an arbitrary value.  This value
+ * reflects local zone wall time.
+ * @deprecated ICU 60
+ */
+
+@Deprecated
+protected int computeMillisInDay() { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method can assume EXTENDED_YEAR has been set.
+ * @param millis milliseconds of the date fields (local midnight millis)
+ * @param millisInDay milliseconds of the time fields; may be out
+ * or range.
+ * @return total zone offset (raw + DST) for the given moment
+ * @deprecated ICU 60
+ */
+
+@Deprecated
+protected int computeZoneOffset(long millis, int millisInDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the Julian day number as specified by this calendar's fields.
+ */
+
+protected int computeJulianDay() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the field resolution array for this calendar.  Calendars that
+ * define additional fields or change the semantics of existing fields
+ * should override this method to adjust the field resolution semantics
+ * accordingly.  Other subclasses should not override this method.
+ * @see #resolveFields
+ */
+
+protected int[][][] getFieldResolutionTable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Julian day number of day before the first day of the
+ * given month in the given extended year.  Subclasses should override
+ * this method to implement their calendar system.
+ * @param eyear the extended year
+ * @param month the zero-based month, or 0 if useMonth is false
+ * @param useMonth if false, compute the day before the first day of
+ * the given year, otherwise, compute the day before the first day of
+ * the given month
+ * @return the Julian day number of the day before the first
+ * day of the given month and year
+ */
+
+protected abstract int handleComputeMonthStart(int eyear, int month, boolean useMonth);
+
+/**
+ * Returns the extended year defined by the current fields.  This will
+ * use the EXTENDED_YEAR field or the YEAR and supra-year fields (such
+ * as ERA) specific to the calendar system, depending on which set of
+ * fields is newer.
+ * @return the extended year
+ */
+
+protected abstract int handleGetExtendedYear();
+
+/**
+ * Returns the number of days in the given month of the given extended
+ * year of this calendar system.  Subclasses should override this
+ * method if they can provide a more correct or more efficient
+ * implementation than the default implementation in Calendar.
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of days in the given extended year of this
+ * calendar system.  Subclasses should override this method if they can
+ * provide a more correct or more efficient implementation than the
+ * default implementation in Calendar.
+ */
+
+protected int handleGetYearLength(int eyear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses that use additional fields beyond those defined in
+ * <code>Calendar</code> should override this method to return an
+ * <code>int[]</code> array of the appropriate length.  The length
+ * must be at least <code>BASE_FIELD_COUNT</code> and no more than
+ * <code>MAX_FIELD_COUNT</code>.
+ */
+
+protected int[] handleCreateFields() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses may override this.  This method calls
+ * handleGetMonthLength() to obtain the calendar-specific month
+ * length.
+ */
+
+protected int handleComputeJulianDay(int bestField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the Julian day of a month of the Gregorian calendar.
+ * Subclasses may call this method to perform a Gregorian calendar
+ * fields-&gt;millis computation.  To perform a Gregorian calendar
+ * millis-&gt;fields computation, call computeGregorianFields().
+ * @param year extended Gregorian year
+ * @param month zero-based Gregorian month
+ * @return the Julian day number of the day before the first
+ * day of the given month in the given extended year
+ * @see #computeGregorianFields
+ */
+
+protected int computeGregorianMonthStart(int year, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses may override this method to compute several fields
+ * specific to each calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which
+ * will be set when this method is called.  Subclasses can also call
+ * the getGregorianXxx() methods to obtain Gregorian calendar
+ * equivalents for the given Julian day.
+ *
+ * <p>In addition, subclasses should compute any subclass-specific
+ * fields, that is, fields from BASE_FIELD_COUNT to
+ * getFieldCount() - 1.
+ *
+ * <p>The default implementation in <code>Calendar</code> implements
+ * a pure proleptic Gregorian calendar.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the extended year on the Gregorian calendar as computed by
+ * <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the month (0-based) on the Gregorian calendar as computed by
+ * <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianMonth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the day of year (1-based) on the Gregorian calendar as
+ * computed by <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianDayOfYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the day of month (1-based) on the Gregorian calendar as
+ * computed by <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianDayOfMonth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the number of fields defined by this calendar.  Valid field
+ * arguments to <code>set()</code> and <code>get()</code> are
+ * <code>0..getFieldCount()-1</code>.
+ */
+
+public final int getFieldCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a field to a value.  Subclasses should use this method when
+ * computing fields.  It sets the time stamp in the
+ * <code>stamp[]</code> array to <code>INTERNALLY_SET</code>.  If a
+ * field that may not be set by subclasses is passed in, an
+ * <code>IllegalArgumentException</code> is thrown.  This prevents
+ * subclasses from modifying fields that are intended to be
+ * calendar-system invariant.
+ */
+
+protected final void internalSet(int field, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the given year is a leap year. Returns true if the
+ * given year is a leap year.
+ * @param year the given year.
+ * @return true if the given year is a leap year; false otherwise.
+ */
+
+protected static final boolean isGregorianLeapYear(int year) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of a month of the Gregorian calendar.
+ * @param y the extended year
+ * @param m the 0-based month number
+ * @return the number of days in the given month
+ */
+
+protected static final int gregorianMonthLength(int y, int m) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of a previous month of the Gregorian calendar.
+ * @param y the extended year
+ * @param m the 0-based month number
+ * @return the number of days in the month previous to the given month
+ */
+
+protected static final int gregorianPreviousMonthLength(int y, int m) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two long integers, returning the floor of the quotient.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0
+ * but <code>floorDivide(-1,4)</code> =&gt; -1.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @return the floor of the quotient.
+ */
+
+protected static final long floorDivide(long numerator, long denominator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two integers, returning the floor of the quotient.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0
+ * but <code>floorDivide(-1,4)</code> =&gt; -1.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @return the floor of the quotient.
+ */
+
+protected static final int floorDivide(int numerator, int denominator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two integers, returning the floor of the quotient, and
+ * the modulus remainder.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0 and <code>-1%4</code> =&gt; -1,
+ * but <code>floorDivide(-1,4)</code> =&gt; -1 with <code>remainder[0]</code> =&gt; 3.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @param remainder an array of at least one element in which the value
+ * <code>numerator mod denominator</code> is returned. Unlike <code>numerator
+ * % denominator</code>, this will always be non-negative.
+ * @return the floor of the quotient.
+ */
+
+protected static final int floorDivide(int numerator, int denominator, int[] remainder) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two integers, returning the floor of the quotient, and
+ * the modulus remainder.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0 and <code>-1%4</code> =&gt; -1,
+ * but <code>floorDivide(-1,4)</code> =&gt; -1 with <code>remainder[0]</code> =&gt; 3.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @param remainder an array of at least one element in which the value
+ * <code>numerator mod denominator</code> is returned. Unlike <code>numerator
+ * % denominator</code>, this will always be non-negative.
+ * @return the floor of the quotient.
+ */
+
+protected static final int floorDivide(long numerator, int denominator, int[] remainder) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string name for a field, for debugging and exceptions.
+ */
+
+protected java.lang.String fieldName(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts time as milliseconds to Julian day.
+ * @param millis the given milliseconds.
+ * @return the Julian day number.
+ */
+
+protected static final int millisToJulianDay(long millis) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts Julian day to time as milliseconds.
+ * @param julian the given Julian day number.
+ * @return time as milliseconds.
+ */
+
+protected static final long julianDayToMillis(int julian) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the day of week, from SUNDAY to SATURDAY, given a Julian day.
+ */
+
+protected static final int julianDayToDayOfWeek(int julian) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current milliseconds without recomputing.
+ */
+
+protected final long internalGetTimeInMillis() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the calendar type name string for this Calendar object.
+ * The returned string is the legacy ICU calendar attribute value,
+ * for example, "gregorian" or "japanese".
+ *
+ * <p>See type="old type name" for the calendar attribute of locale IDs
+ * at http://www.unicode.org/reports/tr35/#Key_Type_Definitions
+ *
+ * @return legacy calendar type name string
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Value of the <code>AM_PM</code> field indicating the
+ * period of the day from midnight to just before noon.
+ */
+
+public static final int AM = 0; // 0x0
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating
+ * whether the <code>HOUR</code> is before or after noon.
+ * E.g., at 10:04:15.250 PM the <code>AM_PM</code> is <code>PM</code>.
+ * @see #AM
+ * @see #PM
+ * @see #HOUR
+ */
+
+public static final int AM_PM = 9; // 0x9
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * fourth month of the year.
+ */
+
+public static final int APRIL = 3; // 0x3
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * eighth month of the year.
+ */
+
+public static final int AUGUST = 7; // 0x7
+
+/**
+ * The number of fields defined by this class.  Subclasses may define
+ * addition fields starting with this number.
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+ */
+
+@Deprecated protected static final int BASE_FIELD_COUNT = 23; // 0x17
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * day of the month. This is a synonym for {@link #DAY_OF_MONTH}.
+ * The first day of the month has value 1.
+ * @see #DAY_OF_MONTH
+ */
+
+public static final int DATE = 5; // 0x5
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * day of the month. This is a synonym for {@link #DATE}.
+ * The first day of the month has value 1.
+ * @see #DATE
+ */
+
+public static final int DAY_OF_MONTH = 5; // 0x5
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the day
+ * of the week.  This field takes values {@link #SUNDAY},
+ * {@link #MONDAY}, {@link #TUESDAY}, {@link #WEDNESDAY},
+ * {@link #THURSDAY}, {@link #FRIDAY}, and {@link #SATURDAY}.
+ * @see #SUNDAY
+ * @see #MONDAY
+ * @see #TUESDAY
+ * @see #WEDNESDAY
+ * @see #THURSDAY
+ * @see #FRIDAY
+ * @see #SATURDAY
+ */
+
+public static final int DAY_OF_WEEK = 7; // 0x7
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * ordinal number of the day of the week within the current month. Together
+ * with the {@link #DAY_OF_WEEK} field, this uniquely specifies a day
+ * within a month.  Unlike {@link #WEEK_OF_MONTH} and
+ * {@link #WEEK_OF_YEAR}, this field's value does <em>not</em> depend on
+ * {@link #getFirstDayOfWeek()} or
+ * {@link #getMinimalDaysInFirstWeek()}.  <code>DAY_OF_MONTH 1</code>
+ * through <code>7</code> always correspond to <code>DAY_OF_WEEK_IN_MONTH
+ * 1</code>; <code>8</code> through <code>15</code> correspond to
+ * <code>DAY_OF_WEEK_IN_MONTH 2</code>, and so on.
+ * <code>DAY_OF_WEEK_IN_MONTH 0</code> indicates the week before
+ * <code>DAY_OF_WEEK_IN_MONTH 1</code>.  Negative values count back from the
+ * end of the month, so the last Sunday of a month is specified as
+ * <code>DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1</code>.  Because
+ * negative values count backward they will usually be aligned differently
+ * within the month than positive values.  For example, if a month has 31
+ * days, <code>DAY_OF_WEEK_IN_MONTH -1</code> will overlap
+ * <code>DAY_OF_WEEK_IN_MONTH 5</code> and the end of <code>4</code>.
+ * @see #DAY_OF_WEEK
+ * @see #WEEK_OF_MONTH
+ */
+
+public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the day
+ * number within the current year.  The first day of the year has value 1.
+ */
+
+public static final int DAY_OF_YEAR = 6; // 0x6
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * twelfth month of the year.
+ */
+
+public static final int DECEMBER = 11; // 0xb
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the localized day of week.  This will be a value from 1
+ * to 7 inclusive, with 1 being the localized first day of the week.
+ */
+
+public static final int DOW_LOCAL = 18; // 0x12
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * daylight savings offset in milliseconds.
+ */
+
+public static final int DST_OFFSET = 16; // 0x10
+
+/**
+ * The Julian day of the epoch, that is, January 1, 1970 on the
+ * Gregorian calendar.
+ */
+
+protected static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * era, e.g., AD or BC in the Julian calendar. This is a calendar-specific
+ * value; see subclass documentation.
+ * @see android.icu.util.GregorianCalendar#AD
+ * @see android.icu.util.GregorianCalendar#BC
+ */
+
+public static final int ERA = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the extended year.  This is a single number designating
+ * the year of this calendar system, encompassing all supra-year
+ * fields.  For example, for the Julian calendar system, year numbers
+ * are positive, with an era of BCE or CE.  An extended year value for
+ * the Julian calendar system assigns positive values to CE years and
+ * negative values to BCE years, with 1 BCE being year 0.
+ */
+
+public static final int EXTENDED_YEAR = 19; // 0x13
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * second month of the year.
+ */
+
+public static final int FEBRUARY = 1; // 0x1
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Friday.
+ */
+
+public static final int FRIDAY = 6; // 0x6
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the greatest minimum value that a field can take.
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int GREATEST_MINIMUM = 1; // 0x1
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * hour of the morning or afternoon. <code>HOUR</code> is used for the 12-hour
+ * clock.
+ * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10.
+ * @see #AM_PM
+ * @see #HOUR_OF_DAY
+ */
+
+public static final int HOUR = 10; // 0xa
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock.
+ * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22.
+ * @see #HOUR
+ */
+
+public static final int HOUR_OF_DAY = 11; // 0xb
+
+/**
+ * Value of the time stamp <code>stamp[]</code> indicating that a field
+ * has been set via computations from the time or from other fields.
+ * @see #UNSET
+ * @see #MINIMUM_USER_STAMP
+ */
+
+protected static final int INTERNALLY_SET = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Field indicating whether or not the current month is a leap month.
+ * Should have a value of 0 for non-leap months, and 1 for leap months.
+ */
+
+public static final int IS_LEAP_MONTH = 22; // 0x16
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * first month of the year.
+ */
+
+public static final int JANUARY = 0; // 0x0
+
+/**
+ * The Julian day of the Gregorian epoch, that is, January 1, 1 on the
+ * Gregorian calendar.
+ */
+
+protected static final int JAN_1_1_JULIAN_DAY = 1721426; // 0x1a4452
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the modified Julian day number.  This is different from
+ * the conventional Julian day number in two regards.  First, it
+ * demarcates days at local zone midnight, rather than noon GMT.
+ * Second, it is a local number; that is, it depends on the local time
+ * zone.  It can be thought of as a single number that encompasses all
+ * the date-related fields.
+ */
+
+public static final int JULIAN_DAY = 20; // 0x14
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * seventh month of the year.
+ */
+
+public static final int JULY = 6; // 0x6
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * sixth month of the year.
+ */
+
+public static final int JUNE = 5; // 0x5
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the least maximum value that a field can take.
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int LEAST_MAXIMUM = 2; // 0x2
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * third month of the year.
+ */
+
+public static final int MARCH = 2; // 0x2
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the maximum value that a field can take (greatest maximum).
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int MAXIMUM = 3; // 0x3
+
+/**
+ * The maximum supported <code>Date</code>.  This value is equivalent
+ * to {@link #MAX_JULIAN} and {@link #MAX_MILLIS}.
+ */
+
+protected static final java.util.Date MAX_DATE;
+static { MAX_DATE = null; }
+
+/**
+ * The maximum number of fields possible.  Subclasses must not define
+ * more total fields than this number.
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+ */
+
+@Deprecated protected static final int MAX_FIELD_COUNT = 32; // 0x20
+
+/**
+ * The maximum supported Julian day.  This value is equivalent to
+ * {@link #MAX_MILLIS} and {@link #MAX_DATE}.
+ * @see #JULIAN_DAY
+ */
+
+protected static final int MAX_JULIAN = 2130706432; // 0x7f000000
+
+/**
+ * The maximum supported epoch milliseconds.  This value is equivalent
+ * to {@link #MAX_JULIAN} and {@link #MAX_DATE}.
+ */
+
+protected static final long MAX_MILLIS = 183882168921600000L; // 0x28d47dbbf19b000L
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * fifth month of the year.
+ */
+
+public static final int MAY = 4; // 0x4
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * millisecond within the second.
+ * E.g., at 10:04:15.250 PM the <code>MILLISECOND</code> is 250.
+ */
+
+public static final int MILLISECOND = 14; // 0xe
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the milliseconds in the day.  This ranges from 0 to
+ * 23:59:59.999 (regardless of DST).  This field behaves
+ * <em>exactly</em> like a composite of all time-related fields, not
+ * including the zone fields.  As such, it also reflects
+ * discontinuities of those fields on DST transition days.  On a day of
+ * DST onset, it will jump forward.  On a day of DST cessation, it will
+ * jump backward.  This reflects the fact that is must be combined with
+ * the DST_OFFSET field to obtain a unique local time value.
+ */
+
+public static final int MILLISECONDS_IN_DAY = 21; // 0x15
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the minimum value that a field can take (least minimum).
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int MINIMUM = 0; // 0x0
+
+/**
+ * If the time stamp <code>stamp[]</code> has a value greater than or
+ * equal to <code>MINIMUM_USER_SET</code> then it has been set by the
+ * user via a call to <code>set()</code>.
+ * @see #UNSET
+ * @see #INTERNALLY_SET
+ */
+
+protected static final int MINIMUM_USER_STAMP = 2; // 0x2
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * minute within the hour.
+ * E.g., at 10:04:15.250 PM the <code>MINUTE</code> is 4.
+ */
+
+public static final int MINUTE = 12; // 0xc
+
+/**
+ * The minimum supported <code>Date</code>.  This value is equivalent
+ * to {@link #MIN_JULIAN} and {@link #MIN_MILLIS}.
+ */
+
+protected static final java.util.Date MIN_DATE;
+static { MIN_DATE = null; }
+
+/**
+ * The minimum supported Julian day.  This value is equivalent to
+ * {@link #MIN_MILLIS} and {@link #MIN_DATE}.
+ * @see #JULIAN_DAY
+ */
+
+protected static final int MIN_JULIAN = -2130706432; // 0x81000000
+
+/**
+ * The minimum supported epoch milliseconds.  This value is equivalent
+ * to {@link #MIN_JULIAN} and {@link #MIN_DATE}.
+ */
+
+protected static final long MIN_MILLIS = -184303902528000000L; // 0xfd713893bf19b000L
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Monday.
+ */
+
+public static final int MONDAY = 2; // 0x2
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * month. This is a calendar-specific value. The first month of the year is
+ * <code>JANUARY</code>; the last depends on the number of months in a year.
+ * @see #JANUARY
+ * @see #FEBRUARY
+ * @see #MARCH
+ * @see #APRIL
+ * @see #MAY
+ * @see #JUNE
+ * @see #JULY
+ * @see #AUGUST
+ * @see #SEPTEMBER
+ * @see #OCTOBER
+ * @see #NOVEMBER
+ * @see #DECEMBER
+ * @see #UNDECIMBER
+ */
+
+public static final int MONTH = 2; // 0x2
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * eleventh month of the year.
+ */
+
+public static final int NOVEMBER = 10; // 0xa
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * tenth month of the year.
+ */
+
+public static final int OCTOBER = 9; // 0x9
+
+/**
+ * The number of milliseconds in one day.  Although ONE_DAY and
+ * ONE_WEEK can fit into ints, they must be longs in order to prevent
+ * arithmetic overflow when performing (bug 4173516).
+ */
+
+protected static final long ONE_DAY = 86400000L; // 0x5265c00L
+
+/**
+ * The number of milliseconds in one hour.
+ */
+
+protected static final int ONE_HOUR = 3600000; // 0x36ee80
+
+/**
+ * The number of milliseconds in one minute.
+ */
+
+protected static final int ONE_MINUTE = 60000; // 0xea60
+
+/**
+ * The number of milliseconds in one second.
+ */
+
+protected static final int ONE_SECOND = 1000; // 0x3e8
+
+/**
+ * The number of milliseconds in one week.  Although ONE_DAY and
+ * ONE_WEEK can fit into ints, they must be longs in order to prevent
+ * arithmetic overflow when performing (bug 4173516).
+ */
+
+protected static final long ONE_WEEK = 604800000L; // 0x240c8400L
+
+/**
+ * Value of the <code>AM_PM</code> field indicating the
+ * period of the day from noon to just before midnight.
+ */
+
+public static final int PM = 1; // 0x1
+
+/**
+ * Value to OR against resolve table field values for remapping.
+ * @see #resolveFields
+ */
+
+protected static final int RESOLVE_REMAP = 32; // 0x20
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Saturday.
+ */
+
+public static final int SATURDAY = 7; // 0x7
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * second within the minute.
+ * E.g., at 10:04:15.250 PM the <code>SECOND</code> is 15.
+ */
+
+public static final int SECOND = 13; // 0xd
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * ninth month of the year.
+ */
+
+public static final int SEPTEMBER = 8; // 0x8
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Sunday.
+ */
+
+public static final int SUNDAY = 1; // 0x1
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Thursday.
+ */
+
+public static final int THURSDAY = 5; // 0x5
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Tuesday.
+ */
+
+public static final int TUESDAY = 3; // 0x3
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * thirteenth month of the year. Although {@link android.icu.util.GregorianCalendar GregorianCalendar}
+ * does not use this value, lunar calendars do.
+ */
+
+public static final int UNDECIMBER = 12; // 0xc
+
+/**
+ * Value of the time stamp <code>stamp[]</code> indicating that
+ * a field has not been set since the last call to <code>clear()</code>.
+ * @see #INTERNALLY_SET
+ * @see #MINIMUM_USER_STAMP
+ */
+
+protected static final int UNSET = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong>Option used by {@link #setRepeatedWallTimeOption(int)} and
+ * {@link #setSkippedWallTimeOption(int)} specifying an ambiguous wall time
+ * to be interpreted as the earliest.
+ * @see #setRepeatedWallTimeOption(int)
+ * @see #getRepeatedWallTimeOption()
+ * @see #setSkippedWallTimeOption(int)
+ * @see #getSkippedWallTimeOption()
+ */
+
+public static final int WALLTIME_FIRST = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong>Option used by {@link #setRepeatedWallTimeOption(int)} and
+ * {@link #setSkippedWallTimeOption(int)} specifying an ambiguous wall time
+ * to be interpreted as the latest.
+ * @see #setRepeatedWallTimeOption(int)
+ * @see #getRepeatedWallTimeOption()
+ * @see #setSkippedWallTimeOption(int)
+ * @see #getSkippedWallTimeOption()
+ */
+
+public static final int WALLTIME_LAST = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong>Option used by {@link #setSkippedWallTimeOption(int)} specifying an
+ * ambiguous wall time to be interpreted as the next valid wall time.
+ * @see #setSkippedWallTimeOption(int)
+ * @see #getSkippedWallTimeOption()
+ */
+
+public static final int WALLTIME_NEXT_VALID = 2; // 0x2
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Wednesday.
+ */
+
+public static final int WEDNESDAY = 4; // 0x4
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * week number within the current month.  The first week of the month, as
+ * defined by {@link #getFirstDayOfWeek()} and
+ * {@link #getMinimalDaysInFirstWeek()}, has value 1.  Subclasses define
+ * the value of {@link #WEEK_OF_MONTH} for days before the first week of
+ * the month.
+ * @see #getFirstDayOfWeek
+ * @see #getMinimalDaysInFirstWeek
+ */
+
+public static final int WEEK_OF_MONTH = 4; // 0x4
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * week number within the current year.  The first week of the year, as
+ * defined by {@link #getFirstDayOfWeek()} and
+ * {@link #getMinimalDaysInFirstWeek()}, has value 1.  Subclasses define
+ * the value of {@link #WEEK_OF_YEAR} for days before the first week of
+ * the year.
+ * @see #getFirstDayOfWeek
+ * @see #getMinimalDaysInFirstWeek
+ */
+
+public static final int WEEK_OF_YEAR = 3; // 0x3
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * year. This is a calendar-specific value; see subclass documentation.
+ */
+
+public static final int YEAR = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the extended year corresponding to the
+ * {@link #WEEK_OF_YEAR} field.  This may be one greater or less
+ * than the value of {@link #EXTENDED_YEAR}.
+ */
+
+public static final int YEAR_WOY = 17; // 0x11
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * raw offset from GMT in milliseconds.
+ */
+
+public static final int ZONE_OFFSET = 15; // 0xf
+/**
+ * Simple, immutable struct-like class for access to the CLDR week data.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class WeekData {
+
+/**
+ * Constructor
+ *
+ * @param fdow the first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ * @param mdifw the minimal number of days in the first week
+ * @param weekendOnset the onset day, where 1 = Sunday and 7 = Saturday
+ * @param weekendOnsetMillis the onset time in millis during the onset day
+ * @param weekendCease the cease day, where 1 = Sunday and 7 = Saturday
+ * @param weekendCeaseMillis the cease time in millis during the cease day.
+ */
+
+public WeekData(int fdow, int mdifw, int weekendOnset, int weekendOnsetMillis, int weekendCease, int weekendCeaseMillis) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * the first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ */
+
+public final int firstDayOfWeek;
+{ firstDayOfWeek = 0; }
+
+/**
+ * the minimal number of days in the first week
+ */
+
+public final int minimalDaysInFirstWeek;
+{ minimalDaysInFirstWeek = 0; }
+
+/**
+ * the cease day, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ */
+
+public final int weekendCease;
+{ weekendCease = 0; }
+
+/**
+ * the cease time in millis during the cease day. Exclusive, so the max is 24:00:00.000.
+ * Note that this will format as 00:00 the next day.
+ */
+
+public final int weekendCeaseMillis;
+{ weekendCeaseMillis = 0; }
+
+/**
+ * the onset day, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ */
+
+public final int weekendOnset;
+{ weekendOnset = 0; }
+
+/**
+ * the onset time in millis during the onset day
+ */
+
+public final int weekendOnsetMillis;
+{ weekendOnsetMillis = 0; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ChineseCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ChineseCalendar.java
new file mode 100644
index 0000000..85685f8
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ChineseCalendar.java
@@ -0,0 +1,306 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*********************************************************************
+ * Copyright (C) 2000-2014, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *********************************************************************
+ */
+
+
+package android.icu.util;
+
+import android.icu.text.DateFormat;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>ChineseCalendar</code> is a concrete subclass of {@link android.icu.util.Calendar Calendar}
+ * that implements a traditional Chinese calendar.  The traditional Chinese
+ * calendar is a lunisolar calendar: Each month starts on a new moon, and
+ * the months are numbered according to solar events, specifically, to
+ * guarantee that month 11 always contains the winter solstice.  In order
+ * to accomplish this, leap months are inserted in certain years.  Leap
+ * months are numbered the same as the month they follow.  The decision of
+ * which month is a leap month depends on the relative movements of the sun
+ * and moon.
+ *
+ * <p>All astronomical computations are performed with respect to a time
+ * zone of GMT+8:00 and a longitude of 120 degrees east.  Although some
+ * calendars implement a historically more accurate convention of using
+ * Beijing's local longitude (116 degrees 25 minutes east) and time zone
+ * (GMT+7:45:40) for dates before 1929, we do not implement this here.
+ *
+ * <p>Years are counted in two different ways in the Chinese calendar.  The
+ * first method is by sequential numbering from the 61st year of the reign
+ * of Huang Di, 2637 BCE, which is designated year 1 on the Chinese
+ * calendar.  The second method uses 60-year cycles from the same starting
+ * point, which is designated year 1 of cycle 1.  In this class, the
+ * <code>EXTENDED_YEAR</code> field contains the sequential year count.
+ * The <code>ERA</code> field contains the cycle number, and the
+ * <code>YEAR</code> field contains the year of the cycle, a value between
+ * 1 and 60.
+ *
+ * <p>There is some variation in what is considered the starting point of
+ * the calendar, with some sources starting in the first year of the reign
+ * of Huang Di, rather than the 61st.  This gives continuous year numbers
+ * 60 years greater and cycle numbers one greater than what this class
+ * implements.
+ *
+ * <p>Because <code>ChineseCalendar</code> defines an additional field and
+ * redefines the way the <code>ERA</code> field is used, it requires a new
+ * format class, <code>ChineseDateFormat</code>.  As always, use the
+ * methods <code>DateFormat.getXxxInstance(Calendar cal,...)</code> to
+ * obtain a formatter for this calendar.
+ *
+ * <p>References:<ul>
+ *
+ * <li>Dershowitz and Reingold, <i>Calendrical Calculations</i>,
+ * Cambridge University Press, 1997</li>
+ *
+ * <li>Helmer Aslaksen's
+ * <a href="http://www.math.nus.edu.sg/aslaksen/calendar/chinese.shtml">
+ * Chinese Calendar page</a></li>
+ *
+ * <li>The <a href="http://www.tondering.dk/claus/calendar.html">
+ * Calendar FAQ</a></li>
+ *
+ * </ul>
+ *
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * ChineseCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=chinese"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ChineseCalendar extends android.icu.util.Calendar {
+
+/**
+ * Construct a <code>ChineseCalendar</code> with the default time zone and locale.
+ */
+
+public ChineseCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code> with the give date set in the default time zone
+ * with the default locale.
+ * @param date The date to which the new calendar is set.
+ */
+
+public ChineseCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth The value used to set the Chinese calendar's {@link #IS_LEAP_MONTH}
+ *                  time field.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int year, int month, int isLeapMonth, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth the value used to set the {@link #IS_LEAP_MONTH} time field
+ *              in the calendar.
+ * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+ *              in the calendar.
+ * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+ *              in the calendar.
+ * @param second the value used to set the {@link #SECOND SECOND} time field
+ *              in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int year, int month, int isLeapMonth, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constructs a <code>ChineseCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param era       The value used to set the calendar's {@link #ERA ERA} time field.
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth The value used to set the Chinese calendar's {@link #IS_LEAP_MONTH}
+ *                  time field.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int era, int year, int month, int isLeapMonth, int date) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constructs a <code>ChineseCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param era   the value used to set the calendar's {@link #ERA ERA} time field.
+ * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth the value used to set the {@link #IS_LEAP_MONTH} time field
+ *              in the calendar.
+ * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+ *              in the calendar.
+ * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+ *              in the calendar.
+ * @param second the value used to set the {@link #SECOND SECOND} time field
+ *              in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int era, int year, int month, int isLeapMonth, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ * @param aLocale The given locale
+ */
+
+public ChineseCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ * @param zone the given time zone
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ * @param zone the given time zone
+ * @param aLocale the given locale
+ */
+
+public ChineseCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale
+ */
+
+public ChineseCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code>  based on the current time
+ * with the given time zone with the given locale.
+ * @param zone the given time zone
+ * @param locale the given ulocale
+ */
+
+public ChineseCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to return the limit value for the given field.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implement abstract Calendar method to return the extended year
+ * defined by the current fields.  This will use either the ERA and
+ * YEAR field as the cycle and year-of-cycle, or the EXTENDED_YEAR
+ * field as the continuous year count, depending on which is newer.
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar method to return the number of days in the given
+ * extended year and month.
+ *
+ * <p>Note: This method also reads the IS_LEAP_MONTH field to determine
+ * whether or not the given month is a leap month.
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, java.lang.String override, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to add IS_LEAP_MONTH to the field resolution
+ * table.
+ */
+
+protected int[][][] getFieldResolutionTable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to handle leap months properly.
+ */
+
+public void add(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to handle leap months properly.
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to compute several fields specific to the Chinese
+ * calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
+ * method is called.  The getGregorianXxx() methods return Gregorian
+ * calendar equivalents for the given Julian day.
+ *
+ * <p>Compute the ChineseCalendar-specific field IS_LEAP_MONTH.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the Julian day number of day before the first day of the
+ * given month in the given extended year.
+ *
+ * <p>Note: This method reads the IS_LEAP_MONTH field to determine
+ * whether the given month is a leap month.
+ * @param eyear the extended year
+ * @param month the zero-based month.  The month is also determined
+ * by reading the IS_LEAP_MONTH field.
+ * @return the Julian day number of the day before the first
+ * day of the given month and year
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/CopticCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/CopticCalendar.java
new file mode 100644
index 0000000..11673ae
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/CopticCalendar.java
@@ -0,0 +1,247 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2005-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * Implement the Coptic calendar system.
+ * <p>
+ * CopticCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=coptic"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class CopticCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>CopticCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public CopticCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone The time zone for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public CopticCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale The icu locale for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param aLocale The locale for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param locale The icu locale for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tout.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public CopticCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public CopticCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tout.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public CopticCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/extended year
+ */
+
+protected int handleComputeMonthStart(int eyear, int emonth, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Calculate the limit for a specified type of limit and field
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constant for ????? / ?????,
+ * the 6th month of the Coptic year.
+ */
+
+public static final int AMSHIR = 5; // 0x5
+
+/** 
+ * Constant for ????? / ????,
+ * the 2nd month of the Coptic year.
+ */
+
+public static final int BABA = 1; // 0x1
+
+/** 
+ * Constant for ???????? / ??????,
+ * the 7th month of the Coptic year.
+ */
+
+public static final int BARAMHAT = 6; // 0x6
+
+/** 
+ * Constant for ??????? / ??????,
+ * the 8th month of the Coptic year.
+ */
+
+public static final int BARAMOUDA = 7; // 0x7
+
+/** 
+ * Constant for ????? / ????;,
+ * the 9th month of the Coptic year.
+ */
+
+public static final int BASHANS = 8; // 0x8
+
+/** 
+ * Constant for ???? / ????,
+ * the 11th month of the Coptic year.
+ */
+
+public static final int EPEP = 10; // 0xa
+
+/** 
+ * Constant for ???? / ?????,
+ * the 3rd month of the Coptic year.
+ */
+
+public static final int HATOR = 2; // 0x2
+
+/** 
+ * Constant for ????? / ????;,
+ * the 4th month of the Coptic year.
+ */
+
+public static final int KIAHK = 3; // 0x3
+
+/** 
+ * Constant for ?????? / ????,
+ * the 12th month of the Coptic year.
+ */
+
+public static final int MESRA = 11; // 0xb
+
+/** 
+ * Constant for ??????? ????? / ???????????,
+ * the 13th month of the Coptic year.
+ */
+
+public static final int NASIE = 12; // 0xc
+
+/** 
+ * Constant for ????? / ?????,
+ * the 10th month of the Coptic year.
+ */
+
+public static final int PAONA = 9; // 0x9
+
+/** 
+ * Constant for ???? / ????,
+ * the 5th month of the Coptic year.
+ */
+
+public static final int TOBA = 4; // 0x4
+
+/** 
+ * Constant for ???? / ???,
+ * the 1st month of the Coptic year.
+ */
+
+public static final int TOUT = 0; // 0x0
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Currency.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Currency.java
new file mode 100644
index 0000000..48d28fd
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Currency.java
@@ -0,0 +1,463 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 2001-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+import java.util.Locale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * A class encapsulating a currency, as defined by ISO 4217.  A
+ * <tt>Currency</tt> object can be created given a <tt>Locale</tt> or
+ * given an ISO 4217 code.  Once created, the <tt>Currency</tt> object
+ * can return various data necessary to its proper display:
+ *
+ * <ul><li>A display symbol, for a specific locale
+ * <li>The number of fraction digits to display
+ * <li>A rounding increment
+ * </ul>
+ *
+ * The <tt>DecimalFormat</tt> class uses these data to display
+ * currencies.
+ *
+ * <p>Note: This class deliberately resembles
+ * <tt>java.util.Currency</tt> but it has a completely independent
+ * implementation, and adds features not present in the JDK.
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Currency extends android.icu.util.MeasureUnit {
+
+/**
+ * Constructs a currency object for the given ISO 4217 3-letter
+ * code.  This constructor assumes that the code is valid.
+ *
+ * @param theISOCode The iso code used to construct the currency.
+ */
+
+protected Currency(java.lang.String theISOCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency object for the default currency in the given
+ * locale.
+ * @param locale the locale
+ * @return the currency object for this locale
+ */
+
+public static android.icu.util.Currency getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency object for the default currency in the given
+ * locale.
+ */
+
+public static android.icu.util.Currency getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of Strings which contain the currency
+ * identifiers that are valid for the given locale on the
+ * given date.  If there are no such identifiers, returns null.
+ * Returned identifiers are in preference order.
+ * @param loc the locale for which to retrieve currency codes.
+ * @param d the date for which to retrieve currency codes for the given locale.
+ * @return The array of ISO currency codes.
+ */
+
+public static java.lang.String[] getAvailableCurrencyCodes(android.icu.util.ULocale loc, java.util.Date d) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of Strings which contain the currency
+ * identifiers that are valid for the given {@link java.util.Locale} on the
+ * given date.  If there are no such identifiers, returns null.
+ * Returned identifiers are in preference order.
+ * @param loc the {@link java.util.Locale} for which to retrieve currency codes.
+ * @param d the date for which to retrieve currency codes for the given locale.
+ * @return The array of ISO currency codes.
+ */
+
+public static java.lang.String[] getAvailableCurrencyCodes(java.util.Locale loc, java.util.Date d) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of available currencies. The returned set of currencies contains all of the
+ * available currencies, including obsolete ones. The result set can be modified without
+ * affecting the available currencies in the runtime.
+ *
+ * @return The set of available currencies. The returned set could be empty if there is no
+ * currency data available.
+ */
+
+public static java.util.Set<android.icu.util.Currency> getAvailableCurrencies() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency object given an ISO 4217 3-letter code.
+ * @param theISOCode the iso code
+ * @return the currency for this iso code
+ * @throws java.lang.NullPointerException if <code>theISOCode</code> is null.
+ * @throws java.lang.IllegalArgumentException if <code>theISOCode</code> is not a
+ *         3-letter alpha code.
+ */
+
+public static android.icu.util.Currency getInstance(java.lang.String theISOCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Currency object based on the currency represented by the given java.util.Currency.
+ *
+ * @param currency The Java currency object to convert.
+ * @return An equivalent ICU currency object.
+ */
+
+public static android.icu.util.Currency fromJavaCurrency(java.util.Currency currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a java.util.Currency object based on the currency represented by this Currency.
+ *
+ * @return An equivalent Java currency object.
+ */
+
+public java.util.Currency toJavaCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return an array of the locales for which a currency
+ * is defined.
+ * @return an array of the available locales
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return an array of the ulocales for which a currency
+ * is defined.
+ * @return an array of the available ulocales
+ */
+
+public static android.icu.util.ULocale[] getAvailableULocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a key and a locale, returns an array of values for the key for which data
+ * exists.  If commonlyUsed is true, these are the values that typically are used
+ * with this locale, otherwise these are all values for which data exists.
+ * This is a common service API.
+ * <p>
+ * The only supported key is "currency", other values return an empty array.
+ * <p>
+ * Currency information is based on the region of the locale.  If the locale does not
+ * indicate a region, {@link android.icu.util.ULocale#addLikelySubtags(android.icu.util.ULocale) ULocale#addLikelySubtags(ULocale)} is used to infer a region,
+ * except for the 'und' locale.
+ * <p>
+ * If commonlyUsed is true, only the currencies known to be in use as of the current date
+ * are returned.  When there are more than one, these are returned in preference order
+ * (typically, this occurs when a country is transitioning to a new currency, and the
+ * newer currency is preferred), see
+ * <a href="http://unicode.org/reports/tr35/#Supplemental_Currency_Data">Unicode TR#35 Sec. C1</a>.
+ * If commonlyUsed is false, all currencies ever used in any locale are returned, in no
+ * particular order.
+ *
+ * @param key           key whose values to look up.  the only recognized key is "currency"
+ * @param locale        the locale
+ * @param commonlyUsed  if true, return only values that are currently used in the locale.
+ *                      Otherwise returns all values.
+ * @return an array of values for the given key and the locale.  If there is no data, the
+ *   array will be empty.
+ */
+
+public static final java.lang.String[] getKeywordValuesForLocale(java.lang.String key, android.icu.util.ULocale locale, boolean commonlyUsed) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 4217 3-letter code for this currency object.
+ */
+
+public java.lang.String getCurrencyCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 4217 numeric code for this currency object.
+ * <p>Note: If the ISO 4217 numeric code is not assigned for the currency or
+ * the currency is unknown, this method returns 0.</p>
+ * @return The ISO 4217 numeric code of this currency.
+ */
+
+public int getNumericCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience and compatibility override of getName that
+ * requests the symbol name for the default <code>DISPLAY</code> locale.
+ * @see #getName
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getSymbol() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience and compatibility override of getName that
+ * requests the symbol name.
+ * @param loc the Locale for the symbol
+ * @see #getName
+ */
+
+public java.lang.String getSymbol(java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience and compatibility override of getName that
+ * requests the symbol name.
+ * @param uloc the ULocale for the symbol
+ * @see #getName
+ */
+
+public java.lang.String getSymbol(android.icu.util.ULocale uloc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the
+ * given locale.
+ * This is a convenient method for
+ * getName(ULocale, int, boolean[]);
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return.
+ *                  The nameStyle should be SYMBOL_NAME, NARROW_SYMBOL_NAME,
+ *                  or LONG_NAME. Otherwise, throw IllegalArgumentException.
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ */
+
+public java.lang.String getName(java.util.Locale locale, int nameStyle, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the
+ * given locale.  For example, the display name for the USD
+ * currency object in the en_US locale is "$".
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return.
+ *                  The nameStyle should be SYMBOL_NAME, NARROW_SYMBOL_NAME,
+ *                  or LONG_NAME. Otherwise, throw IllegalArgumentException.
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ * <p>
+ * @throws  java.lang.IllegalArgumentException  if the nameStyle is not SYMBOL_NAME
+ *                                    or LONG_NAME.
+ * @see #getName(ULocale, int, String, boolean[])
+ */
+
+public java.lang.String getName(android.icu.util.ULocale locale, int nameStyle, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the given locale.
+ * This is a convenience overload of getName(ULocale, int, String, boolean[]);
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return
+ * @param pluralCount plural count string for this locale
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ */
+
+public java.lang.String getName(java.util.Locale locale, int nameStyle, java.lang.String pluralCount, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the
+ * given locale.  For example, the SYMBOL_NAME for the USD
+ * currency object in the en_US locale is "$".
+ * The PLURAL_LONG_NAME for the USD currency object when the currency
+ * amount is plural is "US dollars", such as in "3.00 US dollars";
+ * while the PLURAL_LONG_NAME for the USD currency object when the currency
+ * amount is singular is "US dollar", such as in "1.00 US dollar".
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return
+ * @param pluralCount plural count string for this locale
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ * @throws  java.lang.IllegalArgumentException  if the nameStyle is not SYMBOL_NAME,
+ *                                    LONG_NAME, or PLURAL_LONG_NAME.
+ */
+
+public java.lang.String getName(android.icu.util.ULocale locale, int nameStyle, java.lang.String pluralCount, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for this currency in the default locale.
+ * If the resource data for the default locale contains no entry for this currency,
+ * then the ISO 4217 code is returned.
+ * <p>
+ * Note: This method is a convenience equivalent for
+ * {@link java.util.Currency#getDisplayName()} and is equivalent to
+ * <code>getName(Locale.getDefault(), LONG_NAME, null)</code>.
+ *
+ * @return The display name of this currency
+ * @see #getDisplayName(Locale)
+ * @see #getName(Locale, int, boolean[])
+ */
+
+public java.lang.String getDisplayName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for this currency in the given locale.
+ * If the resource data for the given locale contains no entry for this currency,
+ * then the ISO 4217 code is returned.
+ * <p>
+ * Note: This method is a convenience equivalent for
+ * {@link java.util.Currency#getDisplayName(java.util.Locale)} and is equivalent
+ * to <code>getName(locale, LONG_NAME, null)</code>.
+ *
+ * @param locale locale in which to display currency
+ * @return The display name of this currency for the specified locale
+ * @see #getDisplayName(Locale)
+ * @see #getName(Locale, int, boolean[])
+ */
+
+public java.lang.String getDisplayName(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of the number of fraction digits that should
+ * be displayed for this currency.
+ * This is equivalent to getDefaultFractionDigits(CurrencyUsage.STANDARD);
+ *
+ * Important: The number of fraction digits for a given currency is NOT
+ * guaranteed to be constant across versions of ICU or CLDR. For example,
+ * do NOT use this value as a mechanism for deciding the magnitude used
+ * to store currency values in a database. You should use this value for
+ * display purposes only.
+ *
+ * @return a non-negative number of fraction digits to be
+ * displayed
+ */
+
+public int getDefaultFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of the number of fraction digits that should
+ * be displayed for this currency with Usage.
+ *
+ * Important: The number of fraction digits for a given currency is NOT
+ * guaranteed to be constant across versions of ICU or CLDR. For example,
+ * do NOT use this value as a mechanism for deciding the magnitude used
+ * to store currency values in a database. You should use this value for
+ * display purposes only.
+ *
+ * @param Usage the usage of currency(Standard or Cash)
+ * @return a non-negative number of fraction digits to be
+ * displayed
+ */
+
+public int getDefaultFractionDigits(android.icu.util.Currency.CurrencyUsage Usage) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding increment for this currency, or 0.0 if no
+ * rounding is done by this currency.
+ * This is equivalent to getRoundingIncrement(CurrencyUsage.STANDARD);
+ * @return the non-negative rounding increment, or 0.0 if none
+ */
+
+public double getRoundingIncrement() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding increment for this currency, or 0.0 if no
+ * rounding is done by this currency with the Usage.
+ * @param Usage the usage of currency(Standard or Cash)
+ * @return the non-negative rounding increment, or 0.0 if none
+ */
+
+public double getRoundingIncrement(android.icu.util.Currency.CurrencyUsage Usage) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 4217 code for this currency.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Queries if the given ISO 4217 3-letter code is available on the specified date range.
+ * <p>
+ * Note: For checking availability of a currency on a specific date, specify the date on both <code>from</code> and
+ * <code>to</code>. When both <code>from</code> and <code>to</code> are null, this method checks if the specified
+ * currency is available all time.
+ *
+ * @param code
+ *            The ISO 4217 3-letter code.
+ * @param from
+ *            The lower bound of the date range, inclusive. When <code>from</code> is null, check the availability
+ *            of the currency any date before <code>to</code>
+ * @param to
+ *            The upper bound of the date range, inclusive. When <code>to</code> is null, check the availability of
+ *            the currency any date after <code>from</code>
+ * @return true if the given ISO 4217 3-letter code is supported on the specified date range.
+ * @throws java.lang.IllegalArgumentException when <code>to</code> is before <code>from</code>.
+ */
+
+public static boolean isAvailable(java.lang.String code, java.util.Date from, java.util.Date to) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Selector for getName() indicating the long name for a
+ * currency, such as "US Dollar" for USD.
+ */
+
+public static final int LONG_NAME = 1; // 0x1
+
+/**
+ * Selector for getName() indicating the narrow currency symbol.
+ * <p>
+ * The narrow currency symbol is similar to the regular currency symbol,
+ * but it always takes the shortest form;
+ * for example, "$" instead of "US$" for USD in en-CA.
+ */
+
+public static final int NARROW_SYMBOL_NAME = 3; // 0x3
+
+/**
+ * Selector for getName() indicating the plural long name for a
+ * currency, such as "US dollar" for USD in "1 US dollar",
+ * and "US dollars" for USD in "2 US dollars".
+ */
+
+public static final int PLURAL_LONG_NAME = 2; // 0x2
+
+/**
+ * Selector for getName() indicating a symbolic name for a
+ * currency, such as "$" for USD.
+ */
+
+public static final int SYMBOL_NAME = 0; // 0x0
+/**
+ * Currency Usage used for Decimal Format
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CurrencyUsage {
+/**
+ * a setting to specify currency usage which determines currency digit and rounding
+ * for standard usage, for example: "50.00 NT$"
+ */
+
+STANDARD,
+/**
+ * a setting to specify currency usage which determines currency digit and rounding
+ * for cash usage, for example: "50 NT$"
+ */
+
+CASH;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/CurrencyAmount.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/CurrencyAmount.java
new file mode 100644
index 0000000..aa5585f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/CurrencyAmount.java
@@ -0,0 +1,69 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (c) 2004-2010, International Business Machines
+* Corporation and others.  All Rights Reserved.
+**********************************************************************
+* Author: Alan Liu
+* Created: April 12, 2004
+* Since: ICU 3.0
+**********************************************************************
+*/
+
+package android.icu.util;
+
+
+/**
+ * An amount of currency, consisting of a Number and a Currency.
+ * CurrencyAmount objects are immutable.
+ *
+ * @see java.lang.Number
+ * @see android.icu.util.Currency
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CurrencyAmount extends android.icu.util.Measure {
+
+/**
+ * Constructs a new object given a number and a currency.
+ * @param number the number
+ * @param currency the currency
+ */
+
+public CurrencyAmount(java.lang.Number number, android.icu.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new object given a double value and a currency.
+ * @param number a double value
+ * @param currency the currency
+ */
+
+public CurrencyAmount(double number, android.icu.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new object given a number and a Java currency.
+ * @param number the number
+ * @param currency the currency
+ */
+
+public CurrencyAmount(java.lang.Number number, java.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new object given a double value and a Java currency.
+ * @param number a double value
+ * @param currency the currency
+ */
+
+public CurrencyAmount(double number, java.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the currency of this object.
+ * @return this object's Currency
+ */
+
+public android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/DateInterval.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/DateInterval.java
new file mode 100644
index 0000000..ad413b2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/DateInterval.java
@@ -0,0 +1,63 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ *   Copyright (C) 2008-2009, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * This class represents date interval.
+ * It is a pair of long representing from date 1 to date 2.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class DateInterval implements java.io.Serializable {
+
+/** 
+ * Constructor given from date and to date.
+ * @param from      The from date in date interval.
+ * @param to        The to date in date interval.
+ */
+
+public DateInterval(long from, long to) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Get the from date.
+ * @return  the from date in dateInterval.
+ */
+
+public long getFromDate() { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Get the to date.
+ * @return  the to date in dateInterval.
+ */
+
+public long getToDate() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashcode
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override toString
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/EthiopicCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/EthiopicCalendar.java
new file mode 100644
index 0000000..c2ac482
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/EthiopicCalendar.java
@@ -0,0 +1,251 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2005-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * Implement the Ethiopic calendar system.
+ * <p>
+ * EthiopicCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=ethiopic"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class EthiopicCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>EthiopicCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public EthiopicCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone The time zone for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public EthiopicCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale The icu locale for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param aLocale The locale for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param locale The icu locale for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Meskerem.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public EthiopicCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public EthiopicCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Meskerem.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public EthiopicCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set Alem or Mihret era.
+ *
+ * @param onOff Set Amete Alem era if true, otherwise set Amete Mihret era.
+ */
+
+public void setAmeteAlemEra(boolean onOff) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if this calendar is set to the Amete Alem era.
+ *
+ * @return true if set to the Amete Alem era.
+ */
+
+public boolean isAmeteAlemEra() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/extended year
+ */
+
+protected int handleComputeMonthStart(int eyear, int emonth, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constant for ????, the 9th month of the Ethiopic year.
+ */
+
+public static final int GENBOT = 8; // 0x8
+
+/** 
+ * Constant for ???, the 11th month of the Ethiopic year.
+ */
+
+public static final int HAMLE = 10; // 0xa
+
+/** 
+ * Constant for ???, the 3rd month of the Ethiopic year.
+ */
+
+public static final int HEDAR = 2; // 0x2
+
+/** 
+ * Constant for ????, the 7th month of the Ethiopic year.
+ */
+
+public static final int MEGABIT = 6; // 0x6
+
+/** 
+ * Constant for ?????, the 1st month of the Ethiopic year.
+ */
+
+public static final int MESKEREM = 0; // 0x0
+
+/** 
+ * Constant for ????, the 8th month of the Ethiopic year.
+ */
+
+public static final int MIAZIA = 7; // 0x7
+
+/** 
+ * Constant for ???, the 12th month of the Ethiopic year.
+ */
+
+public static final int NEHASSE = 11; // 0xb
+
+/** 
+ * Constant for ????, the 13th month of the Ethiopic year.
+ */
+
+public static final int PAGUMEN = 12; // 0xc
+
+/** 
+ * Constant for ??, the 10th month of the Ethiopic year.
+ */
+
+public static final int SENE = 9; // 0x9
+
+/** 
+ * Constant for ????, the 4th month of the Ethiopic year.
+ */
+
+public static final int TAHSAS = 3; // 0x3
+
+/** 
+ * Constant for ????, the 2nd month of the Ethiopic year.
+ */
+
+public static final int TEKEMT = 1; // 0x1
+
+/** 
+ * Constant for ??, the 5th month of the Ethiopic year.
+ */
+
+public static final int TER = 4; // 0x4
+
+/** 
+ * Constant for ????, the 6th month of the Ethiopic year.
+ */
+
+public static final int YEKATIT = 5; // 0x5
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Freezable.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Freezable.java
new file mode 100644
index 0000000..d330654
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Freezable.java
@@ -0,0 +1,329 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ ******************************************************************************
+ * Copyright (C) 2005-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                               *
+ ******************************************************************************
+*/
+
+package android.icu.util;
+
+
+/**
+ * Provides a flexible mechanism for controlling access, without requiring that
+ * a class be immutable. Once frozen, an object can never be unfrozen, so it is
+ * thread-safe from that point onward. Once the object has been frozen,
+ * it must guarantee that no changes can be made to it. Any attempt to alter
+ * it must raise an UnsupportedOperationException exception. This means that when
+ * the object returns internal objects, or if anyone has references to those internal
+ * objects, that those internal objects must either be immutable, or must also
+ * raise exceptions if any attempt to modify them is made. Of course, the object
+ * can return clones of internal objects, since those are safe.
+ * <h2>Background</h2>
+ * <p>
+ * There are often times when you need objects to be objects 'safe', so that
+ * they can't be modified. Examples are when objects need to be thread-safe, or
+ * in writing robust code, or in caches. If you are only creating your own
+ * objects, you can guarantee this, of course -- but only if you don't make a
+ * mistake. If you have objects handed into you, or are creating objects using
+ * others handed into you, it is a different story. It all comes down to whether
+ * you want to take the Blanche Dubois approach (&quot;depend on the kindness of
+ * strangers&quot;) or the Andy Grove approach (&quot;Only the Paranoid
+ * Survive&quot;).
+ * </p>
+ * <p>
+ * For example, suppose we have a simple class:
+ * </p>
+ *
+ * <pre>
+ * public class A {
+ *      protected Collection b;
+ *
+ *      protected Collection c;
+ *
+ *      public Collection get_b() {
+ *              return b;
+ *      }
+ *
+ *      public Collection get_c() {
+ *              return c;
+ *      }
+ *
+ *      public A(Collection new_b, Collection new_c) {
+ *              b = new_b;
+ *              c = new_c;
+ *      }
+ * }
+ * </pre>
+ *
+ * <p>
+ * Since the class doesn't have any setters, someone might think that it is
+ * immutable. You know where this is leading, of course; this class is unsafe in
+ * a number of ways. The following illustrates that.
+ * </p>
+ *
+ * <pre>
+ *  public test1(SupposedlyImmutableClass x, SafeStorage y) {
+ *    // unsafe getter
+ *    A a = x.getA();
+ *    Collection col = a.get_b();
+ *    col.add(something); // a has now been changed, and x too
+ *
+ *    // unsafe constructor
+ *    a = new A(col, col);
+ *    y.store(a);
+ *    col.add(something); // a has now been changed, and y too
+ *  }
+ * </pre>
+ *
+ * <p>
+ * There are a few different techniques for having safe classes.
+ * </p>
+ * <ol>
+ * <li>Const objects. In C++, you can declare parameters const.</li>
+ * <li>Immutable wrappers. For example, you can put a collection in an
+ * immutable wrapper.</li>
+ * <li>Always-Immutable objects. Java uses this approach, with a few
+ * variations. Examples:
+ * <ol>
+ * <li>Simple. Once a Color is created (eg from R, G, and B integers) it is
+ * immutable.</li>
+ * <li>Builder Class. There is a separate 'builder' class. For example,
+ * modifiable Strings are created using StringBuffer (which doesn't have the
+ * full String API available). Once you want an immutable form, you create one
+ * with toString().</li>
+ * <li>Primitives. These are always safe, since they are copied on input/output
+ * from methods.</li>
+ * </ol>
+ * </li>
+ * <li>Cloning. Where you need an object to be safe, you clone it.</li>
+ * </ol>
+ * <p>
+ * There are advantages and disadvantages of each of these.
+ * </p>
+ * <ol>
+ * <li>Const provides a certain level of protection, but since const can be and
+ * is often cast away, it only protects against most inadvertent mistakes. It
+ * also offers no threading protection, since anyone who has a pointer to the
+ * (unconst) object in another thread can mess you up.</li>
+ * <li>Immutable wrappers are safer than const in that the constness can't be
+ * cast away. But other than that they have all the same problems: not safe if
+ * someone else keeps hold of the original object, or if any of the objects
+ * returned by the class are mutable.</li>
+ * <li>Always-Immutable Objects are safe, but usage can require excessive
+ * object creation.</li>
+ * <li>Cloning is only safe if the object truly has a 'safe' clone; defined as
+ * one that <i>ensures that no change to the clone affects the original</i>.
+ * Unfortunately, many objects don't have a 'safe' clone, and always cloning can
+ * require excessive object creation.</li>
+ * </ol>
+ * <h2>Freezable Model</h2>
+ * <p>
+ * The <code>Freezable</code> model supplements these choices by giving you
+ * the ability to build up an object by calling various methods, then when it is
+ * in a final state, you can <i>make</i> it immutable. Once immutable, an
+ * object cannot <i>ever </i>be modified, and is completely thread-safe: that
+ * is, multiple threads can have references to it without any synchronization.
+ * If someone needs a mutable version of an object, they can use
+ * <code>cloneAsThawed()</code>, and modify the copy. This provides a simple,
+ * effective mechanism for safe classes in circumstances where the alternatives
+ * are insufficient or clumsy. (If an object is shared before it is immutable,
+ * then it is the responsibility of each thread to mutex its usage (as with
+ * other objects).)
+ * </p>
+ * <p>
+ * Here is what needs to be done to implement this interface, depending on the
+ * type of the object.
+ * </p>
+ * <h3><b>Immutable Objects</b></h3>
+ * <p>
+ * These are the easiest. You just use the interface to reflect that, by adding
+ * the following:
+ * </p>
+ *
+ * <pre>
+ *  public class A implements Freezable&lt;A&gt; {
+ *   ...
+ *   public final boolean isFrozen() {return true;}
+ *   public final A freeze() {return this;}
+ *   public final A cloneAsThawed() { return this; }
+ *   }
+ * </pre>
+ *
+ * <p>
+ * These can be final methods because subclasses of immutable objects must
+ * themselves be immutable. (Note: <code>freeze</code> is returning
+ * <code>this</code> for chaining.)
+ * </p>
+ * <h3><b>Mutable Objects</b></h3>
+ * <p>
+ * Add a protected 'flagging' field:
+ * </p>
+ *
+ * <pre>
+ * protected volatile boolean frozen; // WARNING: must be volatile
+ * </pre>
+ *
+ * <p>
+ * Add the following methods:
+ * </p>
+ *
+ * <pre>
+ * public final boolean isFrozen() {
+ *      return frozen;
+ * };
+ *
+ * public A freeze() {
+ *      frozen = true;  // WARNING: must be final statement before return
+ *      return this;
+ * }
+ * </pre>
+ *
+ * <p>
+ * Add a <code>cloneAsThawed()</code> method following the normal pattern for
+ * <code>clone()</code>, except that <code>frozen=false</code> in the new
+ * clone.
+ * </p>
+ * <p>
+ * Then take the setters (that is, any method that can change the internal state
+ * of the object), and add the following as the first statement:
+ * </p>
+ *
+ * <pre>
+ * if (isFrozen()) {
+ *      throw new UnsupportedOperationException(&quot;Attempt to modify frozen object&quot;);
+ * }
+ * </pre>
+ *
+ * <h4><b>Subclassing</b></h4>
+ * <p>
+ * Any subclass of a <code>Freezable</code> will just use its superclass's
+ * flagging field. It must override <code>freeze()</code> and
+ * <code>cloneAsThawed()</code> to call the superclass, but normally does not
+ * override <code>isFrozen()</code>. It must then just pay attention to its
+ * own getters, setters and fields.
+ * </p>
+ * <h4><b>Internal Caches</b></h4>
+ * <p>
+ * Internal caches are cases where the object is logically unmodified, but
+ * internal state of the object changes. For example, there are const C++
+ * functions that cast away the const on the &quot;this&quot; pointer in order
+ * to modify an object cache. These cases are handled by mutexing the internal
+ * cache to ensure thread-safety. For example, suppose that UnicodeSet had an
+ * internal marker to the last code point accessed. In this case, the field is
+ * not externally visible, so the only thing you need to do is to synchronize
+ * the field for thread safety.
+ * </p>
+ * <h4>Unsafe Internal Access</h4>
+ * <p>
+ * Internal fields are called <i>safe</i> if they are either
+ * <code>frozen</code> or immutable (such as String or primitives). If you've
+ * never allowed internal access to these, then you are all done. For example,
+ * converting UnicodeSet to be <code>Freezable</code> is just accomplished
+ * with the above steps. But remember that you <i><b>have</b></i> allowed
+ * access to unsafe internals if you have any code like the following, in a
+ * getter, setter, or constructor:
+ * </p>
+ *
+ * <pre>
+ * Collection getStuff() {
+ *      return stuff;
+ * } // caller could keep reference &amp; modify
+ *
+ * void setStuff(Collection x) {
+ *      stuff = x;
+ * } // caller could keep reference &amp; modify
+ *
+ * MyClass(Collection x) {
+ *      stuff = x;
+ * } // caller could keep reference &amp; modify
+ * </pre>
+ *
+ * <p>
+ * These also illustrated in the code sample in <b>Background</b> above.
+ * </p>
+ * <p>
+ * To deal with unsafe internals, the simplest course of action is to do the
+ * work in the <code>freeze()</code> function. Just make all of your internal
+ * fields frozen, and set the frozen flag. Any subsequent getter/setter will
+ * work properly. Here is an example:
+ * </p>
+ * <p><b>Warning!</b> The 'frozen' boolean MUST be volatile, and must be set as the last statement
+ * in the method.</p>
+ * <pre>
+ * public A freeze() {
+ *      if (!frozen) {
+ *              foo.freeze();
+ *              frozen = true;
+ *      }
+ *      return this;
+ * }
+ * </pre>
+ *
+ * <p>
+ * If the field is a <code>Collection</code> or <code>Map</code>, then to
+ * make it frozen you have two choices. If you have never allowed access to the
+ * collection from outside your object, then just wrap it to prevent future
+ * modification.
+ * </p>
+ *
+ * <pre>
+ * zone_to_country = Collections.unmodifiableMap(zone_to_country);
+ * </pre>
+ *
+ * <p>
+ * If you have <i>ever</i> allowed access, then do a <code>clone()</code>
+ * before wrapping it.
+ * </p>
+ *
+ * <pre>
+ * zone_to_country = Collections.unmodifiableMap(zone_to_country.clone());
+ * </pre>
+ *
+ * <p>
+ * If a collection <i>(or any other container of objects)</i> itself can
+ * contain mutable objects, then for a safe clone you need to recurse through it
+ * to make the entire collection immutable. The recursing code should pick the
+ * most specific collection available, to avoid the necessity of later
+ * downcasing.
+ * </p>
+ * <blockquote>
+ * <p>
+ * <b>Note: </b>An annoying flaw in Java is that the generic collections, like
+ * <code>Map</code> or <code>Set</code>, don't have a <code>clone()</code>
+ * operation. When you don't know the type of the collection, the simplest
+ * course is to just create a new collection:
+ * </p>
+ *
+ * <pre>
+ * zone_to_country = Collections.unmodifiableMap(new HashMap(zone_to_country));
+ * </pre>
+ *
+ * </blockquote>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface Freezable<T> extends java.lang.Cloneable {
+
+/**
+ * Determines whether the object has been frozen or not.
+ */
+
+public boolean isFrozen();
+
+/**
+ * Freezes the object.
+ * @return the object itself.
+ */
+
+public T freeze();
+
+/**
+ * Provides for the clone operation. Any clone is initially unfrozen.
+ */
+
+public T cloneAsThawed();
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/GregorianCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/GregorianCalendar.java
new file mode 100644
index 0000000..e2c895c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/GregorianCalendar.java
@@ -0,0 +1,426 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ * Copyright (C) 1996-2016, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.util;
+
+import java.util.Date;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.GregorianCalendar}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>GregorianCalendar</code> is a concrete subclass of
+ * {@link android.icu.util.Calendar Calendar}
+ * and provides the standard calendar used by most of the world.
+ *
+ * <p>The standard (Gregorian) calendar has 2 eras, BC and AD.
+ *
+ * <p>This implementation handles a single discontinuity, which corresponds by
+ * default to the date the Gregorian calendar was instituted (October 15, 1582
+ * in some countries, later in others).  The cutover date may be changed by the
+ * caller by calling <code>setGregorianChange()</code>.
+ *
+ * <p>Historically, in those countries which adopted the Gregorian calendar first,
+ * October 4, 1582 was thus followed by October 15, 1582. This calendar models
+ * this correctly.  Before the Gregorian cutover, <code>GregorianCalendar</code>
+ * implements the Julian calendar.  The only difference between the Gregorian
+ * and the Julian calendar is the leap year rule. The Julian calendar specifies
+ * leap years every four years, whereas the Gregorian calendar omits century
+ * years which are not divisible by 400.
+ *
+ * <p><code>GregorianCalendar</code> implements <em>proleptic</em> Gregorian and
+ * Julian calendars. That is, dates are computed by extrapolating the current
+ * rules indefinitely far backward and forward in time. As a result,
+ * <code>GregorianCalendar</code> may be used for all years to generate
+ * meaningful and consistent results. However, dates obtained using
+ * <code>GregorianCalendar</code> are historically accurate only from March 1, 4
+ * AD onward, when modern Julian calendar rules were adopted.  Before this date,
+ * leap year rules were applied irregularly, and before 45 BC the Julian
+ * calendar did not even exist.
+ *
+ * <p>Prior to the institution of the Gregorian calendar, New Year's Day was
+ * March 25. To avoid confusion, this calendar always uses January 1. A manual
+ * adjustment may be made if desired for dates that are prior to the Gregorian
+ * changeover and which fall between January 1 and March 24.
+ *
+ * <p>Values calculated for the <code>WEEK_OF_YEAR</code> field range from 1 to
+ * 53.  Week 1 for a year is the earliest seven day period starting on
+ * <code>getFirstDayOfWeek()</code> that contains at least
+ * <code>getMinimalDaysInFirstWeek()</code> days from that year.  It thus
+ * depends on the values of <code>getMinimalDaysInFirstWeek()</code>,
+ * <code>getFirstDayOfWeek()</code>, and the day of the week of January 1.
+ * Weeks between week 1 of one year and week 1 of the following year are
+ * numbered sequentially from 2 to 52 or 53 (as needed).
+ 
+ * <p>For example, January 1, 1998 was a Thursday.  If
+ * <code>getFirstDayOfWeek()</code> is <code>MONDAY</code> and
+ * <code>getMinimalDaysInFirstWeek()</code> is 4 (these are the values
+ * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts
+ * on December 29, 1997, and ends on January 4, 1998.  If, however,
+ * <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>, then week 1 of 1998
+ * starts on January 4, 1998, and ends on January 10, 1998; the first three days
+ * of 1998 then are part of week 53 of 1997.
+ *
+ * <p>Values calculated for the <code>WEEK_OF_MONTH</code> field range from 0 or
+ * 1 to 4 or 5.  Week 1 of a month (the days with <code>WEEK_OF_MONTH =
+ * 1</code>) is the earliest set of at least
+ * <code>getMinimalDaysInFirstWeek()</code> contiguous days in that month,
+ * ending on the day before <code>getFirstDayOfWeek()</code>.  Unlike
+ * week 1 of a year, week 1 of a month may be shorter than 7 days, need
+ * not start on <code>getFirstDayOfWeek()</code>, and will not include days of
+ * the previous month.  Days of a month before week 1 have a
+ * <code>WEEK_OF_MONTH</code> of 0.
+ *
+ * <p>For example, if <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>
+ * and <code>getMinimalDaysInFirstWeek()</code> is 4, then the first week of
+ * January 1998 is Sunday, January 4 through Saturday, January 10.  These days
+ * have a <code>WEEK_OF_MONTH</code> of 1.  Thursday, January 1 through
+ * Saturday, January 3 have a <code>WEEK_OF_MONTH</code> of 0.  If
+ * <code>getMinimalDaysInFirstWeek()</code> is changed to 3, then January 1
+ * through January 3 have a <code>WEEK_OF_MONTH</code> of 1.
+ *
+ * <p>
+ * <strong>Example:</strong>
+ * <blockquote>
+ * <pre>
+ * // get the supported ids for GMT-08:00 (Pacific Standard Time)
+ * String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
+ * // if no ids were returned, something is wrong. get out.
+ * if (ids.length == 0)
+ *     System.exit(0);
+ *
+ *  // begin output
+ * System.out.println("Current Time");
+ *
+ * // create a Pacific Standard Time time zone
+ * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
+ *
+ * // set up rules for daylight savings time
+ * pdt.setStartRule(Calendar.MARCH, 2, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+ * pdt.setEndRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+ *
+ * // create a GregorianCalendar with the Pacific Daylight time zone
+ * // and the current date and time
+ * Calendar calendar = new GregorianCalendar(pdt);
+ * Date trialTime = new Date();
+ * calendar.setTime(trialTime);
+ *
+ * // print out a bunch of interesting things
+ * System.out.println("ERA: " + calendar.get(Calendar.ERA));
+ * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
+ * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
+ * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
+ * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
+ * System.out.println("DATE: " + calendar.get(Calendar.DATE));
+ * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
+ * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
+ * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
+ * System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
+ * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
+ * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
+ * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
+ * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
+ * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
+ * System.out.println("ZONE_OFFSET: "
+ *                    + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
+ * System.out.println("DST_OFFSET: "
+ *                    + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));
+ 
+ * System.out.println("Current Time, with hour reset to 3");
+ * calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
+ * calendar.set(Calendar.HOUR, 3);
+ * System.out.println("ERA: " + calendar.get(Calendar.ERA));
+ * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
+ * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
+ * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
+ * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
+ * System.out.println("DATE: " + calendar.get(Calendar.DATE));
+ * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
+ * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
+ * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
+ * System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
+ * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
+ * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
+ * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
+ * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
+ * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
+ * System.out.println("ZONE_OFFSET: "
+ *        + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
+ * System.out.println("DST_OFFSET: "
+ *        + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours</pre>
+ * </blockquote>
+ * <p>
+ * GregorianCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=gregorian"</code>.</p>
+ 
+ * @see          android.icu.util.Calendar
+ * @see          android.icu.util.TimeZone
+ * @author Deborah Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class GregorianCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default GregorianCalendar using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ * @param zone the given time zone.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar based on the current time
+ * in the default time zone with the given locale.
+ * @param aLocale the given locale.
+ */
+
+public GregorianCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constructs a GregorianCalendar based on the current time
+ * in the default time zone with the given locale.
+ * @param locale the given ulocale.
+ */
+
+public GregorianCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constructs a GregorianCalendar based on the current time
+ * in the given time zone with the given locale.
+ * @param zone the given time zone.
+ * @param aLocale the given locale.
+ */
+
+public GregorianCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar based on the current time
+ * in the given time zone with the given locale.
+ * @param zone the given time zone.
+ * @param locale the given ulocale.
+ */
+
+public GregorianCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @param year the value used to set the YEAR time field in the calendar.
+ * @param month the value used to set the MONTH time field in the calendar.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ * @param year the value used to set the YEAR time field in the calendar.
+ * @param month the value used to set the MONTH time field in the calendar.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field in the calendar.
+ * @param hour the value used to set the HOUR_OF_DAY time field
+ * in the calendar.
+ * @param minute the value used to set the MINUTE time field
+ * in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(int year, int month, int date, int hour, int minute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ * @param year the value used to set the YEAR time field in the calendar.
+ * @param month the value used to set the MONTH time field in the calendar.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field in the calendar.
+ * @param hour the value used to set the HOUR_OF_DAY time field
+ * in the calendar.
+ * @param minute the value used to set the MINUTE time field
+ * in the calendar.
+ * @param second the value used to set the SECOND time field
+ * in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the GregorianCalendar change date. This is the point when the switch
+ * from Julian dates to Gregorian dates occurred. Default is October 15,
+ * 1582. Previous to this, dates will be in the Julian calendar.
+ * <p>
+ * To obtain a pure Julian calendar, set the change date to
+ * <code>Date(Long.MAX_VALUE)</code>.  To obtain a pure Gregorian calendar,
+ * set the change date to <code>Date(Long.MIN_VALUE)</code>.
+ *
+ * @param date the given Gregorian cutover date.
+ */
+
+public void setGregorianChange(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the Gregorian Calendar change date.  This is the point when the
+ * switch from Julian dates to Gregorian dates occurred. Default is
+ * October 15, 1582. Previous to this, dates will be in the Julian
+ * calendar.
+ * @return the Gregorian cutover date for this calendar.
+ */
+
+public final java.util.Date getGregorianChange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the given year is a leap year. Returns true if the
+ * given year is a leap year.
+ * @param year the given year.
+ * @return true if the given year is a leap year; false otherwise.
+ */
+
+public boolean isLeapYear(int year) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the given Calendar object is equivalent to this
+ * one.  Calendar override.
+ *
+ * @param other the Calendar to be compared with this Calendar
+ */
+
+public boolean isEquivalentTo(android.icu.util.Calendar other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode.
+ * Generates the hash code for the GregorianCalendar object
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Roll a field by a signed amount.
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the minimum value that this field could have, given the current date.
+ * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
+ */
+
+public int getActualMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the maximum value that this field could have, given the current date.
+ * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
+ * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
+ * for some years the actual maximum for MONTH is 12, and for others 13.
+ */
+
+public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetYearLength(int eyear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to compute several fields specific to the hybrid
+ * Gregorian-Julian calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleComputeJulianDay(int bestField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/year
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Value of the <code>ERA</code> field indicating
+ * the common era (Anno Domini), also known as CE.
+ * The sequence of years at the transition from <code>BC</code> to <code>AD</code> is
+ * ..., 2 BC, 1 BC, 1 AD, 2 AD,...
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int AD = 1; // 0x1
+
+/**
+ * Value of the <code>ERA</code> field indicating
+ * the period before the common era (before Christ), also known as BCE.
+ * The sequence of years at the transition from <code>BC</code> to <code>AD</code> is
+ * ..., 2 BC, 1 BC, 1 AD, 2 AD,...
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int BC = 0; // 0x0
+
+/**
+ * Used by handleComputeJulianDay() and handleComputeMonthStart().
+ */
+
+protected transient boolean invertGregorian;
+
+/**
+ * Used by handleComputeJulianDay() and handleComputeMonthStart().
+ */
+
+protected transient boolean isGregorian;
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/HebrewCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/HebrewCalendar.java
new file mode 100644
index 0000000..826bf03
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/HebrewCalendar.java
@@ -0,0 +1,395 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>HebrewCalendar</code> is a subclass of <code>Calendar</code>
+ * that that implements the traditional Hebrew calendar.
+ * This is the civil calendar in Israel and the liturgical calendar
+ * of the Jewish faith worldwide.
+ * <p>
+ * The Hebrew calendar is lunisolar and thus has a number of interesting
+ * properties that distinguish it from the Gregorian.  Months start
+ * on the day of (an arithmetic approximation of) each new moon.  Since the
+ * solar year (approximately 365.24 days) is not an even multiple of
+ * the lunar month (approximately 29.53 days) an extra "leap month" is
+ * inserted in 7 out of every 19 years.  To make matters even more
+ * interesting, the start of a year can be delayed by up to three days
+ * in order to prevent certain holidays from falling on the Sabbath and
+ * to prevent certain illegal year lengths.  Finally, the lengths of certain
+ * months can vary depending on the number of days in the year.
+ * <p>
+ * The leap month is known as "Adar 1" and is inserted between the
+ * months of Shevat and Adar in leap years.  Since the leap month does
+ * not come at the end of the year, calculations involving
+ * month numbers are particularly complex.  Users of this class should
+ * make sure to use the {@link #roll roll} and {@link #add add} methods
+ * rather than attempting to perform date arithmetic by manipulating
+ * the fields directly.
+ * <p>
+ * <b>Note:</b> In the traditional Hebrew calendar, days start at sunset.
+ * However, in order to keep the time fields in this class
+ * synchronized with those of the other calendars and with local clock time,
+ * we treat days and months as beginning at midnight,
+ * roughly 6 hours after the corresponding sunset.
+ * <p>
+ * If you are interested in more information on the rules behind the Hebrew
+ * calendar, see one of the following references:
+ * <ul>
+ * <li>"<a href="http://www.amazon.com/exec/obidos/ASIN/0521564743">Calendrical Calculations</a>",
+ *      by Nachum Dershowitz &amp; Edward Reingold, Cambridge University Press, 1997, pages 85-91.
+ *
+ * <li>Hebrew Calendar Science and Myths,
+ *      <a href="http://web.archive.org/web/20090423084613/http://www.geocities.com/Athens/1584/">
+ *      http://web.archive.org/web/20090423084613/http://www.geocities.com/Athens/1584/</a>
+ *
+ * <li>The Calendar FAQ,
+ *      <a href="http://www.faqs.org/faqs/calendars/faq/">
+ *      http://www.faqs.org/faqs/calendars/faq/</a>
+ * </ul>
+ *
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * HebrewCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=hebrew"</code>.</p>
+ *
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.Calendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class HebrewCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>HebrewCalendar</code> using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public HebrewCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale The locale for the new calendar.
+ */
+
+public HebrewCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public HebrewCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ *
+ * @param locale The locale for the new calendar.
+ */
+
+public HebrewCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tishri.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tishri.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a signed amount to a specified field, using this calendar's rules.
+ * For example, to add three days to the current date, you can call
+ * <code>add(Calendar.DATE, 3)</code>.
+ * <p>
+ * When adding to certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when adding one to the {@link #MONTH MONTH} field
+ * for the date "30 Av 5758", the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is "29 Elul 5758" rather than the invalid
+ * "30 Elul 5758".
+ * <p>
+ * This method is able to add to
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.
+ * <p>
+ * <b>Note:</b> You should always use {@link #roll roll} and add rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>HebrewCalendar</tt>.  Since the {@link #MONTH MONTH} field behaves
+ * discontinuously in non-leap years, simple arithmetic can give invalid results.
+ * <p>
+ * @param field     the time field.
+ * @param amount    the amount to add to the field.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ */
+
+public void add(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Rolls (up/down) a specified amount time on the given field.  For
+ * example, to roll the current date up by three days, you can call
+ * <code>roll(Calendar.DATE, 3)</code>.  If the
+ * field is rolled past its maximum allowable value, it will "wrap" back
+ * to its minimum and continue rolling.
+ * For example, calling <code>roll(Calendar.DATE, 10)</code>
+ * on a Hebrew calendar set to "25 Av 5758" will result in the date "5 Av 5758".
+ * <p>
+ * When rolling certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when rolling the {@link #MONTH MONTH} field
+ * upward by one for the date "30 Av 5758", the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is "29 Elul 5758" rather than the invalid
+ * "30 Elul".
+ * <p>
+ * This method is able to roll
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+ * additional fields in their overrides of <code>roll</code>.
+ * <p>
+ * <b>Note:</b> You should always use roll and {@link #add add} rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>HebrewCalendar</tt>.  Since the {@link #MONTH MONTH} field behaves
+ * discontinuously in non-leap years, simple arithmetic can give invalid results.
+ * <p>
+ * @param field     the time field.
+ * @param amount    the amount by which the field should be rolled.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the given month in the given year
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of days in the given Hebrew year
+ */
+
+protected int handleGetYearLength(int eyear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * <p>
+ * Overrides {@link android.icu.util.Calendar#validateField(int) Calendar#validateField(int)} to provide
+ * special handling for month validation for Hebrew calendar.
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected void validateField(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses may override this method to compute several fields
+ * specific to each calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields,
+ * which will be set when this method is called.  Subclasses can
+ * also call the getGregorianXxx() methods to obtain Gregorian
+ * calendar equivalents for the given Julian day.
+ *
+ * <p>In addition, subclasses should compute any subclass-specific
+ * fields, that is, fields from BASE_FIELD_COUNT to
+ * getFieldCount() - 1.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/year.
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the Adar, the 7th month of the Hebrew year.
+ */
+
+public static final int ADAR = 6; // 0x6
+
+/**
+ * Constant for Adar I, the 6th month of the Hebrew year
+ * (present in leap years only). In non-leap years, the calendar
+ * jumps from Shevat (5th month) to Adar (7th month).
+ */
+
+public static final int ADAR_1 = 5; // 0x5
+
+/**
+ * Constant for Av, the 12th month of the Hebrew year.
+ */
+
+public static final int AV = 11; // 0xb
+
+/**
+ * Constant for Elul, the 13th month of the Hebrew year.
+ */
+
+public static final int ELUL = 12; // 0xc
+
+/**
+ * Constant for Heshvan, the 2nd month of the Hebrew year.
+ */
+
+public static final int HESHVAN = 1; // 0x1
+
+/**
+ * Constant for Iyar, the 9th month of the Hebrew year.
+ */
+
+public static final int IYAR = 8; // 0x8
+
+/**
+ * Constant for Kislev, the 3rd month of the Hebrew year.
+ */
+
+public static final int KISLEV = 2; // 0x2
+
+/**
+ * Constant for Nisan, the 8th month of the Hebrew year.
+ */
+
+public static final int NISAN = 7; // 0x7
+
+/**
+ * Constant for Shevat, the 5th month of the Hebrew year.
+ */
+
+public static final int SHEVAT = 4; // 0x4
+
+/**
+ * Constant for Sivan, the 10th month of the Hebrew year.
+ */
+
+public static final int SIVAN = 9; // 0x9
+
+/**
+ * Constant for Tammuz, the 11th month of the Hebrew year.
+ */
+
+public static final int TAMUZ = 10; // 0xa
+
+/**
+ * Constant for Tevet, the 4th month of the Hebrew year.
+ */
+
+public static final int TEVET = 3; // 0x3
+
+/**
+ * Constant for Tishri, the 1st month of the Hebrew year.
+ */
+
+public static final int TISHRI = 0; // 0x0
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ICUUncheckedIOException.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ICUUncheckedIOException.java
new file mode 100644
index 0000000..5fed3fb
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ICUUncheckedIOException.java
@@ -0,0 +1,58 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2014-2015, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Unchecked version of {@link java.io.IOException}.
+ * Some ICU APIs do not throw the standard exception but instead wrap it
+ * into this unchecked version.
+ *
+ * <p>This currently extends {@link java.lang.RuntimeException RuntimeException},
+ * but when ICU can rely on Java 8 this class should be changed to extend
+ * java.io.UncheckedIOException instead.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ICUUncheckedIOException extends java.lang.RuntimeException {
+
+/**
+ * Default constructor.
+ */
+
+public ICUUncheckedIOException() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructor.
+ *
+ * @param message exception message string
+ */
+
+public ICUUncheckedIOException(java.lang.String message) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructor.
+ *
+ * @param cause original exception (normally a {@link java.io.IOException})
+ */
+
+public ICUUncheckedIOException(java.lang.Throwable cause) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructor.
+ *
+ * @param message exception message string
+ * @param cause original exception (normally a {@link java.io.IOException})
+ */
+
+public ICUUncheckedIOException(java.lang.String message, java.lang.Throwable cause) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IllformedLocaleException.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IllformedLocaleException.java
new file mode 100644
index 0000000..3b3797b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IllformedLocaleException.java
@@ -0,0 +1,62 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2012, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Thrown by methods in {@link android.icu.util.ULocale ULocale} and {@link android.icu.util.ULocale.Builder ULocale.Builder} to
+ * indicate that an argument is not a well-formed BCP 47 tag.
+ *
+ * @see android.icu.util.ULocale
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IllformedLocaleException extends java.lang.RuntimeException {
+
+/**
+ * Constructs a new <code>IllformedLocaleException</code> with no
+ * detail message and -1 as the error index.
+ */
+
+public IllformedLocaleException() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>IllformedLocaleException</code> with the
+ * given message and -1 as the error index.
+ *
+ * @param message the message
+ */
+
+public IllformedLocaleException(java.lang.String message) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>IllformedLocaleException</code> with the
+ * given message and the error index.  The error index is the approximate
+ * offset from the start of the ill-formed value to the point where the
+ * parse first detected an error.  A negative error index value indicates
+ * either the error index is not applicable or unknown.
+ *
+ * @param message the message
+ * @param errorIndex the index
+ */
+
+public IllformedLocaleException(java.lang.String message, int errorIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index where the error was found. A negative value indicates
+ * either the error index is not applicable or unknown.
+ *
+ * @return the error index
+ */
+
+public int getErrorIndex() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IndianCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IndianCalendar.java
new file mode 100644
index 0000000..04f3de7
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IndianCalendar.java
@@ -0,0 +1,297 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2011, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>IndianCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since the birth of the Buddha.  This is the civil calendar
+ * which is accepted by government of India as Indian National Calendar.
+ * The two calendars most widely used in India today are the Vikrama calendar
+ * followed in North India and the Shalivahana or Saka calendar which is followed
+ * in South India and Maharashtra.
+ 
+ * A variant of the Shalivahana Calendar was reformed and standardized as the
+ * Indian National calendar in 1957.
+ * <p>
+ * Some details of Indian National Calendar (to be implemented) :
+ * The Months
+ * Month          Length      Start date (Gregorian)
+ * =================================================
+ * 1 Chaitra      30/31          March 22*
+ * 2 Vaisakha     31             April 21
+ * 3 Jyaistha     31             May 22
+ * 4 Asadha       31             June 22
+ * 5 Sravana      31             July 23
+ * 6 Bhadra       31             August 23
+ * 7 Asvina       30             September 23
+ * 8 Kartika      30             October 23
+ * 9 Agrahayana   30             November 22
+ * 10 Pausa       30             December 22
+ * 11 Magha       30             January 21
+ * 12 Phalguna    30             February 20
+ 
+ * In leap years, Chaitra has 31 days and starts on March 21 instead.
+ * The leap years of Gregorian calendar and Indian National Calendar are in synchornization.
+ * So When its a leap year in Gregorian calendar then Chaitra has 31 days.
+ *
+ * The Years
+ * Years are counted in the Saka Era, which starts its year 0 in 78AD (by gregorian calendar).
+ * So for eg. 9th June 2006 by Gregorian Calendar, is same as 19th of Jyaistha in 1928 of Saka
+ * era by Indian National Calendar.
+ * <p>
+ * The Indian Calendar has only one allowable era: <code>Saka Era</code>.  If the
+ * calendar is not in lenient mode (see <code>setLenient</code>), dates before
+ * 1/1/1 Saka Era are rejected with an <code>IllegalArgumentException</code>.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * IndianCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=Indian"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IndianCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a <code>IndianCalendar</code> using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param zone the given time zone.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public IndianCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public IndianCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param aLocale the given locale.
+ */
+
+public IndianCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param locale the given ulocale.
+ */
+
+public IndianCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a IndianCalendar with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetYearLength(int extendedYear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleComputeMonthStart(int year, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constant for Agrahayana, the 9th month of the Indian year.
+ */
+
+public static final int AGRAHAYANA = 8; // 0x8
+
+/** 
+ * Constant for Asadha, the 4th month of the Indian year.
+ */
+
+public static final int ASADHA = 3; // 0x3
+
+/** 
+ * Constant for Asvina, the 7th month of the Indian year.
+ */
+
+public static final int ASVINA = 6; // 0x6
+
+/** 
+ * Constant for Bhadra, the 6th month of the Indian year.
+ */
+
+public static final int BHADRA = 5; // 0x5
+
+/** 
+ * Constant for Chaitra, the 1st month of the Indian year.
+ */
+
+public static final int CHAITRA = 0; // 0x0
+
+/**
+ * Constant for the Indian Era.  This is the only allowable <code>ERA</code>
+ * value for the Indian calendar.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int IE = 0; // 0x0
+
+/** 
+ * Constant for Jyaistha, the 3rd month of the Indian year.
+ */
+
+public static final int JYAISTHA = 2; // 0x2
+
+/** 
+ * Constant for Kartika, the 8th month of the Indian year.
+ */
+
+public static final int KARTIKA = 7; // 0x7
+
+/** 
+ * Constant for Magha, the 11th month of the Indian year.
+ */
+
+public static final int MAGHA = 10; // 0xa
+
+/** 
+ * Constant for Pausa, the 10th month of the Indian year.
+ */
+
+public static final int PAUSA = 9; // 0x9
+
+/** 
+ * Constant for Phalguna, the 12th month of the Indian year.
+ */
+
+public static final int PHALGUNA = 11; // 0xb
+
+/** 
+ * Constant for Sravana, the 5th month of the Indian year.
+ */
+
+public static final int SRAVANA = 4; // 0x4
+
+/** 
+ * Constant for Vaisakha, the 2nd month of the Indian year.
+ */
+
+public static final int VAISAKHA = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IslamicCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IslamicCalendar.java
new file mode 100644
index 0000000..2691266
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/IslamicCalendar.java
@@ -0,0 +1,348 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>IslamicCalendar</code> is a subclass of <code>Calendar</code>
+ * that that implements the Islamic civil and religious calendars.  It
+ * is used as the civil calendar in most of the Arab world and the
+ * liturgical calendar of the Islamic faith worldwide.  This calendar
+ * is also known as the "Hijri" calendar, since it starts at the time
+ * of Mohammed's emigration (or "hijra") to Medinah on Thursday,
+ * July 15, 622 AD (Julian).
+ * <p>
+ * The Islamic calendar is strictly lunar, and thus an Islamic year of twelve
+ * lunar months does not correspond to the solar year used by most other
+ * calendar systems, including the Gregorian.  An Islamic year is, on average,
+ * about 354 days long, so each successive Islamic year starts about 11 days
+ * earlier in the corresponding Gregorian year.
+ * <p>
+ * Each month of the calendar starts when the new moon's crescent is visible
+ * at sunset.  However, in order to keep the time fields in this class
+ * synchronized with those of the other calendars and with local clock time,
+ * we treat days and months as beginning at midnight,
+ * roughly 6 hours after the corresponding sunset.
+ * <p>
+ * There are three main variants of the Islamic calendar in existence.  The first
+ * is the <em>civil</em> calendar, which uses a fixed cycle of alternating 29-
+ * and 30-day months, with a leap day added to the last month of 11 out of
+ * every 30 years.  This calendar is easily calculated and thus predictable in
+ * advance, so it is used as the civil calendar in a number of Arab countries.
+ * This is the default behavior of a newly-created <code>IslamicCalendar</code>
+ * object.
+ * <p>
+ * The Islamic <em>religious</em> calendar and Saudi Arabia's <em>Umm al-Qura</em>
+ * calendar, however, are based on the <em>observation</em> of the crescent moon.
+ * It is thus affected by the position at which the
+ * observations are made, seasonal variations in the time of sunset, the
+ * eccentricities of the moon's orbit, and even the weather at the observation
+ * site.  This makes it impossible to calculate in advance, and it causes the
+ * start of a month in the religious calendar to differ from the civil calendar
+ * by up to three days.
+ * <p>
+ * Using astronomical calculations for the position of the sun and moon, the
+ * moon's illumination, and other factors, it is possible to determine the start
+ * of a lunar month with a fairly high degree of certainty.  However, these
+ * calculations are extremely complicated and thus slow, so most algorithms,
+ * including the one used here, are only approximations of the true astronomical
+ * calculations.  At present, the approximations used in this class are fairly
+ * simplistic; they will be improved in later versions of the code.
+ * <p>
+ * Like the Islamic religious calendar, <em>Umm al-Qura</em> is also based
+ * on the sighting method of the crescent moon but is standardized by Saudi Arabia.
+ * <p>
+ * The fixed-cycle <em>civil</em> calendar is used.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * IslamicCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=islamic"</code> or <code>"@calendar=islamic-civil"</code>
+ * or <code>"@calendar=islamic-umalqura"</code>.</p>
+ *
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.Calendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IslamicCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>IslamicCalendar</code> using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ * @param zone the given time zone.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public IslamicCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public IslamicCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ * @param aLocale the given locale.
+ */
+
+public IslamicCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ * @param locale the given ulocale.
+ */
+
+public IslamicCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for Muharram.
+ * @param date the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for Muharram.
+ * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+ *              in the calendar.
+ * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+ *              in the calendar.
+ * @param second the value used to set the {@link #SECOND SECOND} time field
+ *              in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the length (in days) of the given month.
+ *
+ * @param extendedYear  The hijri year
+ * @param month The hijri month, 0-based
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of days in the given Islamic year
+ */
+
+protected int handleGetYearLength(int extendedYear) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to compute several fields specific to the Islamic
+ * calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
+ * method is called. The getGregorianXxx() methods return Gregorian
+ * calendar equivalents for the given Julian day.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * sets the calculation type for this calendar.
+ */
+
+public void setCalculationType(android.icu.util.IslamicCalendar.CalculationType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * gets the calculation type for this calendar.
+ */
+
+public android.icu.util.IslamicCalendar.CalculationType getCalculationType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for Dhu al-Hijjah, the 12th month of the Islamic year.
+ */
+
+public static final int DHU_AL_HIJJAH = 11; // 0xb
+
+/**
+ * Constant for Dhu al-Qi'dah, the 11th month of the Islamic year.
+ */
+
+public static final int DHU_AL_QIDAH = 10; // 0xa
+
+/**
+ * Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year.
+ */
+
+public static final int JUMADA_1 = 4; // 0x4
+
+/**
+ * Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year.
+ */
+
+public static final int JUMADA_2 = 5; // 0x5
+
+/**
+ * Constant for Muharram, the 1st month of the Islamic year.
+ */
+
+public static final int MUHARRAM = 0; // 0x0
+
+/**
+ * Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year.
+ */
+
+public static final int RABI_1 = 2; // 0x2
+
+/**
+ * Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year.
+ */
+
+public static final int RABI_2 = 3; // 0x3
+
+/**
+ * Constant for Rajab, the 7th month of the Islamic year.
+ */
+
+public static final int RAJAB = 6; // 0x6
+
+/**
+ * Constant for Ramadan, the 9th month of the Islamic year.
+ */
+
+public static final int RAMADAN = 8; // 0x8
+
+/**
+ * Constant for Safar, the 2nd month of the Islamic year.
+ */
+
+public static final int SAFAR = 1; // 0x1
+
+/**
+ * Constant for Sha'ban, the 8th month of the Islamic year.
+ */
+
+public static final int SHABAN = 7; // 0x7
+
+/**
+ * Constant for Shawwal, the 10th month of the Islamic year.
+ */
+
+public static final int SHAWWAL = 9; // 0x9
+/**
+ *  enumeration of available calendar calculation types
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CalculationType {
+/**
+ * Religious calendar (atronomical simulation)
+ */
+
+ISLAMIC,
+/**
+ * Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm
+ * with civil (Friday) epoch.
+ */
+
+ISLAMIC_CIVIL,
+/**
+ * Umm al-Qura calendar
+ */
+
+ISLAMIC_UMALQURA,
+/**
+ * Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm
+ * with astronomical (Thursday) epoch.
+ */
+
+ISLAMIC_TBLA;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/JapaneseCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/JapaneseCalendar.java
new file mode 100644
index 0000000..c6c417c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/JapaneseCalendar.java
@@ -0,0 +1,258 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * <code>JapaneseCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years and eras based on the reigns of the Japanese emperors.
+ * The Japanese calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  The ascension of each  emperor to the throne
+ * begins a new era, and the years of that era are numbered starting with the
+ * year of ascension as year 1.
+ * <p>
+ * Note that in the year of an imperial ascension, there are two possible sets
+ * of year and era values: that for the old era and for the new.  For example, a
+ * new era began on January 7, 1989 AD.  Strictly speaking, the first six days
+ * of that year were in the Showa era, e.g. "January 6, 64 Showa", while the rest
+ * of the year was in the Heisei era, e.g. "January 7, 1 Heisei".  This class
+ * handles this distinction correctly when computing dates.  However, in lenient
+ * mode either form of date is acceptable as input.
+ * <p>
+ * In modern times, eras have started on January 8, 1868 AD, Gregorian (Meiji),
+ * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heisei).  Constants
+ * for these eras, suitable for use in the <code>ERA</code> field, are provided
+ * in this class.  Note that the <em>number</em> used for each era is more or
+ * less arbitrary.  Currently, the era starting in 645 AD is era #0; however this
+ * may change in the future.  Use the predefined constants rather than using actual,
+ * absolute numbers.
+ * <p>
+ * Since ICU4J 63, start date of each era is imported from CLDR. CLDR era data
+ * may contain tentative era in near future with placeholder names. By default,
+ * such era data is not enabled. ICU4J users who want to test the behavior of
+ * the future era can enable this by one of following settings (in the priority
+ * order):
+ * <ol>
+ * <li>Java system property <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * <li>Java system property <code>jdk.calendar.japanese.supplemental.era=xxx</code>.
+ *     (Note: This configuration is used for specifying a new era's start date and
+ *     names in OpenJDK. ICU4J implementation enables the CLDR tentative era when
+ *     this property is defined, but it does not use the start date and names specified
+ *     by the property value.)</li>
+ * </ol>
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * JapaneseCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=japanese"</code>.</p>
+ *
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.Calendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class JapaneseCalendar extends android.icu.util.GregorianCalendar {
+
+/**
+ * Constructs a default <code>JapaneseCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public JapaneseCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ * @param zone the given time zone.
+ */
+
+public JapaneseCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ * @param aLocale the given locale.
+ */
+
+public JapaneseCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ * @param locale the given ulocale.
+ */
+
+public JapaneseCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param aLocale the given locale.
+ */
+
+public JapaneseCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param locale the given ulocale.
+ */
+
+public JapaneseCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public JapaneseCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param era       The imperial era used to set the calendar's {@link #ERA ERA} field.
+ *                  Eras are numbered starting with the Tenki era, which
+ *                  began in 1053 AD Gregorian, as era zero.  Recent
+ *                  eras can be specified using the constants
+ *                  {@link #MEIJI} (which started in 1868 AD),
+ *                  {@link #TAISHO} (1912 AD),
+ *                  {@link #SHOWA} (1926 AD), and
+ *                  {@link #HEISEI} (1989 AD).
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} field,
+ *                  in terms of the era.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's DATE field.
+ */
+
+public JapaneseCalendar(int era, int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} field,
+ *                  in the era Heisei, the most current at the time this
+ *                  class was last updated.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} field.
+ */
+
+public JapaneseCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field,
+ *                  in the era Heisei, the most current at the time of this
+ *                  writing.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public JapaneseCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override GregorianCalendar.  We should really handle YEAR_WOY and
+ * EXTENDED_YEAR here too to implement the 1..5000000 range, but it's
+ * not critical.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the era starting on Jan. 7, 1989 AD.
+ */
+
+public static final int HEISEI;
+static { HEISEI = 0; }
+
+/**
+ * Constant for the era starting on Sept. 8, 1868 AD.
+ */
+
+public static final int MEIJI;
+static { MEIJI = 0; }
+
+/**
+ * Constant for the era starting on May 1, 2019 AD.
+ */
+
+public static final int REIWA;
+static { REIWA = 0; }
+
+/**
+ * Constant for the era starting on Dec. 25, 1926 AD.
+ */
+
+public static final int SHOWA;
+static { SHOWA = 0; }
+
+/**
+ * Constant for the era starting on July 30, 1912 AD.
+ */
+
+public static final int TAISHO;
+static { TAISHO = 0; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/LocaleData.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/LocaleData.java
new file mode 100644
index 0000000..27e8cfa
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/LocaleData.java
@@ -0,0 +1,181 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **************************************************************************************
+ * Copyright (C) 2009-2016, International Business Machines Corporation,
+ * Google, Inc. and others. All Rights Reserved.
+ **************************************************************************************
+ */
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * A class for accessing miscellaneous data in the locale bundles
+ * @author ram
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class LocaleData {
+
+private LocaleData() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the LocaleData object associated with the ULocale specified in locale
+ *
+ * @param locale    Locale with thich the locale data object is associated.
+ * @return          A locale data object.
+ */
+
+public static android.icu.util.LocaleData getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the LocaleData object associated with the default <code>FORMAT</code> locale
+ *
+ * @return          A locale data object.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.util.LocaleData getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the "no substitute" behavior of this locale data object.
+ *
+ * @param setting   Value for the no substitute behavior.  If TRUE,
+ *                  methods of this locale data object will return
+ *                  an error when no data is available for that method,
+ *                  given the locale ID supplied to the constructor.
+ */
+
+public void setNoSubstitute(boolean setting) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the "no substitute" behavior of this locale data object.
+ *
+ * @return          Value for the no substitute behavior.  If TRUE,
+ *                  methods of this locale data object will return
+ *                  an error when no data is available for that method,
+ *                  given the locale ID supplied to the constructor.
+ */
+
+public boolean getNoSubstitute() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves a delimiter string from the locale data.
+ *
+ * @param type      The type of delimiter string desired.  Currently,
+ *                  the valid choices are QUOTATION_START, QUOTATION_END,
+ *                  ALT_QUOTATION_START, or ALT_QUOTATION_END.
+ * @return          The desired delimiter string.
+ */
+
+public java.lang.String getDelimiter(int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the measurement system used in the locale specified by the locale.
+ *
+ * @param locale      The locale for which the measurement system to be retrieved.
+ * @return MeasurementSystem the measurement system used in the locale.
+ */
+
+public static android.icu.util.LocaleData.MeasurementSystem getMeasurementSystem(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the size of paper used in the locale. The paper sizes returned are always in
+ * <em>milli-meters</em>.
+ * @param locale The locale for which the measurement system to be retrieved.
+ * @return The paper size used in the locale
+ */
+
+public static android.icu.util.LocaleData.PaperSize getPaperSize(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current CLDR version
+ */
+
+public static android.icu.util.VersionInfo getCLDRVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int ALT_QUOTATION_END = 3; // 0x3
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int ALT_QUOTATION_START = 2; // 0x2
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int QUOTATION_END = 1; // 0x1
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int QUOTATION_START = 0; // 0x0
+/**
+ * Enumeration for representing the measurement systems.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class MeasurementSystem {
+
+private MeasurementSystem() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Measurement system specified by Le Syst&#x00E8;me International d'Unit&#x00E9;s (SI)
+ * otherwise known as Metric system.
+ */
+
+public static final android.icu.util.LocaleData.MeasurementSystem SI;
+static { SI = null; }
+
+/**
+ * Mix of metric and imperial units used in Great Britain.
+ */
+
+public static final android.icu.util.LocaleData.MeasurementSystem UK;
+static { UK = null; }
+
+/**
+ * Measurement system followed in the United States of America.
+ */
+
+public static final android.icu.util.LocaleData.MeasurementSystem US;
+static { US = null; }
+}
+
+/**
+ * A class that represents the size of letter head
+ * used in the country
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class PaperSize {
+
+private PaperSize() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retruns the height of the paper
+ * @return the height
+ */
+
+public int getHeight() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the width of the paper
+ * @return the width
+ */
+
+public int getWidth() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Measure.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Measure.java
new file mode 100644
index 0000000..5b4615e
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Measure.java
@@ -0,0 +1,82 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (c) 2004-2013, International Business Machines
+* Corporation and others.  All Rights Reserved.
+**********************************************************************
+* Author: Alan Liu
+* Created: April 20, 2004
+* Since: ICU 3.0
+**********************************************************************
+*/
+
+package android.icu.util;
+
+
+/**
+ * An amount of a specified unit, consisting of a Number and a Unit.
+ * For example, a length measure consists of a Number and a length
+ * unit, such as feet or meters.
+ *
+ * <p>Measure objects are parsed and formatted by subclasses of
+ * MeasureFormat.
+ *
+ * <p>Measure objects are immutable. All subclasses must guarantee that.
+ * (However, subclassing is discouraged.)
+ *
+ * @see java.lang.Number
+ * @see android.icu.util.MeasureUnit
+ * @see android.icu.text.MeasureFormat
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Measure {
+
+/**
+ * Constructs a new object given a number and a unit.
+ * @param number the number
+ * @param unit the unit
+ */
+
+public Measure(java.lang.Number number, android.icu.util.MeasureUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the given object is equal to this object.
+ * @return true if this object is equal to the given object
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a hashcode for this object.
+ * @return a 32-bit hash
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this object.
+ * @return a string representation consisting of the ISO currency
+ * code together with the numeric amount
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numeric value of this object.
+ * @return this object's Number
+ */
+
+public java.lang.Number getNumber() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the unit of this object.
+ * @return this object's Unit
+ */
+
+public android.icu.util.MeasureUnit getUnit() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/MeasureUnit.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/MeasureUnit.java
new file mode 100644
index 0000000..0e1c50f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/MeasureUnit.java
@@ -0,0 +1,1108 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2004-2016, Google Inc, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * A unit such as length, mass, volume, currency, etc.  A unit is
+ * coupled with a numeric amount to produce a Measure. MeasureUnit objects are immutable.
+ * All subclasses must guarantee that. (However, subclassing is discouraged.)
+ 
+ *
+ * @see android.icu.util.Measure
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class MeasureUnit implements java.io.Serializable {
+
+MeasureUnit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the type, such as "length". May return null.
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the subType, such as ?foot?. May return null.
+ */
+
+public java.lang.String getSubtype() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get all of the available units' types. Returned set is unmodifiable.
+ */
+
+public static synchronized java.util.Set<java.lang.String> getAvailableTypes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * For the given type, return the available units.
+ * @param type the type
+ * @return the available units for type. Returned set is unmodifiable.
+ */
+
+public static synchronized java.util.Set<android.icu.util.MeasureUnit> getAvailable(java.lang.String type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get all of the available units. Returned set is unmodifiable.
+ */
+
+public static synchronized java.util.Set<android.icu.util.MeasureUnit> getAvailable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for unit of area: acre
+ */
+
+public static final android.icu.util.MeasureUnit ACRE;
+static { ACRE = null; }
+
+/**
+ * Constant for unit of volume: acre-foot
+ */
+
+public static final android.icu.util.MeasureUnit ACRE_FOOT;
+static { ACRE_FOOT = null; }
+
+/**
+ * Constant for unit of electric: ampere
+ */
+
+public static final android.icu.util.MeasureUnit AMPERE;
+static { AMPERE = null; }
+
+/**
+ * Constant for unit of angle: arc-minute
+ */
+
+public static final android.icu.util.MeasureUnit ARC_MINUTE;
+static { ARC_MINUTE = null; }
+
+/**
+ * Constant for unit of angle: arc-second
+ */
+
+public static final android.icu.util.MeasureUnit ARC_SECOND;
+static { ARC_SECOND = null; }
+
+/**
+ * Constant for unit of length: astronomical-unit
+ */
+
+public static final android.icu.util.MeasureUnit ASTRONOMICAL_UNIT;
+static { ASTRONOMICAL_UNIT = null; }
+
+/**
+ * Constant for unit of pressure: atmosphere
+ */
+
+public static final android.icu.util.MeasureUnit ATMOSPHERE;
+static { ATMOSPHERE = null; }
+
+/**
+ * Constant for unit of digital: bit
+ */
+
+public static final android.icu.util.MeasureUnit BIT;
+static { BIT = null; }
+
+/**
+ * Constant for unit of volume: bushel
+ */
+
+public static final android.icu.util.MeasureUnit BUSHEL;
+static { BUSHEL = null; }
+
+/**
+ * Constant for unit of digital: byte
+ */
+
+public static final android.icu.util.MeasureUnit BYTE;
+static { BYTE = null; }
+
+/**
+ * Constant for unit of energy: calorie
+ */
+
+public static final android.icu.util.MeasureUnit CALORIE;
+static { CALORIE = null; }
+
+/**
+ * Constant for unit of mass: carat
+ */
+
+public static final android.icu.util.MeasureUnit CARAT;
+static { CARAT = null; }
+
+/**
+ * Constant for unit of temperature: celsius
+ */
+
+public static final android.icu.util.MeasureUnit CELSIUS;
+static { CELSIUS = null; }
+
+/**
+ * Constant for unit of volume: centiliter
+ */
+
+public static final android.icu.util.MeasureUnit CENTILITER;
+static { CENTILITER = null; }
+
+/**
+ * Constant for unit of length: centimeter
+ */
+
+public static final android.icu.util.MeasureUnit CENTIMETER;
+static { CENTIMETER = null; }
+
+/**
+ * Constant for unit of duration: century
+ */
+
+public static final android.icu.util.MeasureUnit CENTURY;
+static { CENTURY = null; }
+
+/**
+ * Constant for unit of volume: cubic-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_CENTIMETER;
+static { CUBIC_CENTIMETER = null; }
+
+/**
+ * Constant for unit of volume: cubic-foot
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_FOOT;
+static { CUBIC_FOOT = null; }
+
+/**
+ * Constant for unit of volume: cubic-inch
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_INCH;
+static { CUBIC_INCH = null; }
+
+/**
+ * Constant for unit of volume: cubic-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_KILOMETER;
+static { CUBIC_KILOMETER = null; }
+
+/**
+ * Constant for unit of volume: cubic-meter
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_METER;
+static { CUBIC_METER = null; }
+
+/**
+ * Constant for unit of volume: cubic-mile
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_MILE;
+static { CUBIC_MILE = null; }
+
+/**
+ * Constant for unit of volume: cubic-yard
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_YARD;
+static { CUBIC_YARD = null; }
+
+/**
+ * Constant for unit of volume: cup
+ */
+
+public static final android.icu.util.MeasureUnit CUP;
+static { CUP = null; }
+
+/**
+ * Constant for unit of volume: cup-metric
+ */
+
+public static final android.icu.util.MeasureUnit CUP_METRIC;
+static { CUP_METRIC = null; }
+
+/**
+ * Constant for unit of duration: day
+ */
+
+public static final android.icu.util.TimeUnit DAY;
+static { DAY = null; }
+
+/**
+ * Constant for unit of duration: decade
+ */
+
+public static final android.icu.util.MeasureUnit DECADE;
+static { DECADE = null; }
+
+/**
+ * Constant for unit of volume: deciliter
+ */
+
+public static final android.icu.util.MeasureUnit DECILITER;
+static { DECILITER = null; }
+
+/**
+ * Constant for unit of length: decimeter
+ */
+
+public static final android.icu.util.MeasureUnit DECIMETER;
+static { DECIMETER = null; }
+
+/**
+ * Constant for unit of angle: degree
+ */
+
+public static final android.icu.util.MeasureUnit DEGREE;
+static { DEGREE = null; }
+
+/**
+ * Constant for unit of graphics: dot-per-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit DOT_PER_CENTIMETER;
+static { DOT_PER_CENTIMETER = null; }
+
+/**
+ * Constant for unit of graphics: dot-per-inch
+ */
+
+public static final android.icu.util.MeasureUnit DOT_PER_INCH;
+static { DOT_PER_INCH = null; }
+
+/**
+ * Constant for unit of graphics: em
+ */
+
+public static final android.icu.util.MeasureUnit EM;
+static { EM = null; }
+
+/**
+ * Constant for unit of temperature: fahrenheit
+ */
+
+public static final android.icu.util.MeasureUnit FAHRENHEIT;
+static { FAHRENHEIT = null; }
+
+/**
+ * Constant for unit of length: fathom
+ */
+
+public static final android.icu.util.MeasureUnit FATHOM;
+static { FATHOM = null; }
+
+/**
+ * Constant for unit of volume: fluid-ounce
+ */
+
+public static final android.icu.util.MeasureUnit FLUID_OUNCE;
+static { FLUID_OUNCE = null; }
+
+/**
+ * Constant for unit of energy: foodcalorie
+ */
+
+public static final android.icu.util.MeasureUnit FOODCALORIE;
+static { FOODCALORIE = null; }
+
+/**
+ * Constant for unit of length: foot
+ */
+
+public static final android.icu.util.MeasureUnit FOOT;
+static { FOOT = null; }
+
+/**
+ * Constant for unit of length: furlong
+ */
+
+public static final android.icu.util.MeasureUnit FURLONG;
+static { FURLONG = null; }
+
+/**
+ * Constant for unit of volume: gallon
+ */
+
+public static final android.icu.util.MeasureUnit GALLON;
+static { GALLON = null; }
+
+/**
+ * Constant for unit of volume: gallon-imperial
+ */
+
+public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
+static { GALLON_IMPERIAL = null; }
+
+/**
+ * Constant for unit of temperature: generic
+ */
+
+public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
+static { GENERIC_TEMPERATURE = null; }
+
+/**
+ * Constant for unit of digital: gigabit
+ */
+
+public static final android.icu.util.MeasureUnit GIGABIT;
+static { GIGABIT = null; }
+
+/**
+ * Constant for unit of digital: gigabyte
+ */
+
+public static final android.icu.util.MeasureUnit GIGABYTE;
+static { GIGABYTE = null; }
+
+/**
+ * Constant for unit of frequency: gigahertz
+ */
+
+public static final android.icu.util.MeasureUnit GIGAHERTZ;
+static { GIGAHERTZ = null; }
+
+/**
+ * Constant for unit of power: gigawatt
+ */
+
+public static final android.icu.util.MeasureUnit GIGAWATT;
+static { GIGAWATT = null; }
+
+/**
+ * Constant for unit of mass: gram
+ */
+
+public static final android.icu.util.MeasureUnit GRAM;
+static { GRAM = null; }
+
+/**
+ * Constant for unit of acceleration: g-force
+ */
+
+public static final android.icu.util.MeasureUnit G_FORCE;
+static { G_FORCE = null; }
+
+/**
+ * Constant for unit of area: hectare
+ */
+
+public static final android.icu.util.MeasureUnit HECTARE;
+static { HECTARE = null; }
+
+/**
+ * Constant for unit of volume: hectoliter
+ */
+
+public static final android.icu.util.MeasureUnit HECTOLITER;
+static { HECTOLITER = null; }
+
+/**
+ * Constant for unit of pressure: hectopascal
+ */
+
+public static final android.icu.util.MeasureUnit HECTOPASCAL;
+static { HECTOPASCAL = null; }
+
+/**
+ * Constant for unit of frequency: hertz
+ */
+
+public static final android.icu.util.MeasureUnit HERTZ;
+static { HERTZ = null; }
+
+/**
+ * Constant for unit of power: horsepower
+ */
+
+public static final android.icu.util.MeasureUnit HORSEPOWER;
+static { HORSEPOWER = null; }
+
+/**
+ * Constant for unit of duration: hour
+ */
+
+public static final android.icu.util.TimeUnit HOUR;
+static { HOUR = null; }
+
+/**
+ * Constant for unit of length: inch
+ */
+
+public static final android.icu.util.MeasureUnit INCH;
+static { INCH = null; }
+
+/**
+ * Constant for unit of pressure: inch-ofhg
+ */
+
+public static final android.icu.util.MeasureUnit INCH_HG;
+static { INCH_HG = null; }
+
+/**
+ * Constant for unit of energy: joule
+ */
+
+public static final android.icu.util.MeasureUnit JOULE;
+static { JOULE = null; }
+
+/**
+ * Constant for unit of concentr: karat
+ */
+
+public static final android.icu.util.MeasureUnit KARAT;
+static { KARAT = null; }
+
+/**
+ * Constant for unit of temperature: kelvin
+ */
+
+public static final android.icu.util.MeasureUnit KELVIN;
+static { KELVIN = null; }
+
+/**
+ * Constant for unit of digital: kilobit
+ */
+
+public static final android.icu.util.MeasureUnit KILOBIT;
+static { KILOBIT = null; }
+
+/**
+ * Constant for unit of digital: kilobyte
+ */
+
+public static final android.icu.util.MeasureUnit KILOBYTE;
+static { KILOBYTE = null; }
+
+/**
+ * Constant for unit of energy: kilocalorie
+ */
+
+public static final android.icu.util.MeasureUnit KILOCALORIE;
+static { KILOCALORIE = null; }
+
+/**
+ * Constant for unit of mass: kilogram
+ */
+
+public static final android.icu.util.MeasureUnit KILOGRAM;
+static { KILOGRAM = null; }
+
+/**
+ * Constant for unit of frequency: kilohertz
+ */
+
+public static final android.icu.util.MeasureUnit KILOHERTZ;
+static { KILOHERTZ = null; }
+
+/**
+ * Constant for unit of energy: kilojoule
+ */
+
+public static final android.icu.util.MeasureUnit KILOJOULE;
+static { KILOJOULE = null; }
+
+/**
+ * Constant for unit of length: kilometer
+ */
+
+public static final android.icu.util.MeasureUnit KILOMETER;
+static { KILOMETER = null; }
+
+/**
+ * Constant for unit of speed: kilometer-per-hour
+ */
+
+public static final android.icu.util.MeasureUnit KILOMETER_PER_HOUR;
+static { KILOMETER_PER_HOUR = null; }
+
+/**
+ * Constant for unit of power: kilowatt
+ */
+
+public static final android.icu.util.MeasureUnit KILOWATT;
+static { KILOWATT = null; }
+
+/**
+ * Constant for unit of energy: kilowatt-hour
+ */
+
+public static final android.icu.util.MeasureUnit KILOWATT_HOUR;
+static { KILOWATT_HOUR = null; }
+
+/**
+ * Constant for unit of speed: knot
+ */
+
+public static final android.icu.util.MeasureUnit KNOT;
+static { KNOT = null; }
+
+/**
+ * Constant for unit of length: light-year
+ */
+
+public static final android.icu.util.MeasureUnit LIGHT_YEAR;
+static { LIGHT_YEAR = null; }
+
+/**
+ * Constant for unit of volume: liter
+ */
+
+public static final android.icu.util.MeasureUnit LITER;
+static { LITER = null; }
+
+/**
+ * Constant for unit of consumption: liter-per-100-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit LITER_PER_100KILOMETERS;
+static { LITER_PER_100KILOMETERS = null; }
+
+/**
+ * Constant for unit of consumption: liter-per-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit LITER_PER_KILOMETER;
+static { LITER_PER_KILOMETER = null; }
+
+/**
+ * Constant for unit of light: lux
+ */
+
+public static final android.icu.util.MeasureUnit LUX;
+static { LUX = null; }
+
+/**
+ * Constant for unit of digital: megabit
+ */
+
+public static final android.icu.util.MeasureUnit MEGABIT;
+static { MEGABIT = null; }
+
+/**
+ * Constant for unit of digital: megabyte
+ */
+
+public static final android.icu.util.MeasureUnit MEGABYTE;
+static { MEGABYTE = null; }
+
+/**
+ * Constant for unit of frequency: megahertz
+ */
+
+public static final android.icu.util.MeasureUnit MEGAHERTZ;
+static { MEGAHERTZ = null; }
+
+/**
+ * Constant for unit of volume: megaliter
+ */
+
+public static final android.icu.util.MeasureUnit MEGALITER;
+static { MEGALITER = null; }
+
+/**
+ * Constant for unit of graphics: megapixel
+ */
+
+public static final android.icu.util.MeasureUnit MEGAPIXEL;
+static { MEGAPIXEL = null; }
+
+/**
+ * Constant for unit of power: megawatt
+ */
+
+public static final android.icu.util.MeasureUnit MEGAWATT;
+static { MEGAWATT = null; }
+
+/**
+ * Constant for unit of length: meter
+ */
+
+public static final android.icu.util.MeasureUnit METER;
+static { METER = null; }
+
+/**
+ * Constant for unit of speed: meter-per-second
+ */
+
+public static final android.icu.util.MeasureUnit METER_PER_SECOND;
+static { METER_PER_SECOND = null; }
+
+/**
+ * Constant for unit of acceleration: meter-per-square-second
+ */
+
+public static final android.icu.util.MeasureUnit METER_PER_SECOND_SQUARED;
+static { METER_PER_SECOND_SQUARED = null; }
+
+/**
+ * Constant for unit of mass: metric-ton
+ */
+
+public static final android.icu.util.MeasureUnit METRIC_TON;
+static { METRIC_TON = null; }
+
+/**
+ * Constant for unit of mass: microgram
+ */
+
+public static final android.icu.util.MeasureUnit MICROGRAM;
+static { MICROGRAM = null; }
+
+/**
+ * Constant for unit of length: micrometer
+ */
+
+public static final android.icu.util.MeasureUnit MICROMETER;
+static { MICROMETER = null; }
+
+/**
+ * Constant for unit of duration: microsecond
+ */
+
+public static final android.icu.util.MeasureUnit MICROSECOND;
+static { MICROSECOND = null; }
+
+/**
+ * Constant for unit of length: mile
+ */
+
+public static final android.icu.util.MeasureUnit MILE;
+static { MILE = null; }
+
+/**
+ * Constant for unit of consumption: mile-per-gallon
+ */
+
+public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+static { MILE_PER_GALLON = null; }
+
+/**
+ * Constant for unit of consumption: mile-per-gallon-imperial
+ */
+
+public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
+static { MILE_PER_GALLON_IMPERIAL = null; }
+
+/**
+ * Constant for unit of speed: mile-per-hour
+ */
+
+public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
+static { MILE_PER_HOUR = null; }
+
+/**
+ * Constant for unit of length: mile-scandinavian
+ */
+
+public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
+static { MILE_SCANDINAVIAN = null; }
+
+/**
+ * Constant for unit of electric: milliampere
+ */
+
+public static final android.icu.util.MeasureUnit MILLIAMPERE;
+static { MILLIAMPERE = null; }
+
+/**
+ * Constant for unit of pressure: millibar
+ */
+
+public static final android.icu.util.MeasureUnit MILLIBAR;
+static { MILLIBAR = null; }
+
+/**
+ * Constant for unit of mass: milligram
+ */
+
+public static final android.icu.util.MeasureUnit MILLIGRAM;
+static { MILLIGRAM = null; }
+
+/**
+ * Constant for unit of concentr: milligram-per-deciliter
+ */
+
+public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
+static { MILLIGRAM_PER_DECILITER = null; }
+
+/**
+ * Constant for unit of volume: milliliter
+ */
+
+public static final android.icu.util.MeasureUnit MILLILITER;
+static { MILLILITER = null; }
+
+/**
+ * Constant for unit of length: millimeter
+ */
+
+public static final android.icu.util.MeasureUnit MILLIMETER;
+static { MILLIMETER = null; }
+
+/**
+ * Constant for unit of pressure: millimeter-ofhg
+ */
+
+public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
+static { MILLIMETER_OF_MERCURY = null; }
+
+/**
+ * Constant for unit of concentr: millimole-per-liter
+ */
+
+public static final android.icu.util.MeasureUnit MILLIMOLE_PER_LITER;
+static { MILLIMOLE_PER_LITER = null; }
+
+/**
+ * Constant for unit of duration: millisecond
+ */
+
+public static final android.icu.util.MeasureUnit MILLISECOND;
+static { MILLISECOND = null; }
+
+/**
+ * Constant for unit of power: milliwatt
+ */
+
+public static final android.icu.util.MeasureUnit MILLIWATT;
+static { MILLIWATT = null; }
+
+/**
+ * Constant for unit of duration: minute
+ */
+
+public static final android.icu.util.TimeUnit MINUTE;
+static { MINUTE = null; }
+
+/**
+ * Constant for unit of duration: month
+ */
+
+public static final android.icu.util.TimeUnit MONTH;
+static { MONTH = null; }
+
+/**
+ * Constant for unit of length: nanometer
+ */
+
+public static final android.icu.util.MeasureUnit NANOMETER;
+static { NANOMETER = null; }
+
+/**
+ * Constant for unit of duration: nanosecond
+ */
+
+public static final android.icu.util.MeasureUnit NANOSECOND;
+static { NANOSECOND = null; }
+
+/**
+ * Constant for unit of length: nautical-mile
+ */
+
+public static final android.icu.util.MeasureUnit NAUTICAL_MILE;
+static { NAUTICAL_MILE = null; }
+
+/**
+ * Constant for unit of electric: ohm
+ */
+
+public static final android.icu.util.MeasureUnit OHM;
+static { OHM = null; }
+
+/**
+ * Constant for unit of mass: ounce
+ */
+
+public static final android.icu.util.MeasureUnit OUNCE;
+static { OUNCE = null; }
+
+/**
+ * Constant for unit of mass: ounce-troy
+ */
+
+public static final android.icu.util.MeasureUnit OUNCE_TROY;
+static { OUNCE_TROY = null; }
+
+/**
+ * Constant for unit of length: parsec
+ */
+
+public static final android.icu.util.MeasureUnit PARSEC;
+static { PARSEC = null; }
+
+/**
+ * Constant for unit of concentr: permillion
+ */
+
+public static final android.icu.util.MeasureUnit PART_PER_MILLION;
+static { PART_PER_MILLION = null; }
+
+/**
+ * Constant for unit of concentr: percent
+ */
+
+public static final android.icu.util.MeasureUnit PERCENT;
+static { PERCENT = null; }
+
+/**
+ * Constant for unit of concentr: permille
+ */
+
+public static final android.icu.util.MeasureUnit PERMILLE;
+static { PERMILLE = null; }
+
+/**
+ * Constant for unit of digital: petabyte
+ */
+
+public static final android.icu.util.MeasureUnit PETABYTE;
+static { PETABYTE = null; }
+
+/**
+ * Constant for unit of length: picometer
+ */
+
+public static final android.icu.util.MeasureUnit PICOMETER;
+static { PICOMETER = null; }
+
+/**
+ * Constant for unit of volume: pint
+ */
+
+public static final android.icu.util.MeasureUnit PINT;
+static { PINT = null; }
+
+/**
+ * Constant for unit of volume: pint-metric
+ */
+
+public static final android.icu.util.MeasureUnit PINT_METRIC;
+static { PINT_METRIC = null; }
+
+/**
+ * Constant for unit of graphics: pixel
+ */
+
+public static final android.icu.util.MeasureUnit PIXEL;
+static { PIXEL = null; }
+
+/**
+ * Constant for unit of graphics: pixel-per-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit PIXEL_PER_CENTIMETER;
+static { PIXEL_PER_CENTIMETER = null; }
+
+/**
+ * Constant for unit of graphics: pixel-per-inch
+ */
+
+public static final android.icu.util.MeasureUnit PIXEL_PER_INCH;
+static { PIXEL_PER_INCH = null; }
+
+/**
+ * Constant for unit of length: point
+ */
+
+public static final android.icu.util.MeasureUnit POINT;
+static { POINT = null; }
+
+/**
+ * Constant for unit of mass: pound
+ */
+
+public static final android.icu.util.MeasureUnit POUND;
+static { POUND = null; }
+
+/**
+ * Constant for unit of pressure: pound-force-per-square-inch
+ */
+
+public static final android.icu.util.MeasureUnit POUND_PER_SQUARE_INCH;
+static { POUND_PER_SQUARE_INCH = null; }
+
+/**
+ * Constant for unit of volume: quart
+ */
+
+public static final android.icu.util.MeasureUnit QUART;
+static { QUART = null; }
+
+/**
+ * Constant for unit of angle: radian
+ */
+
+public static final android.icu.util.MeasureUnit RADIAN;
+static { RADIAN = null; }
+
+/**
+ * Constant for unit of angle: revolution
+ */
+
+public static final android.icu.util.MeasureUnit REVOLUTION_ANGLE;
+static { REVOLUTION_ANGLE = null; }
+
+/**
+ * Constant for unit of duration: second
+ */
+
+public static final android.icu.util.TimeUnit SECOND;
+static { SECOND = null; }
+
+/**
+ * Constant for unit of area: square-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_CENTIMETER;
+static { SQUARE_CENTIMETER = null; }
+
+/**
+ * Constant for unit of area: square-foot
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_FOOT;
+static { SQUARE_FOOT = null; }
+
+/**
+ * Constant for unit of area: square-inch
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_INCH;
+static { SQUARE_INCH = null; }
+
+/**
+ * Constant for unit of area: square-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_KILOMETER;
+static { SQUARE_KILOMETER = null; }
+
+/**
+ * Constant for unit of area: square-meter
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_METER;
+static { SQUARE_METER = null; }
+
+/**
+ * Constant for unit of area: square-mile
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_MILE;
+static { SQUARE_MILE = null; }
+
+/**
+ * Constant for unit of area: square-yard
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_YARD;
+static { SQUARE_YARD = null; }
+
+/**
+ * Constant for unit of mass: stone
+ */
+
+public static final android.icu.util.MeasureUnit STONE;
+static { STONE = null; }
+
+/**
+ * Constant for unit of volume: tablespoon
+ */
+
+public static final android.icu.util.MeasureUnit TABLESPOON;
+static { TABLESPOON = null; }
+
+/**
+ * Constant for unit of volume: teaspoon
+ */
+
+public static final android.icu.util.MeasureUnit TEASPOON;
+static { TEASPOON = null; }
+
+/**
+ * Constant for unit of digital: terabit
+ */
+
+public static final android.icu.util.MeasureUnit TERABIT;
+static { TERABIT = null; }
+
+/**
+ * Constant for unit of digital: terabyte
+ */
+
+public static final android.icu.util.MeasureUnit TERABYTE;
+static { TERABYTE = null; }
+
+/**
+ * Constant for unit of mass: ton
+ */
+
+public static final android.icu.util.MeasureUnit TON;
+static { TON = null; }
+
+/**
+ * Constant for unit of electric: volt
+ */
+
+public static final android.icu.util.MeasureUnit VOLT;
+static { VOLT = null; }
+
+/**
+ * Constant for unit of power: watt
+ */
+
+public static final android.icu.util.MeasureUnit WATT;
+static { WATT = null; }
+
+/**
+ * Constant for unit of duration: week
+ */
+
+public static final android.icu.util.TimeUnit WEEK;
+static { WEEK = null; }
+
+/**
+ * Constant for unit of length: yard
+ */
+
+public static final android.icu.util.MeasureUnit YARD;
+static { YARD = null; }
+
+/**
+ * Constant for unit of duration: year
+ */
+
+public static final android.icu.util.TimeUnit YEAR;
+static { YEAR = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Output.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Output.java
new file mode 100644
index 0000000..8e9c70b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/Output.java
@@ -0,0 +1,47 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2011-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Simple struct-like class for output parameters.
+ * @param <T> The type of the parameter.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Output<T> {
+
+/**
+ * Constructs an empty <code>Output</code>
+ */
+
+public Output() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>Output</code> with the given value.
+ * @param value the initial value
+ */
+
+public Output(T value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The value field
+ */
+
+public T value;
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/RangeValueIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/RangeValueIterator.java
new file mode 100644
index 0000000..8631da2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/RangeValueIterator.java
@@ -0,0 +1,110 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*/
+
+
+package android.icu.util;
+
+
+/**
+ * <p>Interface for enabling iteration over sets of &lt;int index, int value&gt;,
+ * where index is the sorted integer index in ascending order and value, its
+ * associated integer value.
+ * <p>The result for each iteration is the consecutive range of
+ * &lt;int index, int value&gt; with the same value. Result is represented by
+ * &lt;start, limit, value&gt; where
+ * <ul>
+ * <li> start is the starting integer of the result range
+ * <li> limit is 1 after the maximum integer that follows start, such that
+ *      all integers between start and (limit - 1), inclusive, have the same
+ *      associated integer value.
+ * <li> value is the integer value that all integers from start to (limit - 1)
+ *      share in common.
+ * </ul>
+ * <p>
+ * Hence value(start) = value(start + 1) = .... = value(start + n) = .... =
+ * value(limit - 1). However value(start -1) != value(start) and
+ * value(limit) != value(start).
+ *
+ * <p>Most implementations will be created by factory methods, such as the
+ * character type iterator in UCharacter.getTypeIterator. See example below.
+ *
+ * <p>Example of use:<br>
+ * <pre>
+ * RangeValueIterator iterator = UCharacter.getTypeIterator();
+ * RangeValueIterator.Element result = new RangeValueIterator.Element();
+ * while (iterator.next(result)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(result.start) +
+ *                        " to codepoint \\u" +
+ *                        Integer.toHexString(result.limit - 1) +
+ *                        " has the character type " + result.value);
+ * }
+ * </pre>
+ * @author synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface RangeValueIterator {
+
+/**
+ * <p>Returns the next maximal result range with a common value and returns
+ * true if we are not at the end of the iteration, false otherwise.
+ * <p>If this returns a false, the contents of elements will not
+ * be updated.
+ * @param element for storing the result range and value
+ * @return true if we are not at the end of the iteration, false otherwise.
+ * @see android.icu.util.RangeValueIterator.Element
+ */
+
+public boolean next(android.icu.util.RangeValueIterator.Element element);
+
+/**
+ * Resets the iterator to the beginning of the iteration.
+ */
+
+public void reset();
+/**
+ * Return result wrapper for android.icu.util.RangeValueIterator.
+ * Stores the start and limit of the continous result range and the
+ * common value all integers between [start, limit - 1] has.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Element {
+
+/**
+ * Empty default constructor to make javadoc happy
+ */
+
+public Element() { throw new RuntimeException("Stub!"); }
+
+/**
+ * (End + 1) integer of continuous result range that has the same
+ * value
+ */
+
+public int limit;
+
+/**
+ * Starting integer of the continuous result range that has the same
+ * value
+ */
+
+public int start;
+
+/**
+ * Gets the common value of the continous result range
+ */
+
+public int value;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TaiwanCalendar.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TaiwanCalendar.java
new file mode 100644
index 0000000..0a55d3a
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TaiwanCalendar.java
@@ -0,0 +1,178 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2010, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/** 
+ * <code>TaiwanCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since 1912.
+ * <p>
+ * The Taiwan calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  Years are numbered since 1912 AD (Gregorian).
+ * <p>
+ * The Taiwan Calendar has one era: <code>MINGUO</code>.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * TaiwanCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=roc"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ * @author Steven R. Loomis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class TaiwanCalendar extends android.icu.util.GregorianCalendar {
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public TaiwanCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone the given time zone.
+ */
+
+public TaiwanCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public TaiwanCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public TaiwanCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ */
+
+public TaiwanCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ * @param locale the given ulocale.
+ */
+
+public TaiwanCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public TaiwanCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public TaiwanCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a TaiwanCalendar with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public TaiwanCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override GregorianCalendar.  There is only one Taiwan ERA.  We
+ * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
+ * implement the 1..5000000 range, but it's not critical.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the Taiwan Era for years before Minguo 1.
+ * Brefore Minuo 1 is Gregorian 1911, Before Minguo 2 is Gregorian 1910
+ * and so on.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int BEFORE_MINGUO = 0; // 0x0
+
+/**
+ * Constant for the Taiwan Era for Minguo.  Minguo 1 is 1912 in
+ * Gregorian calendar.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int MINGUO = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TimeUnit.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TimeUnit.java
new file mode 100644
index 0000000..ad8c877
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TimeUnit.java
@@ -0,0 +1,31 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **************************************************************************
+ * Copyright (C) 2008-2014, Google, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Measurement unit for time units.
+ * @see android.icu.util.TimeUnit
+ * @author markdavis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class TimeUnit extends android.icu.util.MeasureUnit {
+
+TimeUnit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return the available values
+ */
+
+public static android.icu.util.TimeUnit[] values() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TimeZone.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TimeZone.java
new file mode 100644
index 0000000..0614fad
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/TimeZone.java
@@ -0,0 +1,755 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ * @(#)TimeZone.java    1.51 00/01/19
+ *
+ * Copyright (C) 1996-2016, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+import java.util.Date;
+import java.util.Set;
+import java.util.MissingResourceException;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.TimeZone}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>TimeZone</code> represents a time zone offset, and also computes daylight
+ * savings.
+ *
+ * <p>Typically, you get a <code>TimeZone</code> using {@link #getDefault()}
+ * which creates a <code>TimeZone</code> based on the time zone where the program
+ * is running. For example, for a program running in Japan, <code>getDefault</code>
+ * creates a <code>TimeZone</code> object based on Japanese Standard Time.
+ *
+ * <p>You can also get a <code>TimeZone</code> using {@link #getTimeZone(java.lang.String)}
+ * along with a time zone ID. For instance, the time zone ID for the
+ * U.S. Pacific Time zone is "America/Los_Angeles". So, you can get a
+ * U.S. Pacific Time <code>TimeZone</code> object with:
+ *
+ * <blockquote>
+ * <pre>
+ * TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
+ * </pre>
+ * </blockquote>
+ * You can use the {@link #getAvailableIDs()} method to iterate through
+ * all the supported time zone IDs, or getCanonicalID method to check
+ * if a time zone ID is supported or not. You can then choose a
+ * supported ID to get a <code>TimeZone</code>.
+ * If the time zone you want is not represented by one of the
+ * supported IDs, then you can create a custom time zone ID with
+ * the following syntax:
+ *
+ * <blockquote>
+ * <pre>
+ * GMT[+|-]hh[[:]mm]
+ * </pre>
+ * </blockquote>
+ *
+ * For example, you might specify GMT+14:00 as a custom
+ * time zone ID.  The <code>TimeZone</code> that is returned
+ * when you specify a custom time zone ID uses the specified
+ * offset from GMT(=UTC) and does not observe daylight saving
+ * time. For example, you might specify GMT+14:00 as a custom
+ * time zone ID to create a TimeZone representing 14 hours ahead
+ * of GMT (with no daylight saving time). In addition,
+ * <code>getCanonicalID</code> can also be used to
+ * normalize a custom time zone ID.
+ *
+ * <p>For compatibility with JDK 1.1.x, some other three-letter time zone IDs
+ * (such as "PST", "CTT", "AST") are also supported. However, <strong>their
+ * use is deprecated</strong> because the same abbreviation is often used
+ * for multiple time zones (for example, "CST" could be U.S. "Central Standard
+ * Time" and "China Standard Time"), and the Java platform can then only
+ * recognize one of them.
+ *
+ * @see          android.icu.util.Calendar
+ * @see          android.icu.util.GregorianCalendar
+ * @author       Mark Davis, Deborah Goldsmith, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class TimeZone implements java.io.Serializable, java.lang.Cloneable, android.icu.util.Freezable<android.icu.util.TimeZone> {
+
+/**
+ * Default constructor.  (For invocation by subclass constructors,
+ * typically implicit.)
+ */
+
+public TimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the time zone offset, for current date, modified in case of
+ * daylight savings. This is the offset to add *to* UTC to get local time.
+ * @param era the era of the given date.
+ * @param year the year in the given date.
+ * @param month the month in the given date.
+ * Month is 0-based. e.g., 0 for January.
+ * @param day the day-in-month of the given date.
+ * @param dayOfWeek the day-of-week of the given date.
+ * @param milliseconds the millis in day in <em>standard</em> local time.
+ * @return the offset to add *to* GMT to get local time.
+ */
+
+public abstract int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds);
+
+/**
+ * Returns the offset of this time zone from UTC at the specified
+ * date. If Daylight Saving Time is in effect at the specified
+ * date, the offset value is adjusted with the amount of daylight
+ * saving.
+ *
+ * @param date the date represented in milliseconds since January 1, 1970 00:00:00 GMT
+ * @return the amount of time in milliseconds to add to UTC to get local time.
+ *
+ * @see android.icu.util.Calendar#ZONE_OFFSET
+ * @see android.icu.util.Calendar#DST_OFFSET
+ * @see #getOffset(long, boolean, int[])
+ */
+
+public int getOffset(long date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone raw and GMT offset for the given moment
+ * in time.  Upon return, local-millis = GMT-millis + rawOffset +
+ * dstOffset.  All computations are performed in the proleptic
+ * Gregorian calendar.  The default implementation in the TimeZone
+ * class delegates to the 8-argument getOffset().
+ *
+ * @param date moment in time for which to return offsets, in
+ * units of milliseconds from January 1, 1970 0:00 GMT, either GMT
+ * time or local wall time, depending on `local'.
+ * @param local if true, `date' is local wall time; otherwise it
+ * is in GMT time.
+ * @param offsets output parameter to receive the raw offset, that
+ * is, the offset not including DST adjustments, in offsets[0],
+ * and the DST offset, that is, the offset to be added to
+ * `rawOffset' to obtain the total offset between local and GMT
+ * time, in offsets[1]. If DST is not in effect, the DST offset is
+ * zero; otherwise it is a positive value, typically one hour.
+ */
+
+public void getOffset(long date, boolean local, int[] offsets) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the base time zone offset to GMT.
+ * This is the offset to add *to* UTC to get local time.
+ * @param offsetMillis the given base time zone offset to GMT.
+ */
+
+public abstract void setRawOffset(int offsetMillis);
+
+/**
+ * Gets unmodified offset, NOT modified in case of daylight savings.
+ * This is the offset to add *to* UTC to get local time.
+ * @return the unmodified offset to add *to* UTC to get local time.
+ */
+
+public abstract int getRawOffset();
+
+/**
+ * Gets the ID of this time zone.
+ * @return the ID of this time zone.
+ */
+
+public java.lang.String getID() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone ID. This does not change any other data in
+ * the time zone object.
+ * @param ID the new time zone ID.
+ */
+
+public void setID(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the default <code>DISPLAY</code> locale.
+ * This method returns the long generic name.
+ * If the display name is not available for the locale,
+ * a fallback based on the country, city, or time zone id will be used.
+ * @return the human-readable name of this time zone in the default locale.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public final java.lang.String getDisplayName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * This method returns the long generic name.
+ * If the display name is not available for the locale,
+ * a fallback based on the country, city, or time zone id will be used.
+ * @param locale the locale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default locale if the given locale is not recognized.
+ */
+
+public final java.lang.String getDisplayName(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * This method returns the long name, not including daylight savings.
+ * If the display name is not available for the locale,
+ * a fallback based on the country, city, or time zone id will be used.
+ * @param locale the ulocale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default ulocale if the given ulocale is not recognized.
+ */
+
+public final java.lang.String getDisplayName(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the default <code>DISPLAY</code> locale.
+ * If the display name is not available for the locale,
+ * then this method returns a string in the localized GMT offset format
+ * such as <code>GMT[+-]HH:mm</code>.
+ * @param daylight if true, return the daylight savings name.
+ * @param style the output style of the display name.  Valid styles are
+ * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
+ * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
+ * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
+ * @return the human-readable name of this time zone in the default locale.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public final java.lang.String getDisplayName(boolean daylight, int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * If the display name is not available for the locale,
+ * then this method returns a string in the localized GMT offset format
+ * such as <code>GMT[+-]HH:mm</code>.
+ * @param daylight if true, return the daylight savings name.
+ * @param style the output style of the display name.  Valid styles are
+ * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
+ * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
+ * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
+ * @param locale the locale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default locale if the given locale is not recognized.
+ * @exception java.lang.IllegalArgumentException style is invalid.
+ */
+
+public java.lang.String getDisplayName(boolean daylight, int style, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * If the display name is not available for the locale,
+ * then this method returns a string in the localized GMT offset format
+ * such as <code>GMT[+-]HH:mm</code>.
+ * @param daylight if true, return the daylight savings name.
+ * @param style the output style of the display name.  Valid styles are
+ * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
+ * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
+ * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
+ * @param locale the locale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default locale if the given locale is not recognized.
+ * @exception java.lang.IllegalArgumentException style is invalid.
+ */
+
+public java.lang.String getDisplayName(boolean daylight, int style, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the amount of time to be added to local standard time
+ * to get local wall clock time.
+ * <p>
+ * The default implementation always returns 3600000 milliseconds
+ * (i.e., one hour) if this time zone observes Daylight Saving
+ * Time. Otherwise, 0 (zero) is returned.
+ * <p>
+ * If an underlying TimeZone implementation subclass supports
+ * historical Daylight Saving Time changes, this method returns
+ * the known latest daylight saving value.
+ *
+ * @return the amount of saving time in milliseconds
+ */
+
+public int getDSTSavings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Queries if this time zone uses daylight savings time.
+ * @return true if this time zone uses daylight savings time,
+ * false, otherwise.
+ * <p><strong>Note:</strong>The default implementation of
+ * ICU TimeZone uses the tz database, which supports historic
+ * rule changes, for system time zones. With the implementation,
+ * there are time zones that used daylight savings time in the
+ * past, but no longer used currently. For example, Asia/Tokyo has
+ * never used daylight savings time since 1951. Most clients would
+ * expect that this method to return <code>false</code> for such case.
+ * The default implementation of this method returns <code>true</code>
+ * when the time zone uses daylight savings time in the current
+ * (Gregorian) calendar year.
+ */
+
+public abstract boolean useDaylightTime();
+
+/**
+ * Queries if this time zone is in daylight saving time or will observe
+ * daylight saving time at any future time.
+ * <p>The default implementation in this class returns <code>true</code> if {@link #useDaylightTime()}
+ * or {@link #inDaylightTime(java.util.Date) inDaylightTime(new Date())} returns <code>true</code>.
+ * <p>
+ * <strong>Note:</strong> This method was added for {@link java.util.TimeZone} compatibility
+ * support. The {@link java.util.TimeZone#useDaylightTime()} method only checks the last known
+ * rule(s), therefore it may return false even the zone observes daylight saving time currently.
+ * {@link java.util.TimeZone} added <code>observesDaylightTime()</code> to resolve the issue.
+ * In ICU, {@link #useDaylightTime()} works differently. The ICU implementation checks if the
+ * zone uses daylight saving time in the current calendar year. Therefore, it will never return
+ * <code>false</code> if daylight saving time is currently used.
+ * <p>
+ * ICU's TimeZone subclass implementations override this method to support the same behavior
+ * with {@link java.util.TimeZone#observesDaylightTime()}. Unlike {@link #useDaylightTime()},
+ * the implementation does not take past daylight saving time into account, so
+ * that this method may return <code>false</code> even when {@link #useDaylightTime()} returns
+ * <code>true</code>.
+ *
+ * @return <code>true</code> if this time zone is in daylight saving time or will observe
+ * daylight saving time at any future time.
+ * @see #useDaylightTime
+ */
+
+public boolean observesDaylightTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Queries if the given date is in daylight savings time in
+ * this time zone.
+ * @param date the given Date.
+ * @return true if the given date is in daylight savings time,
+ * false, otherwise.
+ */
+
+public abstract boolean inDaylightTime(java.util.Date date);
+
+/**
+ * Gets the <code>TimeZone</code> for the given ID.
+ *
+ * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
+ * or a custom ID such as "GMT-8:00". Note that the support of abbreviations,
+ * such as "PST", is for JDK 1.1.x compatibility only and full names should be used.
+ *
+ * @return the specified <code>TimeZone</code>, or a mutable clone of the UNKNOWN_ZONE
+ * if the given ID cannot be understood or if the given ID is "Etc/Unknown".
+ * @see #UNKNOWN_ZONE
+ */
+
+public static android.icu.util.TimeZone getTimeZone(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the <code>TimeZone</code> for the given ID. The instance of <code>TimeZone</code>
+ * returned by this method is immutable. Any methods mutate the instance({@link #setID(java.lang.String)},
+ * {@link #setRawOffset(int)}) will throw <code>UnsupportedOperationException</code> upon its
+ * invocation.
+ *
+ * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
+ * or a custom ID such as "GMT-8:00". Note that the support of abbreviations,
+ * such as "PST", is for JDK 1.1.x compatibility only and full names should be used.
+ *
+ * @return the specified <code>TimeZone</code>, or the UNKNOWN_ZONE
+ * if the given ID cannot be understood.
+ * @see #UNKNOWN_ZONE
+ */
+
+public static android.icu.util.TimeZone getFrozenTimeZone(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the <code>TimeZone</code> for the given ID and the timezone type.
+ * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles", or a
+ * custom ID such as "GMT-8:00". Note that the support of abbreviations, such as
+ * "PST", is for JDK 1.1.x compatibility only and full names should be used.
+ * @param type Time zone type, either <code>TIMEZONE_ICU</code> or
+ * <code>TIMEZONE_JDK</code>.
+ * @return the specified <code>TimeZone</code>, or a mutable clone of the UNKNOWN_ZONE if the given ID
+ * cannot be understood or if the given ID is "Etc/Unknown".
+ * @see #UNKNOWN_ZONE
+ */
+
+public static android.icu.util.TimeZone getTimeZone(java.lang.String ID, int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a set of time zone ID strings with the given filter conditions.
+ * <p><b>Note:</b>A <code>Set</code> returned by this method is
+ * immutable.
+ * @param zoneType      The system time zone type.
+ * @param region        The ISO 3166 two-letter country code or UN M.49 three-digit area code.
+ *                      When null, no filtering done by region.
+ * @param rawOffset     An offset from GMT in milliseconds, ignoring the effect of daylight savings
+ *                      time, if any. When null, no filtering done by zone offset.
+ * @return an immutable set of system time zone IDs.
+ * @see android.icu.util.TimeZone.SystemTimeZoneType
+ */
+
+public static java.util.Set<java.lang.String> getAvailableIDs(android.icu.util.TimeZone.SystemTimeZoneType zoneType, java.lang.String region, java.lang.Integer rawOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new String array containing all system TimeZone IDs
+ * with the given raw offset from GMT.  These IDs may be passed to
+ * <code>get()</code> to construct the corresponding TimeZone
+ * object.
+ * @param rawOffset the offset in milliseconds from GMT
+ * @return an array of IDs for system TimeZones with the given
+ * raw offset.  If there are none, return a zero-length array.
+ * @see #getAvailableIDs(SystemTimeZoneType, String, Integer)
+ */
+
+public static java.lang.String[] getAvailableIDs(int rawOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new String array containing all system TimeZone IDs
+ * associated with the given country.  These IDs may be passed to
+ * <code>get()</code> to construct the corresponding TimeZone
+ * object.
+ * @param country a two-letter ISO 3166 country code, or <code>null</code>
+ * to return zones not associated with any country
+ * @return an array of IDs for system TimeZones in the given
+ * country.  If there are none, return a zero-length array.
+ * @see #getAvailableIDs(SystemTimeZoneType, String, Integer)
+ */
+
+public static java.lang.String[] getAvailableIDs(java.lang.String country) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new String array containing all system TimeZone IDs.
+ * These IDs (and only these IDs) may be passed to
+ * <code>get()</code> to construct the corresponding TimeZone
+ * object.
+ * @return an array of all system TimeZone IDs
+ * @see #getAvailableIDs(SystemTimeZoneType, String, Integer)
+ */
+
+public static java.lang.String[] getAvailableIDs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the number of IDs in the equivalency group that
+ * includes the given ID.  An equivalency group contains zones
+ * that have the same GMT offset and rules.
+ *
+ * <p>The returned count includes the given ID; it is always &gt;= 1
+ * for valid IDs.  The given ID must be a system time zone.  If it
+ * is not, returns zero.
+ * @param id a system time zone ID
+ * @return the number of zones in the equivalency group containing
+ * 'id', or zero if 'id' is not a valid system ID
+ * @see #getEquivalentID
+ */
+
+public static int countEquivalentIDs(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an ID in the equivalency group that
+ * includes the given ID.  An equivalency group contains zones
+ * that have the same GMT offset and rules.
+ *
+ * <p>The given index must be in the range 0..n-1, where n is the
+ * value returned by <code>countEquivalentIDs(id)</code>.  For
+ * some value of 'index', the returned value will be equal to the
+ * given id.  If the given id is not a valid system time zone, or
+ * if 'index' is out of range, then returns an empty string.
+ * @param id a system time zone ID
+ * @param index a value from 0 to n-1, where n is the value
+ * returned by <code>countEquivalentIDs(id)</code>
+ * @return the ID of the index-th zone in the equivalency group
+ * containing 'id', or an empty string if 'id' is not a valid
+ * system ID or 'index' is out of range
+ * @see #countEquivalentIDs
+ */
+
+public static java.lang.String getEquivalentID(java.lang.String id, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the default <code>TimeZone</code> for this host.
+ * The source of the default <code>TimeZone</code>
+ * may vary with implementation.
+ * @return a default <code>TimeZone</code>.
+ */
+
+public static android.icu.util.TimeZone getDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this zone has the same rule and offset as another zone.
+ * That is, if this zone differs only in ID, if at all.  Returns false
+ * if the other zone is null.
+ * @param other the <code>TimeZone</code> object to be compared with
+ * @return true if the other zone is not null and is the same as this one,
+ * with the possible exception of the ID
+ */
+
+public boolean hasSameRules(android.icu.util.TimeZone other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ * @return <code>true</code> if this object is the same as the obj argument; <code>false</code> otherwise.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides hashCode.
+ * @return a hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the time zone data version currently used by ICU.
+ *
+ * @return the version string, such as "2007f"
+ * @throws java.util.MissingResourceException if ICU time zone resource bundle
+ * is missing or the version information is not available.
+ */
+
+public static java.lang.String getTZDataVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the canonical system time zone ID or the normalized
+ * custom time zone ID for the given time zone ID.
+ * @param id The input time zone ID to be canonicalized.
+ * @return The canonical system time zone ID or the custom time zone ID
+ * in normalized format for the given time zone ID.  When the given time zone ID
+ * is neither a known system time zone ID nor a valid custom time zone ID,
+ * null is returned.
+ */
+
+public static java.lang.String getCanonicalID(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the canonical system time zone ID or the normalized
+ * custom time zone ID for the given time zone ID.
+ * @param id The input time zone ID to be canonicalized.
+ * @param isSystemID When non-null boolean array is specified and
+ * the given ID is a known system time zone ID, true is set to <code>isSystemID[0]</code>
+ * @return The canonical system time zone ID or the custom time zone ID
+ * in normalized format for the given time zone ID.  When the given time zone ID
+ * is neither a known system time zone ID nor a valid custom time zone ID,
+ * null is returned.
+ */
+
+public static java.lang.String getCanonicalID(java.lang.String id, boolean[] isSystemID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the region code associated with the given
+ * system time zone ID. The region code is either ISO 3166
+ * 2-letter country code or UN M.49 3-digit area code.
+ * When the time zone is not associated with a specific location,
+ * for example - "Etc/UTC", "EST5EDT", then this method returns
+ * "001" (UN M.49 area code for World).
+ * @param id the system time zone ID.
+ * @return the region code associated with the given
+ * system time zone ID.
+ * @throws java.lang.IllegalArgumentException if <code>id</code> is not a known system ID.
+ * @see #getAvailableIDs(String)
+ */
+
+public static java.lang.String getRegion(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts a system time zone ID to an equivalent Windows time zone ID. For example,
+ * Windows time zone ID "Pacific Standard Time" is returned for input "America/Los_Angeles".
+ *
+ * <p>There are system time zones that cannot be mapped to Windows zones. When the input
+ * system time zone ID is unknown or unmappable to a Windows time zone, then this
+ * method returns <code>null</code>.
+ *
+ * <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
+ * Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
+ * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
+ * Updating the Time Zone Data</a>.
+ *
+ * @param id A system time zone ID
+ * @return A Windows time zone ID mapped from the input system time zone ID,
+ * or <code>null</code> when the input ID is unknown or unmappable.
+ * @see #getIDForWindowsID(String, String)
+ */
+
+public static java.lang.String getWindowsID(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts a Windows time zone ID to an equivalent system time zone ID
+ * for a region. For example, system time zone ID "America/Los_Angeles" is returned
+ * for input Windows ID "Pacific Standard Time" and region "US" (or <code>null</code>),
+ * "America/Vancouver" is returned for the same Windows ID "Pacific Standard Time" and
+ * region "CA".
+ *
+ * <p>Not all Windows time zones can be mapped to system time zones. When the input
+ * Windows time zone ID is unknown or unmappable to a system time zone, then this
+ * method returns <code>null</code>.
+ *
+ * <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
+ * Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
+ * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
+ * Updating the Time Zone Data</a>.
+ *
+ * @param winid A Windows time zone ID
+ * @param region A region code, or <code>null</code> if no regional preference.
+ * @return A system time zone ID mapped from the input Windows time zone ID,
+ * or <code>null</code> when the input ID is unknown or unmappable.
+ * @see #getWindowsID(String)
+ */
+
+public static java.lang.String getIDForWindowsID(java.lang.String winid, java.lang.String region) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.util.TimeZone freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.util.TimeZone cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a long name derived from the timezone's fallback name, such as
+ * "United States (Los Angeles)."
+ */
+
+public static final int GENERIC_LOCATION = 7; // 0x7
+
+/**
+ * <strong>[icu]</strong> The immutable GMT (=UTC) time zone. Its ID is "Etc/GMT".
+ */
+
+public static final android.icu.util.TimeZone GMT_ZONE;
+static { GMT_ZONE = null; }
+
+/**
+ * A style specifier for <code>getDisplayName()</code> indicating
+ * a long name, such as "Pacific Standard Time."
+ * @see #SHORT
+ */
+
+public static final int LONG = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a long generic name, such as "Pacific Time."
+ * @see #SHORT_GENERIC
+ */
+
+public static final int LONG_GENERIC = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a long name derived from the timezone's offset, such as "GMT-08:00."
+ * @see #SHORT_GMT
+ */
+
+public static final int LONG_GMT = 5; // 0x5
+
+/**
+ * A style specifier for <code>getDisplayName()</code> indicating
+ * a short name, such as "PST."
+ * @see #LONG
+ */
+
+public static final int SHORT = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a short name derived from the timezone's short standard or daylight
+ * timezone name ignoring commonlyUsed, such as "PDT."
+ */
+
+public static final int SHORT_COMMONLY_USED = 6; // 0x6
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a short generic name, such as "PT."
+ * @see #LONG_GENERIC
+ */
+
+public static final int SHORT_GENERIC = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a short name derived from the timezone's offset, such as "-0800."
+ * @see #LONG_GMT
+ */
+
+public static final int SHORT_GMT = 4; // 0x4
+
+/**
+ * <strong>[icu]</strong> A time zone implementation type indicating ICU's own TimeZone used by
+ * <code>getTimeZone</code>.
+ */
+
+public static final int TIMEZONE_ICU = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> A time zone implementation type indicating the {@link java.util.TimeZone}
+ * used by <code>getTimeZone</code>.
+ */
+
+public static final int TIMEZONE_JDK = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> The immutable (frozen) "unknown" time zone.
+ * It behaves like the GMT/UTC time zone but has the UNKNOWN_ZONE_ID = "Etc/Unknown".
+ * {@link android.icu.util.TimeZone#getTimeZone(java.lang.String) TimeZone#getTimeZone(String)} returns a mutable clone of this
+ * time zone if the input ID is not recognized.
+ *
+ * @see #UNKNOWN_ZONE_ID
+ * @see #getTimeZone(String)
+ */
+
+public static final android.icu.util.TimeZone UNKNOWN_ZONE;
+static { UNKNOWN_ZONE = null; }
+
+/**
+ * <strong>[icu]</strong> The time zone ID reserved for unknown time zone.
+ * @see #getTimeZone(String)
+ */
+
+public static final java.lang.String UNKNOWN_ZONE_ID = "Etc/Unknown";
+/**
+ * <strong>[icu]</strong> System time zone type constants used by filtering zones in
+ * {@link android.icu.util.TimeZone#getAvailableIDs(android.icu.util.TimeZone.SystemTimeZoneType,java.lang.String,java.lang.Integer) TimeZone#getAvailableIDs(SystemTimeZoneType, String, Integer)}
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum SystemTimeZoneType {
+/**
+ * Any system zones.
+ */
+
+ANY,
+/**
+ * Canonical system zones.
+ */
+
+CANONICAL,
+/**
+ * Canonical system zones associated with actual locations.
+ */
+
+CANONICAL_LOCATION;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ULocale.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ULocale.java
new file mode 100644
index 0000000..acfae51
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ULocale.java
@@ -0,0 +1,1749 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ ******************************************************************************
+ * Copyright (C) 2003-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ ******************************************************************************
+ */
+
+
+package android.icu.util;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import android.icu.text.LocaleDisplayNames;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.Locale}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * A class analogous to {@link java.util.Locale} that provides additional
+ * support for ICU protocol.  In ICU 3.0 this class is enhanced to support
+ * RFC 3066 language identifiers.
+ *
+ * <p>Many classes and services in ICU follow a factory idiom, in
+ * which a factory method or object responds to a client request with
+ * an object.  The request includes a locale (the <i>requested</i>
+ * locale), and the returned object is constructed using data for that
+ * locale.  The system may lack data for the requested locale, in
+ * which case the locale fallback mechanism will be invoked until a
+ * populated locale is found (the <i>valid</i> locale).  Furthermore,
+ * even when a populated locale is found (the <i>valid</i> locale),
+ * further fallback may be required to reach a locale containing the
+ * specific data required by the service (the <i>actual</i> locale).
+ *
+ * <p>ULocale performs <b>'normalization'</b> and <b>'canonicalization'</b> of locale ids.
+ * Normalization 'cleans up' ICU locale ids as follows:
+ * <ul>
+ * <li>language, script, country, variant, and keywords are properly cased<br>
+ * (lower, title, upper, upper, and lower case respectively)</li>
+ * <li>hyphens used as separators are converted to underscores</li>
+ * <li>three-letter language and country ids are converted to two-letter
+ * equivalents where available</li>
+ * <li>surrounding spaces are removed from keywords and values</li>
+ * <li>if there are multiple keywords, they are put in sorted order</li>
+ * </ul>
+ * Canonicalization additionally performs the following:
+ * <ul>
+ * <li>POSIX ids are converted to ICU format IDs</li>
+ * <li>Legacy language tags (marked as ?Type: grandfathered? in BCP 47)
+ * are converted to ICU standard form</li>
+ * </ul>
+ * All ULocale constructors automatically normalize the locale id.  To handle
+ * POSIX ids, <code>canonicalize</code> can be called to convert the id
+ * to canonical form, or the <code>canonicalInstance</code> factory method
+ * can be called.
+ *
+ * <p>Note: The <i>actual</i> locale is returned correctly, but the <i>valid</i>
+ * locale is not, in most cases.
+ *
+ * @see java.util.Locale
+ * @author weiv
+ * @author Alan Liu
+ * @author Ram Viswanadha
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class ULocale implements java.io.Serializable, java.lang.Comparable<android.icu.util.ULocale> {
+
+/**
+ * <strong>[icu]</strong> Constructs a ULocale from a RFC 3066 locale ID. The locale ID consists
+ * of optional language, script, country, and variant fields in that order,
+ * separated by underscores, followed by an optional keyword list.  The
+ * script, if present, is four characters long-- this distinguishes it
+ * from a country code, which is two characters long.  Other fields
+ * are distinguished by position as indicated by the underscores.  The
+ * start of the keyword list is indicated by '@', and consists of two
+ * or more keyword/value pairs separated by semicolons(';').
+ *
+ * <p>This constructor does not canonicalize the localeID.  So, for
+ * example, "zh__pinyin" remains unchanged instead of converting
+ * to "zh@collation=pinyin".  By default ICU only recognizes the
+ * latter as specifying pinyin collation.  Use {@link #createCanonical}
+ * or {@link #canonicalize} if you need to canonicalize the localeID.
+ *
+ * @param localeID string representation of the locale, e.g:
+ * "en_US", "sy_Cyrl_YU", "zh__pinyin", "es_ES@currency=EUR;collation=traditional"
+ */
+
+public ULocale(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience overload of ULocale(String, String, String) for
+ * compatibility with java.util.Locale.
+ * @see #ULocale(String, String, String)
+ */
+
+public ULocale(java.lang.String a, java.lang.String b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a ULocale from a localeID constructed from the three 'fields' a, b, and
+ * c.  These fields are concatenated using underscores to form a localeID of the form
+ * a_b_c, which is then handled like the localeID passed to <code>ULocale(String
+ * localeID)</code>.
+ *
+ * <p>Java locale strings consisting of language, country, and
+ * variant will be handled by this form, since the country code
+ * (being shorter than four letters long) will not be interpreted
+ * as a script code.  If a script code is present, the final
+ * argument ('c') will be interpreted as the country code.  It is
+ * recommended that this constructor only be used to ease porting,
+ * and that clients instead use the single-argument constructor
+ * when constructing a ULocale from a localeID.
+ * @param a first component of the locale id
+ * @param b second component of the locale id
+ * @param c third component of the locale id
+ * @see #ULocale(String)
+ */
+
+public ULocale(java.lang.String a, java.lang.String b, java.lang.String c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a ULocale object for a {@link java.util.Locale}.
+ * The ULocale is canonicalized.
+ * @param loc a {@link java.util.Locale}
+ */
+
+public static android.icu.util.ULocale forLocale(java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a ULocale from the id by first canonicalizing the id according to CLDR.
+ * @param nonCanonicalID the locale id to canonicalize
+ * @return the locale created from the canonical version of the ID.
+ */
+
+public static android.icu.util.ULocale createCanonical(java.lang.String nonCanonicalID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts this ULocale object to a {@link java.util.Locale}.
+ * @return a {@link java.util.Locale} that either exactly represents this object
+ * or is the closest approximation.
+ */
+
+public java.util.Locale toLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current default ULocale.
+ * <p>
+ * The default ULocale is synchronized to the default Java Locale. This method checks
+ * the current default Java Locale and returns an equivalent ULocale.
+ *
+ * @return the default ULocale.
+ */
+
+public static android.icu.util.ULocale getDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current default ULocale for the specified category.
+ *
+ * @param category the category
+ * @return the default ULocale for the specified category.
+ */
+
+public static android.icu.util.ULocale getDefault(android.icu.util.ULocale.Category category) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is for compatibility with Locale-- in actuality, since ULocale is
+ * immutable, there is no reason to clone it, so this API returns 'this'.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hashCode.
+ * @return a hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the other object is another ULocale with the
+ * same full name.
+ * Note that since names are not canonicalized, two ULocales that
+ * function identically might not compare equal.
+ *
+ * @return true if this Locale is equal to the specified object.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares two ULocale for ordering.
+ * <p><b>Note:</b> The order might change in future.
+ *
+ * @param other the ULocale to be compared.
+ * @return a negative integer, zero, or a positive integer as this ULocale is less than, equal to, or greater
+ * than the specified ULocale.
+ * @throws java.lang.NullPointerException if <code>other</code> is null.
+ */
+
+public int compareTo(android.icu.util.ULocale other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu] Note:</strong> Unlike the Locale API, this returns an array of <code>ULocale</code>,
+ * not <code>Locale</code>.
+ *
+ * <p>Returns a list of all installed locales.
+ */
+
+public static android.icu.util.ULocale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of all installed locales according to the specified type.
+ */
+
+public static java.util.Collection<android.icu.util.ULocale> getAvailableLocalesByType(android.icu.util.ULocale.AvailableType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of all 2-letter country codes defined in ISO 3166.
+ * Can be used to create Locales.
+ */
+
+public static java.lang.String[] getISOCountries() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of all 2-letter language codes defined in ISO 639.
+ * Can be used to create Locales.
+ * [NOTE:  ISO 639 is not a stable standard-- some languages' codes have changed.
+ * The list this function returns includes both the new and the old codes for the
+ * languages whose codes have changed.]
+ */
+
+public static java.lang.String[] getISOLanguages() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the language code for this locale, which will either be the empty string
+ * or a lowercase ISO 639 code.
+ * @see #getDisplayLanguage()
+ * @see #getDisplayLanguage(ULocale)
+ */
+
+public java.lang.String getLanguage() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the language code for the locale ID,
+ * which will either be the empty string
+ * or a lowercase ISO 639 code.
+ * @see #getDisplayLanguage()
+ * @see #getDisplayLanguage(ULocale)
+ */
+
+public static java.lang.String getLanguage(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script code for this locale, which might be the empty string.
+ * @see #getDisplayScript()
+ * @see #getDisplayScript(ULocale)
+ */
+
+public java.lang.String getScript() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the script code for the specified locale, which might be the empty
+ * string.
+ * @see #getDisplayScript()
+ * @see #getDisplayScript(ULocale)
+ */
+
+public static java.lang.String getScript(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the country/region code for this locale, which will either be the empty string
+ * or an uppercase ISO 3166 2-letter code.
+ * @see #getDisplayCountry()
+ * @see #getDisplayCountry(ULocale)
+ */
+
+public java.lang.String getCountry() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the country/region code for this locale, which will either be the empty string
+ * or an uppercase ISO 3166 2-letter code.
+ * @param localeID The locale identification string.
+ * @see #getDisplayCountry()
+ * @see #getDisplayCountry(ULocale)
+ */
+
+public static java.lang.String getCountry(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the variant code for this locale, which might be the empty string.
+ * @see #getDisplayVariant()
+ * @see #getDisplayVariant(ULocale)
+ */
+
+public java.lang.String getVariant() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the variant code for the specified locale, which might be the empty string.
+ * @see #getDisplayVariant()
+ * @see #getDisplayVariant(ULocale)
+ */
+
+public static java.lang.String getVariant(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the fallback locale for the specified locale, which might be the
+ * empty string.
+ */
+
+public static java.lang.String getFallback(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the fallback locale for this locale.  If this locale is root,
+ * returns null.
+ */
+
+public android.icu.util.ULocale getFallback() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) base name for this locale,
+ * like {@link #getName()}, but without keywords.
+ *
+ * @return the base name as a String.
+ */
+
+public java.lang.String getBaseName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) base name for the specified locale,
+ * like {@link #getName(java.lang.String)}, but without keywords.
+ *
+ * @param localeID the locale ID as a string
+ * @return the base name as a String.
+ */
+
+public static java.lang.String getBaseName(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) full name for this locale.
+ *
+ * @return String the full name of the localeID
+ */
+
+public java.lang.String getName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) full name for the specified locale.
+ *
+ * @param localeID the localeID as a string
+ * @return String the full name of the localeID
+ */
+
+public static java.lang.String getName(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this object.
+ * @return a string representation of the object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an iterator over keywords for this locale.  If there
+ * are no keywords, returns null.
+ * @return iterator over keywords, or null if there are no keywords.
+ */
+
+public java.util.Iterator<java.lang.String> getKeywords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an iterator over keywords for the specified locale.  If there
+ * are no keywords, returns null.
+ * @return an iterator over the keywords in the specified locale, or null
+ * if there are no keywords.
+ */
+
+public static java.util.Iterator<java.lang.String> getKeywords(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the value for a keyword in this locale. If the keyword is not
+ * defined, returns null.
+ * @param keywordName name of the keyword whose value is desired. Case insensitive.
+ * @return the value of the keyword, or null.
+ */
+
+public java.lang.String getKeywordValue(java.lang.String keywordName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the value for a keyword in the specified locale. If the keyword is
+ * not defined, returns null.  The locale name does not need to be normalized.
+ * @param keywordName name of the keyword whose value is desired. Case insensitive.
+ * @return String the value of the keyword as a string
+ */
+
+public static java.lang.String getKeywordValue(java.lang.String localeID, java.lang.String keywordName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the canonical name according to CLDR for the specified locale ID.
+ * This is used to convert POSIX and other legacy IDs to standard ICU form.
+ * @param localeID the locale id
+ * @return the canonicalized id
+ */
+
+public static java.lang.String canonicalize(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a keyword and a value, return a new locale with an updated
+ * keyword and value.  If the keyword is null, this removes all keywords from the locale id.
+ * Otherwise, if the value is null, this removes the value for this keyword from the
+ * locale id.  Otherwise, this adds/replaces the value for this keyword in the locale id.
+ * The keyword and value must not be empty.
+ *
+ * <p>Related: {@link #getBaseName()} returns the locale ID string with all keywords removed.
+ *
+ * @param keyword the keyword to add/remove, or null to remove all keywords.
+ * @param value the value to add/set, or null to remove this particular keyword.
+ * @return the updated locale
+ */
+
+public android.icu.util.ULocale setKeywordValue(java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a locale id, a keyword, and a value, return a new locale id with an updated
+ * keyword and value.  If the keyword is null, this removes all keywords from the locale id.
+ * Otherwise, if the value is null, this removes the value for this keyword from the
+ * locale id.  Otherwise, this adds/replaces the value for this keyword in the locale id.
+ * The keyword and value must not be empty.
+ *
+ * <p>Related: {@link #getBaseName(java.lang.String)} returns the locale ID string with all keywords removed.
+ *
+ * @param localeID the locale id to modify
+ * @param keyword the keyword to add/remove, or null to remove all keywords.
+ * @param value the value to add/set, or null to remove this particular keyword.
+ * @return the updated locale id
+ */
+
+public static java.lang.String setKeywordValue(java.lang.String localeID, java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a three-letter abbreviation for this locale's language.  If the locale
+ * doesn't specify a language, returns the empty string.  Otherwise, returns
+ * a lowercase ISO 639-2/T language code.
+ * The ISO 639-2 language codes can be found on-line at
+ *   <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a>
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter language abbreviation is not available for this locale.
+ */
+
+public java.lang.String getISO3Language() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a three-letter abbreviation for this locale's language.  If the locale
+ * doesn't specify a language, returns the empty string.  Otherwise, returns
+ * a lowercase ISO 639-2/T language code.
+ * The ISO 639-2 language codes can be found on-line at
+ *   <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a>
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter language abbreviation is not available for this locale.
+ */
+
+public static java.lang.String getISO3Language(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a three-letter abbreviation for this locale's country/region.  If the locale
+ * doesn't specify a country, returns the empty string.  Otherwise, returns
+ * an uppercase ISO 3166 3-letter country code.
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter country abbreviation is not available for this locale.
+ */
+
+public java.lang.String getISO3Country() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a three-letter abbreviation for this locale's country/region.  If the locale
+ * doesn't specify a country, returns the empty string.  Otherwise, returns
+ * an uppercase ISO 3166 3-letter country code.
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter country abbreviation is not available for this locale.
+ */
+
+public static java.lang.String getISO3Country(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether this locale's script is written right-to-left.
+ * If there is no script subtag, then the likely script is used,
+ * see {@link #addLikelySubtags(android.icu.util.ULocale)}.
+ * If no likely script is known, then false is returned.
+ *
+ * <p>A script is right-to-left according to the CLDR script metadata
+ * which corresponds to whether the script's letters have Bidi_Class=R or AL.
+ *
+ * <p>Returns true for "ar" and "en-Hebr", false for "zh" and "fa-Cyrl".
+ *
+ * @return true if the locale's script is written right-to-left
+ */
+
+public boolean isRightToLeft() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's language localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized language name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayLanguage() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's language localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public java.lang.String getDisplayLanguage(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguage(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguage(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's language localized for display in the default <code>DISPLAY</code> locale.
+ * If a dialect name is present in the data, then it is returned.
+ * @return the localized language name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayLanguageWithDialect() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's language localized for display in the provided locale.
+ * If a dialect name is present in the data, then it is returned.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public java.lang.String getDisplayLanguageWithDialect(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * If a dialect name is present in the data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguageWithDialect(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * If a dialect name is present in the data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguageWithDialect(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's script localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized script name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayScript() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's script localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized script name.
+ */
+
+public java.lang.String getDisplayScript(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's script localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose script will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized script name.
+ */
+
+public static java.lang.String getDisplayScript(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's script localized for display in the provided locale.
+ * @param localeID the id of the locale whose script will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized script name.
+ */
+
+public static java.lang.String getDisplayScript(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's country localized for display in the default <code>DISPLAY</code> locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * @return the localized country name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayCountry() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's country localized for display in the provided locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized country name.
+ */
+
+public java.lang.String getDisplayCountry(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's country localized for display in the provided locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose country will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized country name.
+ */
+
+public static java.lang.String getDisplayCountry(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's country localized for display in the provided locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose country will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized country name.
+ */
+
+public static java.lang.String getDisplayCountry(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's variant localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized variant name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayVariant() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's variant localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized variant name.
+ */
+
+public java.lang.String getDisplayVariant(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's variant localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose variant will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized variant name.
+ */
+
+public static java.lang.String getDisplayVariant(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's variant localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose variant will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized variant name.
+ */
+
+public static java.lang.String getDisplayVariant(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword localized for display in the default <code>DISPLAY</code> locale.
+ * @param keyword the keyword to be displayed.
+ * @return the localized keyword name.
+ * @see #getKeywords()
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static java.lang.String getDisplayKeyword(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword localized for display in the specified locale.
+ * @param keyword the keyword to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the keyword.
+ * @return the localized keyword name.
+ * @see #getKeywords(String)
+ */
+
+public static java.lang.String getDisplayKeyword(java.lang.String keyword, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword localized for display in the specified locale.
+ * @param keyword the keyword to be displayed.
+ * @param displayLocale the locale in which to display the keyword.
+ * @return the localized keyword name.
+ * @see #getKeywords(String)
+ */
+
+public static java.lang.String getDisplayKeyword(java.lang.String keyword, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the default <code>DISPLAY</code> locale.
+ * @param keyword the keyword whose value is to be displayed.
+ * @return the localized value name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayKeywordValue(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the specified locale.
+ * @param keyword the keyword whose value is to be displayed.
+ * @param displayLocale the locale in which to display the value.
+ * @return the localized value name.
+ */
+
+public java.lang.String getDisplayKeywordValue(java.lang.String keyword, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the specified locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose keyword value is to be displayed.
+ * @param keyword the keyword whose value is to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the value.
+ * @return the localized value name.
+ */
+
+public static java.lang.String getDisplayKeywordValue(java.lang.String localeID, java.lang.String keyword, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the specified locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose keyword value is to be displayed.
+ * @param keyword the keyword whose value is to be displayed.
+ * @param displayLocale the id of the locale in which to display the value.
+ * @return the localized value name.
+ */
+
+public static java.lang.String getDisplayKeywordValue(java.lang.String localeID, java.lang.String keyword, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale name localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized locale name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale name localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public java.lang.String getDisplayName(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayName(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayName(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale name localized for display in the default <code>DISPLAY</code> locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * @return the localized locale name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayNameWithDialect() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale name localized for display in the provided locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public java.lang.String getDisplayNameWithDialect(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayNameWithDialect(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayNameWithDialect(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's layout orientation for characters.  The possible
+ * values are "left-to-right", "right-to-left", "top-to-bottom" or
+ * "bottom-to-top".
+ * @return The locale's layout orientation for characters.
+ */
+
+public java.lang.String getCharacterOrientation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's layout orientation for lines.  The possible
+ * values are "left-to-right", "right-to-left", "top-to-bottom" or
+ * "bottom-to-top".
+ * @return The locale's layout orientation for lines.
+ */
+
+public java.lang.String getLineOrientation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on a HTTP formatted list of acceptable locales, determine an available
+ * locale for the user.  NullPointerException is thrown if acceptLanguageList or
+ * availableLocales is null.  If fallback is non-null, it will contain true if a
+ * fallback locale (one not in the acceptLanguageList) was returned.  The value on
+ * entry is ignored.  ULocale will be one of the locales in availableLocales, or the
+ * ROOT ULocale if if a ROOT locale was used as a fallback (because nothing else in
+ * availableLocales matched).  No ULocale array element should be null; behavior is
+ * undefined if this is the case.
+ *
+ * @param acceptLanguageList list in HTTP "Accept-Language:" format of acceptable locales
+ * @param availableLocales list of available locales. One of these will be returned.
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the availableLocales list, or null if none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(java.lang.String acceptLanguageList, android.icu.util.ULocale[] availableLocales, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on a list of acceptable locales, determine an available locale for the
+ * user.  NullPointerException is thrown if acceptLanguageList or availableLocales is
+ * null.  If fallback is non-null, it will contain true if a fallback locale (one not
+ * in the acceptLanguageList) was returned.  The value on entry is ignored.  ULocale
+ * will be one of the locales in availableLocales, or the ROOT ULocale if if a ROOT
+ * locale was used as a fallback (because nothing else in availableLocales matched).
+ * No ULocale array element should be null; behavior is undefined if this is the case.
+ *
+ * @param acceptLanguageList list of acceptable locales
+ * @param availableLocales list of available locales. One of these will be returned.
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the availableLocales list, or null if none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[] acceptLanguageList, android.icu.util.ULocale[] availableLocales, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on a HTTP formatted list of acceptable locales, determine an available
+ * locale for the user.  NullPointerException is thrown if acceptLanguageList or
+ * availableLocales is null.  If fallback is non-null, it will contain true if a
+ * fallback locale (one not in the acceptLanguageList) was returned.  The value on
+ * entry is ignored.  ULocale will be one of the locales in availableLocales, or the
+ * ROOT ULocale if if a ROOT locale was used as a fallback (because nothing else in
+ * availableLocales matched).  No ULocale array element should be null; behavior is
+ * undefined if this is the case.  This function will choose a locale from the
+ * ULocale.getAvailableLocales() list as available.
+ *
+ * @param acceptLanguageList list in HTTP "Accept-Language:" format of acceptable locales
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the ULocale.getAvailableLocales() list, or null if
+ * none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(java.lang.String acceptLanguageList, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on an ordered array of acceptable locales, determine an available
+ * locale for the user.  NullPointerException is thrown if acceptLanguageList or
+ * availableLocales is null.  If fallback is non-null, it will contain true if a
+ * fallback locale (one not in the acceptLanguageList) was returned.  The value on
+ * entry is ignored.  ULocale will be one of the locales in availableLocales, or the
+ * ROOT ULocale if if a ROOT locale was used as a fallback (because nothing else in
+ * availableLocales matched).  No ULocale array element should be null; behavior is
+ * undefined if this is the case.  This function will choose a locale from the
+ * ULocale.getAvailableLocales() list as available.
+ *
+ * @param acceptLanguageList ordered array of acceptable locales (preferred are listed first)
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the ULocale.getAvailableLocales() list, or null if none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[] acceptLanguageList, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Adds the likely subtags for a provided locale ID, per the algorithm
+ * described in the following CLDR technical report:
+ *
+ *   http://www.unicode.org/reports/tr35/#Likely_Subtags
+ *
+ * If the provided ULocale instance is already in the maximal form, or there is no
+ * data available available for maximization, it will be returned.  For example,
+ * "und-Zzzz" cannot be maximized, since there is no reasonable maximization.
+ * Otherwise, a new ULocale instance with the maximal form is returned.
+ *
+ * Examples:
+ *
+ * "en" maximizes to "en_Latn_US"
+ *
+ * "de" maximizes to "de_Latn_US"
+ *
+ * "sr" maximizes to "sr_Cyrl_RS"
+ *
+ * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.)
+ *
+ * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.)
+ *
+ * @param loc The ULocale to maximize
+ * @return The maximized ULocale instance.
+ */
+
+public static android.icu.util.ULocale addLikelySubtags(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Minimizes the subtags for a provided locale ID, per the algorithm described
+ * in the following CLDR technical report:<blockquote>
+ *
+ *   <a href="http://www.unicode.org/reports/tr35/#Likely_Subtags"
+ *>http://www.unicode.org/reports/tr35/#Likely_Subtags</a></blockquote>
+ *
+ * If the provided ULocale instance is already in the minimal form, or there
+ * is no data available for minimization, it will be returned.  Since the
+ * minimization algorithm relies on proper maximization, see the comments
+ * for addLikelySubtags for reasons why there might not be any data.
+ *
+ * Examples:<pre>
+ *
+ * "en_Latn_US" minimizes to "en"
+ *
+ * "de_Latn_US" minimizes to "de"
+ *
+ * "sr_Cyrl_RS" minimizes to "sr"
+ *
+ * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the
+ * script, and minimizing to "zh" would imply "zh_Hans_CN".) </pre>
+ *
+ * @param loc The ULocale to minimize
+ * @return The minimized ULocale instance.
+ */
+
+public static android.icu.util.ULocale minimizeSubtags(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the extension (or private use) value associated with
+ * the specified key, or null if there is no extension
+ * associated with the key. To be well-formed, the key must be one
+ * of <code>[0-9A-Za-z]</code>. Keys are case-insensitive, so
+ * for example 'z' and 'Z' represent the same extension.
+ *
+ * @param key the extension key
+ * @return The extension, or null if this locale defines no
+ * extension for the specified key.
+ * @throws java.lang.IllegalArgumentException if key is not well-formed
+ * @see #PRIVATE_USE_EXTENSION
+ * @see #UNICODE_LOCALE_EXTENSION
+ */
+
+public java.lang.String getExtension(char key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of extension keys associated with this locale, or the
+ * empty set if it has no extensions. The returned set is unmodifiable.
+ * The keys will all be lower-case.
+ *
+ * @return the set of extension keys, or the empty set if this locale has
+ * no extensions
+ */
+
+public java.util.Set<java.lang.Character> getExtensionKeys() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of unicode locale attributes associated with
+ * this locale, or the empty set if it has no attributes. The
+ * returned set is unmodifiable.
+ *
+ * @return The set of attributes.
+ */
+
+public java.util.Set<java.lang.String> getUnicodeLocaleAttributes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Unicode locale type associated with the specified Unicode locale key
+ * for this locale. Returns the empty string for keys that are defined with no type.
+ * Returns null if the key is not defined. Keys are case-insensitive. The key must
+ * be two alphanumeric characters ([0-9a-zA-Z]), or an IllegalArgumentException is
+ * thrown.
+ *
+ * @param key the Unicode locale key
+ * @return The Unicode locale type associated with the key, or null if the
+ * locale does not define the key.
+ * @throws java.lang.IllegalArgumentException if the key is not well-formed
+ * @throws java.lang.NullPointerException if <code>key</code> is null
+ */
+
+public java.lang.String getUnicodeLocaleType(java.lang.String key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of Unicode locale keys defined by this locale, or the empty set if
+ * this locale has none.  The returned set is immutable.  Keys are all lower case.
+ *
+ * @return The set of Unicode locale keys, or the empty set if this locale has
+ * no Unicode locale keywords.
+ */
+
+public java.util.Set<java.lang.String> getUnicodeLocaleKeys() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a well-formed IETF BCP 47 language tag representing
+ * this locale.
+ *
+ * <p>If this <code>ULocale</code> has a language, script, country, or
+ * variant that does not satisfy the IETF BCP 47 language tag
+ * syntax requirements, this method handles these fields as
+ * described below:
+ *
+ * <p><b>Language:</b> If language is empty, or not well-formed
+ * (for example "a" or "e2"), it will be emitted as "und" (Undetermined).
+ *
+ * <p><b>Script:</b> If script is not well-formed (for example "12"
+ * or "Latin"), it will be omitted.
+ *
+ * <p><b>Country:</b> If country is not well-formed (for example "12"
+ * or "USA"), it will be omitted.
+ *
+ * <p><b>Variant:</b> If variant <b>is</b> well-formed, each sub-segment
+ * (delimited by '-' or '_') is emitted as a subtag.  Otherwise:
+ * <ul>
+ *
+ * <li>if all sub-segments match <code>[0-9a-zA-Z]{1,8}</code>
+ * (for example "WIN" or "Oracle_JDK_Standard_Edition"), the first
+ * ill-formed sub-segment and all following will be appended to
+ * the private use subtag.  The first appended subtag will be
+ * "lvariant", followed by the sub-segments in order, separated by
+ * hyphen. For example, "x-lvariant-WIN",
+ * "Oracle-x-lvariant-JDK-Standard-Edition".
+ *
+ * <li>if any sub-segment does not match
+ * <code>[0-9a-zA-Z]{1,8}</code>, the variant will be truncated
+ * and the problematic sub-segment and all following sub-segments
+ * will be omitted.  If the remainder is non-empty, it will be
+ * emitted as a private use subtag as above (even if the remainder
+ * turns out to be well-formed).  For example,
+ * "Solaris_isjustthecoolestthing" is emitted as
+ * "x-lvariant-Solaris", not as "solaris".</li></ul>
+ *
+ * <p><b>Note:</b> Although the language tag created by this
+ * method is well-formed (satisfies the syntax requirements
+ * defined by the IETF BCP 47 specification), it is not
+ * necessarily a valid BCP 47 language tag.  For example,
+ * <pre>
+ *   new Locale("xx", "YY").toLanguageTag();</pre>
+ *
+ * will return "xx-YY", but the language subtag "xx" and the
+ * region subtag "YY" are invalid because they are not registered
+ * in the IANA Language Subtag Registry.
+ *
+ * @return a BCP47 language tag representing the locale
+ * @see #forLanguageTag(String)
+ */
+
+public java.lang.String toLanguageTag() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a locale for the specified IETF BCP 47 language tag string.
+ *
+ * <p>If the specified language tag contains any ill-formed subtags,
+ * the first such subtag and all following subtags are ignored.  Compare
+ * to {@link android.icu.util.ULocale.Builder#setLanguageTag ULocale.Builder#setLanguageTag} which throws an exception
+ * in this case.
+ *
+ * <p>The following <b>conversions</b> are performed:
+ * <ul>
+ *
+ * <li>The language code "und" is mapped to language "".
+ *
+ * <li>The portion of a private use subtag prefixed by "lvariant",
+ * if any, is removed and appended to the variant field in the
+ * result locale (without case normalization).  If it is then
+ * empty, the private use subtag is discarded:
+ *
+ * <pre>
+ *     ULocale loc;
+ *     loc = ULocale.forLanguageTag("en-US-x-lvariant-icu4j);
+ *     loc.getVariant(); // returns "ICU4J"
+ *     loc.getExtension('x'); // returns null
+ *
+ *     loc = Locale.forLanguageTag("de-icu4j-x-URP-lvariant-Abc-Def");
+ *     loc.getVariant(); // returns "ICU4J_ABC_DEF"
+ *     loc.getExtension('x'); // returns "urp"
+ * </pre>
+ *
+ * <li>When the languageTag argument contains an extlang subtag,
+ * the first such subtag is used as the language, and the primary
+ * language subtag and other extlang subtags are ignored:
+ *
+ * <pre>
+ *     ULocale.forLanguageTag("ar-aao").getLanguage(); // returns "aao"
+ *     ULocale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US"
+ * </pre>
+ *
+ * <li>Case is normalized. Language is normalized to lower case,
+ * script to title case, country to upper case, variant to upper case,
+ * and extensions to lower case.
+ *
+ * </ul>
+ *
+ * <p>This implements the 'Language-Tag' production of BCP 47, and so
+ * supports legacy language tags (marked as ?Type: grandfathered? in BCP 47)
+ * (regular and irregular) as well as private use language tags.
+ *
+ * <p>Stand-alone private use tags are represented as empty language and extension 'x-whatever',
+ * and legacy tags are converted to their canonical replacements where they exist.
+ *
+ * <p>Note that a few legacy tags have no modern replacement;
+ * these will be converted using the fallback described in
+ * the first paragraph, so some information might be lost.
+ *
+ * <p><b>Note</b>: there is no guarantee that <code>toLanguageTag</code>
+ * and <code>forLanguageTag</code> will round-trip.
+ *
+ * @param languageTag the language tag
+ * @return The locale that best represents the language tag.
+ * @throws java.lang.NullPointerException if <code>languageTag</code> is <code>null</code>
+ * @see #toLanguageTag()
+ * @see android.icu.util.ULocale.Builder#setLanguageTag(String)
+ */
+
+public static android.icu.util.ULocale forLanguageTag(java.lang.String languageTag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword (legacy key, or BCP 47 Unicode locale
+ * extension key) to the equivalent BCP 47 Unicode locale extension key.
+ * For example, BCP 47 Unicode locale extension key "co" is returned for
+ * the input keyword "collation".
+ * <p>
+ * When the specified keyword is unknown, but satisfies the BCP syntax,
+ * then the lower-case version of the input keyword will be returned.
+ * For example,
+ * <code>toUnicodeLocaleKey("ZZ")</code> returns "zz".
+ *
+ * @param keyword       the input locale keyword (either legacy key
+ *                      such as "collation" or BCP 47 Unicode locale extension
+ *                      key such as "co").
+ * @return              the well-formed BCP 47 Unicode locale extension key,
+ *                      or null if the specified locale keyword cannot be mapped
+ *                      to a well-formed BCP 47 Unicode locale extension key.
+ * @see #toLegacyKey(String)
+ */
+
+public static java.lang.String toUnicodeLocaleKey(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword value (legacy type, or BCP 47
+ * Unicode locale extension type) to the well-formed BCP 47 Unicode locale
+ * extension type for the specified keyword (category). For example, BCP 47
+ * Unicode locale extension type "phonebk" is returned for the input
+ * keyword value "phonebook", with the keyword "collation" (or "co").
+ * <p>
+ * When the specified keyword is not recognized, but the specified value
+ * satisfies the syntax of the BCP 47 Unicode locale extension type,
+ * or when the specified keyword allows 'variable' type and the specified
+ * value satisfies the syntax, the lower-case version of the input value
+ * will be returned. For example,
+ * <code>toUnicodeLocaleType("Foo", "Bar")</code> returns "bar",
+ * <code>toUnicodeLocaleType("variableTop", "00A4")</code> returns "00a4".
+ *
+ * @param keyword       the locale keyword (either legacy key such as
+ *                      "collation" or BCP 47 Unicode locale extension
+ *                      key such as "co").
+ * @param value         the locale keyword value (either legacy type
+ *                      such as "phonebook" or BCP 47 Unicode locale extension
+ *                      type such as "phonebk").
+ * @return              the well-formed BCP47 Unicode locale extension type,
+ *                      or null if the locale keyword value cannot be mapped to
+ *                      a well-formed BCP 47 Unicode locale extension type.
+ * @see #toLegacyType(String, String)
+ */
+
+public static java.lang.String toUnicodeLocaleType(java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword (BCP 47 Unicode locale extension key, or
+ * legacy key) to the legacy key. For example, legacy key "collation" is
+ * returned for the input BCP 47 Unicode locale extension key "co".
+ *
+ * @param keyword       the input locale keyword (either BCP 47 Unicode locale
+ *                      extension key or legacy key).
+ * @return              the well-formed legacy key, or null if the specified
+ *                      keyword cannot be mapped to a well-formed legacy key.
+ * @see #toUnicodeLocaleKey(String)
+ */
+
+public static java.lang.String toLegacyKey(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword value (BCP 47 Unicode locale extension type,
+ * or legacy type or type alias) to the canonical legacy type. For example,
+ * the legacy type "phonebook" is returned for the input BCP 47 Unicode
+ * locale extension type "phonebk" with the keyword "collation" (or "co").
+ * <p>
+ * When the specified keyword is not recognized, but the specified value
+ * satisfies the syntax of legacy key, or when the specified keyword
+ * allows 'variable' type and the specified value satisfies the syntax,
+ * the lower-case version of the input value will be returned.
+ * For example,
+ * <code>toLegacyType("Foo", "Bar")</code> returns "bar",
+ * <code>toLegacyType("vt", "00A4")</code> returns "00a4".
+ *
+ * @param keyword       the locale keyword (either legacy keyword such as
+ *                      "collation" or BCP 47 Unicode locale extension
+ *                      key such as "co").
+ * @param value         the locale keyword value (either BCP 47 Unicode locale
+ *                      extension type such as "phonebk" or legacy keyword value
+ *                      such as "phonebook").
+ * @return              the well-formed legacy type, or null if the specified
+ *                      keyword value cannot be mapped to a well-formed legacy
+ *                      type.
+ * @see #toUnicodeLocaleType(String, String)
+ */
+
+public static java.lang.String toLegacyType(java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale CANADA;
+static { CANADA = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale CANADA_FRENCH;
+static { CANADA_FRENCH = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale CHINA;
+static { CHINA = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale CHINESE;
+static { CHINESE = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale ENGLISH;
+static { ENGLISH = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale FRANCE;
+static { FRANCE = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale FRENCH;
+static { FRENCH = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale GERMAN;
+static { GERMAN = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale GERMANY;
+static { GERMANY = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale ITALIAN;
+static { ITALIAN = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale ITALY;
+static { ITALY = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale JAPAN;
+static { JAPAN = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale JAPANESE;
+static { JAPANESE = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale KOREA;
+static { KOREA = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale KOREAN;
+static { KOREAN = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale PRC;
+static { PRC = null; }
+
+/**
+ * The key for the private use locale extension ('x').
+ *
+ * @see #getExtension(char)
+ * @see android.icu.util.ULocale.Builder#setExtension(char, String)
+ */
+
+public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
+
+/**
+ * The root ULocale.
+ */
+
+public static final android.icu.util.ULocale ROOT;
+static { ROOT = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale SIMPLIFIED_CHINESE;
+static { SIMPLIFIED_CHINESE = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale TAIWAN;
+static { TAIWAN = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale TRADITIONAL_CHINESE;
+static { TRADITIONAL_CHINESE = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale UK;
+static { UK = null; }
+
+/**
+ * The key for Unicode locale extension ('u').
+ *
+ * @see #getExtension(char)
+ * @see android.icu.util.ULocale.Builder#setExtension(char, String)
+ */
+
+public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale US;
+static { US = null; }
+/**
+ * Types for {@link android.icu.util.ULocale#getAvailableLocalesByType ULocale#getAvailableLocalesByType}
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum AvailableType {
+/**
+ * Locales that return data when passed to ICU APIs,
+ * but not including legacy or alias locales.
+ */
+
+DEFAULT,
+/**
+ * Legacy or alias locales that return data when passed to ICU APIs.
+ * Examples of supported legacy or alias locales:
+ *
+ * <ul>
+ * <li>iw (alias to he)
+ * <li>mo (alias to ro)
+ * <li>zh_CN (alias to zh_Hans_CN)
+ * <li>sr_BA (alias to sr_Cyrl_BA)
+ * <li>ars (alias to ar_SA)
+ * </ul>
+ *
+ * The locales in this set are disjoint from the ones in
+ * DEFAULT. To get both sets at the same time, use
+ * WITH_LEGACY_ALIASES.
+ */
+
+ONLY_LEGACY_ALIASES,
+/**
+ * The union of the locales in DEFAULT and ONLY_LEGACY_ALIASES.
+ */
+
+WITH_LEGACY_ALIASES;
+}
+
+/**
+ * <code>Builder</code> is used to build instances of <code>ULocale</code>
+ * from values configured by the setters.  Unlike the <code>ULocale</code>
+ * constructors, the <code>Builder</code> checks if a value configured by a
+ * setter satisfies the syntax requirements defined by the <code>ULocale</code>
+ * class.  A <code>ULocale</code> object created by a <code>Builder</code> is
+ * well-formed and can be transformed to a well-formed IETF BCP 47 language tag
+ * without losing information.
+ *
+ * <p><b>Note:</b> The <code>ULocale</code> class does not provide any
+ * syntactic restrictions on variant, while BCP 47 requires each variant
+ * subtag to be 5 to 8 alphanumerics or a single numeric followed by 3
+ * alphanumerics.  The method <code>setVariant</code> throws
+ * <code>IllformedLocaleException</code> for a variant that does not satisfy
+ * this restriction. If it is necessary to support such a variant, use a
+ * ULocale constructor.  However, keep in mind that a <code>ULocale</code>
+ * object created this way might lose the variant information when
+ * transformed to a BCP 47 language tag.
+ *
+ * <p>The following example shows how to create a <code>Locale</code> object
+ * with the <code>Builder</code>.
+ * <blockquote>
+ * <pre>
+ *     ULocale aLocale = new Builder().setLanguage("sr").setScript("Latn").setRegion("RS").build();
+ * </pre>
+ * </blockquote>
+ *
+ * <p>Builders can be reused; <code>clear()</code> resets all
+ * fields to their default values.
+ *
+ * @see android.icu.util.ULocale#toLanguageTag()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Builder {
+
+/**
+ * Constructs an empty Builder. The default value of all
+ * fields, extensions, and private use information is the
+ * empty string.
+ */
+
+public Builder() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the <code>Builder</code> to match the provided
+ * <code>locale</code>.  Existing state is discarded.
+ *
+ * <p>All fields of the locale must be well-formed, see {@link java.util.Locale Locale}.
+ *
+ * <p>Locales with any ill-formed fields cause
+ * <code>IllformedLocaleException</code> to be thrown.
+ *
+ * @param locale the locale
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>locale</code> has
+ * any ill-formed fields.
+ * @throws java.lang.NullPointerException if <code>locale</code> is null.
+ */
+
+public android.icu.util.ULocale.Builder setLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the Builder to match the provided IETF BCP 47
+ * language tag.  Discards the existing state.  Null and the
+ * empty string cause the builder to be reset, like {@link
+ * #clear}.  Legacy tags (see {@link android.icu.util.ULocale#forLanguageTag  }) are converted to their canonical
+ * form before being processed.  Otherwise, the language tag
+ * must be well-formed (see {@link android.icu.util.ULocale ULocale}) or an exception is
+ * thrown (unlike <code>ULocale.forLanguageTag</code>, which
+ * just discards ill-formed and following portions of the
+ * tag).
+ *
+ * @param languageTag the language tag
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>languageTag</code> is ill-formed
+ * @see android.icu.util.ULocale#forLanguageTag(String)
+ */
+
+public android.icu.util.ULocale.Builder setLanguageTag(java.lang.String languageTag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the language.  If <code>language</code> is the empty string or
+ * null, the language in this <code>Builder</code> is removed.  Otherwise,
+ * the language must be <a href="./Locale.html#def_language">well-formed</a>
+ * or an exception is thrown.
+ *
+ * <p>The typical language value is a two or three-letter language
+ * code as defined in ISO639.
+ *
+ * @param language the language
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>language</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setLanguage(java.lang.String language) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the script. If <code>script</code> is null or the empty string,
+ * the script in this <code>Builder</code> is removed.
+ * Otherwise, the script must be well-formed or an exception is thrown.
+ *
+ * <p>The typical script value is a four-letter script code as defined by ISO 15924.
+ *
+ * @param script the script
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>script</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setScript(java.lang.String script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the region.  If region is null or the empty string, the region
+ * in this <code>Builder</code> is removed.  Otherwise,
+ * the region must be well-formed or an exception is thrown.
+ *
+ * <p>The typical region value is a two-letter ISO 3166 code or a
+ * three-digit UN M.49 area code.
+ *
+ * <p>The country value in the <code>Locale</code> created by the
+ * <code>Builder</code> is always normalized to upper case.
+ *
+ * @param region the region
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>region</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setRegion(java.lang.String region) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the variant.  If variant is null or the empty string, the
+ * variant in this <code>Builder</code> is removed.  Otherwise, it
+ * must consist of one or more well-formed subtags, or an exception is thrown.
+ *
+ * <p><b>Note:</b> This method checks if <code>variant</code>
+ * satisfies the IETF BCP 47 variant subtag's syntax requirements,
+ * and normalizes the value to lowercase letters.  However,
+ * the <code>ULocale</code> class does not impose any syntactic
+ * restriction on variant.  To set such a variant,
+ * use a ULocale constructor.
+ *
+ * @param variant the variant
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>variant</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setVariant(java.lang.String variant) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the extension for the given key. If the value is null or the
+ * empty string, the extension is removed.  Otherwise, the extension
+ * must be well-formed or an exception is thrown.
+ *
+ * <p><b>Note:</b> The key {@link android.icu.util.ULocale#UNICODE_LOCALE_EXTENSION  UNICODE_LOCALE_EXTENSION} ('u') is used for the Unicode locale extension.
+ * Setting a value for this key replaces any existing Unicode locale key/type
+ * pairs with those defined in the extension.
+ *
+ * <p><b>Note:</b> The key {@link android.icu.util.ULocale#PRIVATE_USE_EXTENSION  PRIVATE_USE_EXTENSION} ('x') is used for the private use code. To be
+ * well-formed, the value for this key needs only to have subtags of one to
+ * eight alphanumeric characters, not two to eight as in the general case.
+ *
+ * @param key the extension key
+ * @param value the extension value
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>key</code> is illegal
+ * or <code>value</code> is ill-formed
+ * @see #setUnicodeLocaleKeyword(String, String)
+ */
+
+public android.icu.util.ULocale.Builder setExtension(char key, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Unicode locale keyword type for the given key.  If the type
+ * is null, the Unicode keyword is removed.  Otherwise, the key must be
+ * non-null and both key and type must be well-formed or an exception
+ * is thrown.
+ *
+ * <p>Keys and types are converted to lower case.
+ *
+ * <p><b>Note</b>:Setting the 'u' extension via {@link #setExtension}
+ * replaces all Unicode locale keywords with those defined in the
+ * extension.
+ *
+ * @param key the Unicode locale key
+ * @param type the Unicode locale type
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>key</code> or <code>type</code>
+ * is ill-formed
+ * @throws java.lang.NullPointerException if <code>key</code> is null
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder setUnicodeLocaleKeyword(java.lang.String key, java.lang.String type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a unicode locale attribute, if not already present, otherwise
+ * has no effect.  The attribute must not be null and must be well-formed
+ * or an exception is thrown.
+ *
+ * @param attribute the attribute
+ * @return This builder.
+ * @throws java.lang.NullPointerException if <code>attribute</code> is null
+ * @throws android.icu.util.IllformedLocaleException if <code>attribute</code> is ill-formed
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder addUnicodeLocaleAttribute(java.lang.String attribute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes a unicode locale attribute, if present, otherwise has no
+ * effect.  The attribute must not be null and must be well-formed
+ * or an exception is thrown.
+ *
+ * <p>Attribute comparision for removal is case-insensitive.
+ *
+ * @param attribute the attribute
+ * @return This builder.
+ * @throws java.lang.NullPointerException if <code>attribute</code> is null
+ * @throws android.icu.util.IllformedLocaleException if <code>attribute</code> is ill-formed
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder removeUnicodeLocaleAttribute(java.lang.String attribute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the builder to its initial, empty state.
+ *
+ * @return this builder
+ */
+
+public android.icu.util.ULocale.Builder clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the extensions to their initial, empty state.
+ * Language, script, region and variant are unchanged.
+ *
+ * @return this builder
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder clearExtensions() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>ULocale</code> created from the fields set
+ * on this builder.
+ *
+ * @return a new Locale
+ */
+
+public android.icu.util.ULocale build() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Enum for locale categories. These locale categories are used to get/set the default locale for
+ * the specific functionality represented by the category.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Category {
+/**
+ * Category used to represent the default locale for displaying user interfaces.
+ */
+
+DISPLAY,
+/**
+ * Category used to represent the default locale for formatting date, number and/or currency.
+ */
+
+FORMAT;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/UniversalTimeScale.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/UniversalTimeScale.java
new file mode 100644
index 0000000..c3ee75c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/UniversalTimeScale.java
@@ -0,0 +1,327 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *********************************************************************************
+ * Copyright (C) 2004-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                  *
+ *********************************************************************************
+ *
+ */
+
+
+package android.icu.util;
+
+import android.icu.math.BigDecimal;
+
+/** 
+ * There are quite a few different conventions for binary datetime, depending on different
+ * platforms and protocols. Some of these have severe drawbacks. For example, people using
+ * Unix time (seconds since Jan 1, 1970, usually in a 32-bit integer)
+ * think that they are safe until near the year 2038.
+ * But cases can and do arise where arithmetic manipulations causes serious problems. Consider
+ * the computation of the average of two datetimes, for example: if one calculates them with
+ * <code>averageTime = (time1 + time2)/2</code>, there will be overflow even with dates
+ * beginning in 2004. Moreover, even if these problems don't occur, there is the issue of
+ * conversion back and forth between different systems.
+ *
+ * <p>Binary datetimes differ in a number of ways: the datatype, the unit,
+ * and the epoch (origin). We refer to these as time scales.
+ *
+ * <p>ICU implements a universal time scale that is similar to the
+ * .NET framework's System.DateTime. The universal time scale is a
+ * 64-bit integer that holds ticks since midnight, January 1st, 0001.
+ * (One tick is 100 nanoseconds.)
+ * Negative values are supported. This has enough range to guarantee that
+ * calculations involving dates around the present are safe.
+ *
+ * <p>The universal time scale always measures time according to the
+ * proleptic Gregorian calendar. That is, the Gregorian calendar's
+ * leap year rules are used for all times, even before 1582 when it was
+ * introduced. (This is different from the default ICU calendar which
+ * switches from the Julian to the Gregorian calendar in 1582.
+ * See GregorianCalendar.setGregorianChange() and ucal_setGregorianChange().)
+ *
+ * ICU provides conversion functions to and from all other major time
+ * scales, allowing datetimes in any time scale to be converted to the
+ * universal time scale, safely manipulated, and converted back to any other
+ * datetime time scale.
+ *
+ * <p>For more details and background, see the
+ * <a href="http://www.icu-project.org/userguide/universalTimeScale.html">Universal Time Scale</a>
+ * chapter in the ICU User Guide.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UniversalTimeScale {
+
+private UniversalTimeScale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>long</code> datetime from the given time scale to the universal time scale.
+ *
+ * @param otherTime The <code>long</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static long from(long otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>double</code> datetime from the given time scale to the universal time scale.
+ * All calculations are done using <code>BigDecimal</code> to guarantee that the value
+ * does not go out of range.
+ *
+ * @param otherTime The <code>double</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static android.icu.math.BigDecimal bigDecimalFrom(double otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>long</code> datetime from the given time scale to the universal time scale.
+ * All calculations are done using <code>BigDecimal</code> to guarantee that the value
+ * does not go out of range.
+ *
+ * @param otherTime The <code>long</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static android.icu.math.BigDecimal bigDecimalFrom(long otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>BigDecimal</code> datetime from the given time scale to the universal time scale.
+ * All calculations are done using <code>BigDecimal</code> to guarantee that the value
+ * does not go out of range.
+ *
+ * @param otherTime The <code>BigDecimal</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static android.icu.math.BigDecimal bigDecimalFrom(android.icu.math.BigDecimal otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a datetime from the universal time scale stored as a <code>BigDecimal</code> to a
+ * <code>long</code> in the given time scale.
+ *
+ * Since this calculation requires a divide, we must round. The straight forward
+ * way to round by adding half of the divisor will push the sum out of range for values
+ * within have the divisor of the limits of the precision of a <code>long</code>. To get around this, we do
+ * the rounding like this:
+ *
+ * <p><code>
+ * (universalTime - units + units/2) / units + 1
+ * </code>
+ *
+ * <p>
+ * (i.e. we subtract units first to guarantee that we'll still be in range when we
+ * add <code>units/2</code>. We then need to add one to the quotent to make up for the extra subtraction.
+ * This simplifies to:
+ *
+ * <p><code>
+ * (universalTime - units/2) / units - 1
+ * </code>
+ *
+ * <p>
+ * For negative values to round away from zero, we need to flip the signs:
+ *
+ * <p><code>
+ * (universalTime + units/2) / units + 1
+ * </code>
+ *
+ * <p>
+ * Since we also need to subtract the epochOffset, we fold the <code>+/- 1</code>
+ * into the offset value. (i.e. <code>epochOffsetP1</code>, <code>epochOffsetM1</code>.)
+ *
+ * @param universalTime The datetime in the universal time scale
+ * @param timeScale The time scale to convert to
+ *
+ * @return The datetime converted to the given time scale
+ */
+
+public static long toLong(long universalTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a datetime from the universal time scale to a <code>BigDecimal</code> in the given time scale.
+ *
+ * @param universalTime The datetime in the universal time scale
+ * @param timeScale The time scale to convert to
+ *
+ * @return The datetime converted to the given time scale
+ */
+
+public static android.icu.math.BigDecimal toBigDecimal(long universalTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a datetime from the universal time scale to a <code>BigDecimal</code> in the given time scale.
+ *
+ * @param universalTime The datetime in the universal time scale
+ * @param timeScale The time scale to convert to
+ *
+ * @return The datetime converted to the given time scale
+ */
+
+public static android.icu.math.BigDecimal toBigDecimal(android.icu.math.BigDecimal universalTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a value associated with a particular time scale.
+ *
+ * @param scale - the time scale
+ * @param value - a constant representing the value to get
+ *
+ * @return - the value.
+ */
+
+public static long getTimeScaleValue(int scale, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Used in DB2. Data is a <code>?unknown?</code>. Value
+ * is days since December 31, 1899.
+ */
+
+public static final int DB2_TIME = 8; // 0x8
+
+/**
+ * Used in the .NET framework's <code>System.DateTime</code> structure.
+ * Data is a <code>long</code>. Value is ticks (1 tick == 100 nanoseconds) since January 1, 0001.
+ */
+
+public static final int DOTNET_DATE_TIME = 4; // 0x4
+
+/**
+ * The constant used to select the epoch plus one value
+ * for a time scale.
+ *
+ * NOTE: This is an internal value. DO NOT USE IT. May not
+ * actually be equal to the epoch offset value plus one.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int EPOCH_OFFSET_PLUS_1_VALUE = 6; // 0x6
+
+/**
+ * The constant used to select the epoch offset value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int EPOCH_OFFSET_VALUE = 1; // 0x1
+
+/**
+ * Used in Excel. Data is a <code>?unknown?</code>. Value
+ * is days since December 31, 1899.
+ */
+
+public static final int EXCEL_TIME = 7; // 0x7
+
+/**
+ * The constant used to select the maximum from value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int FROM_MAX_VALUE = 3; // 0x3
+
+/**
+ * The constant used to select the minimum from value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int FROM_MIN_VALUE = 2; // 0x2
+
+/**
+ * Used in the ICU4C. Data is a <code>double</code>. Value
+ * is milliseconds since January 1, 1970.
+ */
+
+public static final int ICU4C_TIME = 2; // 0x2
+
+/**
+ * Used in the JDK. Data is a <code>long</code>. Value
+ * is milliseconds since January 1, 1970.
+ */
+
+public static final int JAVA_TIME = 0; // 0x0
+
+/**
+ * Used in older Macintosh systems. Data is an <code>int</code>. Value
+ * is seconds since January 1, 1904.
+ */
+
+public static final int MAC_OLD_TIME = 5; // 0x5
+
+/**
+ * Used in the JDK. Data is a <code>double</code>. Value
+ * is milliseconds since January 1, 2001.
+ */
+
+public static final int MAC_TIME = 6; // 0x6
+
+/**
+ * This is the first unused time scale value.
+ *
+ * @deprecated ICU 59
+ */
+
+@Deprecated public static final int MAX_SCALE = 10; // 0xa
+
+/**
+ * The constant used to select the maximum to value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int TO_MAX_VALUE = 5; // 0x5
+
+/**
+ * The constant used to select the minimum to value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int TO_MIN_VALUE = 4; // 0x4
+
+/**
+ * The constant used to select the units value
+ * for a time scale.
+ */
+
+public static final int UNITS_VALUE = 0; // 0x0
+
+/**
+ * Data is a <code>long</code>. Value is microseconds since January 1, 1970.
+ * Similar to Unix time (linear value from 1970) and struct timeval
+ * (microseconds resolution).
+ */
+
+public static final int UNIX_MICROSECONDS_TIME = 9; // 0x9
+
+/**
+ * Used in Unix systems. Data is an <code>int</code> or a <code>long</code>. Value
+ * is seconds since January 1, 1970.
+ */
+
+public static final int UNIX_TIME = 1; // 0x1
+
+/**
+ * Used in Windows for file times. Data is a <code>long</code>. Value
+ * is ticks (1 tick == 100 nanoseconds) since January 1, 1601.
+ */
+
+public static final int WINDOWS_FILE_TIME = 3; // 0x3
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ValueIterator.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ValueIterator.java
new file mode 100644
index 0000000..63aeff4
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/ValueIterator.java
@@ -0,0 +1,107 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*/
+
+
+package android.icu.util;
+
+
+/**
+ * <p>Interface for enabling iteration over sets of &lt;int, Object&gt;, where
+ * int is the sorted integer index in ascending order, and Object its
+ * associated value.
+ * <p>The ValueIterator allows iterations over integer indexes in the range
+ * of Integer.MIN_VALUE to Integer.MAX_VALUE inclusive. Implementations of
+ * ValueIterator should specify their own maximum subrange within the above
+ * range that is meaningful to its applications.
+ * <p>Most implementations will be created by factory methods, such as the
+ * character name iterator in UCharacter.getNameIterator. See example below.
+ *
+ * Example of use:<br>
+ * <pre>
+ * ValueIterator iterator = UCharacter.getNameIterator();
+ * ValueIterator.Element result = new ValueIterator.Element();
+ * iterator.setRange(UCharacter.MIN_VALUE, UCharacter.MAX_VALUE);
+ * while (iterator.next(result)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(result.integer) +
+ *                        " has the character name " + (String)result.value);
+ * }
+ * </pre>
+ * @author synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface ValueIterator {
+
+/**
+ * <p>Returns the next result for this iteration and returns
+ * true if we are not at the end of the iteration, false otherwise.
+ * <p>If this returns a false, the contents of elements will not
+ * be updated.
+ * @param element for storing the result index and value
+ * @return true if we are not at the end of the iteration, false otherwise.
+ * @see android.icu.util.ValueIterator.Element
+ */
+
+public boolean next(android.icu.util.ValueIterator.Element element);
+
+/**
+ * <p>Resets the iterator to start iterating from the integer index
+ * Integer.MIN_VALUE or X if a setRange(X, Y) has been called previously.
+ */
+
+public void reset();
+
+/**
+ * <p>Restricts the range of integers to iterate and resets the iteration
+ * to begin at the index argument start.
+ * <p>If setRange(start, end) is not performed before next(element) is
+ * called, the iteration will start from the integer index
+ * Integer.MIN_VALUE and end at Integer.MAX_VALUE.
+ * <p>
+ * If this range is set outside the meaningful range specified by the
+ * implementation, next(element) will always return false.
+ *
+ * @param start first integer in the range to iterate
+ * @param limit one more than the last integer in the range
+ * @exception java.lang.IllegalArgumentException thrown when attempting to set an
+ *            illegal range. E.g limit &lt;= start
+ */
+
+public void setRange(int start, int limit);
+/**
+ * <p>The return result container of each iteration. Stores the next
+ * integer index and its associated value Object.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Element {
+
+/**
+ * Empty default constructor to make javadoc happy
+ */
+
+public Element() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Integer index of the current iteration
+ */
+
+public int integer;
+
+/**
+ * Gets the Object value associated with the integer index.
+ */
+
+public java.lang.Object value;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/VersionInfo.java b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/VersionInfo.java
new file mode 100644
index 0000000..085358b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/module-lib/i18n.module.public.api_stub_sources/android/icu/util/VersionInfo.java
@@ -0,0 +1,401 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * Class to store version numbers of the form major.minor.milli.micro.
+ * @author synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class VersionInfo implements java.lang.Comparable<android.icu.util.VersionInfo> {
+
+private VersionInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * @param version version String in the format of "major.minor.milli.micro"
+ *                or "major.minor.milli" or "major.minor" or "major",
+ *                where major, minor, milli, micro are non-negative numbers
+ *                &lt;= 255. If the trailing version numbers are
+ *                not specified they are taken as 0s. E.g. Version "3.1" is
+ *                equivalent to "3.1.0.0".
+ * @return an instance of VersionInfo with the argument version.
+ * @exception java.lang.IllegalArgumentException when the argument version
+ *                is not in the right format
+ */
+
+public static android.icu.util.VersionInfo getInstance(java.lang.String version) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * @param major major version, non-negative number &lt;= 255.
+ * @param minor minor version, non-negative number &lt;= 255.
+ * @param milli milli version, non-negative number &lt;= 255.
+ * @param micro micro version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major, int minor, int milli, int micro) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * Equivalent to getInstance(major, minor, milli, 0).
+ * @param major major version, non-negative number &lt;= 255.
+ * @param minor minor version, non-negative number &lt;= 255.
+ * @param milli milli version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are
+ *                                     negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major, int minor, int milli) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * Equivalent to getInstance(major, minor, 0, 0).
+ * @param major major version, non-negative number &lt;= 255.
+ * @param minor minor version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are
+ *                                     negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major, int minor) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * Equivalent to getInstance(major, 0, 0, 0).
+ * @param major major version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are
+ *                                     negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the String representative of VersionInfo in the format of
+ * "major.minor.milli.micro"
+ * @return String representative of VersionInfo
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the major version number
+ * @return the major version number
+ */
+
+public int getMajor() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minor version number
+ * @return the minor version number
+ */
+
+public int getMinor() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the milli version number
+ * @return the milli version number
+ */
+
+public int getMilli() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the micro version number
+ * @return the micro version number
+ */
+
+public int getMicro() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if this version information is equals to the argument version
+ * @param other object to be compared
+ * @return true if other is equals to this object's version information,
+ *         false otherwise
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hash code value for this set.
+ *
+ * @return the hash code value for this set.
+ * @see java.lang.Object#hashCode()
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares other with this VersionInfo.
+ * @param other VersionInfo to be compared
+ * @return 0 if the argument is a VersionInfo object that has version
+ *           information equals to this object.
+ *           Less than 0 if the argument is a VersionInfo object that has
+ *           version information greater than this object.
+ *           Greater than 0 if the argument is a VersionInfo object that
+ *           has version information less than this object.
+ */
+
+public int compareTo(android.icu.util.VersionInfo other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ICU4J current release version
+ */
+
+public static final android.icu.util.VersionInfo ICU_VERSION;
+static { ICU_VERSION = null; }
+
+/**
+ * Collation builder code version.
+ * When this is different, the same tailoring might result
+ * in assigning different collation elements to code points.
+ * This value may change in subsequent releases of ICU.
+ */
+
+public static final android.icu.util.VersionInfo UCOL_BUILDER_VERSION;
+static { UCOL_BUILDER_VERSION = null; }
+
+/**
+ * Collation runtime version (sort key generator, string comparisons).
+ * If the version is different, sort keys for the same string could be different.
+ * This value may change in subsequent releases of ICU.
+ */
+
+public static final android.icu.util.VersionInfo UCOL_RUNTIME_VERSION;
+static { UCOL_RUNTIME_VERSION = null; }
+
+/**
+ * Unicode 10.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_10_0;
+static { UNICODE_10_0 = null; }
+
+/**
+ * Unicode 11.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_11_0;
+static { UNICODE_11_0 = null; }
+
+/**
+ * Unicode 12.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_12_0;
+static { UNICODE_12_0 = null; }
+
+/**
+ * Unicode 12.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_12_1;
+static { UNICODE_12_1 = null; }
+
+/**
+ * Unicode 13.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_13_0;
+static { UNICODE_13_0 = null; }
+
+/**
+ * Unicode 1.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_0;
+static { UNICODE_1_0 = null; }
+
+/**
+ * Unicode 1.0.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_0_1;
+static { UNICODE_1_0_1 = null; }
+
+/**
+ * Unicode 1.1.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_1_0;
+static { UNICODE_1_1_0 = null; }
+
+/**
+ * Unicode 1.1.5 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_1_5;
+static { UNICODE_1_1_5 = null; }
+
+/**
+ * Unicode 2.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_0;
+static { UNICODE_2_0 = null; }
+
+/**
+ * Unicode 2.1.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_2;
+static { UNICODE_2_1_2 = null; }
+
+/**
+ * Unicode 2.1.5 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_5;
+static { UNICODE_2_1_5 = null; }
+
+/**
+ * Unicode 2.1.8 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_8;
+static { UNICODE_2_1_8 = null; }
+
+/**
+ * Unicode 2.1.9 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_9;
+static { UNICODE_2_1_9 = null; }
+
+/**
+ * Unicode 3.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_0;
+static { UNICODE_3_0 = null; }
+
+/**
+ * Unicode 3.0.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_0_1;
+static { UNICODE_3_0_1 = null; }
+
+/**
+ * Unicode 3.1.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_1_0;
+static { UNICODE_3_1_0 = null; }
+
+/**
+ * Unicode 3.1.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_1_1;
+static { UNICODE_3_1_1 = null; }
+
+/**
+ * Unicode 3.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_2;
+static { UNICODE_3_2 = null; }
+
+/**
+ * Unicode 4.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_4_0;
+static { UNICODE_4_0 = null; }
+
+/**
+ * Unicode 4.0.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_4_0_1;
+static { UNICODE_4_0_1 = null; }
+
+/**
+ * Unicode 4.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_4_1;
+static { UNICODE_4_1 = null; }
+
+/**
+ * Unicode 5.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_5_0;
+static { UNICODE_5_0 = null; }
+
+/**
+ * Unicode 5.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_5_1;
+static { UNICODE_5_1 = null; }
+
+/**
+ * Unicode 5.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_5_2;
+static { UNICODE_5_2 = null; }
+
+/**
+ * Unicode 6.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_0;
+static { UNICODE_6_0 = null; }
+
+/**
+ * Unicode 6.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_1;
+static { UNICODE_6_1 = null; }
+
+/**
+ * Unicode 6.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_2;
+static { UNICODE_6_2 = null; }
+
+/**
+ * Unicode 6.3 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_3;
+static { UNICODE_6_3 = null; }
+
+/**
+ * Unicode 7.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_7_0;
+static { UNICODE_7_0 = null; }
+
+/**
+ * Unicode 8.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_8_0;
+static { UNICODE_8_0 = null; }
+
+/**
+ * Unicode 9.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_9_0;
+static { UNICODE_9_0 = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/public/i18n.module.public.api_annotations.zip b/mainline/i18n/sdk/sdk_library/public/i18n.module.public.api_annotations.zip
new file mode 100644
index 0000000..15cb0ec
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/public/i18n.module.public.api_annotations.zip
Binary files differ
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api-removed.txt b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api-stubs.jar b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api-stubs.jar
new file mode 100644
index 0000000..3fef73d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api-stubs.jar
Binary files differ
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api.txt b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_annotations.zip b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_annotations.zip
new file mode 100644
index 0000000..15cb0ec
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_annotations.zip
Binary files differ
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacter.java
new file mode 100644
index 0000000..94bd6c6
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacter.java
@@ -0,0 +1,6609 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+import android.icu.text.BreakIterator;
+import android.icu.util.RangeValueIterator;
+import android.icu.util.ValueIterator;
+import android.icu.lang.UCharacterEnums.ECharacterDirection;
+import android.icu.lang.UCharacterEnums.ECharacterCategory;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.lang.Character}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>The UCharacter class provides extensions to the {@link java.lang.Character} class.
+ * These extensions provide support for more Unicode properties.
+ * Each ICU release supports the latest version of Unicode available at that time.
+ *
+ * <p>For some time before Java 5 added support for supplementary Unicode code points,
+ * The ICU UCharacter class and many other ICU classes already supported them.
+ * Some UCharacter methods and constants were widened slightly differently than
+ * how the Character class methods and constants were widened later.
+ * In particular, {@link java.lang.Character#MAX_VALUE Character#MAX_VALUE} is still a char with the value U+FFFF,
+ * while the {@link android.icu.lang.UCharacter#MAX_VALUE UCharacter#MAX_VALUE} is an int with the value U+10FFFF.
+ *
+ * <p>Code points are represented in these API using ints. While it would be
+ * more convenient in Java to have a separate primitive datatype for them,
+ * ints suffice in the meantime.
+ *
+ * <p>Aside from the additions for UTF-16 support, and the updated Unicode
+ * properties, the main differences between UCharacter and Character are:
+ * <ul>
+ * <li> UCharacter is not designed to be a char wrapper and does not have
+ *      APIs to which involves management of that single char.<br>
+ *      These include:
+ *      <ul>
+ *        <li> char charValue(),
+ *        <li> int compareTo(java.lang.Character, java.lang.Character), etc.
+ *      </ul>
+ * <li> UCharacter does not include Character APIs that are deprecated, nor
+ *      does it include the Java-specific character information, such as
+ *      boolean isJavaIdentifierPart(char ch).
+ * <li> Character maps characters 'A' - 'Z' and 'a' - 'z' to the numeric
+ *      values '10' - '35'. UCharacter also does this in digit and
+ *      getNumericValue, to adhere to the java semantics of these
+ *      methods.  New methods unicodeDigit, and
+ *      getUnicodeNumericValue do not treat the above code points
+ *      as having numeric values.  This is a semantic change from ICU4J 1.3.1.
+ * </ul>
+ * <p>
+ * In addition to Java compatibility functions, which calculate derived properties,
+ * this API provides low-level access to the Unicode Character Database.
+ * <p>
+ * Unicode assigns each code point (not just assigned character) values for
+ * many properties.
+ * Most of them are simple boolean flags, or constants from a small enumerated list.
+ * For some properties, values are strings or other relatively more complex types.
+ * <p>
+ * For more information see
+ * <a href="http://www.unicode/org/ucd/">"About the Unicode Character Database"</a>
+ * (http://www.unicode.org/ucd/)
+ * and the <a href="http://www.icu-project.org/userguide/properties.html">ICU
+ * User Guide chapter on Properties</a>
+ * (http://www.icu-project.org/userguide/properties.html).
+ * <p>
+ * There are also functions that provide easy migration from C/POSIX functions
+ * like isblank(). Their use is generally discouraged because the C/POSIX
+ * standards do not define their semantics beyond the ASCII range, which means
+ * that different implementations exhibit very different behavior.
+ * Instead, Unicode properties should be used directly.
+ * <p>
+ * There are also only a few, broad C/POSIX character classes, and they tend
+ * to be used for conflicting purposes. For example, the "isalpha()" class
+ * is sometimes used to determine word boundaries, while a more sophisticated
+ * approach would at least distinguish initial letters from continuation
+ * characters (the latter including combining marks).
+ * (In ICU, BreakIterator is the most sophisticated API for word boundaries.)
+ * Another example: There is no "istitle()" class for titlecase characters.
+ * <p>
+ * ICU 3.4 and later provides API access for all twelve C/POSIX character classes.
+ * ICU implements them according to the Standard Recommendations in
+ * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions
+ * (http://www.unicode.org/reports/tr18/#Compatibility_Properties).
+ * <p>
+ * API access for C/POSIX character classes is as follows:
+ * <pre>{@code
+ * - alpha:     isUAlphabetic(c) or hasBinaryProperty(c, UProperty.ALPHABETIC)
+ * - lower:     isULowercase(c) or hasBinaryProperty(c, UProperty.LOWERCASE)
+ * - upper:     isUUppercase(c) or hasBinaryProperty(c, UProperty.UPPERCASE)
+ * - punct:     ((1<<getType(c)) & ((1<<DASH_PUNCTUATION)|(1<<START_PUNCTUATION)|
+ *               (1<<END_PUNCTUATION)|(1<<CONNECTOR_PUNCTUATION)|(1<<OTHER_PUNCTUATION)|
+ *               (1<<INITIAL_PUNCTUATION)|(1<<FINAL_PUNCTUATION)))!=0
+ * - digit:     isDigit(c) or getType(c)==DECIMAL_DIGIT_NUMBER
+ * - xdigit:    hasBinaryProperty(c, UProperty.POSIX_XDIGIT)
+ * - alnum:     hasBinaryProperty(c, UProperty.POSIX_ALNUM)
+ * - space:     isUWhiteSpace(c) or hasBinaryProperty(c, UProperty.WHITE_SPACE)
+ * - blank:     hasBinaryProperty(c, UProperty.POSIX_BLANK)
+ * - cntrl:     getType(c)==CONTROL
+ * - graph:     hasBinaryProperty(c, UProperty.POSIX_GRAPH)
+ * - print:     hasBinaryProperty(c, UProperty.POSIX_PRINT)}</pre>
+ * <p>
+ * The C/POSIX character classes are also available in UnicodeSet patterns,
+ * using patterns like [:graph:] or \p{graph}.
+ *
+ * <p><strong>[icu] Note:</strong> There are several ICU (and Java) whitespace functions.
+ * Comparison:<ul>
+ * <li> isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property;
+ *       most of general categories "Z" (separators) + most whitespace ISO controls
+ *       (including no-break spaces, but excluding IS1..IS4)
+ * <li> isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces
+ * <li> isSpaceChar: just Z (including no-break spaces)</ul>
+ *
+ * <p>
+ * This class is not subclassable.
+ *
+ * @author Syn Wee Quek
+ * @see android.icu.lang.UCharacterEnums
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UCharacter implements android.icu.lang.UCharacterEnums.ECharacterCategory, android.icu.lang.UCharacterEnums.ECharacterDirection {
+
+private UCharacter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returnss the numeric value of a decimal digit code point.
+ * <br>This method observes the semantics of
+ * <code>java.lang.Character.digit()</code>.  Note that this
+ * will return positive values for code points for which isDigit
+ * returns false, just like java.lang.Character.
+ * <br><em>Semantic Change:</em> In release 1.3.1 and
+ * prior, this did not treat the European letters as having a
+ * digit value, and also treated numeric letters and other numbers as
+ * digits.
+ * This has been changed to conform to the java semantics.
+ * <br>A code point is a valid digit if and only if:
+ * <ul>
+ *   <li>ch is a decimal digit or one of the european letters, and
+ *   <li>the value of ch is less than the specified radix.
+ * </ul>
+ * @param ch the code point to query
+ * @param radix the radix
+ * @return the numeric value represented by the code point in the
+ * specified radix, or -1 if the code point is not a decimal digit
+ * or if its value is too large for the radix
+ */
+
+public static int digit(int ch, int radix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returnss the numeric value of a decimal digit code point.
+ * <br>This is a convenience overload of <code>digit(int, int)</code>
+ * that provides a decimal radix.
+ * <br><em>Semantic Change:</em> In release 1.3.1 and prior, this
+ * treated numeric letters and other numbers as digits.  This has
+ * been changed to conform to the java semantics.
+ * @param ch the code point to query
+ * @return the numeric value represented by the code point,
+ * or -1 if the code point is not a decimal digit or if its
+ * value is too large for a decimal radix
+ */
+
+public static int digit(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numeric value of the code point as a nonnegative
+ * integer.
+ * <br>If the code point does not have a numeric value, then -1 is returned.
+ * <br>
+ * If the code point has a numeric value that cannot be represented as a
+ * nonnegative integer (for example, a fractional value), then -2 is
+ * returned.
+ * @param ch the code point to query
+ * @return the numeric value of the code point, or -1 if it has no numeric
+ * value, or -2 if it has a numeric value that cannot be represented as a
+ * nonnegative integer
+ */
+
+public static int getNumericValue(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the numeric value for a Unicode code point as defined in the
+ * Unicode Character Database.
+ * <p>A "double" return type is necessary because some numeric values are
+ * fractions, negative, or too large for int.
+ * <p>For characters without any numeric values in the Unicode Character
+ * Database, this function will return NO_NUMERIC_VALUE.
+ * Note: This is different from the Unicode Standard which specifies NaN as the default value.
+ * <p><em>API Change:</em> In release 2.2 and prior, this API has a
+ * return type int and returns -1 when the argument ch does not have a
+ * corresponding numeric value. This has been changed to synch with ICU4C
+ *
+ * This corresponds to the ICU4C function u_getNumericValue.
+ * @param ch Code point to get the numeric value for.
+ * @return numeric value of ch, or NO_NUMERIC_VALUE if none is defined.
+ */
+
+public static double getUnicodeNumericValue(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a value indicating a code point's Unicode category.
+ * Up-to-date Unicode implementation of java.lang.Character.getType()
+ * except for the above mentioned code points that had their category
+ * changed.<br>
+ * Return results are constants from the interface
+ * <a href=UCharacterCategory.html>UCharacterCategory</a><br>
+ * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with
+ * those returned by java.lang.Character.getType.  UCharacterCategory values
+ * match the ones used in ICU4C, while java.lang.Character type
+ * values, though similar, skip the value 17.
+ * @param ch code point whose type is to be determined
+ * @return category which is a value of UCharacterCategory
+ */
+
+public static int getType(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if a code point has a defined meaning in the up-to-date
+ * Unicode standard.
+ * E.g. supplementary code points though allocated space are not defined in
+ * Unicode yet.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isDefined()
+ * @param ch code point to be determined if it is defined in the most
+ *        current version of Unicode
+ * @return true if this code point is defined in unicode
+ */
+
+public static boolean isDefined(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if a code point is a Java digit.
+ * <br>This method observes the semantics of
+ * <code>java.lang.Character.isDigit()</code>. It returns true for decimal
+ * digits only.
+ * <br><em>Semantic Change:</em> In release 1.3.1 and prior, this treated
+ * numeric letters and other numbers as digits.
+ * This has been changed to conform to the java semantics.
+ * @param ch code point to query
+ * @return true if this code point is a digit
+ */
+
+public static boolean isDigit(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is an ISO control character.
+ * A code point is considered to be an ISO control character if it is in
+ * the range &#92;u0000 through &#92;u001F or in the range &#92;u007F through
+ * &#92;u009F.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isISOControl()
+ * @param ch code point to determine if it is an ISO control character
+ * @return true if code point is a ISO control character
+ */
+
+public static boolean isISOControl(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a letter.
+ * Up-to-date Unicode implementation of java.lang.Character.isLetter()
+ * @param ch code point to determine if it is a letter
+ * @return true if code point is a letter
+ */
+
+public static boolean isLetter(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a letter or digit.
+ * <strong>[icu] Note:</strong> This method, unlike java.lang.Character does not regard the ascii
+ * characters 'A' - 'Z' and 'a' - 'z' as digits.
+ * @param ch code point to determine if it is a letter or a digit
+ * @return true if code point is a letter or a digit
+ */
+
+public static boolean isLetterOrDigit(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compatibility override of Java method, delegates to
+ * java.lang.Character.isJavaIdentifierStart.
+ * @param cp the code point
+ * @return true if the code point can start a java identifier.
+ */
+
+public static boolean isJavaIdentifierStart(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compatibility override of Java method, delegates to
+ * java.lang.Character.isJavaIdentifierPart.
+ * @param cp the code point
+ * @return true if the code point can continue a java identifier.
+ */
+
+public static boolean isJavaIdentifierPart(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a lowercase character.
+ * UnicodeData only contains case mappings for code points where they are
+ * one-to-one mappings; it also omits information about context-sensitive
+ * case mappings.<br> For more information about Unicode case mapping
+ * please refer to the
+ * <a href=http://www.unicode.org/unicode/reports/tr21/>Technical report
+ * #21</a>.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isLowerCase()
+ * @param ch code point to determine if it is in lowercase
+ * @return true if code point is a lowercase character
+ */
+
+public static boolean isLowerCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a white space character.
+ * A code point is considered to be an whitespace character if and only
+ * if it satisfies one of the following criteria:
+ * <ul>
+ * <li> It is a Unicode Separator character (categories "Z" = "Zs" or "Zl" or "Zp"), but is not
+ *      also a non-breaking space (&#92;u00A0 or &#92;u2007 or &#92;u202F).
+ * <li> It is &#92;u0009, HORIZONTAL TABULATION.
+ * <li> It is &#92;u000A, LINE FEED.
+ * <li> It is &#92;u000B, VERTICAL TABULATION.
+ * <li> It is &#92;u000C, FORM FEED.
+ * <li> It is &#92;u000D, CARRIAGE RETURN.
+ * <li> It is &#92;u001C, FILE SEPARATOR.
+ * <li> It is &#92;u001D, GROUP SEPARATOR.
+ * <li> It is &#92;u001E, RECORD SEPARATOR.
+ * <li> It is &#92;u001F, UNIT SEPARATOR.
+ * </ul>
+ *
+ * This API tries to sync with the semantics of Java's
+ * java.lang.Character.isWhitespace(), but it may not return
+ * the exact same results because of the Unicode version
+ * difference.
+ * <p>Note: Unicode 4.0.1 changed U+200B ZERO WIDTH SPACE from a Space Separator (Zs)
+ * to a Format Control (Cf). Since then, isWhitespace(0x200b) returns false.
+ * See http://www.unicode.org/versions/Unicode4.0.1/
+ * @param ch code point to determine if it is a white space
+ * @return true if the specified code point is a white space character
+ */
+
+public static boolean isWhitespace(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a Unicode specified space
+ * character, i.e. if code point is in the category Zs, Zl and Zp.
+ * Up-to-date Unicode implementation of java.lang.Character.isSpaceChar().
+ * @param ch code point to determine if it is a space
+ * @return true if the specified code point is a space character
+ */
+
+public static boolean isSpaceChar(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is a titlecase character.
+ * UnicodeData only contains case mappings for code points where they are
+ * one-to-one mappings; it also omits information about context-sensitive
+ * case mappings.<br>
+ * For more information about Unicode case mapping please refer to the
+ * <a href=http://www.unicode.org/unicode/reports/tr21/>
+ * Technical report #21</a>.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isTitleCase().
+ * @param ch code point to determine if it is in title case
+ * @return true if the specified code point is a titlecase character
+ */
+
+public static boolean isTitleCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point may be any part of a Unicode
+ * identifier other than the starting character.
+ * A code point may be part of a Unicode identifier if and only if it is
+ * one of the following:
+ * <ul>
+ * <li> Lu Uppercase letter
+ * <li> Ll Lowercase letter
+ * <li> Lt Titlecase letter
+ * <li> Lm Modifier letter
+ * <li> Lo Other letter
+ * <li> Nl Letter number
+ * <li> Pc Connecting punctuation character
+ * <li> Nd decimal number
+ * <li> Mc Spacing combining mark
+ * <li> Mn Non-spacing mark
+ * <li> Cf formatting code
+ * </ul>
+ * Up-to-date Unicode implementation of
+ * java.lang.Character.isUnicodeIdentifierPart().<br>
+ * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+ * @param ch code point to determine if is can be part of a Unicode
+ *        identifier
+ * @return true if code point is any character belonging a unicode
+ *         identifier suffix after the first character
+ */
+
+public static boolean isUnicodeIdentifierPart(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is permissible as the first
+ * character in a Unicode identifier.
+ * A code point may start a Unicode identifier if it is of type either
+ * <ul>
+ * <li> Lu Uppercase letter
+ * <li> Ll Lowercase letter
+ * <li> Lt Titlecase letter
+ * <li> Lm Modifier letter
+ * <li> Lo Other letter
+ * <li> Nl Letter number
+ * </ul>
+ * Up-to-date Unicode implementation of
+ * java.lang.Character.isUnicodeIdentifierStart().<br>
+ * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+ * @param ch code point to determine if it can start a Unicode identifier
+ * @return true if code point is the first character belonging a unicode
+ *              identifier
+ */
+
+public static boolean isUnicodeIdentifierStart(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point should be regarded as an
+ * ignorable character in a Java identifier.
+ * A character is Java-identifier-ignorable if it has the general category
+ * Cf Formatting Control, or it is a non-Java-whitespace ISO control:
+ * U+0000..U+0008, U+000E..U+001B, U+007F..U+009F.<br>
+ * Up-to-date Unicode implementation of
+ * java.lang.Character.isIdentifierIgnorable().<br>
+ * See <a href=http://www.unicode.org/unicode/reports/tr8/>UTR #8</a>.
+ * <p>Note that Unicode just recommends to ignore Cf (format controls).
+ * @param ch code point to be determined if it can be ignored in a Unicode
+ *        identifier.
+ * @return true if the code point is ignorable
+ */
+
+public static boolean isIdentifierIgnorable(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the specified code point is an uppercase character.
+ * UnicodeData only contains case mappings for code point where they are
+ * one-to-one mappings; it also omits information about context-sensitive
+ * case mappings.<br>
+ * For language specific case conversion behavior, use
+ * toUpperCase(locale, str). <br>
+ * For example, the case conversion for dot-less i and dotted I in Turkish,
+ * or for final sigma in Greek.
+ * For more information about Unicode case mapping please refer to the
+ * <a href=http://www.unicode.org/unicode/reports/tr21/>
+ * Technical report #21</a>.<br>
+ * Up-to-date Unicode implementation of java.lang.Character.isUpperCase().
+ * @param ch code point to determine if it is in uppercase
+ * @return true if the code point is an uppercase character
+ */
+
+public static boolean isUpperCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The given code point is mapped to its lowercase equivalent; if the code
+ * point has no lowercase equivalent, the code point itself is returned.
+ * Up-to-date Unicode implementation of java.lang.Character.toLowerCase()
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They take into account the string context and the language and can map
+ * to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch code point whose lowercase equivalent is to be retrieved
+ * @return the lowercase equivalent code point
+ */
+
+public static int toLowerCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts argument code point and returns a String object representing
+ * the code point's value in UTF-16 format.
+ * The result is a string whose length is 1 for BMP code points, 2 for supplementary ones.
+ *
+ * <p>Up-to-date Unicode implementation of java.lang.Character.toString().
+ *
+ * @param ch code point
+ * @return string representation of the code point, null if code point is not
+ *         defined in unicode
+ */
+
+public static java.lang.String toString(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the code point argument to titlecase.
+ * If no titlecase is available, the uppercase is returned. If no uppercase
+ * is available, the code point itself is returned.
+ * Up-to-date Unicode implementation of java.lang.Character.toTitleCase()
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They take into account the string context and the language and can map
+ * to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch code point  whose title case is to be retrieved
+ * @return titlecase code point
+ */
+
+public static int toTitleCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the character argument to uppercase.
+ * If no uppercase is available, the character itself is returned.
+ * Up-to-date Unicode implementation of java.lang.Character.toUpperCase()
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They take into account the string context and the language and can map
+ * to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch code point whose uppercase is to be retrieved
+ * @return uppercase code point
+ */
+
+public static int toUpperCase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines if the code point is a supplementary character.
+ * A code point is a supplementary character if and only if it is greater
+ * than <a href=#SUPPLEMENTARY_MIN_VALUE>SUPPLEMENTARY_MIN_VALUE</a>
+ * @param ch code point to be determined if it is in the supplementary
+ *        plane
+ * @return true if code point is a supplementary character
+ */
+
+public static boolean isSupplementary(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines if the code point is in the BMP plane.
+ * @param ch code point to be determined if it is not a supplementary
+ *        character
+ * @return true if code point is not a supplementary character
+ */
+
+public static boolean isBMP(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines whether the specified code point is a printable character
+ * according to the Unicode standard.
+ * @param ch code point to be determined if it is printable
+ * @return true if the code point is a printable character
+ */
+
+public static boolean isPrintable(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Determines whether the specified code point is of base form.
+ * A code point of base form does not graphically combine with preceding
+ * characters, and is neither a control nor a format character.
+ * @param ch code point to be determined if it is of base form
+ * @return true if the code point is of base form
+ */
+
+public static boolean isBaseForm(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the Bidirection property of a code point.
+ * For example, 0x0041 (letter A) has the LEFT_TO_RIGHT directional
+ * property.<br>
+ * Result returned belongs to the interface
+ * <a href=UCharacterDirection.html>UCharacterDirection</a>
+ * @param ch the code point to be determined its direction
+ * @return direction constant from UCharacterDirection.
+ */
+
+public static int getDirection(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether the code point has the "mirrored" property.
+ * This property is set for characters that are commonly used in
+ * Right-To-Left contexts and need to be displayed with a "mirrored"
+ * glyph.
+ * @param ch code point whose mirror is to be determined
+ * @return true if the code point has the "mirrored" property
+ */
+
+public static boolean isMirrored(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Maps the specified code point to a "mirror-image" code point.
+ * For code points with the "mirrored" property, implementations sometimes
+ * need a "poor man's" mapping to another code point such that the default
+ * glyph may serve as the mirror-image of the default glyph of the
+ * specified code point.<br>
+ * This is useful for text conversion to and from codepages with visual
+ * order, and for displays without glyph selection capabilities.
+ * @param ch code point whose mirror is to be retrieved
+ * @return another code point that may serve as a mirror-image substitute,
+ *         or ch itself if there is no such mapping or ch does not have the
+ *         "mirrored" property
+ */
+
+public static int getMirror(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Maps the specified character to its paired bracket character.
+ * For Bidi_Paired_Bracket_Type!=None, this is the same as getMirror(int).
+ * Otherwise c itself is returned.
+ * See http://www.unicode.org/reports/tr9/
+ *
+ * @param c the code point to be mapped
+ * @return the paired bracket code point,
+ *         or c itself if there is no such mapping
+ *         (Bidi_Paired_Bracket_Type=None)
+ *
+ * @see android.icu.lang.UProperty#BIDI_PAIRED_BRACKET
+ * @see android.icu.lang.UProperty#BIDI_PAIRED_BRACKET_TYPE
+ * @see #getMirror(int)
+ */
+
+public static int getBidiPairedBracket(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the combining class of the argument codepoint
+ * @param ch code point whose combining is to be retrieved
+ * @return the combining class of the codepoint
+ */
+
+public static int getCombiningClass(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> A code point is illegal if and only if
+ * <ul>
+ * <li> Out of bounds, less than 0 or greater than UCharacter.MAX_VALUE
+ * <li> A surrogate value, 0xD800 to 0xDFFF
+ * <li> Not-a-character, having the form 0x xxFFFF or 0x xxFFFE
+ * </ul>
+ * Note: legal does not mean that it is assigned in this version of Unicode.
+ * @param ch code point to determine if it is a legal code point by itself
+ * @return true if and only if legal.
+ */
+
+public static boolean isLegal(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> A string is legal iff all its code points are legal.
+ * A code point is illegal if and only if
+ * <ul>
+ * <li> Out of bounds, less than 0 or greater than UCharacter.MAX_VALUE
+ * <li> A surrogate value, 0xD800 to 0xDFFF
+ * <li> Not-a-character, having the form 0x xxFFFF or 0x xxFFFE
+ * </ul>
+ * Note: legal does not mean that it is assigned in this version of Unicode.
+ * @param str containing code points to examin
+ * @return true if and only if legal.
+ */
+
+public static boolean isLegal(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the version of Unicode data used.
+ * @return the unicode version number used
+ */
+
+public static android.icu.util.VersionInfo getUnicodeVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the most current Unicode name of the argument code point, or
+ * null if the character is unassigned or outside the range
+ * UCharacter.MIN_VALUE and UCharacter.MAX_VALUE or does not have a name.
+ * <br>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param ch the code point for which to get the name
+ * @return most current Unicode name
+ */
+
+public static java.lang.String getName(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the names for each of the characters in a string
+ * @param s string to format
+ * @param separator string to go between names
+ * @return string of names
+ */
+
+public static java.lang.String getName(java.lang.String s, java.lang.String separator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a name for a valid codepoint. Unlike, getName(int) and
+ * getName1_0(int), this method will return a name even for codepoints that
+ * are not assigned a name in UnicodeData.txt.
+ *
+ * <p>The names are returned in the following order.
+ * <ul>
+ * <li> Most current Unicode name if there is any
+ * <li> Unicode 1.0 name if there is any
+ * <li> Extended name in the form of
+ *      "&lt;codepoint_type-codepoint_hex_digits&gt;". E.g., &lt;noncharacter-fffe&gt;
+ * </ul>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param ch the code point for which to get the name
+ * @return a name for the argument codepoint
+ */
+
+public static java.lang.String getExtendedName(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the corrected name from NameAliases.txt if there is one.
+ * Returns null if the character is unassigned or outside the range
+ * UCharacter.MIN_VALUE and UCharacter.MAX_VALUE or does not have a name.
+ * <br>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param ch the code point for which to get the name alias
+ * @return Unicode name alias, or null
+ */
+
+public static java.lang.String getNameAlias(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Finds a Unicode code point by its most current Unicode name and
+ * return its code point value. All Unicode names are in uppercase.
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param name most current Unicode character name whose code point is to
+ *        be returned
+ * @return code point or -1 if name is not found
+ */
+
+public static int getCharFromName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Find a Unicode character by either its name and return its code
+ * point value. All Unicode names are in uppercase.
+ * Extended names are all lowercase except for numbers and are contained
+ * within angle brackets.
+ * The names are searched in the following order
+ * <ul>
+ * <li> Most current Unicode name if there is any
+ * <li> Unicode 1.0 name if there is any
+ * <li> Extended name in the form of
+ *      "&lt;codepoint_type-codepoint_hex_digits&gt;". E.g. &lt;noncharacter-FFFE&gt;
+ * </ul>
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param name codepoint name
+ * @return code point associated with the name or -1 if the name is not
+ *         found.
+ */
+
+public static int getCharFromExtendedName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Find a Unicode character by its corrected name alias and return
+ * its code point value. All Unicode names are in uppercase.
+ * Note calling any methods related to code point names, e.g. get*Name*()
+ * incurs a one-time initialisation cost to construct the name tables.
+ * @param name Unicode name alias whose code point is to be returned
+ * @return code point or -1 if name is not found
+ */
+
+public static int getCharFromNameAlias(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the Unicode name for a given property, as given in the
+ * Unicode database file PropertyAliases.txt.  Most properties
+ * have more than one name.  The nameChoice determines which one
+ * is returned.
+ *
+ * In addition, this function maps the property
+ * UProperty.GENERAL_CATEGORY_MASK to the synthetic names "gcm" /
+ * "General_Category_Mask".  These names are not in
+ * PropertyAliases.txt.
+ *
+ * @param property UProperty selector.
+ *
+ * @param nameChoice UProperty.NameChoice selector for which name
+ * to get.  All properties have a long name.  Most have a short
+ * name, but some do not.  Unicode allows for additional names; if
+ * present these will be returned by UProperty.NameChoice.LONG + i,
+ * where i=1, 2,...
+ *
+ * @return a name, or null if Unicode explicitly defines no name
+ * ("n/a") for a given property/nameChoice.  If a given nameChoice
+ * throws an exception, then all larger values of nameChoice will
+ * throw an exception.  If null is returned for a given
+ * nameChoice, then other nameChoice values may return non-null
+ * results.
+ *
+ * @exception java.lang.IllegalArgumentException thrown if property or
+ * nameChoice are invalid.
+ *
+ * @see android.icu.lang.UProperty
+ * @see android.icu.lang.UProperty.NameChoice
+ */
+
+public static java.lang.String getPropertyName(int property, int nameChoice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the UProperty selector for a given property name, as
+ * specified in the Unicode database file PropertyAliases.txt.
+ * Short, long, and any other variants are recognized.
+ *
+ * In addition, this function maps the synthetic names "gcm" /
+ * "General_Category_Mask" to the property
+ * UProperty.GENERAL_CATEGORY_MASK.  These names are not in
+ * PropertyAliases.txt.
+ *
+ * @param propertyAlias the property name to be matched.  The name
+ * is compared using "loose matching" as described in
+ * PropertyAliases.txt.
+ *
+ * @return a UProperty enum.
+ *
+ * @exception java.lang.IllegalArgumentException thrown if propertyAlias
+ * is not recognized.
+ *
+ * @see android.icu.lang.UProperty
+ */
+
+public static int getPropertyEnum(java.lang.CharSequence propertyAlias) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the Unicode name for a given property value, as given in
+ * the Unicode database file PropertyValueAliases.txt.  Most
+ * values have more than one name.  The nameChoice determines
+ * which one is returned.
+ *
+ * Note: Some of the names in PropertyValueAliases.txt can only be
+ * retrieved using UProperty.GENERAL_CATEGORY_MASK, not
+ * UProperty.GENERAL_CATEGORY.  These include: "C" / "Other", "L" /
+ * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P"
+ * / "Punctuation", "S" / "Symbol", and "Z" / "Separator".
+ *
+ * @param property UProperty selector constant.
+ * UProperty.INT_START &lt;= property &lt; UProperty.INT_LIMIT or
+ * UProperty.BINARY_START &lt;= property &lt; UProperty.BINARY_LIMIT or
+ * UProperty.MASK_START &lt; = property &lt; UProperty.MASK_LIMIT.
+ * If out of range, null is returned.
+ *
+ * @param value selector for a value for the given property.  In
+ * general, valid values range from 0 up to some maximum.  There
+ * are a few exceptions: (1.) UProperty.BLOCK values begin at the
+ * non-zero value BASIC_LATIN.getID().  (2.)
+ * UProperty.CANONICAL_COMBINING_CLASS values are not contiguous
+ * and range from 0..240.  (3.)  UProperty.GENERAL_CATEGORY_MASK values
+ * are mask values produced by left-shifting 1 by
+ * UCharacter.getType().  This allows grouped categories such as
+ * [:L:] to be represented.  Mask values are non-contiguous.
+ *
+ * @param nameChoice UProperty.NameChoice selector for which name
+ * to get.  All values have a long name.  Most have a short name,
+ * but some do not.  Unicode allows for additional names; if
+ * present these will be returned by UProperty.NameChoice.LONG + i,
+ * where i=1, 2,...
+ *
+ * @return a name, or null if Unicode explicitly defines no name
+ * ("n/a") for a given property/value/nameChoice.  If a given
+ * nameChoice throws an exception, then all larger values of
+ * nameChoice will throw an exception.  If null is returned for a
+ * given nameChoice, then other nameChoice values may return
+ * non-null results.
+ *
+ * @exception java.lang.IllegalArgumentException thrown if property, value,
+ * or nameChoice are invalid.
+ *
+ * @see android.icu.lang.UProperty
+ * @see android.icu.lang.UProperty.NameChoice
+ */
+
+public static java.lang.String getPropertyValueName(int property, int value, int nameChoice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return the property value integer for a given value name, as
+ * specified in the Unicode database file PropertyValueAliases.txt.
+ * Short, long, and any other variants are recognized.
+ *
+ * Note: Some of the names in PropertyValueAliases.txt will only be
+ * recognized with UProperty.GENERAL_CATEGORY_MASK, not
+ * UProperty.GENERAL_CATEGORY.  These include: "C" / "Other", "L" /
+ * "Letter", "LC" / "Cased_Letter", "M" / "Mark", "N" / "Number", "P"
+ * / "Punctuation", "S" / "Symbol", and "Z" / "Separator".
+ *
+ * @param property UProperty selector constant.
+ * UProperty.INT_START &lt;= property &lt; UProperty.INT_LIMIT or
+ * UProperty.BINARY_START &lt;= property &lt; UProperty.BINARY_LIMIT or
+ * UProperty.MASK_START &lt; = property &lt; UProperty.MASK_LIMIT.
+ * Only these properties can be enumerated.
+ *
+ * @param valueAlias the value name to be matched.  The name is
+ * compared using "loose matching" as described in
+ * PropertyValueAliases.txt.
+ *
+ * @return a value integer.  Note: UProperty.GENERAL_CATEGORY
+ * values are mask values produced by left-shifting 1 by
+ * UCharacter.getType().  This allows grouped categories such as
+ * [:L:] to be represented.
+ *
+ * @see android.icu.lang.UProperty
+ * @throws java.lang.IllegalArgumentException if property is not a valid UProperty
+ *         selector or valueAlias is not a value of this property
+ */
+
+public static int getPropertyValueEnum(int property, java.lang.CharSequence valueAlias) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a code point corresponding to the two surrogate code units.
+ *
+ * @param lead the lead char
+ * @param trail the trail char
+ * @return code point if surrogate characters are valid.
+ * @exception java.lang.IllegalArgumentException thrown when the code units do
+ *            not form a valid code point
+ */
+
+public static int getCodePoint(char lead, char trail) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the code point corresponding to the BMP code point.
+ *
+ * @param char16 the BMP code point
+ * @return code point if argument is a valid character.
+ * @exception java.lang.IllegalArgumentException thrown when char16 is not a valid
+ *            code point
+ */
+
+public static int getCodePoint(char char16) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the uppercase version of the argument string.
+ * Casing is dependent on the default locale and context-sensitive.
+ * @param str source string to be performed on
+ * @return uppercase version of the argument string
+ */
+
+public static java.lang.String toUpperCase(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowercase version of the argument string.
+ * Casing is dependent on the default locale and context-sensitive
+ * @param str source string to be performed on
+ * @return lowercase version of the argument string
+ */
+
+public static java.lang.String toLowerCase(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the default locale and context-sensitive
+ * @param str source string to be performed on
+ * @param breakiter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @return titlecase version of the argument string
+ */
+
+public static java.lang.String toTitleCase(java.lang.String str, android.icu.text.BreakIterator breakiter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the uppercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive.
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return uppercase version of the argument string
+ */
+
+public static java.lang.String toUpperCase(java.util.Locale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the uppercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive.
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return uppercase version of the argument string
+ */
+
+public static java.lang.String toUpperCase(android.icu.util.ULocale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return lowercase version of the argument string
+ */
+
+public static java.lang.String toLowerCase(java.util.Locale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowercase version of the argument string.
+ * Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @return lowercase version of the argument string
+ */
+
+public static java.lang.String toLowerCase(android.icu.util.ULocale locale, java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param breakiter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @return titlecase version of the argument string
+ */
+
+public static java.lang.String toTitleCase(java.util.Locale locale, java.lang.String str, android.icu.text.BreakIterator breakiter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param titleIter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @return titlecase version of the argument string
+ */
+
+public static java.lang.String toTitleCase(android.icu.util.ULocale locale, java.lang.String str, android.icu.text.BreakIterator titleIter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param titleIter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @param options bit set to modify the titlecasing operation
+ * @return titlecase version of the argument string
+ * @see #TITLECASE_NO_LOWERCASE
+ * @see #TITLECASE_NO_BREAK_ADJUSTMENT
+ */
+
+public static java.lang.String toTitleCase(android.icu.util.ULocale locale, java.lang.String str, android.icu.text.BreakIterator titleIter, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns the titlecase version of the argument string.
+ * <p>Position for titlecasing is determined by the argument break
+ * iterator, hence the user can customize his break iterator for
+ * a specialized titlecasing. In this case only the forward iteration
+ * needs to be implemented.
+ * If the break iterator passed in is null, the default Unicode algorithm
+ * will be used to determine the titlecase positions.
+ *
+ * <p>Only positions returned by the break iterator will be title cased,
+ * character in between the positions will all be in lower case.
+ * <p>Casing is dependent on the argument locale and context-sensitive
+ * @param locale which string is to be converted in
+ * @param str source string to be performed on
+ * @param titleIter break iterator to determine the positions in which
+ *        the character should be title cased.
+ * @param options bit set to modify the titlecasing operation
+ * @return titlecase version of the argument string
+ * @see #TITLECASE_NO_LOWERCASE
+ * @see #TITLECASE_NO_BREAK_ADJUSTMENT
+ */
+
+public static java.lang.String toTitleCase(java.util.Locale locale, java.lang.String str, android.icu.text.BreakIterator titleIter, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given character is mapped to its case folding equivalent according
+ * to UnicodeData.txt and CaseFolding.txt; if the character has no case
+ * folding equivalent, the character itself is returned.
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They can map to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch             the character to be converted
+ * @param defaultmapping Indicates whether the default mappings defined in
+ *                       CaseFolding.txt are to be used, otherwise the
+ *                       mappings for dotted I and dotless i marked with
+ *                       'T' in CaseFolding.txt are included.
+ * @return               the case folding equivalent of the character, if
+ *                       any; otherwise the character itself.
+ * @see                  #foldCase(String, boolean)
+ */
+
+public static int foldCase(int ch, boolean defaultmapping) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given string is mapped to its case folding equivalent according to
+ * UnicodeData.txt and CaseFolding.txt; if any character has no case
+ * folding equivalent, the character itself is returned.
+ * "Full", multiple-code point case folding mappings are returned here.
+ * For "simple" single-code point mappings use the API
+ * foldCase(int ch, boolean defaultmapping).
+ * @param str            the String to be converted
+ * @param defaultmapping Indicates whether the default mappings defined in
+ *                       CaseFolding.txt are to be used, otherwise the
+ *                       mappings for dotted I and dotless i marked with
+ *                       'T' in CaseFolding.txt are included.
+ * @return               the case folding equivalent of the character, if
+ *                       any; otherwise the character itself.
+ * @see                  #foldCase(int, boolean)
+ */
+
+public static java.lang.String foldCase(java.lang.String str, boolean defaultmapping) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given character is mapped to its case folding equivalent according
+ * to UnicodeData.txt and CaseFolding.txt; if the character has no case
+ * folding equivalent, the character itself is returned.
+ *
+ * <p>This function only returns the simple, single-code point case mapping.
+ * Full case mappings should be used whenever possible because they produce
+ * better results by working on whole strings.
+ * They can map to a result string with a different length as appropriate.
+ * Full case mappings are applied by the case mapping functions
+ * that take String parameters rather than code points (int).
+ * See also the User Guide chapter on C/POSIX migration:
+ * http://www.icu-project.org/userguide/posix.html#case_mappings
+ *
+ * @param ch the character to be converted
+ * @param options A bit set for special processing. Currently the recognised options
+ * are FOLD_CASE_EXCLUDE_SPECIAL_I and FOLD_CASE_DEFAULT
+ * @return the case folding equivalent of the character, if any; otherwise the
+ * character itself.
+ * @see #foldCase(String, boolean)
+ */
+
+public static int foldCase(int ch, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> The given string is mapped to its case folding equivalent according to
+ * UnicodeData.txt and CaseFolding.txt; if any character has no case
+ * folding equivalent, the character itself is returned.
+ * "Full", multiple-code point case folding mappings are returned here.
+ * For "simple" single-code point mappings use the API
+ * foldCase(int ch, boolean defaultmapping).
+ * @param str the String to be converted
+ * @param options A bit set for special processing. Currently the recognised options
+ *                are FOLD_CASE_EXCLUDE_SPECIAL_I and FOLD_CASE_DEFAULT
+ * @return the case folding equivalent of the character, if any; otherwise the
+ *         character itself.
+ * @see #foldCase(int, boolean)
+ */
+
+public static java.lang.String foldCase(java.lang.String str, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the numeric value of a Han character.
+ *
+ * <p>This returns the value of Han 'numeric' code points,
+ * including those for zero, ten, hundred, thousand, ten thousand,
+ * and hundred million.
+ * This includes both the standard and 'checkwriting'
+ * characters, the 'big circle' zero character, and the standard
+ * zero character.
+ *
+ * <p>Note: The Unicode Standard has numeric values for more
+ * Han characters recognized by this method
+ * (see {@link #getNumericValue(int)} and the UCD file DerivedNumericValues.txt),
+ * and a {@link android.icu.text.NumberFormat} can be used with
+ * a Chinese {@link android.icu.text.NumberingSystem}.
+ *
+ * @param ch code point to query
+ * @return value if it is a Han 'numeric character,' otherwise return -1.
+ */
+
+public static int getHanNumericValue(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns an iterator for character types, iterating over codepoints.
+ * <p>Example of use:<br>
+ * <pre>
+ * RangeValueIterator iterator = UCharacter.getTypeIterator();
+ * RangeValueIterator.Element element = new RangeValueIterator.Element();
+ * while (iterator.next(element)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(element.start) +
+ *                        " to codepoint \\u" +
+ *                        Integer.toHexString(element.limit - 1) +
+ *                        " has the character type " +
+ *                        element.value);
+ * }
+ * </pre>
+ * @return an iterator
+ */
+
+public static android.icu.util.RangeValueIterator getTypeIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns an iterator for character names, iterating over codepoints.
+ * <p>This API only gets the iterator for the modern, most up-to-date
+ * Unicode names. For older 1.0 Unicode names use get1_0NameIterator() or
+ * for extended names use getExtendedNameIterator().
+ * <p>Example of use:<br>
+ * <pre>
+ * ValueIterator iterator = UCharacter.getNameIterator();
+ * ValueIterator.Element element = new ValueIterator.Element();
+ * while (iterator.next(element)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(element.codepoint) +
+ *                        " has the name " + (String)element.value);
+ * }
+ * </pre>
+ * <p>The maximal range which the name iterator iterates is from
+ * UCharacter.MIN_VALUE to UCharacter.MAX_VALUE.
+ * @return an iterator
+ */
+
+public static android.icu.util.ValueIterator getNameIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Returns an iterator for character names, iterating over codepoints.
+ * <p>This API only gets the iterator for the extended names.
+ * For modern, most up-to-date Unicode names use getNameIterator() or
+ * for older 1.0 Unicode names use get1_0NameIterator().
+ * <p>Example of use:<br>
+ * <pre>
+ * ValueIterator iterator = UCharacter.getExtendedNameIterator();
+ * ValueIterator.Element element = new ValueIterator.Element();
+ * while (iterator.next(element)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(element.codepoint) +
+ *                        " has the name " + (String)element.value);
+ * }
+ * </pre>
+ * <p>The maximal range which the name iterator iterates is from
+ * @return an iterator
+ */
+
+public static android.icu.util.ValueIterator getExtendedNameIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the "age" of the code point.
+ * <p>The "age" is the Unicode version when the code point was first
+ * designated (as a non-character or for Private Use) or assigned a
+ * character.
+ * <p>This can be useful to avoid emitting code points to receiving
+ * processes that do not accept newer characters.
+ * <p>The data is from the UCD file DerivedAge.txt.
+ * @param ch The code point.
+ * @return the Unicode version number
+ */
+
+public static android.icu.util.VersionInfo getAge(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Check a binary Unicode property for a code point.
+ * <p>Unicode, especially in version 3.2, defines many more properties
+ * than the original set in UnicodeData.txt.
+ * <p>This API is intended to reflect Unicode properties as defined in
+ * the Unicode Character Database (UCD) and Unicode Technical Reports
+ * (UTR).
+ * <p>For details about the properties see
+ * <a href=http://www.unicode.org/>http://www.unicode.org/</a>.
+ * <p>For names of Unicode properties see the UCD file
+ * PropertyAliases.txt.
+ * <p>This API does not check the validity of the codepoint.
+ * <p>Important: If ICU is built with UCD files from Unicode versions
+ * below 3.2, then properties marked with "new" are not or
+ * not fully available.
+ * @param ch code point to test.
+ * @param property selector constant from android.icu.lang.UProperty,
+ *        identifies which binary property to check.
+ * @return true or false according to the binary Unicode property value
+ *         for ch. Also false if property is out of bounds or if the
+ *         Unicode version does not have data for the property at all, or
+ *         not for this code point.
+ * @see android.icu.lang.UProperty
+ */
+
+public static boolean hasBinaryProperty(int ch, int property) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the Alphabetic Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.ALPHABETIC).
+ * <p>Different from UCharacter.isLetter(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isUAlphabetic(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the Lowercase Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.LOWERCASE).
+ * <p>This is different from UCharacter.isLowerCase(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isULowercase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the Uppercase Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.UPPERCASE).
+ * <p>This is different from UCharacter.isUpperCase(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isUUppercase(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <p>Check if a code point has the White_Space Unicode property.
+ * <p>Same as UCharacter.hasBinaryProperty(ch, UProperty.WHITE_SPACE).
+ * <p>This is different from both UCharacter.isSpace(ch) and
+ * UCharacter.isWhitespace(ch)!
+ * @param ch codepoint to be tested
+ */
+
+public static boolean isUWhiteSpace(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the property value for a Unicode property type of a code point.
+ * Also returns binary and mask property values.
+ * <p>Unicode, especially in version 3.2, defines many more properties than
+ * the original set in UnicodeData.txt.
+ * <p>The properties APIs are intended to reflect Unicode properties as
+ * defined in the Unicode Character Database (UCD) and Unicode Technical
+ * Reports (UTR). For details about the properties see
+ * http://www.unicode.org/.
+ * <p>For names of Unicode properties see the UCD file PropertyAliases.txt.
+ *
+ * <pre>
+ * Sample usage:
+ * int ea = UCharacter.getIntPropertyValue(c, UProperty.EAST_ASIAN_WIDTH);
+ * int ideo = UCharacter.getIntPropertyValue(c, UProperty.IDEOGRAPHIC);
+ * boolean b = (ideo == 1) ? true : false;
+ * </pre>
+ * @param ch code point to test.
+ * @param type UProperty selector constant, identifies which binary
+ *        property to check. Must be
+ *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
+ *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT or
+ *        UProperty.MASK_START &lt;= type &lt; UProperty.MASK_LIMIT.
+ * @return numeric value that is directly the property value or,
+ *         for enumerated properties, corresponds to the numeric value of
+ *         the enumerated constant of the respective property value type
+ *         ({@link android.icu.lang.UCharacterEnums.ECharacterCategory ECharacterCategory}, {@link android.icu.lang.UCharacterEnums.ECharacterDirection ECharacterDirection},
+ *         {@link android.icu.lang.UCharacter.DecompositionType DecompositionType}, etc.).
+ *         Returns 0 or 1 (for false / true) for binary Unicode properties.
+ *         Returns a bit-mask for mask properties.
+ *         Returns 0 if 'type' is out of bounds or if the Unicode version
+ *         does not have data for the property at all, or not for this code
+ *         point.
+ * @see android.icu.lang.UProperty
+ * @see #hasBinaryProperty
+ * @see #getIntPropertyMinValue
+ * @see #getIntPropertyMaxValue
+ * @see #getUnicodeVersion
+ */
+
+public static int getIntPropertyValue(int ch, int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the minimum value for an integer/binary Unicode property type.
+ * Can be used together with UCharacter.getIntPropertyMaxValue(int)
+ * to allocate arrays of android.icu.text.UnicodeSet or similar.
+ * @param type UProperty selector constant, identifies which binary
+ *        property to check. Must be
+ *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
+ *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT.
+ * @return Minimum value returned by UCharacter.getIntPropertyValue(int)
+ *         for a Unicode property. 0 if the property
+ *         selector 'type' is out of range.
+ * @see android.icu.lang.UProperty
+ * @see #hasBinaryProperty
+ * @see #getUnicodeVersion
+ * @see #getIntPropertyMaxValue
+ * @see #getIntPropertyValue
+ */
+
+public static int getIntPropertyMinValue(int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the maximum value for an integer/binary Unicode property.
+ * Can be used together with UCharacter.getIntPropertyMinValue(int)
+ * to allocate arrays of android.icu.text.UnicodeSet or similar.
+ * Examples for min/max values (for Unicode 3.2):
+ * <ul>
+ * <li> UProperty.BIDI_CLASS:    0/18
+ * (UCharacterDirection.LEFT_TO_RIGHT/UCharacterDirection.BOUNDARY_NEUTRAL)
+ * <li> UProperty.SCRIPT:        0/45 (UScript.COMMON/UScript.TAGBANWA)
+ * <li> UProperty.IDEOGRAPHIC:   0/1  (false/true)
+ * </ul>
+ * For undefined UProperty constant values, min/max values will be 0/-1.
+ * @param type UProperty selector constant, identifies which binary
+ *        property to check. Must be
+ *        UProperty.BINARY_START &lt;= type &lt; UProperty.BINARY_LIMIT or
+ *        UProperty.INT_START &lt;= type &lt; UProperty.INT_LIMIT.
+ * @return Maximum value returned by u_getIntPropertyValue for a Unicode
+ *         property. &lt;= 0 if the property selector 'type' is out of range.
+ * @see android.icu.lang.UProperty
+ * @see #hasBinaryProperty
+ * @see #getUnicodeVersion
+ * @see #getIntPropertyMaxValue
+ * @see #getIntPropertyValue
+ */
+
+public static int getIntPropertyMaxValue(int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provide the java.lang.Character forDigit API, for convenience.
+ */
+
+public static char forDigit(int digit, int radix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to {@link java.lang.Character#isValidCodePoint Character#isValidCodePoint}.
+ *
+ * @param cp the code point to check
+ * @return true if cp is a valid code point
+ */
+
+public static boolean isValidCodePoint(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isSupplementaryCodePoint Character#isSupplementaryCodePoint}.
+ *
+ * @param cp the code point to check
+ * @return true if cp is a supplementary code point
+ */
+
+public static boolean isSupplementaryCodePoint(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isHighSurrogate Character#isHighSurrogate}.
+ *
+ * @param ch the char to check
+ * @return true if ch is a high (lead) surrogate
+ */
+
+public static boolean isHighSurrogate(char ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isLowSurrogate Character#isLowSurrogate}.
+ *
+ * @param ch the char to check
+ * @return true if ch is a low (trail) surrogate
+ */
+
+public static boolean isLowSurrogate(char ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#isSurrogatePair Character#isSurrogatePair}.
+ *
+ * @param high the high (lead) char
+ * @param low the low (trail) char
+ * @return true if high, low form a surrogate pair
+ */
+
+public static boolean isSurrogatePair(char high, char low) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#charCount Character#charCount}.
+ * Returns the number of chars needed to represent the code point (1 or 2).
+ * This does not check the code point for validity.
+ *
+ * @param cp the code point to check
+ * @return the number of chars needed to represent the code point
+ */
+
+public static int charCount(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#toCodePoint Character#toCodePoint}.
+ * Returns the code point represented by the two surrogate code units.
+ * This does not check the surrogate pair for validity.
+ *
+ * @param high the high (lead) surrogate
+ * @param low the low (trail) surrogate
+ * @return the code point formed by the surrogate pair
+ */
+
+public static int toCodePoint(char high, char low) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointAt(java.lang.CharSequence,int) Character#codePointAt(CharSequence, int)}.
+ * Returns the code point at index.
+ * This examines only the characters at index and index+1.
+ *
+ * @param seq the characters to check
+ * @param index the index of the first or only char forming the code point
+ * @return the code point at the index
+ */
+
+public static int codePointAt(java.lang.CharSequence seq, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointAt(char[],int) Character#codePointAt(char[], int)}.
+ * Returns the code point at index.
+ * This examines only the characters at index and index+1.
+ *
+ * @param text the characters to check
+ * @param index the index of the first or only char forming the code point
+ * @return the code point at the index
+ */
+
+public static int codePointAt(char[] text, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointAt(char[],int,int) Character#codePointAt(char[], int, int)}.
+ * Returns the code point at index.
+ * This examines only the characters at index and index+1.
+ *
+ * @param text the characters to check
+ * @param index the index of the first or only char forming the code point
+ * @param limit the limit of the valid text
+ * @return the code point at the index
+ */
+
+public static int codePointAt(char[] text, int index, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointBefore(java.lang.CharSequence,int) Character#codePointBefore(CharSequence, int)}.
+ * Return the code point before index.
+ * This examines only the characters at index-1 and index-2.
+ *
+ * @param seq the characters to check
+ * @param index the index after the last or only char forming the code point
+ * @return the code point before the index
+ */
+
+public static int codePointBefore(java.lang.CharSequence seq, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointBefore(char[],int) Character#codePointBefore(char[], int)}.
+ * Returns the code point before index.
+ * This examines only the characters at index-1 and index-2.
+ *
+ * @param text the characters to check
+ * @param index the index after the last or only char forming the code point
+ * @return the code point before the index
+ */
+
+public static int codePointBefore(char[] text, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#codePointBefore(char[],int,int) Character#codePointBefore(char[], int, int)}.
+ * Return the code point before index.
+ * This examines only the characters at index-1 and index-2.
+ *
+ * @param text the characters to check
+ * @param index the index after the last or only char forming the code point
+ * @param limit the start of the valid text
+ * @return the code point before the index
+ */
+
+public static int codePointBefore(char[] text, int index, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#toChars(int,char[],int) Character#toChars(int, char[], int)}.
+ * Writes the chars representing the
+ * code point into the destination at the given index.
+ *
+ * @param cp the code point to convert
+ * @param dst the destination array into which to put the char(s) representing the code point
+ * @param dstIndex the index at which to put the first (or only) char
+ * @return the count of the number of chars written (1 or 2)
+ * @throws java.lang.IllegalArgumentException if cp is not a valid code point
+ */
+
+public static int toChars(int cp, char[] dst, int dstIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Same as {@link java.lang.Character#toChars(int) Character#toChars(int)}.
+ * Returns a char array representing the code point.
+ *
+ * @param cp the code point to convert
+ * @return an array containing the char(s) representing the code point
+ * @throws java.lang.IllegalArgumentException if cp is not a valid code point
+ */
+
+public static char[] toChars(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#getDirectionality(char) Character#getDirectionality(char)} method, for
+ * convenience. Returns a byte representing the directionality of the
+ * character.
+ *
+ * <strong>[icu] Note:</strong> Unlike {@link java.lang.Character#getDirectionality(char) Character#getDirectionality(char)}, this returns
+ * DIRECTIONALITY_LEFT_TO_RIGHT for undefined or out-of-bounds characters.
+ *
+ * <strong>[icu] Note:</strong> The return value must be tested using the constants defined in {@link android.icu.lang.UCharacterDirection UCharacterDirection} and its interface {@link android.icu.lang.UCharacterEnums.ECharacterDirection UCharacterEnums.ECharacterDirection} since the values are different from the ones
+ * defined by <code>java.lang.Character</code>.
+ * @param cp the code point to check
+ * @return the directionality of the code point
+ * @see #getDirection
+ */
+
+public static byte getDirectionality(int cp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#codePointCount(java.lang.CharSequence,int,int) Character#codePointCount(CharSequence, int, int)}
+ * method, for convenience.  Counts the number of code points in the range
+ * of text.
+ * @param text the characters to check
+ * @param start the start of the range
+ * @param limit the limit of the range
+ * @return the number of code points in the range
+ */
+
+public static int codePointCount(java.lang.CharSequence text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#codePointCount(char[],int,int) Character#codePointCount(char[], int, int)} method, for
+ * convenience. Counts the number of code points in the range of text.
+ * @param text the characters to check
+ * @param start the start of the range
+ * @param limit the limit of the range
+ * @return the number of code points in the range
+ */
+
+public static int codePointCount(char[] text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the {@link java.lang.Character#offsetByCodePoints(java.lang.CharSequence,int,int) Character#offsetByCodePoints(CharSequence, int, int)}
+ * method, for convenience.  Adjusts the char index by a code point offset.
+ * @param text the characters to check
+ * @param index the index to adjust
+ * @param codePointOffset the number of code points by which to offset the index
+ * @return the adjusted index
+ */
+
+public static int offsetByCodePoints(java.lang.CharSequence text, int index, int codePointOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Equivalent to the
+ * {@link java.lang.Character#offsetByCodePoints(char[],int,int,int,int) Character#offsetByCodePoints(char[], int, int, int, int)}
+ * method, for convenience.  Adjusts the char index by a code point offset.
+ * @param text the characters to check
+ * @param start the start of the range to check
+ * @param count the length of the range to check
+ * @param index the index to adjust
+ * @param codePointOffset the number of code points by which to offset the index
+ * @return the adjusted index
+ */
+
+public static int offsetByCodePoints(char[] text, int start, int count, int index, int codePointOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Option value for case folding: use default mappings defined in
+ * CaseFolding.txt.
+ */
+
+public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Option value for case folding:
+ * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I
+ * and dotless i appropriately for Turkic languages (tr, az).
+ *
+ * <p>Before Unicode 3.2, CaseFolding.txt contains mappings marked with 'I' that
+ * are to be included for default mappings and
+ * excluded for the Turkic-specific mappings.
+ *
+ * <p>Unicode 3.2 CaseFolding.txt instead contains mappings marked with 'T' that
+ * are to be excluded for default mappings and
+ * included for the Turkic-specific mappings.
+ */
+
+public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+
+/**
+ * Constant U+10FFFF, same as {@link java.lang.Character#MAX_CODE_POINT Character#MAX_CODE_POINT}.
+ */
+
+public static final int MAX_CODE_POINT = 1114111; // 0x10ffff
+
+/**
+ * Constant U+DBFF, same as {@link java.lang.Character#MAX_HIGH_SURROGATE Character#MAX_HIGH_SURROGATE}.
+ */
+
+public static final char MAX_HIGH_SURROGATE = 56319; // 0xdbff '\udbff'
+
+/**
+ * Constant U+DFFF, same as {@link java.lang.Character#MAX_LOW_SURROGATE Character#MAX_LOW_SURROGATE}.
+ */
+
+public static final char MAX_LOW_SURROGATE = 57343; // 0xdfff '\udfff'
+
+/**
+ * Compatibility constant for Java Character's MAX_RADIX.
+ */
+
+public static final int MAX_RADIX = 36; // 0x24
+
+/**
+ * Constant U+DFFF, same as {@link java.lang.Character#MAX_SURROGATE Character#MAX_SURROGATE}.
+ */
+
+public static final char MAX_SURROGATE = 57343; // 0xdfff '\udfff'
+
+/**
+ * The highest Unicode code point value (scalar value), constant U+10FFFF (uses 21 bits).
+ * Same as {@link java.lang.Character#MAX_CODE_POINT Character#MAX_CODE_POINT}.
+ *
+ * <p>Up-to-date Unicode implementation of {@link java.lang.Character#MAX_VALUE Character#MAX_VALUE}
+ * which is still a char with the value U+FFFF.
+ */
+
+public static final int MAX_VALUE = 1114111; // 0x10ffff
+
+/**
+ * Constant U+0000, same as {@link java.lang.Character#MIN_CODE_POINT Character#MIN_CODE_POINT}.
+ */
+
+public static final int MIN_CODE_POINT = 0; // 0x0
+
+/**
+ * Constant U+D800, same as {@link java.lang.Character#MIN_HIGH_SURROGATE Character#MIN_HIGH_SURROGATE}.
+ */
+
+public static final char MIN_HIGH_SURROGATE = 55296; // 0xd800 '\ud800'
+
+/**
+ * Constant U+DC00, same as {@link java.lang.Character#MIN_LOW_SURROGATE Character#MIN_LOW_SURROGATE}.
+ */
+
+public static final char MIN_LOW_SURROGATE = 56320; // 0xdc00 '\udc00'
+
+/**
+ * Compatibility constant for Java Character's MIN_RADIX.
+ */
+
+public static final int MIN_RADIX = 2; // 0x2
+
+/**
+ * Constant U+10000, same as {@link java.lang.Character#MIN_SUPPLEMENTARY_CODE_POINT Character#MIN_SUPPLEMENTARY_CODE_POINT}.
+ */
+
+public static final int MIN_SUPPLEMENTARY_CODE_POINT = 65536; // 0x10000
+
+/**
+ * Constant U+D800, same as {@link java.lang.Character#MIN_SURROGATE Character#MIN_SURROGATE}.
+ */
+
+public static final char MIN_SURROGATE = 55296; // 0xd800 '\ud800'
+
+/**
+ * The lowest Unicode code point value, constant 0.
+ * Same as {@link java.lang.Character#MIN_CODE_POINT Character#MIN_CODE_POINT}, same integer value as {@link java.lang.Character#MIN_VALUE Character#MIN_VALUE}.
+ */
+
+public static final int MIN_VALUE = 0; // 0x0
+
+/**
+ * Special value that is returned by getUnicodeNumericValue(int) when no
+ * numeric value is defined for a code point.
+ * @see #getUnicodeNumericValue
+ */
+
+public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+
+/**
+ * Unicode value used when translating into Unicode encoding form and there
+ * is no existing character.
+ */
+
+public static final int REPLACEMENT_CHAR = 65533; // 0xfffd
+
+/**
+ * The minimum value for Supplementary code points, constant U+10000.
+ * Same as {@link java.lang.Character#MIN_SUPPLEMENTARY_CODE_POINT Character#MIN_SUPPLEMENTARY_CODE_POINT}.
+ */
+
+public static final int SUPPLEMENTARY_MIN_VALUE = 65536; // 0x10000
+
+/**
+ * Do not adjust the titlecasing indexes from BreakIterator::next() indexes;
+ * titlecase exactly the characters at breaks from the iterator.
+ * Option bit for titlecasing APIs that take an options bit set.
+ *
+ * By default, titlecasing will take each break iterator index,
+ * adjust it by looking for the next cased character, and titlecase that one.
+ * Other characters are lowercased.
+ *
+ * This follows Unicode 4 &amp; 5 section 3.13 Default Case Operations:
+ *
+ * R3  toTitlecase(X): Find the word boundaries based on Unicode Standard Annex
+ * #29, "Text Boundaries." Between each pair of word boundaries, find the first
+ * cased character F. If F exists, map F to default_title(F); then map each
+ * subsequent character C to default_lower(C).
+ *
+ * @see #toTitleCase
+ * @see #TITLECASE_NO_LOWERCASE
+ */
+
+public static final int TITLECASE_NO_BREAK_ADJUSTMENT = 512; // 0x200
+
+/**
+ * Do not lowercase non-initial parts of words when titlecasing.
+ * Option bit for titlecasing APIs that take an options bit set.
+ *
+ * By default, titlecasing will titlecase the first cased character
+ * of a word and lowercase all other characters.
+ * With this option, the other characters will not be modified.
+ *
+ * @see #toTitleCase
+ */
+
+public static final int TITLECASE_NO_LOWERCASE = 256; // 0x100
+/**
+ * Bidi Paired Bracket Type constants.
+ *
+ * @see android.icu.lang.UProperty#BIDI_PAIRED_BRACKET_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface BidiPairedBracketType {
+
+/**
+ * Close paired bracket.
+ */
+
+public static final int CLOSE = 2; // 0x2
+
+/**
+ * Not a paired bracket.
+ */
+
+public static final int NONE = 0; // 0x0
+
+/**
+ * Open paired bracket.
+ */
+
+public static final int OPEN = 1; // 0x1
+}
+
+/**
+ * Decomposition Type constants.
+ * @see android.icu.lang.UProperty#DECOMPOSITION_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface DecompositionType {
+
+/**
+ */
+
+public static final int CANONICAL = 1; // 0x1
+
+/**
+ */
+
+public static final int CIRCLE = 3; // 0x3
+
+/**
+ */
+
+public static final int COMPAT = 2; // 0x2
+
+/**
+ */
+
+public static final int FINAL = 4; // 0x4
+
+/**
+ */
+
+public static final int FONT = 5; // 0x5
+
+/**
+ */
+
+public static final int FRACTION = 6; // 0x6
+
+/**
+ */
+
+public static final int INITIAL = 7; // 0x7
+
+/**
+ */
+
+public static final int ISOLATED = 8; // 0x8
+
+/**
+ */
+
+public static final int MEDIAL = 9; // 0x9
+
+/**
+ */
+
+public static final int NARROW = 10; // 0xa
+
+/**
+ */
+
+public static final int NOBREAK = 11; // 0xb
+
+/**
+ */
+
+public static final int NONE = 0; // 0x0
+
+/**
+ */
+
+public static final int SMALL = 12; // 0xc
+
+/**
+ */
+
+public static final int SQUARE = 13; // 0xd
+
+/**
+ */
+
+public static final int SUB = 14; // 0xe
+
+/**
+ */
+
+public static final int SUPER = 15; // 0xf
+
+/**
+ */
+
+public static final int VERTICAL = 16; // 0x10
+
+/**
+ */
+
+public static final int WIDE = 17; // 0x11
+}
+
+/**
+ * East Asian Width constants.
+ * @see android.icu.lang.UProperty#EAST_ASIAN_WIDTH
+ * @see android.icu.lang.UCharacter#getIntPropertyValue
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface EastAsianWidth {
+
+/**
+ */
+
+public static final int AMBIGUOUS = 1; // 0x1
+
+/**
+ */
+
+public static final int FULLWIDTH = 3; // 0x3
+
+/**
+ */
+
+public static final int HALFWIDTH = 2; // 0x2
+
+/**
+ */
+
+public static final int NARROW = 4; // 0x4
+
+/**
+ */
+
+public static final int NEUTRAL = 0; // 0x0
+
+/**
+ */
+
+public static final int WIDE = 5; // 0x5
+}
+
+/**
+ * Grapheme Cluster Break constants.
+ * @see android.icu.lang.UProperty#GRAPHEME_CLUSTER_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface GraphemeClusterBreak {
+
+/**
+ */
+
+public static final int CONTROL = 1; // 0x1
+
+/**
+ */
+
+public static final int CR = 2; // 0x2
+
+/**
+ */
+
+public static final int EXTEND = 3; // 0x3
+
+/***/
+
+public static final int E_BASE = 13; // 0xd
+
+/***/
+
+public static final int E_BASE_GAZ = 14; // 0xe
+
+/***/
+
+public static final int E_MODIFIER = 15; // 0xf
+
+/***/
+
+public static final int GLUE_AFTER_ZWJ = 16; // 0x10
+
+/**
+ */
+
+public static final int L = 4; // 0x4
+
+/**
+ */
+
+public static final int LF = 5; // 0x5
+
+/**
+ */
+
+public static final int LV = 6; // 0x6
+
+/**
+ */
+
+public static final int LVT = 7; // 0x7
+
+/**
+ */
+
+public static final int OTHER = 0; // 0x0
+
+/**
+ */
+
+public static final int PREPEND = 11; // 0xb
+
+/***/
+
+public static final int REGIONAL_INDICATOR = 12; // 0xc
+
+/**
+ */
+
+public static final int SPACING_MARK = 10; // 0xa
+
+/**
+ */
+
+public static final int T = 8; // 0x8
+
+/**
+ */
+
+public static final int V = 9; // 0x9
+
+/***/
+
+public static final int ZWJ = 17; // 0x11
+}
+
+/**
+ * Hangul Syllable Type constants.
+ *
+ * @see android.icu.lang.UProperty#HANGUL_SYLLABLE_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface HangulSyllableType {
+
+/**
+ */
+
+public static final int LEADING_JAMO = 1; // 0x1
+
+/**
+ */
+
+public static final int LVT_SYLLABLE = 5; // 0x5
+
+/**
+ */
+
+public static final int LV_SYLLABLE = 4; // 0x4
+
+/**
+ */
+
+public static final int NOT_APPLICABLE = 0; // 0x0
+
+/**
+ */
+
+public static final int TRAILING_JAMO = 3; // 0x3
+
+/**
+ */
+
+public static final int VOWEL_JAMO = 2; // 0x2
+}
+
+/**
+ * Indic Positional Category constants.
+ *
+ * @see android.icu.lang.UProperty#INDIC_POSITIONAL_CATEGORY
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface IndicPositionalCategory {
+
+/***/
+
+public static final int BOTTOM = 1; // 0x1
+
+/***/
+
+public static final int BOTTOM_AND_LEFT = 2; // 0x2
+
+/***/
+
+public static final int BOTTOM_AND_RIGHT = 3; // 0x3
+
+/***/
+
+public static final int LEFT = 4; // 0x4
+
+/***/
+
+public static final int LEFT_AND_RIGHT = 5; // 0x5
+
+/***/
+
+public static final int NA = 0; // 0x0
+
+/***/
+
+public static final int OVERSTRUCK = 6; // 0x6
+
+/***/
+
+public static final int RIGHT = 7; // 0x7
+
+/***/
+
+public static final int TOP = 8; // 0x8
+
+/***/
+
+public static final int TOP_AND_BOTTOM = 9; // 0x9
+
+/***/
+
+public static final int TOP_AND_BOTTOM_AND_LEFT = 15; // 0xf
+
+/***/
+
+public static final int TOP_AND_BOTTOM_AND_RIGHT = 10; // 0xa
+
+/***/
+
+public static final int TOP_AND_LEFT = 11; // 0xb
+
+/***/
+
+public static final int TOP_AND_LEFT_AND_RIGHT = 12; // 0xc
+
+/***/
+
+public static final int TOP_AND_RIGHT = 13; // 0xd
+
+/***/
+
+public static final int VISUAL_ORDER_LEFT = 14; // 0xe
+}
+
+/**
+ * Indic Syllabic Category constants.
+ *
+ * @see android.icu.lang.UProperty#INDIC_SYLLABIC_CATEGORY
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface IndicSyllabicCategory {
+
+/***/
+
+public static final int AVAGRAHA = 1; // 0x1
+
+/***/
+
+public static final int BINDU = 2; // 0x2
+
+/***/
+
+public static final int BRAHMI_JOINING_NUMBER = 3; // 0x3
+
+/***/
+
+public static final int CANTILLATION_MARK = 4; // 0x4
+
+/***/
+
+public static final int CONSONANT = 5; // 0x5
+
+/***/
+
+public static final int CONSONANT_DEAD = 6; // 0x6
+
+/***/
+
+public static final int CONSONANT_FINAL = 7; // 0x7
+
+/***/
+
+public static final int CONSONANT_HEAD_LETTER = 8; // 0x8
+
+/***/
+
+public static final int CONSONANT_INITIAL_POSTFIXED = 9; // 0x9
+
+/***/
+
+public static final int CONSONANT_KILLER = 10; // 0xa
+
+/***/
+
+public static final int CONSONANT_MEDIAL = 11; // 0xb
+
+/***/
+
+public static final int CONSONANT_PLACEHOLDER = 12; // 0xc
+
+/***/
+
+public static final int CONSONANT_PRECEDING_REPHA = 13; // 0xd
+
+/***/
+
+public static final int CONSONANT_PREFIXED = 14; // 0xe
+
+/***/
+
+public static final int CONSONANT_SUBJOINED = 15; // 0xf
+
+/***/
+
+public static final int CONSONANT_SUCCEEDING_REPHA = 16; // 0x10
+
+/***/
+
+public static final int CONSONANT_WITH_STACKER = 17; // 0x11
+
+/***/
+
+public static final int GEMINATION_MARK = 18; // 0x12
+
+/***/
+
+public static final int INVISIBLE_STACKER = 19; // 0x13
+
+/***/
+
+public static final int JOINER = 20; // 0x14
+
+/***/
+
+public static final int MODIFYING_LETTER = 21; // 0x15
+
+/***/
+
+public static final int NON_JOINER = 22; // 0x16
+
+/***/
+
+public static final int NUKTA = 23; // 0x17
+
+/***/
+
+public static final int NUMBER = 24; // 0x18
+
+/***/
+
+public static final int NUMBER_JOINER = 25; // 0x19
+
+/***/
+
+public static final int OTHER = 0; // 0x0
+
+/***/
+
+public static final int PURE_KILLER = 26; // 0x1a
+
+/***/
+
+public static final int REGISTER_SHIFTER = 27; // 0x1b
+
+/***/
+
+public static final int SYLLABLE_MODIFIER = 28; // 0x1c
+
+/***/
+
+public static final int TONE_LETTER = 29; // 0x1d
+
+/***/
+
+public static final int TONE_MARK = 30; // 0x1e
+
+/***/
+
+public static final int VIRAMA = 31; // 0x1f
+
+/***/
+
+public static final int VISARGA = 32; // 0x20
+
+/***/
+
+public static final int VOWEL = 33; // 0x21
+
+/***/
+
+public static final int VOWEL_DEPENDENT = 34; // 0x22
+
+/***/
+
+public static final int VOWEL_INDEPENDENT = 35; // 0x23
+}
+
+/**
+ * Joining Group constants.
+ * @see android.icu.lang.UProperty#JOINING_GROUP
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface JoiningGroup {
+
+/***/
+
+public static final int AFRICAN_FEH = 86; // 0x56
+
+/***/
+
+public static final int AFRICAN_NOON = 87; // 0x57
+
+/***/
+
+public static final int AFRICAN_QAF = 88; // 0x58
+
+/**
+ */
+
+public static final int AIN = 1; // 0x1
+
+/**
+ */
+
+public static final int ALAPH = 2; // 0x2
+
+/**
+ */
+
+public static final int ALEF = 3; // 0x3
+
+/**
+ */
+
+public static final int BEH = 4; // 0x4
+
+/**
+ */
+
+public static final int BETH = 5; // 0x5
+
+/**
+ */
+
+public static final int BURUSHASKI_YEH_BARREE = 54; // 0x36
+
+/**
+ */
+
+public static final int DAL = 6; // 0x6
+
+/**
+ */
+
+public static final int DALATH_RISH = 7; // 0x7
+
+/**
+ */
+
+public static final int E = 8; // 0x8
+
+/***/
+
+public static final int FARSI_YEH = 55; // 0x37
+
+/**
+ */
+
+public static final int FE = 51; // 0x33
+
+/**
+ */
+
+public static final int FEH = 9; // 0x9
+
+/**
+ */
+
+public static final int FINAL_SEMKATH = 10; // 0xa
+
+/**
+ */
+
+public static final int GAF = 11; // 0xb
+
+/**
+ */
+
+public static final int GAMAL = 12; // 0xc
+
+/**
+ */
+
+public static final int HAH = 13; // 0xd
+
+/**
+ */
+
+public static final int HAMZA_ON_HEH_GOAL = 14; // 0xe
+
+/***/
+
+public static final int HANIFI_ROHINGYA_KINNA_YA = 100; // 0x64
+
+/***/
+
+public static final int HANIFI_ROHINGYA_PA = 101; // 0x65
+
+/**
+ */
+
+public static final int HE = 15; // 0xf
+
+/**
+ */
+
+public static final int HEH = 16; // 0x10
+
+/**
+ */
+
+public static final int HEH_GOAL = 17; // 0x11
+
+/**
+ */
+
+public static final int HETH = 18; // 0x12
+
+/**
+ */
+
+public static final int KAF = 19; // 0x13
+
+/**
+ */
+
+public static final int KAPH = 20; // 0x14
+
+/**
+ */
+
+public static final int KHAPH = 52; // 0x34
+
+/**
+ */
+
+public static final int KNOTTED_HEH = 21; // 0x15
+
+/**
+ */
+
+public static final int LAM = 22; // 0x16
+
+/**
+ */
+
+public static final int LAMADH = 23; // 0x17
+
+/***/
+
+public static final int MALAYALAM_BHA = 89; // 0x59
+
+/***/
+
+public static final int MALAYALAM_JA = 90; // 0x5a
+
+/***/
+
+public static final int MALAYALAM_LLA = 91; // 0x5b
+
+/***/
+
+public static final int MALAYALAM_LLLA = 92; // 0x5c
+
+/***/
+
+public static final int MALAYALAM_NGA = 93; // 0x5d
+
+/***/
+
+public static final int MALAYALAM_NNA = 94; // 0x5e
+
+/***/
+
+public static final int MALAYALAM_NNNA = 95; // 0x5f
+
+/***/
+
+public static final int MALAYALAM_NYA = 96; // 0x60
+
+/***/
+
+public static final int MALAYALAM_RA = 97; // 0x61
+
+/***/
+
+public static final int MALAYALAM_SSA = 98; // 0x62
+
+/***/
+
+public static final int MALAYALAM_TTA = 99; // 0x63
+
+/***/
+
+public static final int MANICHAEAN_ALEPH = 58; // 0x3a
+
+/***/
+
+public static final int MANICHAEAN_AYIN = 59; // 0x3b
+
+/***/
+
+public static final int MANICHAEAN_BETH = 60; // 0x3c
+
+/***/
+
+public static final int MANICHAEAN_DALETH = 61; // 0x3d
+
+/***/
+
+public static final int MANICHAEAN_DHAMEDH = 62; // 0x3e
+
+/***/
+
+public static final int MANICHAEAN_FIVE = 63; // 0x3f
+
+/***/
+
+public static final int MANICHAEAN_GIMEL = 64; // 0x40
+
+/***/
+
+public static final int MANICHAEAN_HETH = 65; // 0x41
+
+/***/
+
+public static final int MANICHAEAN_HUNDRED = 66; // 0x42
+
+/***/
+
+public static final int MANICHAEAN_KAPH = 67; // 0x43
+
+/***/
+
+public static final int MANICHAEAN_LAMEDH = 68; // 0x44
+
+/***/
+
+public static final int MANICHAEAN_MEM = 69; // 0x45
+
+/***/
+
+public static final int MANICHAEAN_NUN = 70; // 0x46
+
+/***/
+
+public static final int MANICHAEAN_ONE = 71; // 0x47
+
+/***/
+
+public static final int MANICHAEAN_PE = 72; // 0x48
+
+/***/
+
+public static final int MANICHAEAN_QOPH = 73; // 0x49
+
+/***/
+
+public static final int MANICHAEAN_RESH = 74; // 0x4a
+
+/***/
+
+public static final int MANICHAEAN_SADHE = 75; // 0x4b
+
+/***/
+
+public static final int MANICHAEAN_SAMEKH = 76; // 0x4c
+
+/***/
+
+public static final int MANICHAEAN_TAW = 77; // 0x4d
+
+/***/
+
+public static final int MANICHAEAN_TEN = 78; // 0x4e
+
+/***/
+
+public static final int MANICHAEAN_TETH = 79; // 0x4f
+
+/***/
+
+public static final int MANICHAEAN_THAMEDH = 80; // 0x50
+
+/***/
+
+public static final int MANICHAEAN_TWENTY = 81; // 0x51
+
+/***/
+
+public static final int MANICHAEAN_WAW = 82; // 0x52
+
+/***/
+
+public static final int MANICHAEAN_YODH = 83; // 0x53
+
+/***/
+
+public static final int MANICHAEAN_ZAYIN = 84; // 0x54
+
+/**
+ */
+
+public static final int MEEM = 24; // 0x18
+
+/**
+ */
+
+public static final int MIM = 25; // 0x19
+
+/**
+ */
+
+public static final int NOON = 26; // 0x1a
+
+/**
+ */
+
+public static final int NO_JOINING_GROUP = 0; // 0x0
+
+/**
+ */
+
+public static final int NUN = 27; // 0x1b
+
+/***/
+
+public static final int NYA = 56; // 0x38
+
+/**
+ */
+
+public static final int PE = 28; // 0x1c
+
+/**
+ */
+
+public static final int QAF = 29; // 0x1d
+
+/**
+ */
+
+public static final int QAPH = 30; // 0x1e
+
+/**
+ */
+
+public static final int REH = 31; // 0x1f
+
+/**
+ */
+
+public static final int REVERSED_PE = 32; // 0x20
+
+/***/
+
+public static final int ROHINGYA_YEH = 57; // 0x39
+
+/**
+ */
+
+public static final int SAD = 33; // 0x21
+
+/**
+ */
+
+public static final int SADHE = 34; // 0x22
+
+/**
+ */
+
+public static final int SEEN = 35; // 0x23
+
+/**
+ */
+
+public static final int SEMKATH = 36; // 0x24
+
+/**
+ */
+
+public static final int SHIN = 37; // 0x25
+
+/***/
+
+public static final int STRAIGHT_WAW = 85; // 0x55
+
+/**
+ */
+
+public static final int SWASH_KAF = 38; // 0x26
+
+/**
+ */
+
+public static final int SYRIAC_WAW = 39; // 0x27
+
+/**
+ */
+
+public static final int TAH = 40; // 0x28
+
+/**
+ */
+
+public static final int TAW = 41; // 0x29
+
+/**
+ */
+
+public static final int TEH_MARBUTA = 42; // 0x2a
+
+/***/
+
+public static final int TEH_MARBUTA_GOAL = 14; // 0xe
+
+/**
+ */
+
+public static final int TETH = 43; // 0x2b
+
+/**
+ */
+
+public static final int WAW = 44; // 0x2c
+
+/**
+ */
+
+public static final int YEH = 45; // 0x2d
+
+/**
+ */
+
+public static final int YEH_BARREE = 46; // 0x2e
+
+/**
+ */
+
+public static final int YEH_WITH_TAIL = 47; // 0x2f
+
+/**
+ */
+
+public static final int YUDH = 48; // 0x30
+
+/**
+ */
+
+public static final int YUDH_HE = 49; // 0x31
+
+/**
+ */
+
+public static final int ZAIN = 50; // 0x32
+
+/**
+ */
+
+public static final int ZHAIN = 53; // 0x35
+}
+
+/**
+ * Joining Type constants.
+ * @see android.icu.lang.UProperty#JOINING_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface JoiningType {
+
+/**
+ */
+
+public static final int DUAL_JOINING = 2; // 0x2
+
+/**
+ */
+
+public static final int JOIN_CAUSING = 1; // 0x1
+
+/**
+ */
+
+public static final int LEFT_JOINING = 3; // 0x3
+
+/**
+ */
+
+public static final int NON_JOINING = 0; // 0x0
+
+/**
+ */
+
+public static final int RIGHT_JOINING = 4; // 0x4
+
+/**
+ */
+
+public static final int TRANSPARENT = 5; // 0x5
+}
+
+/**
+ * Line Break constants.
+ * @see android.icu.lang.UProperty#LINE_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface LineBreak {
+
+/**
+ */
+
+public static final int ALPHABETIC = 2; // 0x2
+
+/**
+ */
+
+public static final int AMBIGUOUS = 1; // 0x1
+
+/**
+ */
+
+public static final int BREAK_AFTER = 4; // 0x4
+
+/**
+ */
+
+public static final int BREAK_BEFORE = 5; // 0x5
+
+/**
+ */
+
+public static final int BREAK_BOTH = 3; // 0x3
+
+/**
+ */
+
+public static final int BREAK_SYMBOLS = 27; // 0x1b
+
+/**
+ */
+
+public static final int CARRIAGE_RETURN = 10; // 0xa
+
+/***/
+
+public static final int CLOSE_PARENTHESIS = 36; // 0x24
+
+/**
+ */
+
+public static final int CLOSE_PUNCTUATION = 8; // 0x8
+
+/**
+ */
+
+public static final int COMBINING_MARK = 9; // 0x9
+
+/**
+ */
+
+public static final int COMPLEX_CONTEXT = 24; // 0x18
+
+/***/
+
+public static final int CONDITIONAL_JAPANESE_STARTER = 37; // 0x25
+
+/**
+ */
+
+public static final int CONTINGENT_BREAK = 7; // 0x7
+
+/**
+ */
+
+public static final int EXCLAMATION = 11; // 0xb
+
+/***/
+
+public static final int E_BASE = 40; // 0x28
+
+/***/
+
+public static final int E_MODIFIER = 41; // 0x29
+
+/**
+ */
+
+public static final int GLUE = 12; // 0xc
+
+/**
+ */
+
+public static final int H2 = 31; // 0x1f
+
+/**
+ */
+
+public static final int H3 = 32; // 0x20
+
+/***/
+
+public static final int HEBREW_LETTER = 38; // 0x26
+
+/**
+ */
+
+public static final int HYPHEN = 13; // 0xd
+
+/**
+ */
+
+public static final int IDEOGRAPHIC = 14; // 0xe
+
+/**
+ */
+
+public static final int INFIX_NUMERIC = 16; // 0x10
+
+/**
+ * Renamed from the misspelled "inseperable" in Unicode 4.0.1.
+ */
+
+public static final int INSEPARABLE = 15; // 0xf
+
+/**
+ * @see #INSEPARABLE
+ */
+
+public static final int INSEPERABLE = 15; // 0xf
+
+/**
+ */
+
+public static final int JL = 33; // 0x21
+
+/**
+ */
+
+public static final int JT = 34; // 0x22
+
+/**
+ */
+
+public static final int JV = 35; // 0x23
+
+/**
+ */
+
+public static final int LINE_FEED = 17; // 0x11
+
+/**
+ */
+
+public static final int MANDATORY_BREAK = 6; // 0x6
+
+/**
+ */
+
+public static final int NEXT_LINE = 29; // 0x1d
+
+/**
+ */
+
+public static final int NONSTARTER = 18; // 0x12
+
+/**
+ */
+
+public static final int NUMERIC = 19; // 0x13
+
+/**
+ */
+
+public static final int OPEN_PUNCTUATION = 20; // 0x14
+
+/**
+ */
+
+public static final int POSTFIX_NUMERIC = 21; // 0x15
+
+/**
+ */
+
+public static final int PREFIX_NUMERIC = 22; // 0x16
+
+/**
+ */
+
+public static final int QUOTATION = 23; // 0x17
+
+/***/
+
+public static final int REGIONAL_INDICATOR = 39; // 0x27
+
+/**
+ */
+
+public static final int SPACE = 26; // 0x1a
+
+/**
+ */
+
+public static final int SURROGATE = 25; // 0x19
+
+/**
+ */
+
+public static final int UNKNOWN = 0; // 0x0
+
+/**
+ */
+
+public static final int WORD_JOINER = 30; // 0x1e
+
+/***/
+
+public static final int ZWJ = 42; // 0x2a
+
+/**
+ */
+
+public static final int ZWSPACE = 28; // 0x1c
+}
+
+/**
+ * Numeric Type constants.
+ * @see android.icu.lang.UProperty#NUMERIC_TYPE
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface NumericType {
+
+/**
+ */
+
+public static final int DECIMAL = 1; // 0x1
+
+/**
+ */
+
+public static final int DIGIT = 2; // 0x2
+
+/**
+ */
+
+public static final int NONE = 0; // 0x0
+
+/**
+ */
+
+public static final int NUMERIC = 3; // 0x3
+}
+
+/**
+ * Sentence Break constants.
+ * @see android.icu.lang.UProperty#SENTENCE_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface SentenceBreak {
+
+/**
+ */
+
+public static final int ATERM = 1; // 0x1
+
+/**
+ */
+
+public static final int CLOSE = 2; // 0x2
+
+/**
+ */
+
+public static final int CR = 11; // 0xb
+
+/**
+ */
+
+public static final int EXTEND = 12; // 0xc
+
+/**
+ */
+
+public static final int FORMAT = 3; // 0x3
+
+/**
+ */
+
+public static final int LF = 13; // 0xd
+
+/**
+ */
+
+public static final int LOWER = 4; // 0x4
+
+/**
+ */
+
+public static final int NUMERIC = 5; // 0x5
+
+/**
+ */
+
+public static final int OLETTER = 6; // 0x6
+
+/**
+ */
+
+public static final int OTHER = 0; // 0x0
+
+/**
+ */
+
+public static final int SCONTINUE = 14; // 0xe
+
+/**
+ */
+
+public static final int SEP = 7; // 0x7
+
+/**
+ */
+
+public static final int SP = 8; // 0x8
+
+/**
+ */
+
+public static final int STERM = 9; // 0x9
+
+/**
+ */
+
+public static final int UPPER = 10; // 0xa
+}
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.lang.Character.UnicodeBlock}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * A family of character subsets representing the character blocks in the
+ * Unicode specification, generated from Unicode Data file Blocks.txt.
+ * Character blocks generally define characters used for a specific script
+ * or purpose. A character is contained by at most one Unicode block.
+ *
+ * <strong>[icu] Note:</strong> All fields named XXX_ID are specific to ICU.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class UnicodeBlock extends java.lang.Character.Subset {
+
+private UnicodeBlock() { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the only instance of the UnicodeBlock with the argument ID.
+ * If no such ID exists, a INVALID_CODE UnicodeBlock will be returned.
+ * @param id UnicodeBlock ID
+ * @return the only instance of the UnicodeBlock with the argument ID
+ *         if it exists, otherwise a INVALID_CODE UnicodeBlock will be
+ *         returned.
+ */
+
+public static android.icu.lang.UCharacter.UnicodeBlock getInstance(int id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Unicode allocation block that contains the code point,
+ * or null if the code point is not a member of a defined block.
+ * @param ch code point to be tested
+ * @return the Unicode allocation block that contains the code point
+ */
+
+public static android.icu.lang.UCharacter.UnicodeBlock of(int ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Alternative to the {@link java.lang.Character.UnicodeBlock#forName(String)} method.
+ * Returns the Unicode block with the given name. <strong>[icu] Note:</strong> Unlike
+ * {@link java.lang.Character.UnicodeBlock#forName(String)}, this only matches
+ * against the official UCD name and the Java block name
+ * (ignoring case).
+ * @param blockName the name of the block to match
+ * @return the UnicodeBlock with that name
+ * @throws java.lang.IllegalArgumentException if the blockName could not be matched
+ */
+
+public static android.icu.lang.UCharacter.UnicodeBlock forName(java.lang.String blockName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {icu} Returns the type ID of this Unicode block
+ * @return integer type ID of this Unicode block
+ */
+
+public int getID() { throw new RuntimeException("Stub!"); }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ADLAM;
+static { ADLAM = null; }
+
+/***/
+
+public static final int ADLAM_ID = 263; // 0x107
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock AEGEAN_NUMBERS;
+static { AEGEAN_NUMBERS = null; }
+
+/**
+ */
+
+public static final int AEGEAN_NUMBERS_ID = 119; // 0x77
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock AHOM;
+static { AHOM = null; }
+
+/***/
+
+public static final int AHOM_ID = 253; // 0xfd
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ALCHEMICAL_SYMBOLS;
+static { ALCHEMICAL_SYMBOLS = null; }
+
+/***/
+
+public static final int ALCHEMICAL_SYMBOLS_ID = 208; // 0xd0
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ALPHABETIC_PRESENTATION_FORMS;
+static { ALPHABETIC_PRESENTATION_FORMS = null; }
+
+/**
+ */
+
+public static final int ALPHABETIC_PRESENTATION_FORMS_ID = 80; // 0x50
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANATOLIAN_HIEROGLYPHS;
+static { ANATOLIAN_HIEROGLYPHS = null; }
+
+/***/
+
+public static final int ANATOLIAN_HIEROGLYPHS_ID = 254; // 0xfe
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION;
+static { ANCIENT_GREEK_MUSICAL_NOTATION = null; }
+
+/**
+ */
+
+public static final int ANCIENT_GREEK_MUSICAL_NOTATION_ID = 126; // 0x7e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_GREEK_NUMBERS;
+static { ANCIENT_GREEK_NUMBERS = null; }
+
+/**
+ */
+
+public static final int ANCIENT_GREEK_NUMBERS_ID = 127; // 0x7f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ANCIENT_SYMBOLS;
+static { ANCIENT_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int ANCIENT_SYMBOLS_ID = 165; // 0xa5
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC;
+static { ARABIC = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_EXTENDED_A;
+static { ARABIC_EXTENDED_A = null; }
+
+/***/
+
+public static final int ARABIC_EXTENDED_A_ID = 210; // 0xd2
+
+/**
+ */
+
+public static final int ARABIC_ID = 12; // 0xc
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS;
+static { ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS = null; }
+
+/***/
+
+public static final int ARABIC_MATHEMATICAL_ALPHABETIC_SYMBOLS_ID = 211; // 0xd3
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_A;
+static { ARABIC_PRESENTATION_FORMS_A = null; }
+
+/**
+ */
+
+public static final int ARABIC_PRESENTATION_FORMS_A_ID = 81; // 0x51
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_PRESENTATION_FORMS_B;
+static { ARABIC_PRESENTATION_FORMS_B = null; }
+
+/**
+ */
+
+public static final int ARABIC_PRESENTATION_FORMS_B_ID = 85; // 0x55
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARABIC_SUPPLEMENT;
+static { ARABIC_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int ARABIC_SUPPLEMENT_ID = 128; // 0x80
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARMENIAN;
+static { ARMENIAN = null; }
+
+/**
+ */
+
+public static final int ARMENIAN_ID = 10; // 0xa
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ARROWS;
+static { ARROWS = null; }
+
+/**
+ */
+
+public static final int ARROWS_ID = 46; // 0x2e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock AVESTAN;
+static { AVESTAN = null; }
+
+/***/
+
+public static final int AVESTAN_ID = 188; // 0xbc
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BALINESE;
+static { BALINESE = null; }
+
+/**
+ */
+
+public static final int BALINESE_ID = 147; // 0x93
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM;
+static { BAMUM = null; }
+
+/***/
+
+public static final int BAMUM_ID = 177; // 0xb1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BAMUM_SUPPLEMENT;
+static { BAMUM_SUPPLEMENT = null; }
+
+/***/
+
+public static final int BAMUM_SUPPLEMENT_ID = 202; // 0xca
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BASIC_LATIN;
+static { BASIC_LATIN = null; }
+
+/**
+ */
+
+public static final int BASIC_LATIN_ID = 1; // 0x1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BASSA_VAH;
+static { BASSA_VAH = null; }
+
+/***/
+
+public static final int BASSA_VAH_ID = 221; // 0xdd
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BATAK;
+static { BATAK = null; }
+
+/***/
+
+public static final int BATAK_ID = 199; // 0xc7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BENGALI;
+static { BENGALI = null; }
+
+/**
+ */
+
+public static final int BENGALI_ID = 16; // 0x10
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BHAIKSUKI;
+static { BHAIKSUKI = null; }
+
+/***/
+
+public static final int BHAIKSUKI_ID = 264; // 0x108
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BLOCK_ELEMENTS;
+static { BLOCK_ELEMENTS = null; }
+
+/**
+ */
+
+public static final int BLOCK_ELEMENTS_ID = 53; // 0x35
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO;
+static { BOPOMOFO = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BOPOMOFO_EXTENDED;
+static { BOPOMOFO_EXTENDED = null; }
+
+/**
+ */
+
+public static final int BOPOMOFO_EXTENDED_ID = 67; // 0x43
+
+/**
+ */
+
+public static final int BOPOMOFO_ID = 64; // 0x40
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BOX_DRAWING;
+static { BOX_DRAWING = null; }
+
+/**
+ */
+
+public static final int BOX_DRAWING_ID = 52; // 0x34
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BRAHMI;
+static { BRAHMI = null; }
+
+/***/
+
+public static final int BRAHMI_ID = 201; // 0xc9
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BRAILLE_PATTERNS;
+static { BRAILLE_PATTERNS = null; }
+
+/**
+ */
+
+public static final int BRAILLE_PATTERNS_ID = 57; // 0x39
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BUGINESE;
+static { BUGINESE = null; }
+
+/**
+ */
+
+public static final int BUGINESE_ID = 129; // 0x81
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BUHID;
+static { BUHID = null; }
+
+/**
+ */
+
+public static final int BUHID_ID = 100; // 0x64
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock BYZANTINE_MUSICAL_SYMBOLS;
+static { BYZANTINE_MUSICAL_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int BYZANTINE_MUSICAL_SYMBOLS_ID = 91; // 0x5b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CARIAN;
+static { CARIAN = null; }
+
+/**
+ */
+
+public static final int CARIAN_ID = 168; // 0xa8
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CAUCASIAN_ALBANIAN;
+static { CAUCASIAN_ALBANIAN = null; }
+
+/***/
+
+public static final int CAUCASIAN_ALBANIAN_ID = 222; // 0xde
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHAKMA;
+static { CHAKMA = null; }
+
+/***/
+
+public static final int CHAKMA_ID = 212; // 0xd4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHAM;
+static { CHAM = null; }
+
+/**
+ */
+
+public static final int CHAM_ID = 164; // 0xa4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE;
+static { CHEROKEE = null; }
+
+/**
+ */
+
+public static final int CHEROKEE_ID = 32; // 0x20
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHEROKEE_SUPPLEMENT;
+static { CHEROKEE_SUPPLEMENT = null; }
+
+/***/
+
+public static final int CHEROKEE_SUPPLEMENT_ID = 255; // 0xff
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHESS_SYMBOLS;
+static { CHESS_SYMBOLS = null; }
+
+/***/
+
+public static final int CHESS_SYMBOLS_ID = 281; // 0x119
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CHORASMIAN;
+static { CHORASMIAN = null; }
+
+/***/
+
+public static final int CHORASMIAN_ID = 301; // 0x12d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY;
+static { CJK_COMPATIBILITY = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_FORMS;
+static { CJK_COMPATIBILITY_FORMS = null; }
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_FORMS_ID = 83; // 0x53
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_ID = 69; // 0x45
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS;
+static { CJK_COMPATIBILITY_IDEOGRAPHS = null; }
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_IDEOGRAPHS_ID = 79; // 0x4f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
+static { CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT_ID = 95; // 0x5f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_RADICALS_SUPPLEMENT;
+static { CJK_RADICALS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int CJK_RADICALS_SUPPLEMENT_ID = 58; // 0x3a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_STROKES;
+static { CJK_STROKES = null; }
+
+/**
+ */
+
+public static final int CJK_STROKES_ID = 130; // 0x82
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_SYMBOLS_AND_PUNCTUATION;
+static { CJK_SYMBOLS_AND_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int CJK_SYMBOLS_AND_PUNCTUATION_ID = 61; // 0x3d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS;
+static { CJK_UNIFIED_IDEOGRAPHS = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A = null; }
+
+/**
+ */
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A_ID = 70; // 0x46
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B = null; }
+
+/**
+ */
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B_ID = 94; // 0x5e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C_ID = 197; // 0xc5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D_ID = 209; // 0xd1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_E_ID = 256; // 0x100
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F_ID = 274; // 0x112
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G;
+static { CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G = null; }
+
+/***/
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_EXTENSION_G_ID = 302; // 0x12e
+
+/**
+ */
+
+public static final int CJK_UNIFIED_IDEOGRAPHS_ID = 71; // 0x47
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS;
+static { COMBINING_DIACRITICAL_MARKS = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_EXTENDED;
+static { COMBINING_DIACRITICAL_MARKS_EXTENDED = null; }
+
+/***/
+
+public static final int COMBINING_DIACRITICAL_MARKS_EXTENDED_ID = 224; // 0xe0
+
+/**
+ */
+
+public static final int COMBINING_DIACRITICAL_MARKS_ID = 7; // 0x7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT;
+static { COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int COMBINING_DIACRITICAL_MARKS_SUPPLEMENT_ID = 131; // 0x83
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_HALF_MARKS;
+static { COMBINING_HALF_MARKS = null; }
+
+/**
+ */
+
+public static final int COMBINING_HALF_MARKS_ID = 82; // 0x52
+
+/**
+ * Unicode 3.2 renames this block to "Combining Diacritical Marks for
+ * Symbols".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS;
+static { COMBINING_MARKS_FOR_SYMBOLS = null; }
+
+/**
+ * Unicode 3.2 renames this block to "Combining Diacritical Marks for
+ * Symbols".
+ */
+
+public static final int COMBINING_MARKS_FOR_SYMBOLS_ID = 43; // 0x2b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COMMON_INDIC_NUMBER_FORMS;
+static { COMMON_INDIC_NUMBER_FORMS = null; }
+
+/***/
+
+public static final int COMMON_INDIC_NUMBER_FORMS_ID = 178; // 0xb2
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CONTROL_PICTURES;
+static { CONTROL_PICTURES = null; }
+
+/**
+ */
+
+public static final int CONTROL_PICTURES_ID = 49; // 0x31
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC;
+static { COPTIC = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COPTIC_EPACT_NUMBERS;
+static { COPTIC_EPACT_NUMBERS = null; }
+
+/***/
+
+public static final int COPTIC_EPACT_NUMBERS_ID = 223; // 0xdf
+
+/**
+ */
+
+public static final int COPTIC_ID = 132; // 0x84
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock COUNTING_ROD_NUMERALS;
+static { COUNTING_ROD_NUMERALS = null; }
+
+/**
+ */
+
+public static final int COUNTING_ROD_NUMERALS_ID = 154; // 0x9a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM;
+static { CUNEIFORM = null; }
+
+/**
+ */
+
+public static final int CUNEIFORM_ID = 152; // 0x98
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION;
+static { CUNEIFORM_NUMBERS_AND_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int CUNEIFORM_NUMBERS_AND_PUNCTUATION_ID = 153; // 0x99
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CURRENCY_SYMBOLS;
+static { CURRENCY_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int CURRENCY_SYMBOLS_ID = 42; // 0x2a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYPRIOT_SYLLABARY;
+static { CYPRIOT_SYLLABARY = null; }
+
+/**
+ */
+
+public static final int CYPRIOT_SYLLABARY_ID = 123; // 0x7b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC;
+static { CYRILLIC = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_A;
+static { CYRILLIC_EXTENDED_A = null; }
+
+/**
+ */
+
+public static final int CYRILLIC_EXTENDED_A_ID = 158; // 0x9e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_B;
+static { CYRILLIC_EXTENDED_B = null; }
+
+/**
+ */
+
+public static final int CYRILLIC_EXTENDED_B_ID = 160; // 0xa0
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_EXTENDED_C;
+static { CYRILLIC_EXTENDED_C = null; }
+
+/***/
+
+public static final int CYRILLIC_EXTENDED_C_ID = 265; // 0x109
+
+/**
+ */
+
+public static final int CYRILLIC_ID = 9; // 0x9
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENT;
+static { CYRILLIC_SUPPLEMENT = null; }
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock CYRILLIC_SUPPLEMENTARY;
+static { CYRILLIC_SUPPLEMENTARY = null; }
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final int CYRILLIC_SUPPLEMENTARY_ID = 97; // 0x61
+
+/**
+ * Unicode 4.0.1 renames the "Cyrillic Supplementary" block to "Cyrillic Supplement".
+ */
+
+public static final int CYRILLIC_SUPPLEMENT_ID = 97; // 0x61
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DESERET;
+static { DESERET = null; }
+
+/**
+ */
+
+public static final int DESERET_ID = 90; // 0x5a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI;
+static { DEVANAGARI = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DEVANAGARI_EXTENDED;
+static { DEVANAGARI_EXTENDED = null; }
+
+/***/
+
+public static final int DEVANAGARI_EXTENDED_ID = 179; // 0xb3
+
+/**
+ */
+
+public static final int DEVANAGARI_ID = 15; // 0xf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DINGBATS;
+static { DINGBATS = null; }
+
+/**
+ */
+
+public static final int DINGBATS_ID = 56; // 0x38
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DIVES_AKURU;
+static { DIVES_AKURU = null; }
+
+/***/
+
+public static final int DIVES_AKURU_ID = 303; // 0x12f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DOGRA;
+static { DOGRA = null; }
+
+/***/
+
+public static final int DOGRA_ID = 282; // 0x11a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DOMINO_TILES;
+static { DOMINO_TILES = null; }
+
+/**
+ */
+
+public static final int DOMINO_TILES_ID = 171; // 0xab
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock DUPLOYAN;
+static { DUPLOYAN = null; }
+
+/***/
+
+public static final int DUPLOYAN_ID = 225; // 0xe1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EARLY_DYNASTIC_CUNEIFORM;
+static { EARLY_DYNASTIC_CUNEIFORM = null; }
+
+/***/
+
+public static final int EARLY_DYNASTIC_CUNEIFORM_ID = 257; // 0x101
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPHS;
+static { EGYPTIAN_HIEROGLYPHS = null; }
+
+/***/
+
+public static final int EGYPTIAN_HIEROGLYPHS_ID = 194; // 0xc2
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS;
+static { EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS = null; }
+
+/***/
+
+public static final int EGYPTIAN_HIEROGLYPH_FORMAT_CONTROLS_ID = 292; // 0x124
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ELBASAN;
+static { ELBASAN = null; }
+
+/***/
+
+public static final int ELBASAN_ID = 226; // 0xe2
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ELYMAIC;
+static { ELYMAIC = null; }
+
+/***/
+
+public static final int ELYMAIC_ID = 293; // 0x125
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock EMOTICONS;
+static { EMOTICONS = null; }
+
+/***/
+
+public static final int EMOTICONS_ID = 206; // 0xce
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERICS;
+static { ENCLOSED_ALPHANUMERICS = null; }
+
+/**
+ */
+
+public static final int ENCLOSED_ALPHANUMERICS_ID = 51; // 0x33
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_ALPHANUMERIC_SUPPLEMENT;
+static { ENCLOSED_ALPHANUMERIC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int ENCLOSED_ALPHANUMERIC_SUPPLEMENT_ID = 195; // 0xc3
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_CJK_LETTERS_AND_MONTHS;
+static { ENCLOSED_CJK_LETTERS_AND_MONTHS = null; }
+
+/**
+ */
+
+public static final int ENCLOSED_CJK_LETTERS_AND_MONTHS_ID = 68; // 0x44
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ENCLOSED_IDEOGRAPHIC_SUPPLEMENT;
+static { ENCLOSED_IDEOGRAPHIC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int ENCLOSED_IDEOGRAPHIC_SUPPLEMENT_ID = 196; // 0xc4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC;
+static { ETHIOPIC = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED;
+static { ETHIOPIC_EXTENDED = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_EXTENDED_A;
+static { ETHIOPIC_EXTENDED_A = null; }
+
+/***/
+
+public static final int ETHIOPIC_EXTENDED_A_ID = 200; // 0xc8
+
+/**
+ */
+
+public static final int ETHIOPIC_EXTENDED_ID = 133; // 0x85
+
+/**
+ */
+
+public static final int ETHIOPIC_ID = 31; // 0x1f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ETHIOPIC_SUPPLEMENT;
+static { ETHIOPIC_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int ETHIOPIC_SUPPLEMENT_ID = 134; // 0x86
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GENERAL_PUNCTUATION;
+static { GENERAL_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int GENERAL_PUNCTUATION_ID = 40; // 0x28
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES;
+static { GEOMETRIC_SHAPES = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEOMETRIC_SHAPES_EXTENDED;
+static { GEOMETRIC_SHAPES_EXTENDED = null; }
+
+/***/
+
+public static final int GEOMETRIC_SHAPES_EXTENDED_ID = 227; // 0xe3
+
+/**
+ */
+
+public static final int GEOMETRIC_SHAPES_ID = 54; // 0x36
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN;
+static { GEORGIAN = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_EXTENDED;
+static { GEORGIAN_EXTENDED = null; }
+
+/***/
+
+public static final int GEORGIAN_EXTENDED_ID = 283; // 0x11b
+
+/**
+ */
+
+public static final int GEORGIAN_ID = 29; // 0x1d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GEORGIAN_SUPPLEMENT;
+static { GEORGIAN_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int GEORGIAN_SUPPLEMENT_ID = 135; // 0x87
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC;
+static { GLAGOLITIC = null; }
+
+/**
+ */
+
+public static final int GLAGOLITIC_ID = 136; // 0x88
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GLAGOLITIC_SUPPLEMENT;
+static { GLAGOLITIC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int GLAGOLITIC_SUPPLEMENT_ID = 266; // 0x10a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GOTHIC;
+static { GOTHIC = null; }
+
+/**
+ */
+
+public static final int GOTHIC_ID = 89; // 0x59
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GRANTHA;
+static { GRANTHA = null; }
+
+/***/
+
+public static final int GRANTHA_ID = 228; // 0xe4
+
+/**
+ * Unicode 3.2 renames this block to "Greek and Coptic".
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GREEK;
+static { GREEK = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GREEK_EXTENDED;
+static { GREEK_EXTENDED = null; }
+
+/**
+ */
+
+public static final int GREEK_EXTENDED_ID = 39; // 0x27
+
+/**
+ * Unicode 3.2 renames this block to "Greek and Coptic".
+ */
+
+public static final int GREEK_ID = 8; // 0x8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GUJARATI;
+static { GUJARATI = null; }
+
+/**
+ */
+
+public static final int GUJARATI_ID = 18; // 0x12
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GUNJALA_GONDI;
+static { GUNJALA_GONDI = null; }
+
+/***/
+
+public static final int GUNJALA_GONDI_ID = 284; // 0x11c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock GURMUKHI;
+static { GURMUKHI = null; }
+
+/**
+ */
+
+public static final int GURMUKHI_ID = 17; // 0x11
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HALFWIDTH_AND_FULLWIDTH_FORMS;
+static { HALFWIDTH_AND_FULLWIDTH_FORMS = null; }
+
+/**
+ */
+
+public static final int HALFWIDTH_AND_FULLWIDTH_FORMS_ID = 87; // 0x57
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_COMPATIBILITY_JAMO;
+static { HANGUL_COMPATIBILITY_JAMO = null; }
+
+/**
+ */
+
+public static final int HANGUL_COMPATIBILITY_JAMO_ID = 65; // 0x41
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO;
+static { HANGUL_JAMO = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_A;
+static { HANGUL_JAMO_EXTENDED_A = null; }
+
+/***/
+
+public static final int HANGUL_JAMO_EXTENDED_A_ID = 180; // 0xb4
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_JAMO_EXTENDED_B;
+static { HANGUL_JAMO_EXTENDED_B = null; }
+
+/***/
+
+public static final int HANGUL_JAMO_EXTENDED_B_ID = 185; // 0xb9
+
+/**
+ */
+
+public static final int HANGUL_JAMO_ID = 30; // 0x1e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANGUL_SYLLABLES;
+static { HANGUL_SYLLABLES = null; }
+
+/**
+ */
+
+public static final int HANGUL_SYLLABLES_ID = 74; // 0x4a
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANIFI_ROHINGYA;
+static { HANIFI_ROHINGYA = null; }
+
+/***/
+
+public static final int HANIFI_ROHINGYA_ID = 285; // 0x11d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HANUNOO;
+static { HANUNOO = null; }
+
+/**
+ */
+
+public static final int HANUNOO_ID = 99; // 0x63
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HATRAN;
+static { HATRAN = null; }
+
+/***/
+
+public static final int HATRAN_ID = 258; // 0x102
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HEBREW;
+static { HEBREW = null; }
+
+/**
+ */
+
+public static final int HEBREW_ID = 11; // 0xb
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_PRIVATE_USE_SURROGATES;
+static { HIGH_PRIVATE_USE_SURROGATES = null; }
+
+/**
+ */
+
+public static final int HIGH_PRIVATE_USE_SURROGATES_ID = 76; // 0x4c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HIGH_SURROGATES;
+static { HIGH_SURROGATES = null; }
+
+/**
+ */
+
+public static final int HIGH_SURROGATES_ID = 75; // 0x4b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock HIRAGANA;
+static { HIRAGANA = null; }
+
+/**
+ */
+
+public static final int HIRAGANA_ID = 62; // 0x3e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_DESCRIPTION_CHARACTERS;
+static { IDEOGRAPHIC_DESCRIPTION_CHARACTERS = null; }
+
+/**
+ */
+
+public static final int IDEOGRAPHIC_DESCRIPTION_CHARACTERS_ID = 60; // 0x3c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION;
+static { IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION = null; }
+
+/***/
+
+public static final int IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION_ID = 267; // 0x10b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IMPERIAL_ARAMAIC;
+static { IMPERIAL_ARAMAIC = null; }
+
+/***/
+
+public static final int IMPERIAL_ARAMAIC_ID = 186; // 0xba
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INDIC_SIYAQ_NUMBERS;
+static { INDIC_SIYAQ_NUMBERS = null; }
+
+/***/
+
+public static final int INDIC_SIYAQ_NUMBERS_ID = 286; // 0x11e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PAHLAVI;
+static { INSCRIPTIONAL_PAHLAVI = null; }
+
+/***/
+
+public static final int INSCRIPTIONAL_PAHLAVI_ID = 190; // 0xbe
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INSCRIPTIONAL_PARTHIAN;
+static { INSCRIPTIONAL_PARTHIAN = null; }
+
+/***/
+
+public static final int INSCRIPTIONAL_PARTHIAN_ID = 189; // 0xbd
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock INVALID_CODE;
+static { INVALID_CODE = null; }
+
+/**
+ */
+
+public static final int INVALID_CODE_ID = -1; // 0xffffffff
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock IPA_EXTENSIONS;
+static { IPA_EXTENSIONS = null; }
+
+/**
+ */
+
+public static final int IPA_EXTENSIONS_ID = 5; // 0x5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock JAVANESE;
+static { JAVANESE = null; }
+
+/***/
+
+public static final int JAVANESE_ID = 181; // 0xb5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KAITHI;
+static { KAITHI = null; }
+
+/***/
+
+public static final int KAITHI_ID = 193; // 0xc1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANA_EXTENDED_A;
+static { KANA_EXTENDED_A = null; }
+
+/***/
+
+public static final int KANA_EXTENDED_A_ID = 275; // 0x113
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANA_SUPPLEMENT;
+static { KANA_SUPPLEMENT = null; }
+
+/***/
+
+public static final int KANA_SUPPLEMENT_ID = 203; // 0xcb
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANBUN;
+static { KANBUN = null; }
+
+/**
+ */
+
+public static final int KANBUN_ID = 66; // 0x42
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANGXI_RADICALS;
+static { KANGXI_RADICALS = null; }
+
+/**
+ */
+
+public static final int KANGXI_RADICALS_ID = 59; // 0x3b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KANNADA;
+static { KANNADA = null; }
+
+/**
+ */
+
+public static final int KANNADA_ID = 22; // 0x16
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA;
+static { KATAKANA = null; }
+
+/**
+ */
+
+public static final int KATAKANA_ID = 63; // 0x3f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KATAKANA_PHONETIC_EXTENSIONS;
+static { KATAKANA_PHONETIC_EXTENSIONS = null; }
+
+/**
+ */
+
+public static final int KATAKANA_PHONETIC_EXTENSIONS_ID = 107; // 0x6b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KAYAH_LI;
+static { KAYAH_LI = null; }
+
+/**
+ */
+
+public static final int KAYAH_LI_ID = 162; // 0xa2
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHAROSHTHI;
+static { KHAROSHTHI = null; }
+
+/**
+ */
+
+public static final int KHAROSHTHI_ID = 137; // 0x89
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHITAN_SMALL_SCRIPT;
+static { KHITAN_SMALL_SCRIPT = null; }
+
+/***/
+
+public static final int KHITAN_SMALL_SCRIPT_ID = 304; // 0x130
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHMER;
+static { KHMER = null; }
+
+/**
+ */
+
+public static final int KHMER_ID = 36; // 0x24
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHMER_SYMBOLS;
+static { KHMER_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int KHMER_SYMBOLS_ID = 113; // 0x71
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHOJKI;
+static { KHOJKI = null; }
+
+/***/
+
+public static final int KHOJKI_ID = 229; // 0xe5
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock KHUDAWADI;
+static { KHUDAWADI = null; }
+
+/***/
+
+public static final int KHUDAWADI_ID = 230; // 0xe6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LAO;
+static { LAO = null; }
+
+/**
+ */
+
+public static final int LAO_ID = 26; // 0x1a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_1_SUPPLEMENT;
+static { LATIN_1_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int LATIN_1_SUPPLEMENT_ID = 2; // 0x2
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_A;
+static { LATIN_EXTENDED_A = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_ADDITIONAL;
+static { LATIN_EXTENDED_ADDITIONAL = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_ADDITIONAL_ID = 38; // 0x26
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_A_ID = 3; // 0x3
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_B;
+static { LATIN_EXTENDED_B = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_B_ID = 4; // 0x4
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_C;
+static { LATIN_EXTENDED_C = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_C_ID = 148; // 0x94
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_D;
+static { LATIN_EXTENDED_D = null; }
+
+/**
+ */
+
+public static final int LATIN_EXTENDED_D_ID = 149; // 0x95
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LATIN_EXTENDED_E;
+static { LATIN_EXTENDED_E = null; }
+
+/***/
+
+public static final int LATIN_EXTENDED_E_ID = 231; // 0xe7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LEPCHA;
+static { LEPCHA = null; }
+
+/**
+ */
+
+public static final int LEPCHA_ID = 156; // 0x9c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LETTERLIKE_SYMBOLS;
+static { LETTERLIKE_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int LETTERLIKE_SYMBOLS_ID = 44; // 0x2c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LIMBU;
+static { LIMBU = null; }
+
+/**
+ */
+
+public static final int LIMBU_ID = 111; // 0x6f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_A;
+static { LINEAR_A = null; }
+
+/***/
+
+public static final int LINEAR_A_ID = 232; // 0xe8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_IDEOGRAMS;
+static { LINEAR_B_IDEOGRAMS = null; }
+
+/**
+ */
+
+public static final int LINEAR_B_IDEOGRAMS_ID = 118; // 0x76
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LINEAR_B_SYLLABARY;
+static { LINEAR_B_SYLLABARY = null; }
+
+/**
+ */
+
+public static final int LINEAR_B_SYLLABARY_ID = 117; // 0x75
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LISU;
+static { LISU = null; }
+
+/***/
+
+public static final int LISU_ID = 176; // 0xb0
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LISU_SUPPLEMENT;
+static { LISU_SUPPLEMENT = null; }
+
+/***/
+
+public static final int LISU_SUPPLEMENT_ID = 305; // 0x131
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LOW_SURROGATES;
+static { LOW_SURROGATES = null; }
+
+/**
+ */
+
+public static final int LOW_SURROGATES_ID = 77; // 0x4d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LYCIAN;
+static { LYCIAN = null; }
+
+/**
+ */
+
+public static final int LYCIAN_ID = 167; // 0xa7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock LYDIAN;
+static { LYDIAN = null; }
+
+/**
+ */
+
+public static final int LYDIAN_ID = 169; // 0xa9
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAHAJANI;
+static { MAHAJANI = null; }
+
+/***/
+
+public static final int MAHAJANI_ID = 233; // 0xe9
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAHJONG_TILES;
+static { MAHJONG_TILES = null; }
+
+/**
+ */
+
+public static final int MAHJONG_TILES_ID = 170; // 0xaa
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAKASAR;
+static { MAKASAR = null; }
+
+/***/
+
+public static final int MAKASAR_ID = 287; // 0x11f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MALAYALAM;
+static { MALAYALAM = null; }
+
+/**
+ */
+
+public static final int MALAYALAM_ID = 23; // 0x17
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MANDAIC;
+static { MANDAIC = null; }
+
+/***/
+
+public static final int MANDAIC_ID = 198; // 0xc6
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MANICHAEAN;
+static { MANICHAEAN = null; }
+
+/***/
+
+public static final int MANICHAEAN_ID = 234; // 0xea
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MARCHEN;
+static { MARCHEN = null; }
+
+/***/
+
+public static final int MARCHEN_ID = 268; // 0x10c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MASARAM_GONDI;
+static { MASARAM_GONDI = null; }
+
+/***/
+
+public static final int MASARAM_GONDI_ID = 276; // 0x114
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_ALPHANUMERIC_SYMBOLS;
+static { MATHEMATICAL_ALPHANUMERIC_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int MATHEMATICAL_ALPHANUMERIC_SYMBOLS_ID = 93; // 0x5d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MATHEMATICAL_OPERATORS;
+static { MATHEMATICAL_OPERATORS = null; }
+
+/**
+ */
+
+public static final int MATHEMATICAL_OPERATORS_ID = 47; // 0x2f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MAYAN_NUMERALS;
+static { MAYAN_NUMERALS = null; }
+
+/***/
+
+public static final int MAYAN_NUMERALS_ID = 288; // 0x120
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEDEFAIDRIN;
+static { MEDEFAIDRIN = null; }
+
+/***/
+
+public static final int MEDEFAIDRIN_ID = 289; // 0x121
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK;
+static { MEETEI_MAYEK = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEETEI_MAYEK_EXTENSIONS;
+static { MEETEI_MAYEK_EXTENSIONS = null; }
+
+/***/
+
+public static final int MEETEI_MAYEK_EXTENSIONS_ID = 213; // 0xd5
+
+/***/
+
+public static final int MEETEI_MAYEK_ID = 184; // 0xb8
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MENDE_KIKAKUI;
+static { MENDE_KIKAKUI = null; }
+
+/***/
+
+public static final int MENDE_KIKAKUI_ID = 235; // 0xeb
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_CURSIVE;
+static { MEROITIC_CURSIVE = null; }
+
+/***/
+
+public static final int MEROITIC_CURSIVE_ID = 214; // 0xd6
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MEROITIC_HIEROGLYPHS;
+static { MEROITIC_HIEROGLYPHS = null; }
+
+/***/
+
+public static final int MEROITIC_HIEROGLYPHS_ID = 215; // 0xd7
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MIAO;
+static { MIAO = null; }
+
+/***/
+
+public static final int MIAO_ID = 216; // 0xd8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A;
+static { MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_A_ID = 102; // 0x66
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B;
+static { MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B_ID = 105; // 0x69
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS;
+static { MISCELLANEOUS_SYMBOLS = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_ARROWS;
+static { MISCELLANEOUS_SYMBOLS_AND_ARROWS = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_SYMBOLS_AND_ARROWS_ID = 115; // 0x73
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS;
+static { MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS = null; }
+
+/***/
+
+public static final int MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS_ID = 205; // 0xcd
+
+/**
+ */
+
+public static final int MISCELLANEOUS_SYMBOLS_ID = 55; // 0x37
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MISCELLANEOUS_TECHNICAL;
+static { MISCELLANEOUS_TECHNICAL = null; }
+
+/**
+ */
+
+public static final int MISCELLANEOUS_TECHNICAL_ID = 48; // 0x30
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MODI;
+static { MODI = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MODIFIER_TONE_LETTERS;
+static { MODIFIER_TONE_LETTERS = null; }
+
+/**
+ */
+
+public static final int MODIFIER_TONE_LETTERS_ID = 138; // 0x8a
+
+/***/
+
+public static final int MODI_ID = 236; // 0xec
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN;
+static { MONGOLIAN = null; }
+
+/**
+ */
+
+public static final int MONGOLIAN_ID = 37; // 0x25
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MONGOLIAN_SUPPLEMENT;
+static { MONGOLIAN_SUPPLEMENT = null; }
+
+/***/
+
+public static final int MONGOLIAN_SUPPLEMENT_ID = 269; // 0x10d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MRO;
+static { MRO = null; }
+
+/***/
+
+public static final int MRO_ID = 237; // 0xed
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MULTANI;
+static { MULTANI = null; }
+
+/***/
+
+public static final int MULTANI_ID = 259; // 0x103
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MUSICAL_SYMBOLS;
+static { MUSICAL_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int MUSICAL_SYMBOLS_ID = 92; // 0x5c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR;
+static { MYANMAR = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_A;
+static { MYANMAR_EXTENDED_A = null; }
+
+/***/
+
+public static final int MYANMAR_EXTENDED_A_ID = 182; // 0xb6
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock MYANMAR_EXTENDED_B;
+static { MYANMAR_EXTENDED_B = null; }
+
+/***/
+
+public static final int MYANMAR_EXTENDED_B_ID = 238; // 0xee
+
+/**
+ */
+
+public static final int MYANMAR_ID = 28; // 0x1c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NABATAEAN;
+static { NABATAEAN = null; }
+
+/***/
+
+public static final int NABATAEAN_ID = 239; // 0xef
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NANDINAGARI;
+static { NANDINAGARI = null; }
+
+/***/
+
+public static final int NANDINAGARI_ID = 294; // 0x126
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NEWA;
+static { NEWA = null; }
+
+/***/
+
+public static final int NEWA_ID = 270; // 0x10e
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NEW_TAI_LUE;
+static { NEW_TAI_LUE = null; }
+
+/**
+ */
+
+public static final int NEW_TAI_LUE_ID = 139; // 0x8b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NKO;
+static { NKO = null; }
+
+/**
+ */
+
+public static final int NKO_ID = 146; // 0x92
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NO_BLOCK;
+static { NO_BLOCK = null; }
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NUMBER_FORMS;
+static { NUMBER_FORMS = null; }
+
+/**
+ */
+
+public static final int NUMBER_FORMS_ID = 45; // 0x2d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NUSHU;
+static { NUSHU = null; }
+
+/***/
+
+public static final int NUSHU_ID = 277; // 0x115
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock NYIAKENG_PUACHUE_HMONG;
+static { NYIAKENG_PUACHUE_HMONG = null; }
+
+/***/
+
+public static final int NYIAKENG_PUACHUE_HMONG_ID = 295; // 0x127
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OGHAM;
+static { OGHAM = null; }
+
+/**
+ */
+
+public static final int OGHAM_ID = 34; // 0x22
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_HUNGARIAN;
+static { OLD_HUNGARIAN = null; }
+
+/***/
+
+public static final int OLD_HUNGARIAN_ID = 260; // 0x104
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_ITALIC;
+static { OLD_ITALIC = null; }
+
+/**
+ */
+
+public static final int OLD_ITALIC_ID = 88; // 0x58
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_NORTH_ARABIAN;
+static { OLD_NORTH_ARABIAN = null; }
+
+/***/
+
+public static final int OLD_NORTH_ARABIAN_ID = 240; // 0xf0
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERMIC;
+static { OLD_PERMIC = null; }
+
+/***/
+
+public static final int OLD_PERMIC_ID = 241; // 0xf1
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_PERSIAN;
+static { OLD_PERSIAN = null; }
+
+/**
+ */
+
+public static final int OLD_PERSIAN_ID = 140; // 0x8c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOGDIAN;
+static { OLD_SOGDIAN = null; }
+
+/***/
+
+public static final int OLD_SOGDIAN_ID = 290; // 0x122
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_SOUTH_ARABIAN;
+static { OLD_SOUTH_ARABIAN = null; }
+
+/***/
+
+public static final int OLD_SOUTH_ARABIAN_ID = 187; // 0xbb
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OLD_TURKIC;
+static { OLD_TURKIC = null; }
+
+/***/
+
+public static final int OLD_TURKIC_ID = 191; // 0xbf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OL_CHIKI;
+static { OL_CHIKI = null; }
+
+/**
+ */
+
+public static final int OL_CHIKI_ID = 157; // 0x9d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OPTICAL_CHARACTER_RECOGNITION;
+static { OPTICAL_CHARACTER_RECOGNITION = null; }
+
+/**
+ */
+
+public static final int OPTICAL_CHARACTER_RECOGNITION_ID = 50; // 0x32
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ORIYA;
+static { ORIYA = null; }
+
+/**
+ */
+
+public static final int ORIYA_ID = 19; // 0x13
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ORNAMENTAL_DINGBATS;
+static { ORNAMENTAL_DINGBATS = null; }
+
+/***/
+
+public static final int ORNAMENTAL_DINGBATS_ID = 242; // 0xf2
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OSAGE;
+static { OSAGE = null; }
+
+/***/
+
+public static final int OSAGE_ID = 271; // 0x10f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OSMANYA;
+static { OSMANYA = null; }
+
+/**
+ */
+
+public static final int OSMANYA_ID = 122; // 0x7a
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock OTTOMAN_SIYAQ_NUMBERS;
+static { OTTOMAN_SIYAQ_NUMBERS = null; }
+
+/***/
+
+public static final int OTTOMAN_SIYAQ_NUMBERS_ID = 296; // 0x128
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PAHAWH_HMONG;
+static { PAHAWH_HMONG = null; }
+
+/***/
+
+public static final int PAHAWH_HMONG_ID = 243; // 0xf3
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PALMYRENE;
+static { PALMYRENE = null; }
+
+/***/
+
+public static final int PALMYRENE_ID = 244; // 0xf4
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PAU_CIN_HAU;
+static { PAU_CIN_HAU = null; }
+
+/***/
+
+public static final int PAU_CIN_HAU_ID = 245; // 0xf5
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHAGS_PA;
+static { PHAGS_PA = null; }
+
+/**
+ */
+
+public static final int PHAGS_PA_ID = 150; // 0x96
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHAISTOS_DISC;
+static { PHAISTOS_DISC = null; }
+
+/**
+ */
+
+public static final int PHAISTOS_DISC_ID = 166; // 0xa6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHOENICIAN;
+static { PHOENICIAN = null; }
+
+/**
+ */
+
+public static final int PHOENICIAN_ID = 151; // 0x97
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS;
+static { PHONETIC_EXTENSIONS = null; }
+
+/**
+ */
+
+public static final int PHONETIC_EXTENSIONS_ID = 114; // 0x72
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT;
+static { PHONETIC_EXTENSIONS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int PHONETIC_EXTENSIONS_SUPPLEMENT_ID = 141; // 0x8d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PLAYING_CARDS;
+static { PLAYING_CARDS = null; }
+
+/***/
+
+public static final int PLAYING_CARDS_ID = 204; // 0xcc
+
+/**
+ * Same as public static final int PRIVATE_USE_AREA.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE;
+static { PRIVATE_USE = null; }
+
+/**
+ * Same as public static final int PRIVATE_USE.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PRIVATE_USE_AREA;
+static { PRIVATE_USE_AREA = null; }
+
+/**
+ * Same as public static final int PRIVATE_USE.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final int PRIVATE_USE_AREA_ID = 78; // 0x4e
+
+/**
+ * Same as public static final int PRIVATE_USE_AREA.
+ * Until Unicode 3.1.1; the corresponding block name was "Private Use";
+ * and multiple code point ranges had this block.
+ * Unicode 3.2 renames the block for the BMP PUA to "Private Use Area"
+ * and adds separate blocks for the supplementary PUAs.
+ */
+
+public static final int PRIVATE_USE_ID = 78; // 0x4e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock PSALTER_PAHLAVI;
+static { PSALTER_PAHLAVI = null; }
+
+/***/
+
+public static final int PSALTER_PAHLAVI_ID = 246; // 0xf6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock REJANG;
+static { REJANG = null; }
+
+/**
+ */
+
+public static final int REJANG_ID = 163; // 0xa3
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock RUMI_NUMERAL_SYMBOLS;
+static { RUMI_NUMERAL_SYMBOLS = null; }
+
+/***/
+
+public static final int RUMI_NUMERAL_SYMBOLS_ID = 192; // 0xc0
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock RUNIC;
+static { RUNIC = null; }
+
+/**
+ */
+
+public static final int RUNIC_ID = 35; // 0x23
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SAMARITAN;
+static { SAMARITAN = null; }
+
+/***/
+
+public static final int SAMARITAN_ID = 172; // 0xac
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SAURASHTRA;
+static { SAURASHTRA = null; }
+
+/**
+ */
+
+public static final int SAURASHTRA_ID = 161; // 0xa1
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SHARADA;
+static { SHARADA = null; }
+
+/***/
+
+public static final int SHARADA_ID = 217; // 0xd9
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SHAVIAN;
+static { SHAVIAN = null; }
+
+/**
+ */
+
+public static final int SHAVIAN_ID = 121; // 0x79
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SHORTHAND_FORMAT_CONTROLS;
+static { SHORTHAND_FORMAT_CONTROLS = null; }
+
+/***/
+
+public static final int SHORTHAND_FORMAT_CONTROLS_ID = 247; // 0xf7
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SIDDHAM;
+static { SIDDHAM = null; }
+
+/***/
+
+public static final int SIDDHAM_ID = 248; // 0xf8
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA;
+static { SINHALA = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SINHALA_ARCHAIC_NUMBERS;
+static { SINHALA_ARCHAIC_NUMBERS = null; }
+
+/***/
+
+public static final int SINHALA_ARCHAIC_NUMBERS_ID = 249; // 0xf9
+
+/**
+ */
+
+public static final int SINHALA_ID = 24; // 0x18
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_FORM_VARIANTS;
+static { SMALL_FORM_VARIANTS = null; }
+
+/**
+ */
+
+public static final int SMALL_FORM_VARIANTS_ID = 84; // 0x54
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SMALL_KANA_EXTENSION;
+static { SMALL_KANA_EXTENSION = null; }
+
+/***/
+
+public static final int SMALL_KANA_EXTENSION_ID = 297; // 0x129
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SOGDIAN;
+static { SOGDIAN = null; }
+
+/***/
+
+public static final int SOGDIAN_ID = 291; // 0x123
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SORA_SOMPENG;
+static { SORA_SOMPENG = null; }
+
+/***/
+
+public static final int SORA_SOMPENG_ID = 218; // 0xda
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SOYOMBO;
+static { SOYOMBO = null; }
+
+/***/
+
+public static final int SOYOMBO_ID = 278; // 0x116
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SPACING_MODIFIER_LETTERS;
+static { SPACING_MODIFIER_LETTERS = null; }
+
+/**
+ */
+
+public static final int SPACING_MODIFIER_LETTERS_ID = 6; // 0x6
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SPECIALS;
+static { SPECIALS = null; }
+
+/**
+ */
+
+public static final int SPECIALS_ID = 86; // 0x56
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE;
+static { SUNDANESE = null; }
+
+/**
+ */
+
+public static final int SUNDANESE_ID = 155; // 0x9b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUNDANESE_SUPPLEMENT;
+static { SUNDANESE_SUPPLEMENT = null; }
+
+/***/
+
+public static final int SUNDANESE_SUPPLEMENT_ID = 219; // 0xdb
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPERSCRIPTS_AND_SUBSCRIPTS;
+static { SUPERSCRIPTS_AND_SUBSCRIPTS = null; }
+
+/**
+ */
+
+public static final int SUPERSCRIPTS_AND_SUBSCRIPTS_ID = 41; // 0x29
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_A;
+static { SUPPLEMENTAL_ARROWS_A = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_ARROWS_A_ID = 103; // 0x67
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_B;
+static { SUPPLEMENTAL_ARROWS_B = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_ARROWS_B_ID = 104; // 0x68
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_ARROWS_C;
+static { SUPPLEMENTAL_ARROWS_C = null; }
+
+/***/
+
+public static final int SUPPLEMENTAL_ARROWS_C_ID = 250; // 0xfa
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_MATHEMATICAL_OPERATORS;
+static { SUPPLEMENTAL_MATHEMATICAL_OPERATORS = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_MATHEMATICAL_OPERATORS_ID = 106; // 0x6a
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_PUNCTUATION;
+static { SUPPLEMENTAL_PUNCTUATION = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTAL_PUNCTUATION_ID = 142; // 0x8e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS;
+static { SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS = null; }
+
+/***/
+
+public static final int SUPPLEMENTAL_SYMBOLS_AND_PICTOGRAPHS_ID = 261; // 0x105
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_A;
+static { SUPPLEMENTARY_PRIVATE_USE_AREA_A = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_A_ID = 109; // 0x6d
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUPPLEMENTARY_PRIVATE_USE_AREA_B;
+static { SUPPLEMENTARY_PRIVATE_USE_AREA_B = null; }
+
+/**
+ */
+
+public static final int SUPPLEMENTARY_PRIVATE_USE_AREA_B_ID = 110; // 0x6e
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SUTTON_SIGNWRITING;
+static { SUTTON_SIGNWRITING = null; }
+
+/***/
+
+public static final int SUTTON_SIGNWRITING_ID = 262; // 0x106
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYLOTI_NAGRI;
+static { SYLOTI_NAGRI = null; }
+
+/**
+ */
+
+public static final int SYLOTI_NAGRI_ID = 143; // 0x8f
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A;
+static { SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A = null; }
+
+/***/
+
+public static final int SYMBOLS_AND_PICTOGRAPHS_EXTENDED_A_ID = 298; // 0x12a
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYMBOLS_FOR_LEGACY_COMPUTING;
+static { SYMBOLS_FOR_LEGACY_COMPUTING = null; }
+
+/***/
+
+public static final int SYMBOLS_FOR_LEGACY_COMPUTING_ID = 306; // 0x132
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC;
+static { SYRIAC = null; }
+
+/**
+ */
+
+public static final int SYRIAC_ID = 13; // 0xd
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock SYRIAC_SUPPLEMENT;
+static { SYRIAC_SUPPLEMENT = null; }
+
+/***/
+
+public static final int SYRIAC_SUPPLEMENT_ID = 279; // 0x117
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAGALOG;
+static { TAGALOG = null; }
+
+/**
+ */
+
+public static final int TAGALOG_ID = 98; // 0x62
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAGBANWA;
+static { TAGBANWA = null; }
+
+/**
+ */
+
+public static final int TAGBANWA_ID = 101; // 0x65
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAGS;
+static { TAGS = null; }
+
+/**
+ */
+
+public static final int TAGS_ID = 96; // 0x60
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_LE;
+static { TAI_LE = null; }
+
+/**
+ */
+
+public static final int TAI_LE_ID = 112; // 0x70
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_THAM;
+static { TAI_THAM = null; }
+
+/***/
+
+public static final int TAI_THAM_ID = 174; // 0xae
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_VIET;
+static { TAI_VIET = null; }
+
+/***/
+
+public static final int TAI_VIET_ID = 183; // 0xb7
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAI_XUAN_JING_SYMBOLS;
+static { TAI_XUAN_JING_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int TAI_XUAN_JING_SYMBOLS_ID = 124; // 0x7c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAKRI;
+static { TAKRI = null; }
+
+/***/
+
+public static final int TAKRI_ID = 220; // 0xdc
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL;
+static { TAMIL = null; }
+
+/**
+ */
+
+public static final int TAMIL_ID = 20; // 0x14
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TAMIL_SUPPLEMENT;
+static { TAMIL_SUPPLEMENT = null; }
+
+/***/
+
+public static final int TAMIL_SUPPLEMENT_ID = 299; // 0x12b
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT;
+static { TANGUT = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_COMPONENTS;
+static { TANGUT_COMPONENTS = null; }
+
+/***/
+
+public static final int TANGUT_COMPONENTS_ID = 273; // 0x111
+
+/***/
+
+public static final int TANGUT_ID = 272; // 0x110
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TANGUT_SUPPLEMENT;
+static { TANGUT_SUPPLEMENT = null; }
+
+/***/
+
+public static final int TANGUT_SUPPLEMENT_ID = 307; // 0x133
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TELUGU;
+static { TELUGU = null; }
+
+/**
+ */
+
+public static final int TELUGU_ID = 21; // 0x15
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock THAANA;
+static { THAANA = null; }
+
+/**
+ */
+
+public static final int THAANA_ID = 14; // 0xe
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock THAI;
+static { THAI = null; }
+
+/**
+ */
+
+public static final int THAI_ID = 25; // 0x19
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TIBETAN;
+static { TIBETAN = null; }
+
+/**
+ */
+
+public static final int TIBETAN_ID = 27; // 0x1b
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TIFINAGH;
+static { TIFINAGH = null; }
+
+/**
+ */
+
+public static final int TIFINAGH_ID = 144; // 0x90
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TIRHUTA;
+static { TIRHUTA = null; }
+
+/***/
+
+public static final int TIRHUTA_ID = 251; // 0xfb
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock TRANSPORT_AND_MAP_SYMBOLS;
+static { TRANSPORT_AND_MAP_SYMBOLS = null; }
+
+/***/
+
+public static final int TRANSPORT_AND_MAP_SYMBOLS_ID = 207; // 0xcf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock UGARITIC;
+static { UGARITIC = null; }
+
+/**
+ */
+
+public static final int UGARITIC_ID = 120; // 0x78
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS;
+static { UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS = null; }
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED;
+static { UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED = null; }
+
+/***/
+
+public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_EXTENDED_ID = 173; // 0xad
+
+/**
+ */
+
+public static final int UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS_ID = 33; // 0x21
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VAI;
+static { VAI = null; }
+
+/**
+ */
+
+public static final int VAI_ID = 159; // 0x9f
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS;
+static { VARIATION_SELECTORS = null; }
+
+/**
+ */
+
+public static final int VARIATION_SELECTORS_ID = 108; // 0x6c
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VARIATION_SELECTORS_SUPPLEMENT;
+static { VARIATION_SELECTORS_SUPPLEMENT = null; }
+
+/**
+ */
+
+public static final int VARIATION_SELECTORS_SUPPLEMENT_ID = 125; // 0x7d
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VEDIC_EXTENSIONS;
+static { VEDIC_EXTENSIONS = null; }
+
+/***/
+
+public static final int VEDIC_EXTENSIONS_ID = 175; // 0xaf
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock VERTICAL_FORMS;
+static { VERTICAL_FORMS = null; }
+
+/**
+ */
+
+public static final int VERTICAL_FORMS_ID = 145; // 0x91
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock WANCHO;
+static { WANCHO = null; }
+
+/***/
+
+public static final int WANCHO_ID = 300; // 0x12c
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock WARANG_CITI;
+static { WARANG_CITI = null; }
+
+/***/
+
+public static final int WARANG_CITI_ID = 252; // 0xfc
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YEZIDI;
+static { YEZIDI = null; }
+
+/***/
+
+public static final int YEZIDI_ID = 308; // 0x134
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YIJING_HEXAGRAM_SYMBOLS;
+static { YIJING_HEXAGRAM_SYMBOLS = null; }
+
+/**
+ */
+
+public static final int YIJING_HEXAGRAM_SYMBOLS_ID = 116; // 0x74
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YI_RADICALS;
+static { YI_RADICALS = null; }
+
+/**
+ */
+
+public static final int YI_RADICALS_ID = 73; // 0x49
+
+/**
+ */
+
+public static final android.icu.lang.UCharacter.UnicodeBlock YI_SYLLABLES;
+static { YI_SYLLABLES = null; }
+
+/**
+ */
+
+public static final int YI_SYLLABLES_ID = 72; // 0x48
+
+/***/
+
+public static final android.icu.lang.UCharacter.UnicodeBlock ZANABAZAR_SQUARE;
+static { ZANABAZAR_SQUARE = null; }
+
+/***/
+
+public static final int ZANABAZAR_SQUARE_ID = 280; // 0x118
+}
+
+/**
+ * Vertical Orientation constants.
+ *
+ * @see android.icu.lang.UProperty#VERTICAL_ORIENTATION
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface VerticalOrientation {
+
+/***/
+
+public static final int ROTATED = 0; // 0x0
+
+/***/
+
+public static final int TRANSFORMED_ROTATED = 1; // 0x1
+
+/***/
+
+public static final int TRANSFORMED_UPRIGHT = 2; // 0x2
+
+/***/
+
+public static final int UPRIGHT = 3; // 0x3
+}
+
+/**
+ * Word Break constants.
+ * @see android.icu.lang.UProperty#WORD_BREAK
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface WordBreak {
+
+/**
+ */
+
+public static final int ALETTER = 1; // 0x1
+
+/**
+ */
+
+public static final int CR = 8; // 0x8
+
+/***/
+
+public static final int DOUBLE_QUOTE = 16; // 0x10
+
+/**
+ */
+
+public static final int EXTEND = 9; // 0x9
+
+/**
+ */
+
+public static final int EXTENDNUMLET = 7; // 0x7
+
+/***/
+
+public static final int E_BASE = 17; // 0x11
+
+/***/
+
+public static final int E_BASE_GAZ = 18; // 0x12
+
+/***/
+
+public static final int E_MODIFIER = 19; // 0x13
+
+/**
+ */
+
+public static final int FORMAT = 2; // 0x2
+
+/***/
+
+public static final int GLUE_AFTER_ZWJ = 20; // 0x14
+
+/***/
+
+public static final int HEBREW_LETTER = 14; // 0xe
+
+/**
+ */
+
+public static final int KATAKANA = 3; // 0x3
+
+/**
+ */
+
+public static final int LF = 10; // 0xa
+
+/**
+ */
+
+public static final int MIDLETTER = 4; // 0x4
+
+/**
+ */
+
+public static final int MIDNUM = 5; // 0x5
+
+/**
+ */
+
+public static final int MIDNUMLET = 11; // 0xb
+
+/**
+ */
+
+public static final int NEWLINE = 12; // 0xc
+
+/**
+ */
+
+public static final int NUMERIC = 6; // 0x6
+
+/**
+ */
+
+public static final int OTHER = 0; // 0x0
+
+/***/
+
+public static final int REGIONAL_INDICATOR = 13; // 0xd
+
+/***/
+
+public static final int SINGLE_QUOTE = 15; // 0xf
+
+/***/
+
+public static final int WSEGSPACE = 22; // 0x16
+
+/***/
+
+public static final int ZWJ = 21; // 0x15
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterCategory.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterCategory.java
new file mode 100644
index 0000000..6bc1a80
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterCategory.java
@@ -0,0 +1,45 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 1996-2004, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+
+/**
+ * Enumerated Unicode category types from the UnicodeData.txt file.
+ * Used as return results from <a href=UCharacter.html>UCharacter</a>
+ * Equivalent to icu's UCharCategory.
+ * Refer to <a href="http://www.unicode.org/Public/UNIDATA/UCD.html">
+ * Unicode Consortium</a> for more information about UnicodeData.txt.
+ * <p>
+ * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with
+ * those returned by java.lang.Character.getType.  UCharacterCategory values
+ * match the ones used in ICU4C, while java.lang.Character type
+ * values, though similar, skip the value 17.</p>
+ * <p>
+ * This class is not subclassable
+ * </p>
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UCharacterCategory implements android.icu.lang.UCharacterEnums.ECharacterCategory {
+
+private UCharacterCategory() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the name of the argument category
+ * @param category to retrieve name
+ * @return category name
+ */
+
+public static java.lang.String toString(int category) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterDirection.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterDirection.java
new file mode 100644
index 0000000..ea575c1
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterDirection.java
@@ -0,0 +1,37 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2013, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+
+package android.icu.lang;
+
+
+/**
+ * Enumerated Unicode character linguistic direction constants.
+ * Used as return results from <a href=UCharacter.html>UCharacter</a>
+ * <p>
+ * This class is not subclassable
+ * </p>
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UCharacterDirection implements android.icu.lang.UCharacterEnums.ECharacterDirection {
+
+private UCharacterDirection() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the name of the argument direction
+ * @param dir direction type to retrieve name
+ * @return directional name
+ */
+
+public static java.lang.String toString(int dir) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterEnums.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterEnums.java
new file mode 100644
index 0000000..48d4d7a
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UCharacterEnums.java
@@ -0,0 +1,546 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 2004-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+
+/**
+ * A container for the different 'enumerated types' used by UCharacter.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UCharacterEnums {
+
+private UCharacterEnums() { throw new RuntimeException("Stub!"); }
+/**
+ * 'Enum' for the CharacterCategory constants.  These constants are
+ * compatible in name <b>but not in value</b> with those defined in
+ * {@link java.lang.Character}.
+ * @see android.icu.lang.UCharacterCategory
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface ECharacterCategory {
+
+/**
+ * Character type Mc
+ */
+
+public static final byte COMBINING_SPACING_MARK = 8; // 0x8
+
+/**
+ * Character type Pc
+ */
+
+public static final byte CONNECTOR_PUNCTUATION = 22; // 0x16
+
+/**
+ * Character type Cc
+ */
+
+public static final byte CONTROL = 15; // 0xf
+
+/**
+ * Character type Sc
+ */
+
+public static final byte CURRENCY_SYMBOL = 25; // 0x19
+
+/**
+ * Character type Pd
+ */
+
+public static final byte DASH_PUNCTUATION = 19; // 0x13
+
+/**
+ * Character type Nd
+ */
+
+public static final byte DECIMAL_DIGIT_NUMBER = 9; // 0x9
+
+/**
+ * Character type Me
+ */
+
+public static final byte ENCLOSING_MARK = 7; // 0x7
+
+/**
+ * Character type Pe
+ */
+
+public static final byte END_PUNCTUATION = 21; // 0x15
+
+/**
+ * Character type Pf
+ * @see #FINAL_QUOTE_PUNCTUATION
+ */
+
+public static final byte FINAL_PUNCTUATION = 29; // 0x1d
+
+/**
+ * Character type Pf
+ * This name is compatible with java.lang.Character's name for this type.
+ * @see #FINAL_PUNCTUATION
+ */
+
+public static final byte FINAL_QUOTE_PUNCTUATION = 29; // 0x1d
+
+/**
+ * Character type Cf
+ */
+
+public static final byte FORMAT = 16; // 0x10
+
+/**
+ * Character type Cn
+ * Not Assigned (no characters in [UnicodeData.txt] have this property)
+ */
+
+public static final byte GENERAL_OTHER_TYPES = 0; // 0x0
+
+/**
+ * Character type Pi
+ * @see #INITIAL_QUOTE_PUNCTUATION
+ */
+
+public static final byte INITIAL_PUNCTUATION = 28; // 0x1c
+
+/**
+ * Character type Pi
+ * This name is compatible with java.lang.Character's name for this type.
+ * @see #INITIAL_PUNCTUATION
+ */
+
+public static final byte INITIAL_QUOTE_PUNCTUATION = 28; // 0x1c
+
+/**
+ * Character type Nl
+ */
+
+public static final byte LETTER_NUMBER = 10; // 0xa
+
+/**
+ * Character type Zl
+ */
+
+public static final byte LINE_SEPARATOR = 13; // 0xd
+
+/**
+ * Character type Ll
+ */
+
+public static final byte LOWERCASE_LETTER = 2; // 0x2
+
+/**
+ * Character type Sm
+ */
+
+public static final byte MATH_SYMBOL = 24; // 0x18
+
+/**
+ * Character type Lm
+ */
+
+public static final byte MODIFIER_LETTER = 4; // 0x4
+
+/**
+ * Character type Sk
+ */
+
+public static final byte MODIFIER_SYMBOL = 26; // 0x1a
+
+/**
+ * Character type Mn
+ */
+
+public static final byte NON_SPACING_MARK = 6; // 0x6
+
+/**
+ * Character type Lo
+ */
+
+public static final byte OTHER_LETTER = 5; // 0x5
+
+/**
+ * Character type No
+ */
+
+public static final byte OTHER_NUMBER = 11; // 0xb
+
+/**
+ * Character type Po
+ */
+
+public static final byte OTHER_PUNCTUATION = 23; // 0x17
+
+/**
+ * Character type So
+ */
+
+public static final byte OTHER_SYMBOL = 27; // 0x1b
+
+/**
+ * Character type Zp
+ */
+
+public static final byte PARAGRAPH_SEPARATOR = 14; // 0xe
+
+/**
+ * Character type Co
+ */
+
+public static final byte PRIVATE_USE = 17; // 0x11
+
+/**
+ * Character type Zs
+ */
+
+public static final byte SPACE_SEPARATOR = 12; // 0xc
+
+/**
+ * Character type Ps
+ */
+
+public static final byte START_PUNCTUATION = 20; // 0x14
+
+/**
+ * Character type Cs
+ */
+
+public static final byte SURROGATE = 18; // 0x12
+
+/**
+ * Character type Lt
+ */
+
+public static final byte TITLECASE_LETTER = 3; // 0x3
+
+/**
+ * Unassigned character type
+ */
+
+public static final byte UNASSIGNED = 0; // 0x0
+
+/**
+ * Character type Lu
+ */
+
+public static final byte UPPERCASE_LETTER = 1; // 0x1
+}
+
+/**
+ * 'Enum' for the CharacterDirection constants. Some constants are
+ * compatible in name <b>but not in value</b> with those defined in
+ * {@link java.lang.Character}.
+ * @see android.icu.lang.UCharacterDirection
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface ECharacterDirection {
+
+/**
+ * Directional type AN
+ */
+
+public static final int ARABIC_NUMBER = 5; // 0x5
+
+/**
+ * Directional type B
+ */
+
+public static final int BLOCK_SEPARATOR = 7; // 0x7
+
+/**
+ * Directional type BN
+ */
+
+public static final int BOUNDARY_NEUTRAL = 18; // 0x12
+
+/**
+ * Directional type CS
+ */
+
+public static final int COMMON_NUMBER_SEPARATOR = 6; // 0x6
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_ARABIC_NUMBER}.
+ * Synonym of {@link #ARABIC_NUMBER}.
+ */
+
+public static final byte DIRECTIONALITY_ARABIC_NUMBER = 5; // 0x5
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_BOUNDARY_NEUTRAL}.
+ * Synonym of {@link #BOUNDARY_NEUTRAL}.
+ */
+
+public static final byte DIRECTIONALITY_BOUNDARY_NEUTRAL = 18; // 0x12
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_COMMON_NUMBER_SEPARATOR}.
+ * Synonym of {@link #COMMON_NUMBER_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_COMMON_NUMBER_SEPARATOR = 6; // 0x6
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER}.
+ * Synonym of {@link #EUROPEAN_NUMBER}.
+ */
+
+public static final byte DIRECTIONALITY_EUROPEAN_NUMBER = 2; // 0x2
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR}.
+ * Synonym of {@link #EUROPEAN_NUMBER_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR}.
+ * Synonym of {@link #EUROPEAN_NUMBER_TERMINATOR}.
+ */
+
+public static final byte DIRECTIONALITY_EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT}.
+ * Synonym of {@link #LEFT_TO_RIGHT}.
+ */
+
+public static final byte DIRECTIONALITY_LEFT_TO_RIGHT = 0; // 0x0
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING}.
+ * Synonym of {@link #LEFT_TO_RIGHT_EMBEDDING}.
+ */
+
+public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE}.
+ * Synonym of {@link #LEFT_TO_RIGHT_OVERRIDE}.
+ */
+
+public static final byte DIRECTIONALITY_LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_NONSPACING_MARK}.
+ * Synonym of {@link #DIR_NON_SPACING_MARK}.
+ */
+
+public static final byte DIRECTIONALITY_NONSPACING_MARK = 17; // 0x11
+
+/**
+ * Equivalent to {@link java.lang.Character#DIRECTIONALITY_OTHER_NEUTRALS}.
+ * Synonym of {@link #OTHER_NEUTRAL}.
+ */
+
+public static final byte DIRECTIONALITY_OTHER_NEUTRALS = 10; // 0xa
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_PARAGRAPH_SEPARATOR}.
+ * Synonym of {@link #BLOCK_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_PARAGRAPH_SEPARATOR = 7; // 0x7
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_POP_DIRECTIONAL_FORMAT}.
+ * Synonym of {@link #POP_DIRECTIONAL_FORMAT}.
+ */
+
+public static final byte DIRECTIONALITY_POP_DIRECTIONAL_FORMAT = 16; // 0x10
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT}.
+ * Synonym of {@link #RIGHT_TO_LEFT}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT = 1; // 0x1
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC}.
+ * Synonym of {@link #RIGHT_TO_LEFT_ARABIC}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING}.
+ * Synonym of {@link #RIGHT_TO_LEFT_EMBEDDING}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE}.
+ * Synonym of {@link #RIGHT_TO_LEFT_OVERRIDE}.
+ */
+
+public static final byte DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+
+/**
+ * Equivalent to {@link
+ * java.lang.Character#DIRECTIONALITY_SEGMENT_SEPARATOR}.
+ * Synonym of {@link #SEGMENT_SEPARATOR}.
+ */
+
+public static final byte DIRECTIONALITY_SEGMENT_SEPARATOR = 8; // 0x8
+
+/**
+ * Undefined bidirectional character type. Undefined <code>char</code>
+ * values have undefined directionality in the Unicode specification.
+ */
+
+public static final byte DIRECTIONALITY_UNDEFINED = -1; // 0xffffffff
+
+/**
+ * Equivalent to {@link java.lang.Character#DIRECTIONALITY_WHITESPACE}.
+ * Synonym of {@link #WHITE_SPACE_NEUTRAL}.
+ */
+
+public static final byte DIRECTIONALITY_WHITESPACE = 9; // 0x9
+
+/**
+ * Directional type NSM
+ */
+
+public static final int DIR_NON_SPACING_MARK = 17; // 0x11
+
+/**
+ * Directional type EN
+ */
+
+public static final int EUROPEAN_NUMBER = 2; // 0x2
+
+/**
+ * Directional type ES
+ */
+
+public static final int EUROPEAN_NUMBER_SEPARATOR = 3; // 0x3
+
+/**
+ * Directional type ET
+ */
+
+public static final int EUROPEAN_NUMBER_TERMINATOR = 4; // 0x4
+
+/**
+ * Directional type FSI
+ */
+
+public static final byte FIRST_STRONG_ISOLATE = 19; // 0x13
+
+/**
+ * Directional type L
+ */
+
+public static final int LEFT_TO_RIGHT = 0; // 0x0
+
+/**
+ * Directional type LRE
+ */
+
+public static final int LEFT_TO_RIGHT_EMBEDDING = 11; // 0xb
+
+/**
+ * Directional type LRI
+ */
+
+public static final byte LEFT_TO_RIGHT_ISOLATE = 20; // 0x14
+
+/**
+ * Directional type LRO
+ */
+
+public static final int LEFT_TO_RIGHT_OVERRIDE = 12; // 0xc
+
+/**
+ * Directional type ON
+ */
+
+public static final int OTHER_NEUTRAL = 10; // 0xa
+
+/**
+ * Directional type PDF
+ */
+
+public static final int POP_DIRECTIONAL_FORMAT = 16; // 0x10
+
+/**
+ * Directional type PDI
+ */
+
+public static final byte POP_DIRECTIONAL_ISOLATE = 22; // 0x16
+
+/**
+ * Directional type R
+ */
+
+public static final int RIGHT_TO_LEFT = 1; // 0x1
+
+/**
+ * Directional type AL
+ */
+
+public static final int RIGHT_TO_LEFT_ARABIC = 13; // 0xd
+
+/**
+ * Directional type RLE
+ */
+
+public static final int RIGHT_TO_LEFT_EMBEDDING = 14; // 0xe
+
+/**
+ * Directional type RLI
+ */
+
+public static final byte RIGHT_TO_LEFT_ISOLATE = 21; // 0x15
+
+/**
+ * Directional type RLO
+ */
+
+public static final int RIGHT_TO_LEFT_OVERRIDE = 15; // 0xf
+
+/**
+ * Directional type S
+ */
+
+public static final int SEGMENT_SEPARATOR = 8; // 0x8
+
+/**
+ * Directional type WS
+ */
+
+public static final int WHITE_SPACE_NEUTRAL = 9; // 0x9
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UProperty.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UProperty.java
new file mode 100644
index 0000000..46fbcad
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UProperty.java
@@ -0,0 +1,940 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+
+package android.icu.lang;
+
+
+/**
+ * <p>Selection constants for Unicode properties.
+ * <p>These constants are used in functions like
+ * UCharacter.hasBinaryProperty(int) to select one of the Unicode properties.
+ *
+ * <p>The properties APIs are intended to reflect Unicode properties as
+ * defined in the Unicode Character Database (UCD) and Unicode Technical
+ * Reports (UTR).
+ * <p>For details about the properties see
+ * <a href="http://www.unicode.org/reports/tr44/">UAX #44: Unicode Character Database</a>.
+ *
+ * <p>Important: If ICU is built with UCD files from Unicode versions below
+ * 3.2, then properties marked with "new" are not or not fully
+ * available. Check UCharacter.getUnicodeVersion() to be sure.
+ * @author Syn Wee Quek
+ * @see android.icu.lang.UCharacter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface UProperty {
+
+/**
+ * String property Age.
+ * Corresponds to UCharacter.getAge(int).
+ */
+
+public static final int AGE = 16384; // 0x4000
+
+/**
+ * <p>Binary property Alphabetic.
+ * <p>Property for UCharacter.isUAlphabetic(), different from the property
+ * in UCharacter.isalpha().
+ * <p>Lu + Ll + Lt + Lm + Lo + Nl + Other_Alphabetic.
+ */
+
+public static final int ALPHABETIC = 0; // 0x0
+
+/**
+ * Binary property ASCII_Hex_Digit (0-9 A-F a-f).
+ */
+
+public static final int ASCII_HEX_DIGIT = 1; // 0x1
+
+/**
+ * Enumerated property Bidi_Class.
+ * Same as UCharacter.getDirection(int), returns UCharacterDirection values.
+ */
+
+public static final int BIDI_CLASS = 4096; // 0x1000
+
+/**
+ * <p>Binary property Bidi_Control.
+ * <p>Format controls which have specific functions in the Bidi Algorithm.
+ */
+
+public static final int BIDI_CONTROL = 2; // 0x2
+
+/**
+ * <p>Binary property Bidi_Mirrored.
+ * <p>Characters that may change display in RTL text.
+ * <p>Property for UCharacter.isMirrored().
+ * <p>See Bidi Algorithm; UTR 9.
+ */
+
+public static final int BIDI_MIRRORED = 3; // 0x3
+
+/**
+ * String property Bidi_Mirroring_Glyph.
+ * Corresponds to UCharacter.getMirror(int).
+ */
+
+public static final int BIDI_MIRRORING_GLYPH = 16385; // 0x4001
+
+/**
+ * String property Bidi_Paired_Bracket (new in Unicode 6.3).
+ * Corresponds to UCharacter.getBidiPairedBracket.
+ */
+
+public static final int BIDI_PAIRED_BRACKET = 16397; // 0x400d
+
+/**
+ * Enumerated property Bidi_Paired_Bracket_Type (new in Unicode 6.3).
+ * Used in UAX #9: Unicode Bidirectional Algorithm
+ * (http://www.unicode.org/reports/tr9/)
+ * Returns UCharacter.BidiPairedBracketType values.
+ */
+
+public static final int BIDI_PAIRED_BRACKET_TYPE = 4117; // 0x1015
+
+/**
+ * First constant for binary Unicode properties.
+ */
+
+public static final int BINARY_START = 0; // 0x0
+
+/**
+ * Enumerated property Block.
+ * Same as UCharacter.UnicodeBlock.of(int), returns UCharacter.UnicodeBlock
+ * values.
+ */
+
+public static final int BLOCK = 4097; // 0x1001
+
+/**
+ * Enumerated property Canonical_Combining_Class.
+ * Same as UCharacter.getCombiningClass(int), returns 8-bit numeric values.
+ */
+
+public static final int CANONICAL_COMBINING_CLASS = 4098; // 0x1002
+
+/**
+ * Binary property Cased.
+ * For Lowercase, Uppercase and Titlecase characters.
+ */
+
+public static final int CASED = 49; // 0x31
+
+/**
+ * String property Case_Folding.
+ * Corresponds to UCharacter.foldCase(String, boolean).
+ */
+
+public static final int CASE_FOLDING = 16386; // 0x4002
+
+/**
+ * Binary property Case_Ignorable.
+ * Used in context-sensitive case mappings.
+ */
+
+public static final int CASE_IGNORABLE = 50; // 0x32
+
+/**
+ * <p>Binary property Case_Sensitive.
+ * <p>Either the source of a case
+ * mapping or _in_ the target of a case mapping. Not the same as
+ * the general category Cased_Letter.
+ */
+
+public static final int CASE_SENSITIVE = 34; // 0x22
+
+/**
+ * Binary property Changes_When_Casefolded.
+ */
+
+public static final int CHANGES_WHEN_CASEFOLDED = 54; // 0x36
+
+/**
+ * Binary property Changes_When_Casemapped.
+ */
+
+public static final int CHANGES_WHEN_CASEMAPPED = 55; // 0x37
+
+/**
+ * Binary property Changes_When_Lowercased.
+ */
+
+public static final int CHANGES_WHEN_LOWERCASED = 51; // 0x33
+
+/**
+ * Binary property Changes_When_NFKC_Casefolded.
+ */
+
+public static final int CHANGES_WHEN_NFKC_CASEFOLDED = 56; // 0x38
+
+/**
+ * Binary property Changes_When_Titlecased.
+ */
+
+public static final int CHANGES_WHEN_TITLECASED = 53; // 0x35
+
+/**
+ * Binary property Changes_When_Uppercased.
+ */
+
+public static final int CHANGES_WHEN_UPPERCASED = 52; // 0x34
+
+/**
+ * <p>Binary property Dash.
+ * <p>Variations of dashes.
+ */
+
+public static final int DASH = 4; // 0x4
+
+/**
+ * Enumerated property Decomposition_Type.
+ * Returns UCharacter.DecompositionType values.
+ */
+
+public static final int DECOMPOSITION_TYPE = 4099; // 0x1003
+
+/**
+ * <p>Binary property Default_Ignorable_Code_Point (new).
+ *
+ * <p>Property that indicates codepoint is ignorable in most processing.
+ *
+ * <p>Codepoints (2060..206F, FFF0..FFFB, E0000..E0FFF) +
+ * Other_Default_Ignorable_Code_Point + (Cf + Cc + Cs - White_Space)
+ */
+
+public static final int DEFAULT_IGNORABLE_CODE_POINT = 5; // 0x5
+
+/**
+ * <p>Binary property Deprecated (new).
+ * <p>The usage of deprecated characters is strongly discouraged.
+ */
+
+public static final int DEPRECATED = 6; // 0x6
+
+/**
+ * <p>Binary property Diacritic.
+ * <p>Characters that linguistically modify the meaning of another
+ * character to which they apply.
+ */
+
+public static final int DIACRITIC = 7; // 0x7
+
+/**
+ * First constant for double Unicode properties.
+ */
+
+public static final int DOUBLE_START = 12288; // 0x3000
+
+/**
+ * Enumerated property East_Asian_Width.
+ * See http://www.unicode.org/reports/tr11/
+ * Returns UCharacter.EastAsianWidth values.
+ */
+
+public static final int EAST_ASIAN_WIDTH = 4100; // 0x1004
+
+/**
+ * Binary property Emoji.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI = 57; // 0x39
+
+/**
+ * Binary property Emoji_Component.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_COMPONENT = 61; // 0x3d
+
+/**
+ * Binary property Emoji_Modifier.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_MODIFIER = 59; // 0x3b
+
+/**
+ * Binary property Emoji_Modifier_Base.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_MODIFIER_BASE = 60; // 0x3c
+
+/**
+ * Binary property Emoji_Presentation.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EMOJI_PRESENTATION = 58; // 0x3a
+
+/**
+ * Binary property Extended_Pictographic.
+ * See http://www.unicode.org/reports/tr51/#Emoji_Properties
+ */
+
+public static final int EXTENDED_PICTOGRAPHIC = 64; // 0x40
+
+/**
+ * <p>Binary property Extender.
+ * <p>Extend the value or shape of a preceding alphabetic character, e.g.
+ * length and iteration marks.
+ */
+
+public static final int EXTENDER = 8; // 0x8
+
+/**
+ * <p>Binary property Full_Composition_Exclusion.
+ * <p>CompositionExclusions.txt + Singleton Decompositions +
+ * Non-Starter Decompositions.
+ */
+
+public static final int FULL_COMPOSITION_EXCLUSION = 9; // 0x9
+
+/**
+ * Enumerated property General_Category.
+ * Same as UCharacter.getType(int), returns UCharacterCategory values.
+ */
+
+public static final int GENERAL_CATEGORY = 4101; // 0x1005
+
+/**
+ * Bitmask property General_Category_Mask.
+ * This is the General_Category property returned as a bit mask.
+ * When used in UCharacter.getIntPropertyValue(c),
+ * returns bit masks for UCharacterCategory values where exactly one bit is set.
+ * When used with UCharacter.getPropertyValueName() and UCharacter.getPropertyValueEnum(),
+ * a multi-bit mask is used for sets of categories like "Letters".
+ */
+
+public static final int GENERAL_CATEGORY_MASK = 8192; // 0x2000
+
+/**
+ * <p>Binary property Grapheme_Base (new).
+ * <p>For programmatic determination of grapheme cluster boundaries.
+ * [0..10FFFF]-Cc-Cf-Cs-Co-Cn-Zl-Zp-Grapheme_Link-Grapheme_Extend-CGJ
+ */
+
+public static final int GRAPHEME_BASE = 10; // 0xa
+
+/**
+ * Enumerated property Grapheme_Cluster_Break (new in Unicode 4.1).
+ * Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ * Returns UCharacter.GraphemeClusterBreak values.
+ */
+
+public static final int GRAPHEME_CLUSTER_BREAK = 4114; // 0x1012
+
+/**
+ * <p>Binary property Grapheme_Extend (new).
+ * <p>For programmatic determination of grapheme cluster boundaries.
+ * <p>Me+Mn+Mc+Other_Grapheme_Extend-Grapheme_Link-CGJ
+ */
+
+public static final int GRAPHEME_EXTEND = 11; // 0xb
+
+/**
+ * <p>Binary property Grapheme_Link (new).
+ * <p>For programmatic determination of grapheme cluster boundaries.
+ */
+
+public static final int GRAPHEME_LINK = 12; // 0xc
+
+/**
+ * Enumerated property Hangul_Syllable_Type, new in Unicode 4.
+ * Returns UCharacter.HangulSyllableType values.
+ */
+
+public static final int HANGUL_SYLLABLE_TYPE = 4107; // 0x100b
+
+/**
+ * <p>Binary property Hex_Digit.
+ * <p>Characters commonly used for hexadecimal numbers.
+ */
+
+public static final int HEX_DIGIT = 13; // 0xd
+
+/**
+ * <p>Binary property Hyphen.
+ * <p>Dashes used to mark connections between pieces of words, plus the
+ * Katakana middle dot.
+ */
+
+public static final int HYPHEN = 14; // 0xe
+
+/**
+ * <p>Binary property Ideographic.
+ * <p>CJKV ideographs.
+ */
+
+public static final int IDEOGRAPHIC = 17; // 0x11
+
+/**
+ * <p>Binary property IDS_Binary_Operator (new).
+ * <p>For programmatic determination of Ideographic Description Sequences.
+ */
+
+public static final int IDS_BINARY_OPERATOR = 18; // 0x12
+
+/**
+ * <p>Binary property IDS_Trinary_Operator (new).
+ * <p>For programmatic determination of Ideographic Description
+ * Sequences.
+ */
+
+public static final int IDS_TRINARY_OPERATOR = 19; // 0x13
+
+/**
+ * <p>Binary property ID_Continue.
+ * <p>Characters that can continue an identifier.
+ * <p>ID_Start+Mn+Mc+Nd+Pc
+ */
+
+public static final int ID_CONTINUE = 15; // 0xf
+
+/**
+ * <p>Binary property ID_Start.
+ * <p>Characters that can start an identifier.
+ * <p>Lu+Ll+Lt+Lm+Lo+Nl
+ */
+
+public static final int ID_START = 16; // 0x10
+
+/**
+ * Enumerated property Indic_Positional_Category.
+ * New in Unicode 6.0 as provisional property Indic_Matra_Category;
+ * renamed and changed to informative in Unicode 8.0.
+ * See http://www.unicode.org/reports/tr44/#IndicPositionalCategory.txt
+ */
+
+public static final int INDIC_POSITIONAL_CATEGORY = 4118; // 0x1016
+
+/**
+ * Enumerated property Indic_Syllabic_Category.
+ * New in Unicode 6.0 as provisional; informative since Unicode 8.0.
+ * See http://www.unicode.org/reports/tr44/#IndicSyllabicCategory.txt
+ */
+
+public static final int INDIC_SYLLABIC_CATEGORY = 4119; // 0x1017
+
+/**
+ * First constant for enumerated/integer Unicode properties.
+ */
+
+public static final int INT_START = 4096; // 0x1000
+
+/**
+ * Enumerated property Joining_Group.
+ * Returns UCharacter.JoiningGroup values.
+ */
+
+public static final int JOINING_GROUP = 4102; // 0x1006
+
+/**
+ * Enumerated property Joining_Type.
+ * Returns UCharacter.JoiningType values.
+ */
+
+public static final int JOINING_TYPE = 4103; // 0x1007
+
+/**
+ * <p>Binary property Join_Control.
+ * <p>Format controls for cursive joining and ligation.
+ */
+
+public static final int JOIN_CONTROL = 20; // 0x14
+
+/**
+ * Enumerated property Lead_Canonical_Combining_Class.
+ * ICU-specific property for the ccc of the first code point
+ * of the decomposition, or lccc(c)=ccc(NFD(c)[0]).
+ * Useful for checking for canonically ordered text;
+ * see Normalizer.FCD and http://www.unicode.org/notes/tn5/#FCD .
+ * Returns 8-bit numeric values like CANONICAL_COMBINING_CLASS.
+ */
+
+public static final int LEAD_CANONICAL_COMBINING_CLASS = 4112; // 0x1010
+
+/**
+ * Enumerated property Line_Break.
+ * Returns UCharacter.LineBreak values.
+ */
+
+public static final int LINE_BREAK = 4104; // 0x1008
+
+/**
+ * <p>Binary property Logical_Order_Exception (new).
+ * <p>Characters that do not use logical order and require special
+ * handling in most processing.
+ */
+
+public static final int LOGICAL_ORDER_EXCEPTION = 21; // 0x15
+
+/**
+ * <p>Binary property Lowercase.
+ * <p>Same as UCharacter.isULowercase(), different from
+ * UCharacter.islower().
+ * <p>Ll+Other_Lowercase
+ */
+
+public static final int LOWERCASE = 22; // 0x16
+
+/**
+ * String property Lowercase_Mapping.
+ * Corresponds to UCharacter.toLowerCase(String).
+ */
+
+public static final int LOWERCASE_MAPPING = 16388; // 0x4004
+
+/**
+ * First constant for bit-mask Unicode properties.
+ */
+
+public static final int MASK_START = 8192; // 0x2000
+
+/** <p>Binary property Math.
+ * <p>Sm+Other_Math
+ */
+
+public static final int MATH = 23; // 0x17
+
+/**
+ * String property Name.
+ * Corresponds to UCharacter.getName(int).
+ */
+
+public static final int NAME = 16389; // 0x4005
+
+/**
+ * Binary property NFC_Inert.
+ * ICU-specific property for characters that are inert under NFC,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ * @see #NFD_INERT
+ */
+
+public static final int NFC_INERT = 39; // 0x27
+
+/**
+ * Enumerated property NFC_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFC_QUICK_CHECK = 4110; // 0x100e
+
+/**
+ * Binary property NFD_Inert.
+ * ICU-specific property for characters that are inert under NFD,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ *
+ * There is one such property per normalization form.
+ * These properties are computed as follows - an inert character is:
+ * a) unassigned, or ALL of the following:
+ * b) of combining class 0.
+ * c) not decomposed by this normalization form.
+ * AND if NFC or NFKC,
+ * d) can never compose with a previous character.
+ * e) can never compose with a following character.
+ * f) can never change if another character is added.
+ * Example: a-breve might satisfy all but f, but if you
+ * add an ogonek it changes to a-ogonek + breve
+ *
+ * See also com.ibm.text.UCD.NFSkippable in the ICU4J repository,
+ * and icu/source/common/unormimp.h .
+ */
+
+public static final int NFD_INERT = 37; // 0x25
+
+/**
+ * Enumerated property NFD_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFD_QUICK_CHECK = 4108; // 0x100c
+
+/**
+ * Binary property NFKC_Inert.
+ * ICU-specific property for characters that are inert under NFKC,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ * @see #NFD_INERT
+ */
+
+public static final int NFKC_INERT = 40; // 0x28
+
+/**
+ * Enumerated property NFKC_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFKC_QUICK_CHECK = 4111; // 0x100f
+
+/**
+ * Binary property NFKD_Inert.
+ * ICU-specific property for characters that are inert under NFKD,
+ * i.e., they do not interact with adjacent characters.
+ * Used for example in normalizing transforms in incremental mode
+ * to find the boundary of safely normalizable text despite possible
+ * text additions.
+ * @see #NFD_INERT
+ */
+
+public static final int NFKD_INERT = 38; // 0x26
+
+/**
+ * Enumerated property NFKD_Quick_Check.
+ * Returns numeric values compatible with Normalizer.QuickCheckResult.
+ */
+
+public static final int NFKD_QUICK_CHECK = 4109; // 0x100d
+
+/**
+ * <p>Binary property Noncharacter_Code_Point.
+ * <p>Code points that are explicitly defined as illegal for the encoding
+ * of characters.
+ */
+
+public static final int NONCHARACTER_CODE_POINT = 24; // 0x18
+
+/**
+ * Enumerated property Numeric_Type.
+ * Returns UCharacter.NumericType values.
+ */
+
+public static final int NUMERIC_TYPE = 4105; // 0x1009
+
+/**
+ * Double property Numeric_Value.
+ * Corresponds to UCharacter.getUnicodeNumericValue(int).
+ */
+
+public static final int NUMERIC_VALUE = 12288; // 0x3000
+
+/**
+ * First constant for Unicode properties with unusual value types.
+ */
+
+public static final int OTHER_PROPERTY_START = 28672; // 0x7000
+
+/**
+ * Binary property Pattern_Syntax (new in Unicode 4.1).
+ * See UAX #31 Identifier and Pattern Syntax
+ * (http://www.unicode.org/reports/tr31/)
+ */
+
+public static final int PATTERN_SYNTAX = 42; // 0x2a
+
+/**
+ * Binary property Pattern_White_Space (new in Unicode 4.1).
+ * See UAX #31 Identifier and Pattern Syntax
+ * (http://www.unicode.org/reports/tr31/)
+ */
+
+public static final int PATTERN_WHITE_SPACE = 43; // 0x2b
+
+/**
+ * Binary property alnum (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_ALNUM = 44; // 0x2c
+
+/**
+ * Binary property blank (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_BLANK = 45; // 0x2d
+
+/**
+ * Binary property graph (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_GRAPH = 46; // 0x2e
+
+/**
+ * Binary property print (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_PRINT = 47; // 0x2f
+
+/**
+ * Binary property xdigit (a C/POSIX character class).
+ * Implemented according to the UTS #18 Annex C Standard Recommendation.
+ * See the UCharacter class documentation.
+ */
+
+public static final int POSIX_XDIGIT = 48; // 0x30
+
+/**
+ * Binary property Prepended_Concatenation_Mark.
+ */
+
+public static final int PREPENDED_CONCATENATION_MARK = 63; // 0x3f
+
+/**
+ * <p>Binary property Quotation_Mark.
+ */
+
+public static final int QUOTATION_MARK = 25; // 0x19
+
+/**
+ * <p>Binary property Radical (new).
+ * <p>For programmatic determination of Ideographic Description
+ * Sequences.
+ */
+
+public static final int RADICAL = 26; // 0x1a
+
+/**
+ * Binary property Regional_Indicator.
+ */
+
+public static final int REGIONAL_INDICATOR = 62; // 0x3e
+
+/**
+ * Enumerated property Script.
+ * Same as UScript.getScript(int), returns UScript values.
+ */
+
+public static final int SCRIPT = 4106; // 0x100a
+
+/**
+ * Miscellaneous property Script_Extensions (new in Unicode 6.0).
+ * Some characters are commonly used in multiple scripts.
+ * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
+ * Corresponds to UScript.hasScript and UScript.getScriptExtensions.
+ */
+
+public static final int SCRIPT_EXTENSIONS = 28672; // 0x7000
+
+/**
+ * Binary Property Segment_Starter.
+ * ICU-specific property for characters that are starters in terms of
+ * Unicode normalization and combining character sequences.
+ * They have ccc=0 and do not occur in non-initial position of the
+ * canonical decomposition of any character
+ * (like " in NFD(a-umlaut) and a Jamo T in an NFD(Hangul LVT)).
+ * ICU uses this property for segmenting a string for generating a set of
+ * canonically equivalent strings, e.g. for canonical closure while
+ * processing collation tailoring rules.
+ */
+
+public static final int SEGMENT_STARTER = 41; // 0x29
+
+/**
+ * Enumerated property Sentence_Break (new in Unicode 4.1).
+ * Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ * Returns UCharacter.SentenceBreak values.
+ */
+
+public static final int SENTENCE_BREAK = 4115; // 0x1013
+
+/**
+ * String property Simple_Case_Folding.
+ * Corresponds to UCharacter.foldCase(int, boolean).
+ */
+
+public static final int SIMPLE_CASE_FOLDING = 16390; // 0x4006
+
+/**
+ * String property Simple_Lowercase_Mapping.
+ * Corresponds to UCharacter.toLowerCase(int).
+ */
+
+public static final int SIMPLE_LOWERCASE_MAPPING = 16391; // 0x4007
+
+/**
+ * String property Simple_Titlecase_Mapping.
+ * Corresponds to UCharacter.toTitleCase(int).
+ */
+
+public static final int SIMPLE_TITLECASE_MAPPING = 16392; // 0x4008
+
+/**
+ * String property Simple_Uppercase_Mapping.
+ * Corresponds to UCharacter.toUpperCase(int).
+ */
+
+public static final int SIMPLE_UPPERCASE_MAPPING = 16393; // 0x4009
+
+/**
+ * <p>Binary property Soft_Dotted (new).
+ * <p>Characters with a "soft dot", like i or j.
+ * <p>An accent placed on these characters causes the dot to disappear.
+ */
+
+public static final int SOFT_DOTTED = 27; // 0x1b
+
+/**
+ * First constant for string Unicode properties.
+ */
+
+public static final int STRING_START = 16384; // 0x4000
+
+/**
+ * Binary property STerm (new in Unicode 4.0.1).
+ * Sentence Terminal. Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ */
+
+public static final int S_TERM = 35; // 0x23
+
+/**
+ * <p>Binary property Terminal_Punctuation.
+ * <p>Punctuation characters that generally mark the end of textual
+ * units.
+ */
+
+public static final int TERMINAL_PUNCTUATION = 28; // 0x1c
+
+/**
+ * String property Titlecase_Mapping.
+ * Corresponds to UCharacter.toTitleCase(String).
+ */
+
+public static final int TITLECASE_MAPPING = 16394; // 0x400a
+
+/**
+ * Enumerated property Trail_Canonical_Combining_Class.
+ * ICU-specific property for the ccc of the last code point
+ * of the decomposition, or lccc(c)=ccc(NFD(c)[last]).
+ * Useful for checking for canonically ordered text;
+ * see Normalizer.FCD and http://www.unicode.org/notes/tn5/#FCD .
+ * Returns 8-bit numeric values like CANONICAL_COMBINING_CLASS.
+ */
+
+public static final int TRAIL_CANONICAL_COMBINING_CLASS = 4113; // 0x1011
+
+/**
+ * <p>Binary property Unified_Ideograph (new).
+ * <p>For programmatic determination of Ideographic Description
+ * Sequences.
+ */
+
+public static final int UNIFIED_IDEOGRAPH = 29; // 0x1d
+
+/**
+ * <p>Binary property Uppercase.
+ * <p>Same as UCharacter.isUUppercase(), different from
+ * UCharacter.isUpperCase().
+ * <p>Lu+Other_Uppercase
+ */
+
+public static final int UPPERCASE = 30; // 0x1e
+
+/**
+ * String property Uppercase_Mapping.
+ * Corresponds to UCharacter.toUpperCase(String).
+ */
+
+public static final int UPPERCASE_MAPPING = 16396; // 0x400c
+
+/**
+ * Binary property Variation_Selector (new in Unicode 4.0.1).
+ * Indicates all those characters that qualify as Variation Selectors.
+ * For details on the behavior of these characters,
+ * see StandardizedVariants.html and 15.6 Variation Selectors.
+ */
+
+public static final int VARIATION_SELECTOR = 36; // 0x24
+
+/**
+ * Enumerated property Vertical_Orientation.
+ * Used for UAX #50 Unicode Vertical Text Layout (https://www.unicode.org/reports/tr50/).
+ * New as a UCD property in Unicode 10.0.
+ */
+
+public static final int VERTICAL_ORIENTATION = 4120; // 0x1018
+
+/**
+ * <p>Binary property White_Space.
+ * <p>Same as UCharacter.isUWhiteSpace(), different from
+ * UCharacter.isSpace() and UCharacter.isWhitespace().
+ * Space characters+TAB+CR+LF-ZWSP-ZWNBSP
+ */
+
+public static final int WHITE_SPACE = 31; // 0x1f
+
+/**
+ * Enumerated property Word_Break (new in Unicode 4.1).
+ * Used in UAX #29: Text Boundaries
+ * (http://www.unicode.org/reports/tr29/)
+ * Returns UCharacter.WordBreak values.
+ */
+
+public static final int WORD_BREAK = 4116; // 0x1014
+
+/**
+ * <p>Binary property XID_Continue.
+ * <p>ID_Continue modified to allow closure under normalization forms
+ * NFKC and NFKD.
+ */
+
+public static final int XID_CONTINUE = 32; // 0x20
+
+/**
+ * <p>Binary property XID_Start.
+ * <p>ID_Start modified to allow closure under normalization forms NFKC
+ * and NFKD.
+ */
+
+public static final int XID_START = 33; // 0x21
+/**
+ * Selector constants for UCharacter.getPropertyName() and
+ * UCharacter.getPropertyValueName().  These selectors are used to
+ * choose which name is returned for a given property or value.
+ * All properties and values have a long name.  Most have a short
+ * name, but some do not.  Unicode allows for additional names,
+ * beyond the long and short name, which would be indicated by
+ * LONG + i, where i=1, 2,...
+ *
+ * @see android.icu.lang.UCharacter#getPropertyName
+ * @see android.icu.lang.UCharacter#getPropertyValueName
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface NameChoice {
+
+/**
+ * Selector for the long name of a property or value.  All
+ * properties and values have a long name.
+ */
+
+public static final int LONG = 1; // 0x1
+
+/**
+ * Selector for the abbreviated name of a property or value.
+ * Most properties and values have a short name; those that do
+ * not return null.
+ */
+
+public static final int SHORT = 0; // 0x0
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UScript.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UScript.java
new file mode 100644
index 0000000..36c59aa
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/lang/UScript.java
@@ -0,0 +1,1448 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 2001-2016 International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.lang;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import java.util.BitSet;
+
+/**
+ * Constants for ISO 15924 script codes, and related functions.
+ *
+ * <p>The current set of script code constants supports at least all scripts
+ * that are encoded in the version of Unicode which ICU currently supports.
+ * The names of the constants are usually derived from the
+ * Unicode script property value aliases.
+ * See UAX #24 Unicode Script Property (http://www.unicode.org/reports/tr24/)
+ * and http://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt .
+ *
+ * <p>In addition, constants for many ISO 15924 script codes
+ * are included, for use with language tags, CLDR data, and similar.
+ * Some of those codes are not used in the Unicode Character Database (UCD).
+ * For example, there are no characters that have a UCD script property value of
+ * Hans or Hant. All Han ideographs have the Hani script property value in Unicode.
+ *
+ * <p>Private-use codes Qaaa..Qabx are not included, except as used in the UCD or in CLDR.
+ *
+ * <p>Starting with ICU 55, script codes are only added when their scripts
+ * have been or will certainly be encoded in Unicode,
+ * and have been assigned Unicode script property value aliases,
+ * to ensure that their script names are stable and match the names of the constants.
+ * Script codes like Latf and Aran that are not subject to separate encoding
+ * may be added at any time.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UScript {
+
+private UScript() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a script codes associated with the given locale or ISO 15924 abbreviation or name.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ * Returns LATIN given "en" OR "en_US"
+ * @param locale Locale
+ * @return The script codes array. null if the the code cannot be found.
+ */
+
+public static int[] getCode(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a script codes associated with the given locale or ISO 15924 abbreviation or name.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ * Returns LATIN given "en" OR "en_US"
+ * @param locale ULocale
+ * @return The script codes array. null if the the code cannot be found.
+ */
+
+public static int[] getCode(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the script codes associated with the given locale or ISO 15924 abbreviation or name.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ * Returns LATIN given "en" OR "en_US"
+ *
+ * <p>Note: To search by short or long script alias only, use
+ * {@link #getCodeFromName(java.lang.String)} instead.
+ * That does a fast lookup with no access of the locale data.
+ *
+ * @param nameOrAbbrOrLocale name of the script or ISO 15924 code or locale
+ * @return The script codes array. null if the the code cannot be found.
+ */
+
+public static int[] getCode(java.lang.String nameOrAbbrOrLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script code associated with the given Unicode script property alias
+ * (name or abbreviation).
+ * Short aliases are ISO 15924 script codes.
+ * Returns MALAYAM given "Malayam" OR "Mlym".
+ *
+ * @param nameOrAbbr name of the script or ISO 15924 code
+ * @return The script code value, or INVALID_CODE if the code cannot be found.
+ */
+
+public static int getCodeFromName(java.lang.String nameOrAbbr) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the script code associated with the given codepoint.
+ * Returns UScript.MALAYAM given 0x0D02
+ * @param codepoint UChar32 codepoint
+ * @return The script code
+ */
+
+public static int getScript(int codepoint) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Do the Script_Extensions of code point c contain script sc?
+ * If c does not have explicit Script_Extensions, then this tests whether
+ * c has the Script property value sc.
+ *
+ * <p>Some characters are commonly used in multiple scripts.
+ * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
+ *
+ * @param c code point
+ * @param sc script code
+ * @return true if sc is in Script_Extensions(c)
+ */
+
+public static boolean hasScript(int c, int sc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets code point c's Script_Extensions as script code integers into the output BitSet.
+ * <ul>
+ * <li>If c does have Script_Extensions, then the return value is
+ * the negative number of Script_Extensions codes (= -set.cardinality());
+ * in this case, the Script property value
+ * (normally Common or Inherited) is not included in the set.
+ * <li>If c does not have Script_Extensions, then the one Script code is put into the set
+ * and also returned.
+ * <li>If c is not a valid code point, then the one {@link #UNKNOWN} code is put into the set
+ * and also returned.
+ * </ul>
+ * In other words, if the return value is non-negative, it is c's single Script code
+ * and the set contains exactly this Script code.
+ * If the return value is -n, then the set contains c's n&gt;=2 Script_Extensions script codes.
+ *
+ * <p>Some characters are commonly used in multiple scripts.
+ * For more information, see UAX #24: http://www.unicode.org/reports/tr24/.
+ *
+ * @param c code point
+ * @param set set of script code integers; will be cleared, then bits are set
+ *            corresponding to c's Script_Extensions
+ * @return negative number of script codes in c's Script_Extensions,
+ *         or the non-negative single Script value
+ */
+
+public static int getScriptExtensions(int c, java.util.BitSet set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the long Unicode script name, if there is one.
+ * Otherwise returns the 4-letter ISO 15924 script code.
+ * Returns "Malayam" given MALAYALAM.
+ *
+ * @param scriptCode int script code
+ * @return long script name as given in PropertyValueAliases.txt, or the 4-letter code
+ * @throws java.lang.IllegalArgumentException if the script code is not valid
+ */
+
+public static java.lang.String getName(int scriptCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the 4-letter ISO 15924 script code,
+ * which is the same as the short Unicode script name if Unicode has names for the script.
+ * Returns "Mlym" given MALAYALAM.
+ *
+ * @param scriptCode int script code
+ * @return short script name (4-letter code)
+ * @throws java.lang.IllegalArgumentException if the script code is not valid
+ */
+
+public static java.lang.String getShortName(int scriptCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script sample character string.
+ * This string normally consists of one code point but might be longer.
+ * The string is empty if the script is not encoded.
+ *
+ * @param script script code
+ * @return the sample character string
+ */
+
+public static java.lang.String getSampleString(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script usage according to UAX #31 Unicode Identifier and Pattern Syntax.
+ * Returns {@link android.icu.lang.UScript.ScriptUsage#NOT_ENCODED ScriptUsage#NOT_ENCODED} if the script is not encoded in Unicode.
+ *
+ * @param script script code
+ * @return script usage
+ * @see android.icu.lang.UScript.ScriptUsage
+ */
+
+public static android.icu.lang.UScript.ScriptUsage getUsage(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the script is written right-to-left.
+ * For example, Arab and Hebr.
+ *
+ * @param script script code
+ * @return true if the script is right-to-left
+ */
+
+public static boolean isRightToLeft(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the script allows line breaks between letters (excluding hyphenation).
+ * Such a script typically requires dictionary-based line breaking.
+ * For example, Hani and Thai.
+ *
+ * @param script script code
+ * @return true if the script allows line breaks between letters
+ */
+
+public static boolean breaksBetweenLetters(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if in modern (or most recent) usage of the script case distinctions are customary.
+ * For example, Latn and Cyrl.
+ *
+ * @param script script code
+ * @return true if the script is cased
+ */
+
+public static boolean isCased(int script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ADLAM = 167; // 0xa7
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int AFAKA = 147; // 0x93
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int AHOM = 161; // 0xa1
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ANATOLIAN_HIEROGLYPHS = 156; // 0x9c
+
+/**
+ * Arabic
+ */
+
+public static final int ARABIC = 2; // 0x2
+
+/**
+ * Armenian
+ */
+
+public static final int ARMENIAN = 3; // 0x3
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int AVESTAN = 117; // 0x75
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BALINESE = 62; // 0x3e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BAMUM = 130; // 0x82
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BASSA_VAH = 134; // 0x86
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BATAK = 63; // 0x3f
+
+/**
+ * Bengali
+ */
+
+public static final int BENGALI = 4; // 0x4
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BHAIKSUKI = 168; // 0xa8
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BLISSYMBOLS = 64; // 0x40
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BOOK_PAHLAVI = 124; // 0x7c
+
+/**
+ * Bopomofo
+ */
+
+public static final int BOPOMOFO = 5; // 0x5
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int BRAHMI = 65; // 0x41
+
+/**
+ * Braille
+ * Script in Unicode 4
+ *
+ */
+
+public static final int BRAILLE = 46; // 0x2e
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int BUGINESE = 55; // 0x37
+
+/**
+ * Buhid
+ */
+
+public static final int BUHID = 44; // 0x2c
+
+/**
+ * Unified Canadian Aboriginal Symbols
+ */
+
+public static final int CANADIAN_ABORIGINAL = 40; // 0x28
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CARIAN = 104; // 0x68
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CAUCASIAN_ALBANIAN = 159; // 0x9f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CHAKMA = 118; // 0x76
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CHAM = 66; // 0x42
+
+/**
+ * Cherokee
+ */
+
+public static final int CHEROKEE = 6; // 0x6
+
+/***/
+
+public static final int CHORASMIAN = 189; // 0xbd
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CIRTH = 67; // 0x43
+
+/**
+ * Common
+ */
+
+public static final int COMMON = 0; // 0x0
+
+/**
+ * Coptic
+ */
+
+public static final int COPTIC = 7; // 0x7
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int CUNEIFORM = 101; // 0x65
+
+/**
+ * Cypriot
+ * Script in Unicode 4
+ *
+ */
+
+public static final int CYPRIOT = 47; // 0x2f
+
+/**
+ * Cyrillic
+ */
+
+public static final int CYRILLIC = 8; // 0x8
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int DEMOTIC_EGYPTIAN = 69; // 0x45
+
+/**
+ * Deseret
+ */
+
+public static final int DESERET = 9; // 0x9
+
+/**
+ * Devanagari
+ */
+
+public static final int DEVANAGARI = 10; // 0xa
+
+/***/
+
+public static final int DIVES_AKURU = 190; // 0xbe
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int DOGRA = 178; // 0xb2
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int DUPLOYAN = 135; // 0x87
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int EASTERN_SYRIAC = 97; // 0x61
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int EGYPTIAN_HIEROGLYPHS = 71; // 0x47
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ELBASAN = 136; // 0x88
+
+/***/
+
+public static final int ELYMAIC = 185; // 0xb9
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ESTRANGELO_SYRIAC = 95; // 0x5f
+
+/**
+ * Ethiopic
+ */
+
+public static final int ETHIOPIC = 11; // 0xb
+
+/**
+ * Georgian
+ */
+
+public static final int GEORGIAN = 12; // 0xc
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int GLAGOLITIC = 56; // 0x38
+
+/**
+ * Gothic
+ */
+
+public static final int GOTHIC = 13; // 0xd
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int GRANTHA = 137; // 0x89
+
+/**
+ * Greek
+ */
+
+public static final int GREEK = 14; // 0xe
+
+/**
+ * Gujarati
+ */
+
+public static final int GUJARATI = 15; // 0xf
+
+/***/
+
+public static final int GUNJALA_GONDI = 179; // 0xb3
+
+/**
+ * Gurmukhi
+ */
+
+public static final int GURMUKHI = 16; // 0x10
+
+/**
+ * Han
+ */
+
+public static final int HAN = 17; // 0x11
+
+/**
+ * Hangul
+ */
+
+public static final int HANGUL = 18; // 0x12
+
+/***/
+
+public static final int HANIFI_ROHINGYA = 182; // 0xb6
+
+/**
+ * Hanunooo
+ */
+
+public static final int HANUNOO = 43; // 0x2b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HAN_WITH_BOPOMOFO = 172; // 0xac
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HARAPPAN_INDUS = 77; // 0x4d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HATRAN = 162; // 0xa2
+
+/**
+ * Hebrew
+ */
+
+public static final int HEBREW = 19; // 0x13
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int HIERATIC_EGYPTIAN = 70; // 0x46
+
+/**
+ * Hiragana
+ */
+
+public static final int HIRAGANA = 20; // 0x14
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int IMPERIAL_ARAMAIC = 116; // 0x74
+
+/**
+ * Inherited
+ */
+
+public static final int INHERITED = 1; // 0x1
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int INSCRIPTIONAL_PAHLAVI = 122; // 0x7a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int INSCRIPTIONAL_PARTHIAN = 125; // 0x7d
+
+/**
+ * Invalid code
+ */
+
+public static final int INVALID_CODE = -1; // 0xffffffff
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JAMO = 173; // 0xad
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JAPANESE = 105; // 0x69
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JAVANESE = 78; // 0x4e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int JURCHEN = 148; // 0x94
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KAITHI = 120; // 0x78
+
+/**
+ * Kannada
+ */
+
+public static final int KANNADA = 21; // 0x15
+
+/**
+ * Katakana
+ */
+
+public static final int KATAKANA = 22; // 0x16
+
+/**
+ * Script in Unicode 4.0.1
+ */
+
+public static final int KATAKANA_OR_HIRAGANA = 54; // 0x36
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KAYAH_LI = 79; // 0x4f
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int KHAROSHTHI = 57; // 0x39
+
+/***/
+
+public static final int KHITAN_SMALL_SCRIPT = 191; // 0xbf
+
+/**
+ * Khmer
+ */
+
+public static final int KHMER = 23; // 0x17
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KHOJKI = 157; // 0x9d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KHUDAWADI = 145; // 0x91
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KHUTSURI = 72; // 0x48
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KOREAN = 119; // 0x77
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int KPELLE = 138; // 0x8a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LANNA = 106; // 0x6a
+
+/**
+ * Lao
+ */
+
+public static final int LAO = 24; // 0x18
+
+/**
+ * Latin
+ */
+
+public static final int LATIN = 25; // 0x19
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LATIN_FRAKTUR = 80; // 0x50
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LATIN_GAELIC = 81; // 0x51
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LEPCHA = 82; // 0x52
+
+/**
+ * Limbu
+ * Script in Unicode 4
+ *
+ */
+
+public static final int LIMBU = 48; // 0x30
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LINEAR_A = 83; // 0x53
+
+/**
+ * Linear B
+ * Script in Unicode 4
+ *
+ */
+
+public static final int LINEAR_B = 49; // 0x31
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LISU = 131; // 0x83
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LOMA = 139; // 0x8b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LYCIAN = 107; // 0x6b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int LYDIAN = 108; // 0x6c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MAHAJANI = 160; // 0xa0
+
+/***/
+
+public static final int MAKASAR = 180; // 0xb4
+
+/**
+ * Malayalam
+ */
+
+public static final int MALAYALAM = 26; // 0x1a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MANDAEAN = 84; // 0x54
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MANDAIC = 84; // 0x54
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MANICHAEAN = 121; // 0x79
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MARCHEN = 169; // 0xa9
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MASARAM_GONDI = 175; // 0xaf
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MATHEMATICAL_NOTATION = 128; // 0x80
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MAYAN_HIEROGLYPHS = 85; // 0x55
+
+/***/
+
+public static final int MEDEFAIDRIN = 181; // 0xb5
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEITEI_MAYEK = 115; // 0x73
+
+/**
+ * Mende Kikakui
+ * ISO 15924 script code
+ */
+
+public static final int MENDE = 140; // 0x8c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEROITIC = 86; // 0x56
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEROITIC_CURSIVE = 141; // 0x8d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MEROITIC_HIEROGLYPHS = 86; // 0x56
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MIAO = 92; // 0x5c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MODI = 163; // 0xa3
+
+/**
+ * Mangolian
+ */
+
+public static final int MONGOLIAN = 27; // 0x1b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MOON = 114; // 0x72
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MRO = 149; // 0x95
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int MULTANI = 164; // 0xa4
+
+/**
+ * Myammar
+ */
+
+public static final int MYANMAR = 28; // 0x1c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NABATAEAN = 143; // 0x8f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NAKHI_GEBA = 132; // 0x84
+
+/***/
+
+public static final int NANDINAGARI = 187; // 0xbb
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NEWA = 170; // 0xaa
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int NEW_TAI_LUE = 59; // 0x3b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NKO = 87; // 0x57
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int NUSHU = 150; // 0x96
+
+/***/
+
+public static final int NYIAKENG_PUACHUE_HMONG = 186; // 0xba
+
+/**
+ * Ogham
+ */
+
+public static final int OGHAM = 29; // 0x1d
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_CHURCH_SLAVONIC_CYRILLIC = 68; // 0x44
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_HUNGARIAN = 76; // 0x4c
+
+/**
+ * Old Itallic
+ */
+
+public static final int OLD_ITALIC = 30; // 0x1e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_NORTH_ARABIAN = 142; // 0x8e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_PERMIC = 89; // 0x59
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int OLD_PERSIAN = 61; // 0x3d
+
+/***/
+
+public static final int OLD_SOGDIAN = 184; // 0xb8
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OLD_SOUTH_ARABIAN = 133; // 0x85
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OL_CHIKI = 109; // 0x6d
+
+/**
+ * Oriya
+ */
+
+public static final int ORIYA = 31; // 0x1f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ORKHON = 88; // 0x58
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int OSAGE = 171; // 0xab
+
+/**
+ * Osmanya
+ * Script in Unicode 4
+ *
+ */
+
+public static final int OSMANYA = 50; // 0x32
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PAHAWH_HMONG = 75; // 0x4b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PALMYRENE = 144; // 0x90
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PAU_CIN_HAU = 165; // 0xa5
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PHAGS_PA = 90; // 0x5a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PHOENICIAN = 91; // 0x5b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PHONETIC_POLLARD = 92; // 0x5c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int PSALTER_PAHLAVI = 123; // 0x7b
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int REJANG = 110; // 0x6e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int RONGORONGO = 93; // 0x5d
+
+/**
+ * Runic
+ */
+
+public static final int RUNIC = 32; // 0x20
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SAMARITAN = 126; // 0x7e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SARATI = 94; // 0x5e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SAURASHTRA = 111; // 0x6f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SHARADA = 151; // 0x97
+
+/**
+ * Shavian
+ * Script in Unicode 4
+ *
+ */
+
+public static final int SHAVIAN = 51; // 0x33
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SIDDHAM = 166; // 0xa6
+
+/**
+ * ISO 15924 script code for Sutton SignWriting
+ */
+
+public static final int SIGN_WRITING = 112; // 0x70
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SIMPLIFIED_HAN = 73; // 0x49
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SINDHI = 145; // 0x91
+
+/**
+ * Sinhala
+ */
+
+public static final int SINHALA = 33; // 0x21
+
+/***/
+
+public static final int SOGDIAN = 183; // 0xb7
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SORA_SOMPENG = 152; // 0x98
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SOYOMBO = 176; // 0xb0
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SUNDANESE = 113; // 0x71
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int SYLOTI_NAGRI = 58; // 0x3a
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SYMBOLS = 129; // 0x81
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int SYMBOLS_EMOJI = 174; // 0xae
+
+/**
+ * Syriac
+ */
+
+public static final int SYRIAC = 34; // 0x22
+
+/**
+ * Tagalog
+ */
+
+public static final int TAGALOG = 42; // 0x2a
+
+/**
+ * Tagbanwa
+ */
+
+public static final int TAGBANWA = 45; // 0x2d
+
+/**
+ * Tai Le
+ * Script in Unicode 4
+ *
+ */
+
+public static final int TAI_LE = 52; // 0x34
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TAI_VIET = 127; // 0x7f
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TAKRI = 153; // 0x99
+
+/**
+ * Tamil
+ */
+
+public static final int TAMIL = 35; // 0x23
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TANGUT = 154; // 0x9a
+
+/**
+ * Telugu
+ */
+
+public static final int TELUGU = 36; // 0x24
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TENGWAR = 98; // 0x62
+
+/**
+ * Thana
+ */
+
+public static final int THAANA = 37; // 0x25
+
+/**
+ * Thai
+ */
+
+public static final int THAI = 38; // 0x26
+
+/**
+ * Tibetan
+ */
+
+public static final int TIBETAN = 39; // 0x27
+
+/**
+ * Script in Unicode 4.1
+ */
+
+public static final int TIFINAGH = 60; // 0x3c
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TIRHUTA = 158; // 0x9e
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int TRADITIONAL_HAN = 74; // 0x4a
+
+/**
+ * Unified Canadian Aboriginal Symbols (alias)
+ */
+
+public static final int UCAS = 40; // 0x28
+
+/**
+ * Ugaritic
+ * Script in Unicode 4
+ *
+ */
+
+public static final int UGARITIC = 53; // 0x35
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int UNKNOWN = 103; // 0x67
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int UNWRITTEN_LANGUAGES = 102; // 0x66
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int VAI = 99; // 0x63
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int VISIBLE_SPEECH = 100; // 0x64
+
+/***/
+
+public static final int WANCHO = 188; // 0xbc
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int WARANG_CITI = 146; // 0x92
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int WESTERN_SYRIAC = 96; // 0x60
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int WOLEAI = 155; // 0x9b
+
+/***/
+
+public static final int YEZIDI = 192; // 0xc0
+
+/**
+ * Yi syllables
+ */
+
+public static final int YI = 41; // 0x29
+
+/**
+ * ISO 15924 script code
+ */
+
+public static final int ZANABAZAR_SQUARE = 177; // 0xb1
+/**
+ * Script usage constants.
+ * See UAX #31 Unicode Identifier and Pattern Syntax.
+ * http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Exclusion_from_Identifiers
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ScriptUsage {
+/**
+ * Not encoded in Unicode.
+ */
+
+NOT_ENCODED,
+/**
+ * Unknown script usage.
+ */
+
+UNKNOWN,
+/**
+ * Candidate for Exclusion from Identifiers.
+ */
+
+EXCLUDED,
+/**
+ * Limited Use script.
+ */
+
+LIMITED_USE,
+/**
+ * Aspirational Use script.
+ */
+
+ASPIRATIONAL,
+/**
+ * Recommended script.
+ */
+
+RECOMMENDED;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/math/BigDecimal.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/math/BigDecimal.java
new file mode 100644
index 0000000..e6f7cf2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/math/BigDecimal.java
@@ -0,0 +1,1291 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/* Generated from 'BigDecimal.nrx' 8 Sep 2000 11:10:50 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
+
+package android.icu.math;
+
+import java.math.BigInteger;
+
+/**
+ * The <code>BigDecimal</code> class implements immutable arbitrary-precision decimal numbers. The methods of the
+ * <code>BigDecimal</code> class provide operations for fixed and floating point arithmetic, comparison, format
+ * conversions, and hashing.
+ * <p>
+ * As the numbers are decimal, there is an exact correspondence between an instance of a <code>BigDecimal</code> object
+ * and its <code>String</code> representation; the <code>BigDecimal</code> class provides direct conversions to and from
+ * <code>String</code> and character array (<code>char[]</code>) objects, as well as conversions to and from the Java
+ * primitive types (which may not be exact) and <code>BigInteger</code>.
+ * <p>
+ * In the descriptions of constructors and methods in this documentation, the value of a <code>BigDecimal</code> number
+ * object is shown as the result of invoking the <code>toString()</code> method on the object. The internal
+ * representation of a decimal number is neither defined nor exposed, and is not permitted to affect the result of any
+ * operation.
+ * <p>
+ * The floating point arithmetic provided by this class is defined by the ANSI X3.274-1996 standard, and is also
+ * documented at <code>http://www2.hursley.ibm.com/decimal</code> <br>
+ * <i>[This URL will change.]</i>
+ *
+ * <h3>Operator methods</h3>
+ * <p>
+ * Operations on <code>BigDecimal</code> numbers are controlled by a {@link android.icu.math.MathContext MathContext} object, which provides the
+ * context (precision and other information) for the operation. Methods that can take a <code>MathContext</code>
+ * parameter implement the standard arithmetic operators for <code>BigDecimal</code> objects and are known as
+ * <i>operator methods</i>. The default settings provided by the constant {@link android.icu.math.MathContext#DEFAULT MathContext#DEFAULT} (<code>digits=9,
+ * form=SCIENTIFIC, lostDigits=false, roundingMode=ROUND_HALF_UP</code>) perform general-purpose floating point
+ * arithmetic to nine digits of precision. The <code>MathContext</code> parameter must not be <code>null</code>.
+ * <p>
+ * Each operator method also has a version provided which does not take a <code>MathContext</code> parameter. For this
+ * version of each method, the context settings used are <code>digits=0,
+ * form=PLAIN, lostDigits=false, roundingMode=ROUND_HALF_UP</code>; these settings perform fixed point arithmetic with
+ * unlimited precision, as defined for the original BigDecimal class in Java 1.1 and Java 1.2.
+ * <p>
+ * For monadic operators, only the optional <code>MathContext</code> parameter is present; the operation acts upon the
+ * current object.
+ * <p>
+ * For dyadic operators, a <code>BigDecimal</code> parameter is always present; it must not be <code>null</code>. The
+ * operation acts with the current object being the left-hand operand and the <code>BigDecimal</code> parameter being
+ * the right-hand operand.
+ * <p>
+ * For example, adding two <code>BigDecimal</code> objects referred to by the names <code>award</code> and
+ * <code>extra</code> could be written as any of:
+ * <p>
+ * <code>
+ *     award.add(extra)
+ * <br>award.add(extra, MathContext.DEFAULT)
+ * <br>award.add(extra, acontext)
+ * </code>
+ * <p>
+ * (where <code>acontext</code> is a <code>MathContext</code> object), which would return a <code>BigDecimal</code>
+ * object whose value is the result of adding <code>award</code> and <code>extra</code> under the appropriate context
+ * settings.
+ * <p>
+ * When a <code>BigDecimal</code> operator method is used, a set of rules define what the result will be (and, by
+ * implication, how the result would be represented as a character string). These rules are defined in the BigDecimal
+ * arithmetic documentation (see the URL above), but in summary:
+ * <ul>
+ * <li>Results are normally calculated with up to some maximum number of significant digits. For example, if the
+ * <code>MathContext</code> parameter for an operation were <code>MathContext.DEFAULT</code> then the result would be
+ * rounded to 9 digits; the division of 2 by 3 would then result in 0.666666667. <br>
+ * You can change the default of 9 significant digits by providing the method with a suitable <code>MathContext</code>
+ * object. This lets you calculate using as many digits as you need -- thousands, if necessary. Fixed point (scaled)
+ * arithmetic is indicated by using a <code>digits</code> setting of 0 (or omitting the <code>MathContext</code>
+ * parameter). <br>
+ * Similarly, you can change the algorithm used for rounding from the default "classic" algorithm.
+ * <li>
+ * In standard arithmetic (that is, when the <code>form</code> setting is not <code>PLAIN</code>), a zero result is
+ * always expressed as the single digit <code>'0'</code> (that is, with no sign, decimal point, or exponent part).
+ * <li>
+ * Except for the division and power operators in standard arithmetic, trailing zeros are preserved (this is in contrast
+ * to binary floating point operations and most electronic calculators, which lose the information about trailing zeros
+ * in the fractional part of results). <br>
+ * So, for example:
+ * <p>
+ * <code>
+ *     new BigDecimal("2.40").add(     new BigDecimal("2"))      =&gt; "4.40"
+ * <br>new BigDecimal("2.40").subtract(new BigDecimal("2"))      =&gt; "0.40"
+ * <br>new BigDecimal("2.40").multiply(new BigDecimal("2"))      =&gt; "4.80"
+ * <br>new BigDecimal("2.40").divide(  new BigDecimal("2"), def) =&gt; "1.2"
+ * </code>
+ * <p>
+ * where the value on the right of the <code>=&gt;</code> would be the result of the operation, expressed as a
+ * <code>String</code>, and <code>def</code> (in this and following examples) refers to <code>MathContext.DEFAULT</code>
+ * ). This preservation of trailing zeros is desirable for most calculations (including financial calculations). If
+ * necessary, trailing zeros may be easily removed using division by 1.
+ * <li>
+ * In standard arithmetic, exponential form is used for a result depending on its value and the current setting of
+ * <code>digits</code> (the default is 9 digits). If the number of places needed before the decimal point exceeds the
+ * <code>digits</code> setting, or the absolute value of the number is less than <code>0.000001</code>, then the number
+ * will be expressed in exponential notation; thus
+ * <p>
+ * <code>
+ *   new BigDecimal("1e+6").multiply(new BigDecimal("1e+6"), def)
+ * </code>
+ * <p>
+ * results in <code>1E+12</code> instead of <code>1000000000000</code>, and
+ * <p>
+ * <code>
+ *   new BigDecimal("1").divide(new BigDecimal("3E+10"), def)
+ * </code>
+ * <p>
+ * results in <code>3.33333333E-11</code> instead of <code>0.0000000000333333333</code>.
+ * <p>
+ * The form of the exponential notation (scientific or engineering) is determined by the <code>form</code> setting.
+ * </ul>
+ * <p>
+ * The names of methods in this class follow the conventions established by <code>java.lang.Number</code>,
+ * <code>java.math.BigInteger</code>, and <code>java.math.BigDecimal</code> in Java 1.1 and Java 1.2.
+ *
+ * @see android.icu.math.MathContext
+ * @author Mike Cowlishaw
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BigDecimal extends java.lang.Number implements java.io.Serializable, java.lang.Comparable<android.icu.math.BigDecimal> {
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>java.math.BigDecimal</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> as though the parameter had been represented as a <code>String</code> (using
+ * its <code>toString</code> method) and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
+ * The parameter must not be <code>null</code>.
+ * <p>
+ * <i>(Note: this constructor is provided only in the <code>android.icu.math</code> version of the BigDecimal class.
+ * It would not be present in a <code>java.math</code> version.)</i>
+ *
+ * @param bd The <code>BigDecimal</code> to be translated.
+ */
+
+public BigDecimal(java.math.BigDecimal bd) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>BigInteger</code>, with scale 0.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the <code>BigInteger</code>,
+ * with a scale of zero. The value of the <code>BigDecimal</code> is identical to the value of the <code>BigInteger
+ * </code>. The parameter must not be <code>null</code>.
+ * <p>
+ * The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus sign (hyphen) if the
+ * <code>BigInteger</code> is negative. A leading zero will be present only if the <code>BigInteger</code> is zero.
+ *
+ * @param bi The <code>BigInteger</code> to be converted.
+ */
+
+public BigDecimal(java.math.BigInteger bi) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>BigInteger</code> and a scale.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the <code>BigInteger</code>,
+ * scaled by the second parameter, which may not be negative. The value of the <code>BigDecimal</code> is the <code>
+ * BigInteger</code> divided by ten to the power of the scale. The <code>BigInteger</code> parameter must not be
+ * <code>null</code>.
+ * <p>
+ * The <code>BigDecimal</code> will contain only decimal digits, (with an embedded decimal point followed by <code>
+ * scale</code> decimal digits if the scale is positive), prefixed with a leading minus sign (hyphen) if the <code>
+ * BigInteger</code> is negative. A leading zero will be present only if the <code>BigInteger</code> is zero.
+ *
+ * @param bi The <code>BigInteger</code> to be converted.
+ * @param scale The <code>int</code> specifying the scale.
+ * @throws java.lang.NumberFormatException If the scale is negative.
+ */
+
+public BigDecimal(java.math.BigInteger bi, int scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from an array of characters.
+ * <p>
+ * Constructs a <code>BigDecimal</code> as though a <code>String</code> had been constructed from the character
+ * array and the {@link #BigDecimal(java.lang.String)} constructor had then been used. The parameter must not be
+ * <code>null</code>.
+ * <p>
+ * Using this constructor is faster than using the <code>BigDecimal(String)</code> constructor if the string is
+ * already available in character array form.
+ *
+ * @param inchars The <code>char[]</code> array containing the number to be converted.
+ * @throws java.lang.NumberFormatException If the parameter is not a valid number.
+ */
+
+public BigDecimal(char[] inchars) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from an array of characters.
+ * <p>
+ * Constructs a <code>BigDecimal</code> as though a <code>String</code> had been constructed from the character
+ * array (or a subarray of that array) and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
+ * The first parameter must not be <code>null</code>, and the subarray must be wholly contained within it.
+ * <p>
+ * Using this constructor is faster than using the <code>BigDecimal(String)</code> constructor if the string is
+ * already available within a character array.
+ *
+ * @param inchars The <code>char[]</code> array containing the number to be converted.
+ * @param offset The <code>int</code> offset into the array of the start of the number to be converted.
+ * @param length The <code>int</code> length of the number.
+ * @throws java.lang.NumberFormatException If the parameter is not a valid number for any reason.
+ */
+
+public BigDecimal(char[] inchars, int offset, int length) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object directly from a <code>double</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 64-bit signed binary
+ * floating point parameter.
+ * <p>
+ * Note that this constructor it an exact conversion; it does not give the same result as converting <code>num
+ * </code> to a <code>String</code> using the <code>Double.toString()</code> method and then using the
+ * {@link #BigDecimal(java.lang.String)} constructor. To get that result, use the static {@link #valueOf(double)}
+ * method to construct a <code>BigDecimal</code> from a <code>double</code>.
+ *
+ * @param num The <code>double</code> to be converted.
+ * @throws java.lang.NumberFormatException If the parameter is infinite or not a number.
+ */
+
+public BigDecimal(double num) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object directly from a <code>int</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 32-bit signed binary
+ * integer parameter. The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus
+ * sign (hyphen) if the parameter is negative. A leading zero will be present only if the parameter is zero.
+ *
+ * @param num The <code>int</code> to be converted.
+ */
+
+public BigDecimal(int num) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object directly from a <code>long</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> which is the exact decimal representation of the 64-bit signed binary
+ * integer parameter. The <code>BigDecimal</code> will contain only decimal digits, prefixed with a leading minus
+ * sign (hyphen) if the parameter is negative. A leading zero will be present only if the parameter is zero.
+ *
+ * @param num The <code>long</code> to be converted.
+ */
+
+public BigDecimal(long num) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BigDecimal</code> object from a <code>String</code>.
+ * <p>
+ * Constructs a <code>BigDecimal</code> from the parameter, which must not be <code>null</code> and must represent a
+ * valid <i>number</i>, as described formally in the documentation referred to {@link android.icu.math.BigDecimal above}.
+ * <p>
+ * In summary, numbers in <code>String</code> form must have at least one digit, may have a leading sign, may have a
+ * decimal point, and exponential notation may be used. They follow conventional syntax, and may not contain blanks.
+ * <p>
+ * Some valid strings from which a <code>BigDecimal</code> might be constructed are:
+ *
+ * <pre>
+ *
+ * "0" -- Zero "12" -- A whole number "-76" -- A signed whole number "12.70" -- Some decimal places "+0.003" -- Plus
+ * sign is allowed "17." -- The same as 17 ".5" -- The same as 0.5 "4E+9" -- Exponential notation "0.73e-7" --
+ * Exponential notation
+ *
+ * </pre>
+ * <p>
+ * (Exponential notation means that the number includes an optional sign and a power of ten following an
+ * '<code>E</code>' that indicates how the decimal point will be shifted. Thus the <code>"4E+9"</code> above is
+ * just a short way of writing <code>4000000000</code>, and the <code>"0.73e-7"</code> is short for <code>
+ * 0.000000073</code>.)
+ * <p>
+ * The <code>BigDecimal</code> constructed from the String is in a standard form, with no blanks, as though the
+ * {@link #add(android.icu.math.BigDecimal)} method had been used to add zero to the number with unlimited precision. If the string
+ * uses exponential notation (that is, includes an <code>e</code> or an <code>E</code>), then the <code>BigDecimal
+ * </code> number will be expressed in scientific notation (where the power of ten is adjusted so there is a single
+ * non-zero digit to the left of the decimal point); in this case if the number is zero then it will be expressed as
+ * the single digit 0, and if non-zero it will have an exponent unless that exponent would be 0. The exponent must
+ * fit in nine digits both before and after it is expressed in scientific notation.
+ * <p>
+ * Any digits in the parameter must be decimal; that is, <code>Character.digit(c, 10)</code> (where <code>c</code>
+ * is the character in question) would not return -1.
+ *
+ * @param string The <code>String</code> to be converted.
+ * @throws java.lang.NumberFormatException If the parameter is not a valid number.
+ */
+
+public BigDecimal(java.lang.String string) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ * <p>
+ * The same as {@link #abs(android.icu.math.MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be <code>this.scale()</code>
+ *
+ * @return A <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ */
+
+public android.icu.math.BigDecimal abs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ * <p>
+ * If the current object is zero or positive, then the same result as invoking the {@link #plus(android.icu.math.MathContext)} method
+ * with the same parameter is returned. Otherwise, the same result as invoking the {@link #negate(android.icu.math.MathContext)}
+ * method with the same parameter is returned.
+ *
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the absolute value of this <code>BigDecimal</code>.
+ */
+
+public android.icu.math.BigDecimal abs(android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this+rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #add(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the maximum of the scales of the two operands.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the addition.
+ * @return A <code>BigDecimal</code> whose value is <code>this+rhs</code>, using fixed point arithmetic.
+ */
+
+public android.icu.math.BigDecimal add(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this+rhs</code>.
+ * <p>
+ * Implements the addition (<b><code>+</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the addition.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this+rhs</code>.
+ */
+
+public android.icu.math.BigDecimal add(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this <code>BigDecimal</code> to another, using unlimited precision.
+ * <p>
+ * The same as {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @return An <code>int</code> whose value is -1, 0, or 1 as <code>this</code> is numerically less than, equal to,
+ *         or greater than <code>rhs</code>.
+ */
+
+public int compareTo(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this <code>BigDecimal</code> to another.
+ * <p>
+ * Implements numeric comparison, (as defined in the decimal documentation, see {@link android.icu.math.BigDecimal class header}),
+ * and returns a result of type <code>int</code>.
+ * <p>
+ * The result will be:
+ * <table cellpadding=2>
+ * <tr>
+ * <td align=right><b>-1</b></td> <td>if the current object is less than the first parameter</td>
+ * </tr>
+ * <tr>
+ * <td align=right><b>0</b></td> <td>if the current object is equal to the first parameter</td>
+ * </tr>
+ * <tr>
+ * <td align=right><b>1</b></td> <td>if the current object is greater than the first parameter.</td>
+ * </tr>
+ * </table>
+ * <p>
+ * A {@link #compareTo(android.icu.math.BigDecimal)} method is also provided.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return An <code>int</code> whose value is -1, 0, or 1 as <code>this</code> is numerically less than, equal to,
+ *         or greater than <code>rhs</code>.
+ */
+
+public int compareTo(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #divide(android.icu.math.BigDecimal,int)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * rounding mode is {@link android.icu.math.MathContext#ROUND_HALF_UP MathContext#ROUND_HALF_UP}.
+ *
+ * The length of the decimal part (the scale) of the result will be the same as the scale of the current object, if
+ * the latter were formatted without exponential notation.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic.
+ * @throws java.lang.ArithmeticException If <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and a
+ * rounding mode.
+ * <p>
+ * The same as {@link #divide(android.icu.math.BigDecimal,int,int)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * second parameter is <code>this.scale()</code>, and the third is <code>round</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will therefore be the same as the scale of the current
+ * object, if the latter were formatted without exponential notation.
+ * <p>
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @param round The <code>int</code> rounding mode to be used for the division (see the {@link android.icu.math.MathContext MathContext} class).
+ * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and
+ *         the specified rounding mode.
+ * @throws java.lang.IllegalArgumentException if <code>round</code> is not a valid rounding mode.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException if <code>round</code> is {@link android.icu.math.MathContext#ROUND_UNNECESSARY MathContext#ROUND_UNNECESSARY} and <code>this.scale()</code> is insufficient to represent the result exactly.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs, int round) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and a
+ * given scale and rounding mode.
+ * <p>
+ * The same as {@link #divide(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * <code>new MathContext(0, MathContext.PLAIN, false, round)</code>, except that the length of the decimal part (the
+ * scale) to be used for the result is explicit rather than being taken from <code>this</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the same as the scale of the current object, if
+ * the latter were formatted without exponential notation.
+ * <p>
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @param scale The <code>int</code> scale to be used for the result.
+ * @param round The <code>int</code> rounding mode to be used for the division (see the {@link android.icu.math.MathContext MathContext} class).
+ * @return A plain <code>BigDecimal</code> whose value is <code>this/rhs</code>, using fixed point arithmetic and
+ *         the specified rounding mode.
+ * @throws java.lang.IllegalArgumentException if <code>round</code> is not a valid rounding mode.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException if <code>scale</code> is negative.
+ * @throws java.lang.ArithmeticException if <code>round</code> is {@link android.icu.math.MathContext#ROUND_UNNECESSARY MathContext#ROUND_UNNECESSARY} and <code>scale</code> is insufficient
+ *             to represent the result exactly.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs, int scale, int round) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this/rhs</code>.
+ * <p>
+ * Implements the division (<b><code>/</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the division.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this/rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal divide(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * <p>
+ * The same as {@link #divideInteger(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs
+ * </code>, and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the integer division.
+ * @return A <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * <p>
+ * Implements the integer division operator (as defined in the decimal documentation, see {@link android.icu.math.BigDecimal  header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the integer division.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the integer part of <code>this/rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException if the result will not fit in the number of digits specified for the context.
+ */
+
+public android.icu.math.BigDecimal divideInteger(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * The same as {@link #max(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @return A <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal max(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * Returns the larger of the current object and the first parameter.
+ * <p>
+ * If calling the {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)} method with the same parameters would return <code>1
+ * </code> or <code>0</code>, then the result of calling the {@link #plus(android.icu.math.MathContext)} method on the current object
+ * (using the same <code>MathContext</code> parameter) is returned. Otherwise, the result of calling the
+ * {@link #plus(android.icu.math.MathContext)} method on the first parameter object (using the same <code>MathContext</code>
+ * parameter) is returned.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the maximum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal max(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * The same as {@link #min(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @return A <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal min(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ * <p>
+ * Returns the smaller of the current object and the first parameter.
+ * <p>
+ * If calling the {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)} method with the same parameters would return <code>-1
+ * </code> or <code>0</code>, then the result of calling the {@link #plus(android.icu.math.MathContext)} method on the current object
+ * (using the same <code>MathContext</code> parameter) is returned. Otherwise, the result of calling the
+ * {@link #plus(android.icu.math.MathContext)} method on the first parameter object (using the same <code>MathContext</code>
+ * parameter) is returned.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the comparison.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the minimum of <code>this</code> and <code>rhs</code>.
+ */
+
+public android.icu.math.BigDecimal min(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this*rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #add(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the sum of the scales of the operands, if they
+ * were formatted without exponential notation.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the multiplication.
+ * @return A <code>BigDecimal</code> whose value is <code>this*rhs</code>, using fixed point arithmetic.
+ */
+
+public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this*rhs</code>.
+ * <p>
+ * Implements the multiplication (<b><code>&#42;</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the multiplication.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this*rhs</code>.
+ */
+
+public android.icu.math.BigDecimal multiply(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>-this</code>.
+ * <p>
+ * The same as {@link #negate(android.icu.math.MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>
+ * .
+ * <p>
+ * The length of the decimal part (the scale) of the result will be be <code>this.scale()</code>
+ *
+ *
+ * @return A <code>BigDecimal</code> whose value is <code>-this</code>.
+ */
+
+public android.icu.math.BigDecimal negate() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>-this</code>.
+ * <p>
+ * Implements the negation (Prefix <b><code>-</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>-this</code>.
+ */
+
+public android.icu.math.BigDecimal negate(android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>+this</code>. Note that <code>this</code> is not
+ * necessarily a plain <code>BigDecimal</code>, but the result will always be.
+ * <p>
+ * The same as {@link #plus(android.icu.math.MathContext)}, where the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be be <code>this.scale()</code>
+ *
+ * @return A <code>BigDecimal</code> whose value is <code>+this</code>.
+ */
+
+public android.icu.math.BigDecimal plus() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>+this</code>.
+ * <p>
+ * Implements the plus (Prefix <b><code>+</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ * <p>
+ * This method is useful for rounding or otherwise applying a context to a decimal value.
+ *
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>+this</code>.
+ */
+
+public android.icu.math.BigDecimal plus(android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this**rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #pow(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>, and the
+ * context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The parameter is the power to which the <code>this</code> will be raised; it must be in the range 0 through
+ * 999999999, and must have a decimal part of zero. Note that these restrictions may be removed in the future, so
+ * they should not be used as a test for a whole number.
+ * <p>
+ * In addition, the power must not be negative, as no <code>MathContext</code> is used and so the result would then
+ * always be 0.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the operation (the power).
+ * @return A <code>BigDecimal</code> whose value is <code>this**rhs</code>, using fixed point arithmetic.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is out of range or is not a whole number.
+ */
+
+public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this**rhs</code>.
+ * <p>
+ * Implements the power (<b><code>^</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ * <p>
+ * The first parameter is the power to which the <code>this</code> will be raised; it must be in the range
+ * -999999999 through 999999999, and must have a decimal part of zero. Note that these restrictions may be removed
+ * in the future, so they should not be used as a test for a whole number.
+ * <p>
+ * If the <code>digits</code> setting of the <code>MathContext</code> parameter is 0, the power must be zero or
+ * positive.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the operation (the power).
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this**rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is out of range or is not a whole number.
+ */
+
+public android.icu.math.BigDecimal pow(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>, using fixed point
+ * arithmetic.
+ * <p>
+ * The same as {@link #remainder(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * This is not the modulo operator -- the result may be negative.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the remainder operation.
+ * @return A <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>, using fixed point
+ *         arithmetic.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ */
+
+public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is the remainder of <code>this/rhs</code>.
+ * <p>
+ * Implements the remainder operator (as defined in the decimal documentation, see {@link android.icu.math.BigDecimal class header}),
+ * and returns the result as a <code>BigDecimal</code> object.
+ * <p>
+ * This is not the modulo operator -- the result may be negative.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the remainder operation.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is the remainder of <code>this+rhs</code>.
+ * @throws java.lang.ArithmeticException if <code>rhs</code> is zero.
+ * @throws java.lang.ArithmeticException  if the integer part of the result will not fit in the number of digits specified for the context.
+ */
+
+public android.icu.math.BigDecimal remainder(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose value is <code>this-rhs</code>, using fixed point arithmetic.
+ * <p>
+ * The same as {@link #subtract(android.icu.math.BigDecimal,android.icu.math.MathContext)}, where the <code>BigDecimal</code> is <code>rhs</code>,
+ * and the context is <code>new MathContext(0, MathContext.PLAIN)</code>.
+ * <p>
+ * The length of the decimal part (the scale) of the result will be the maximum of the scales of the two operands.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the subtraction.
+ * @return A <code>BigDecimal</code> whose value is <code>this-rhs</code>, using fixed point arithmetic.
+ */
+
+public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>BigDecimal</code> whose value is <code>this-rhs</code>.
+ * <p>
+ * Implements the subtraction (<b><code>-</code></b>) operator (as defined in the decimal documentation, see
+ * {@link android.icu.math.BigDecimal class header}), and returns the result as a <code>BigDecimal</code> object.
+ *
+ * @param rhs The <code>BigDecimal</code> for the right hand side of the subtraction.
+ * @param set The <code>MathContext</code> arithmetic settings.
+ * @return A <code>BigDecimal</code> whose value is <code>this-rhs</code>.
+ */
+
+public android.icu.math.BigDecimal subtract(android.icu.math.BigDecimal rhs, android.icu.math.MathContext set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>byte</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for a <code>byte</code> (8-bit signed integer) result then an <code>
+ * ArithmeticException</code> is thrown.
+ *
+ * @return A <code>byte</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>byte</code>.
+ */
+
+public byte byteValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>double</code>. If the <code>BigDecimal</code> is out of the
+ * possible range for a <code>double</code> (64-bit signed floating point) result then an <code>ArithmeticException
+ * </code> is thrown.
+ * <p>
+ * The double produced is identical to result of expressing the <code>BigDecimal</code> as a <code>String</code> and
+ * then converting it using the <code>Double(String)</code> constructor; this can result in values of <code>
+ * Double.NEGATIVE_INFINITY</code> or <code>Double.POSITIVE_INFINITY</code>.
+ *
+ * @return A <code>double</code> corresponding to <code>this</code>.
+ */
+
+public double doubleValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this <code>BigDecimal</code> with <code>rhs</code> for equality.
+ * <p>
+ * If the parameter is <code>null</code>, or is not an instance of the BigDecimal type, or is not exactly equal to
+ * the current <code>BigDecimal</code> object, then <i>false</i> is returned. Otherwise, <i>true</i> is returned.
+ * <p>
+ * "Exactly equal", here, means that the <code>String</code> representations of the <code>BigDecimal</code> numbers
+ * are identical (they have the same characters in the same sequence).
+ * <p>
+ * The {@link #compareTo(android.icu.math.BigDecimal,android.icu.math.MathContext)} method should be used for more general comparisons.
+ *
+ * @param obj The <code>Object</code> for the right hand side of the comparison.
+ * @return A <code>boolean</code> whose value <i>true</i> if and only if the operands have identical string
+ *         representations.
+ * @throws java.lang.ClassCastException if <code>rhs</code> cannot be cast to a <code>BigDecimal</code> object.
+ * @see #compareTo(BigDecimal)
+ * @see #compareTo(BigDecimal, MathContext)
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>float</code>. If the <code>BigDecimal</code> is out of the
+ * possible range for a <code>float</code> (32-bit signed floating point) result then an <code>ArithmeticException
+ * </code> is thrown.
+ * <p>
+ * The float produced is identical to result of expressing the <code>BigDecimal</code> as a <code>String</code> and
+ * then converting it using the <code>Float(String)</code> constructor; this can result in values of <code>
+ * Float.NEGATIVE_INFINITY</code> or <code>Float.POSITIVE_INFINITY</code>.
+ *
+ * @return A <code>float</code> corresponding to <code>this</code>.
+ */
+
+public float floatValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>String</code> representation of this <code>BigDecimal</code>, modified by layout parameters.
+ * <p>
+ * <i>This method is provided as a primitive for use by more sophisticated classes, such as <code>DecimalFormat
+ * </code>, that can apply locale-sensitive editing of the result. The level of formatting that it provides is a
+ * necessary part of the BigDecimal class as it is sensitive to and must follow the calculation and rounding rules
+ * for BigDecimal arithmetic. However, if the function is provided elsewhere, it may be removed from this class.
+ * </i>
+ * <p>
+ * The parameters, for both forms of the <code>format</code> method are all of type <code>int</code>. A value of -1
+ * for any parameter indicates that the default action or value for that parameter should be used.
+ * <p>
+ * The parameters, <code>before</code> and <code>after</code>, specify the number of characters to be used for the
+ * integer part and decimal part of the result respectively. Exponential notation is not used. If either parameter
+ * is -1 (which indicates the default action), the number of characters used will be exactly as many as are needed
+ * for that part.
+ * <p>
+ * <code>before</code> must be a positive number; if it is larger than is needed to contain the integer part, that
+ * part is padded on the left with blanks to the requested length. If <code>before</code> is not large enough to
+ * contain the integer part of the number (including the sign, for negative numbers) an exception is thrown.
+ * <p>
+ * <code>after</code> must be a non-negative number; if it is not the same size as the decimal part of the number,
+ * the number will be rounded (or extended with zeros) to fit. Specifying 0 for <code>after</code> will cause the
+ * number to be rounded to an integer (that is, it will have no decimal part or decimal point). The rounding method
+ * will be the default, <code>MathContext.ROUND_HALF_UP</code>.
+ * <p>
+ * Other rounding methods, and the use of exponential notation, can be selected by using
+ * {@link #format(int,int,int,int,int,int)}. Using the two-parameter form of the method has exactly the same effect
+ * as using the six-parameter form with the final four parameters all being -1.
+ *
+ * @param before The <code>int</code> specifying the number of places before the decimal point. Use -1 for 'as many as are needed'.
+ * @param after The <code>int</code> specifying the number of places after the decimal point. Use -1 for 'as many as are needed'.
+ * @return A <code>String</code> representing this <code>BigDecimal</code>, laid out according to the specified parameters
+ * @throws java.lang.ArithmeticException if the number cannot be laid out as requested.
+ * @throws java.lang.IllegalArgumentException if a parameter is out of range.
+ * @see #toString
+ * @see #toCharArray
+ */
+
+public java.lang.String format(int before, int after) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>String</code> representation of this <code>BigDecimal</code>, modified by layout parameters and
+ * allowing exponential notation.
+ * <p>
+ * <i>This method is provided as a primitive for use by more sophisticated classes, such as <code>DecimalFormat
+ * </code>, that can apply locale-sensitive editing of the result. The level of formatting that it provides is a
+ * necessary part of the BigDecimal class as it is sensitive to and must follow the calculation and rounding rules
+ * for BigDecimal arithmetic. However, if the function is provided elsewhere, it may be removed from this class.
+ * </i>
+ * <p>
+ * The parameters are all of type <code>int</code>. A value of -1 for any parameter indicates that the default
+ * action or value for that parameter should be used.
+ * <p>
+ * The first two parameters (<code>before</code> and <code>after</code>) specify the number of characters to be used
+ * for the integer part and decimal part of the result respectively, as defined for {@link #format(int,int)}. If
+ * either of these is -1 (which indicates the default action), the number of characters used will be exactly as many
+ * as are needed for that part.
+ * <p>
+ * The remaining parameters control the use of exponential notation and rounding. Three (<code>explaces</code>,
+ * <code>exdigits</code>, and <code>exform</code>) control the exponent part of the result. As before, the default
+ * action for any of these parameters may be selected by using the value -1.
+ * <p>
+ * <code>explaces</code> must be a positive number; it sets the number of places (digits after the sign of the
+ * exponent) to be used for any exponent part, the default (when <code>explaces</code> is -1) being to use as many
+ * as are needed. If <code>explaces</code> is not -1, space is always reserved for an exponent; if one is not needed
+ * (for example, if the exponent will be 0) then <code>explaces</code>+2 blanks are appended to the result.
+ * (This preserves vertical alignment of similarly formatted numbers in a monospace font.) If <code>explaces
+ * </code> is not -1 and is not large enough to contain the exponent, an exception is thrown.
+ * <p>
+ * <code>exdigits</code> sets the trigger point for use of exponential notation. If, before any rounding, the number
+ * of places needed before the decimal point exceeds <code>exdigits</code>, or if the absolute value of the result
+ * is less than <code>0.000001</code>, then exponential form will be used, provided that <code>exdigits</code> was
+ * specified. When <code>exdigits</code> is -1, exponential notation will never be used. If 0 is specified for
+ * <code>exdigits</code>, exponential notation is always used unless the exponent would be 0.
+ * <p>
+ * <code>exform</code> sets the form for exponential notation (if needed). It may be either
+ * {@link android.icu.math.MathContext#SCIENTIFIC MathContext#SCIENTIFIC} or {@link android.icu.math.MathContext#ENGINEERING MathContext#ENGINEERING}. If the latter, engineering, form is requested,
+ * up to three digits (plus sign, if negative) may be needed for the integer part of the result (<code>before</code>
+ * ). Otherwise, only one digit (plus sign, if negative) is needed.
+ * <p>
+ * Finally, the sixth argument, <code>exround</code>, selects the rounding algorithm to be used, and must be one of
+ * the values indicated by a public constant in the {@link android.icu.math.MathContext MathContext} class whose name starts with <code>ROUND_
+ * </code>. The default (<code>ROUND_HALF_UP</code>) may also be selected by using the value -1, as before.
+ * <p>
+ * The special value <code>MathContext.ROUND_UNNECESSARY</code> may be used to detect whether non-zero digits are
+ * discarded -- if <code>exround</code> has this value than if non-zero digits would be discarded (rounded) during
+ * formatting then an <code>ArithmeticException</code> is thrown.
+ *
+ * @param before The <code>int</code> specifying the number of places before the decimal point. Use -1 for 'as many as
+ *            are needed'.
+ * @param after The <code>int</code> specifying the number of places after the decimal point. Use -1 for 'as many as
+ *            are needed'.
+ * @param explaces The <code>int</code> specifying the number of places to be used for any exponent. Use -1 for 'as many
+ *            as are needed'.
+ * @param exdigits The <code>int</code> specifying the trigger (digits before the decimal point) which if exceeded causes
+ *            exponential notation to be used. Use 0 to force exponential notation. Use -1 to force plain notation
+ *            (no exponential notation).
+ * @param exformint The <code>int</code> specifying the form of exponential notation to be used (
+ *            {@link android.icu.math.MathContext#SCIENTIFIC MathContext#SCIENTIFIC} or {@link android.icu.math.MathContext#ENGINEERING MathContext#ENGINEERING}).
+ * @param exround The <code>int</code> specifying the rounding mode to use. Use -1 for the default,
+ *            {@link android.icu.math.MathContext#ROUND_HALF_UP MathContext#ROUND_HALF_UP}.
+ * @return A <code>String</code> representing this <code>BigDecimal</code>, laid out according to the specified
+ *         parameters
+ * @throws java.lang.ArithmeticException if the number cannot be laid out as requested.
+ * @throws java.lang.IllegalArgumentException if a parameter is out of range.
+ * @see #toString
+ * @see #toCharArray
+ */
+
+public java.lang.String format(int before, int after, int explaces, int exdigits, int exformint, int exround) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hashcode for this <code>BigDecimal</code>. This hashcode is suitable for use by the <code>
+ * java.util.Hashtable</code> class.
+ * <p>
+ * Note that two <code>BigDecimal</code> objects are only guaranteed to produce the same hashcode if they are
+ * exactly equal (that is, the <code>String</code> representations of the <code>BigDecimal</code> numbers are
+ * identical -- they have the same characters in the same sequence).
+ *
+ * @return An <code>int</code> that is the hashcode for <code>this</code>.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to an <code>int</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part it is discarded. If the <code>BigDecimal</code> is out of the possible range for an <code>int</code>
+ * (32-bit signed integer) result then only the low-order 32 bits are used. (That is, the number may be
+ * <i>decapitated</i>.) To avoid unexpected errors when these conditions occur, use the {@link #intValueExact}
+ * method.
+ *
+ * @return An <code>int</code> converted from <code>this</code>, truncated and decapitated if necessary.
+ */
+
+public int intValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to an <code>int</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for an <code>int</code> (32-bit signed integer) result then an
+ * <code>ArithmeticException</code> is thrown.
+ *
+ * @return An <code>int</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in an <code>int</code>.
+ */
+
+public int intValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>long</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part it is discarded. If the <code>BigDecimal</code> is out of the possible range for a <code>long</code>
+ * (64-bit signed integer) result then only the low-order 64 bits are used. (That is, the number may be
+ * <i>decapitated</i>.) To avoid unexpected errors when these conditions occur, use the {@link #longValueExact}
+ * method.
+ *
+ * @return A <code>long</code> converted from <code>this</code>, truncated and decapitated if necessary.
+ */
+
+public long longValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>long</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for a <code>long</code> (64-bit signed integer) result then an
+ * <code>ArithmeticException</code> is thrown.
+ *
+ * @return A <code>long</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>long</code>.
+ */
+
+public long longValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose decimal point has been moved to the left by a specified number of
+ * positions. The parameter, <code>n</code>, specifies the number of positions to move the decimal point. That is,
+ * if <code>n</code> is 0 or positive, the number returned is given by:
+ * <p>
+ * <code> this.multiply(TEN.pow(new BigDecimal(-n))) </code>
+ * <p>
+ * <code>n</code> may be negative, in which case the method returns the same result as <code>movePointRight(-n)
+ * </code>.
+ *
+ * @param n The <code>int</code> specifying the number of places to move the decimal point leftwards.
+ * @return A <code>BigDecimal</code> derived from <code>this</code>, with the decimal point moved <code>n</code>
+ *         places to the left.
+ */
+
+public android.icu.math.BigDecimal movePointLeft(int n) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> whose decimal point has been moved to the right by a specified number of
+ * positions. The parameter, <code>n</code>, specifies the number of positions to move the decimal point. That is,
+ * if <code>n</code> is 0 or positive, the number returned is given by:
+ * <p>
+ * <code> this.multiply(TEN.pow(new BigDecimal(n))) </code>
+ * <p>
+ * <code>n</code> may be negative, in which case the method returns the same result as <code>movePointLeft(-n)
+ * </code>.
+ *
+ * @param n The <code>int</code> specifying the number of places to move the decimal point rightwards.
+ * @return A <code>BigDecimal</code> derived from <code>this</code>, with the decimal point moved <code>n</code>
+ *         places to the right.
+ */
+
+public android.icu.math.BigDecimal movePointRight(int n) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the scale of this <code>BigDecimal</code>. Returns a non-negative <code>int</code> which is the scale of
+ * the number. The scale is the number of digits in the decimal part of the number if the number were formatted
+ * without exponential notation.
+ *
+ * @return An <code>int</code> whose value is the scale of this <code>BigDecimal</code>.
+ */
+
+public int scale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> with a given scale.
+ * <p>
+ * If the given scale (which must be zero or positive) is the same as or greater than the length of the decimal part
+ * (the scale) of this <code>BigDecimal</code> then trailing zeros will be added to the decimal part as necessary.
+ * <p>
+ * If the given scale is less than the length of the decimal part (the scale) of this <code>BigDecimal</code> then
+ * trailing digits will be removed, and in this case an <code>ArithmeticException</code> is thrown if any discarded
+ * digits are non-zero.
+ * <p>
+ * The same as {@link #setScale(int,int)}, where the first parameter is the scale, and the second is <code>
+ * MathContext.ROUND_UNNECESSARY</code>.
+ *
+ * @param scale The <code>int</code> specifying the scale of the resulting <code>BigDecimal</code>.
+ * @return A plain <code>BigDecimal</code> with the given scale.
+ * @throws java.lang.ArithmeticException if <code>scale</code> is negative.
+ * @throws java.lang.ArithmeticException if reducing scale would discard non-zero digits.
+ */
+
+public android.icu.math.BigDecimal setScale(int scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a plain <code>BigDecimal</code> with a given scale.
+ * <p>
+ * If the given scale (which must be zero or positive) is the same as or greater than the length of the decimal part
+ * (the scale) of this <code>BigDecimal</code> then trailing zeros will be added to the decimal part as necessary.
+ * <p>
+ * If the given scale is less than the length of the decimal part (the scale) of this <code>BigDecimal</code> then
+ * trailing digits will be removed, and the rounding mode given by the second parameter is used to determine if the
+ * remaining digits are affected by a carry. In this case, an <code>IllegalArgumentException</code> is thrown if
+ * <code>round</code> is not a valid rounding mode.
+ * <p>
+ * If <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>, an <code>ArithmeticException</code> is
+ * thrown if any discarded digits are non-zero.
+ *
+ * @param scale The <code>int</code> specifying the scale of the resulting <code>BigDecimal</code>.
+ * @param round The <code>int</code> rounding mode to be used for the division (see the {@link android.icu.math.MathContext MathContext} class).
+ * @return A plain <code>BigDecimal</code> with the given scale.
+ * @throws java.lang.IllegalArgumentException if <code>round</code> is not a valid rounding mode.
+ * @throws java.lang.ArithmeticException if <code>scale</code> is negative.
+ * @throws java.lang.ArithmeticException if <code>round</code> is <code>MathContext.ROUND_UNNECESSARY</code>, and reducing scale would discard
+ *             non-zero digits.
+ */
+
+public android.icu.math.BigDecimal setScale(int scale, int round) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>short</code>. If the <code>BigDecimal</code> has a non-zero
+ * decimal part or is out of the possible range for a <code>short</code> (16-bit signed integer) result then an
+ * <code>ArithmeticException</code> is thrown.
+ *
+ * @return A <code>short</code> equal in value to <code>this</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part, or will not fit in a <code>short</code>.
+ */
+
+public short shortValueExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the sign of this <code>BigDecimal</code>, as an <code>int</code>. This returns the <i>signum</i> function
+ * value that represents the sign of this <code>BigDecimal</code>. That is, -1 if the <code>BigDecimal</code> is
+ * negative, 0 if it is numerically equal to zero, or 1 if it is positive.
+ *
+ * @return An <code>int</code> which is -1 if the <code>BigDecimal</code> is negative, 0 if it is numerically equal
+ *         to zero, or 1 if it is positive.
+ */
+
+public int signum() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>java.math.BigDecimal</code>.
+ * <p>
+ * This is an exact conversion; the result is the same as if the <code>BigDecimal</code> were formatted as a plain
+ * number without any rounding or exponent and then the <code>java.math.BigDecimal(java.lang.String)</code>
+ * constructor were used to construct the result.
+ * <p>
+ * <i>(Note: this method is provided only in the <code>android.icu.math</code> version of the BigDecimal class. It
+ * would not be present in a <code>java.math</code> version.)</i>
+ *
+ * @return The <code>java.math.BigDecimal</code> equal in value to this <code>BigDecimal</code>.
+ */
+
+public java.math.BigDecimal toBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>java.math.BigInteger</code>.
+ * <p>
+ * Any decimal part is truncated (discarded). If an exception is desired should the decimal part be non-zero, use
+ * {@link #toBigIntegerExact()}.
+ *
+ * @return The <code>java.math.BigInteger</code> equal in value to the integer part of this <code>BigDecimal</code>.
+ */
+
+public java.math.BigInteger toBigInteger() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts this <code>BigDecimal</code> to a <code>java.math.BigInteger</code>.
+ * <p>
+ * An exception is thrown if the decimal part (if any) is non-zero.
+ *
+ * @return The <code>java.math.BigInteger</code> equal in value to the integer part of this <code>BigDecimal</code>.
+ * @throws java.lang.ArithmeticException if <code>this</code> has a non-zero decimal part.
+ */
+
+public java.math.BigInteger toBigIntegerExact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>BigDecimal</code> as a character array. The result of this method is the same as using the
+ * sequence <code>toString().toCharArray()</code>, but avoids creating the intermediate <code>String</code> and
+ * <code>char[]</code> objects.
+ *
+ * @return The <code>char[]</code> array corresponding to this <code>BigDecimal</code>.
+ */
+
+public char[] toCharArray() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>BigDecimal</code> as a <code>String</code>. This returns a <code>String</code> that exactly
+ * represents this <code>BigDecimal</code>, as defined in the decimal documentation (see {@link android.icu.math.BigDecimal  header}).
+ * <p>
+ * By definition, using the {@link #BigDecimal(java.lang.String)} constructor on the result <code>String</code> will create a
+ * <code>BigDecimal</code> that is exactly equal to the original <code>BigDecimal</code>.
+ *
+ * @return The <code>String</code> exactly corresponding to this <code>BigDecimal</code>.
+ * @see #format(int, int)
+ * @see #format(int, int, int, int, int, int)
+ * @see #toCharArray()
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number as a <code>BigInteger</code> after removing the scale. That is, the number is expressed as a
+ * plain number, any decimal point is then removed (retaining the digits of any decimal part), and the result is
+ * then converted to a <code>BigInteger</code>.
+ *
+ * @return The <code>java.math.BigInteger</code> equal in value to this <code>BigDecimal</code> multiplied by ten to
+ *         the power of <code>this.scale()</code>.
+ */
+
+public java.math.BigInteger unscaledValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Translates a <code>double</code> to a <code>BigDecimal</code>.
+ * <p>
+ * Returns a <code>BigDecimal</code> which is the decimal representation of the 64-bit signed binary floating point
+ * parameter. If the parameter is infinite, or is not a number (NaN), a <code>NumberFormatException</code> is
+ * thrown.
+ * <p>
+ * The number is constructed as though <code>num</code> had been converted to a <code>String</code> using the <code>
+ * Double.toString()</code> method and the {@link #BigDecimal(java.lang.String)} constructor had then been used.
+ * This is typically not an exact conversion.
+ *
+ * @param dub The <code>double</code> to be translated.
+ * @return The <code>BigDecimal</code> equal in value to <code>dub</code>.
+ * @throws java.lang.NumberFormatException if the parameter is infinite or not a number.
+ */
+
+public static android.icu.math.BigDecimal valueOf(double dub) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Translates a <code>long</code> to a <code>BigDecimal</code>. That is, returns a plain <code>BigDecimal</code>
+ * whose value is equal to the given <code>long</code>.
+ *
+ * @param lint The <code>long</code> to be translated.
+ * @return The <code>BigDecimal</code> equal in value to <code>lint</code>.
+ */
+
+public static android.icu.math.BigDecimal valueOf(long lint) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Translates a <code>long</code> to a <code>BigDecimal</code> with a given scale. That is, returns a plain <code>
+ * BigDecimal</code> whose unscaled value is equal to the given <code>long</code>, adjusted by the second parameter,
+ * <code>scale</code>.
+ * <p>
+ * The result is given by:
+ * <p>
+ * <code> (new BigDecimal(lint)).divide(TEN.pow(new BigDecimal(scale))) </code>
+ * <p>
+ * A <code>NumberFormatException</code> is thrown if <code>scale</code> is negative.
+ *
+ * @param lint The <code>long</code> to be translated.
+ * @param scale The <code>int</code> scale to be applied.
+ * @return The <code>BigDecimal</code> equal in value to <code>lint</code>.
+ * @throws java.lang.NumberFormatException if the scale is negative.
+ */
+
+public static android.icu.math.BigDecimal valueOf(long lint, int scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The <code>BigDecimal</code> constant "1".
+ *
+ * @see #TEN
+ * @see #ZERO
+ */
+
+public static final android.icu.math.BigDecimal ONE;
+static { ONE = null; }
+
+/**
+ * Rounding mode to round to a more positive number.
+ *
+ * @see android.icu.math.MathContext#ROUND_CEILING
+ */
+
+public static final int ROUND_CEILING = 2; // 0x2
+
+/**
+ * Rounding mode to round towards zero.
+ *
+ * @see android.icu.math.MathContext#ROUND_DOWN
+ */
+
+public static final int ROUND_DOWN = 1; // 0x1
+
+/**
+ * Rounding mode to round to a more negative number.
+ *
+ * @see android.icu.math.MathContext#ROUND_FLOOR
+ */
+
+public static final int ROUND_FLOOR = 3; // 0x3
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant value is rounded down.
+ *
+ * @see android.icu.math.MathContext#ROUND_HALF_DOWN
+ */
+
+public static final int ROUND_HALF_DOWN = 5; // 0x5
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant value is rounded to the nearest even neighbor.
+ *
+ * @see android.icu.math.MathContext#ROUND_HALF_EVEN
+ */
+
+public static final int ROUND_HALF_EVEN = 6; // 0x6
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant value is rounded up.
+ *
+ * @see android.icu.math.MathContext#ROUND_HALF_UP
+ */
+
+public static final int ROUND_HALF_UP = 4; // 0x4
+
+/**
+ * Rounding mode to assert that no rounding is necessary.
+ *
+ * @see android.icu.math.MathContext#ROUND_UNNECESSARY
+ */
+
+public static final int ROUND_UNNECESSARY = 7; // 0x7
+
+/**
+ * Rounding mode to round away from zero.
+ *
+ * @see android.icu.math.MathContext#ROUND_UP
+ */
+
+public static final int ROUND_UP = 0; // 0x0
+
+/**
+ * The <code>BigDecimal</code> constant "10".
+ *
+ * @see #ONE
+ * @see #ZERO
+ */
+
+public static final android.icu.math.BigDecimal TEN;
+static { TEN = null; }
+
+/**
+ * The <code>BigDecimal</code> constant "0".
+ *
+ * @see #ONE
+ * @see #TEN
+ */
+
+public static final android.icu.math.BigDecimal ZERO;
+static { ZERO = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/math/MathContext.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/math/MathContext.java
new file mode 100644
index 0000000..880de88
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/math/MathContext.java
@@ -0,0 +1,387 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/* Generated from 'MathContext.nrx' 8 Sep 2000 11:07:48 [v2.00] */
+/* Options: Binary Comments Crossref Format Java Logo Strictargs Strictcase Trace2 Verbose3 */
+
+package android.icu.math;
+
+
+/**
+ * The <code>MathContext</code> immutable class encapsulates the
+ * settings understood by the operator methods of the {@link android.icu.math.BigDecimal BigDecimal}
+ * class (and potentially other classes).  Operator methods are those
+ * that effect an operation on a number or a pair of numbers.
+ * <p>
+ * The settings, which are not base-dependent, comprise:
+ * <ol>
+ * <li><code>digits</code>:
+ * the number of digits (precision) to be used for an operation
+ * <li><code>form</code>:
+ * the form of any exponent that results from the operation
+ * <li><code>lostDigits</code>:
+ * whether checking for lost digits is enabled
+ * <li><code>roundingMode</code>:
+ * the algorithm to be used for rounding.
+ * </ol>
+ * <p>
+ * When provided, a <code>MathContext</code> object supplies the
+ * settings for an operation directly.
+ * <p>
+ * When <code>MathContext.DEFAULT</code> is provided for a
+ * <code>MathContext</code> parameter then the default settings are used
+ * (<code>9, SCIENTIFIC, false, ROUND_HALF_UP</code>).
+ * <p>
+ * In the <code>BigDecimal</code> class, all methods which accept a
+ * <code>MathContext</code> object defaults) also have a version of the
+ * method which does not accept a MathContext parameter.  These versions
+ * carry out unlimited precision fixed point arithmetic (as though the
+ * settings were (<code>0, PLAIN, false, ROUND_HALF_UP</code>).
+ * <p>
+ * The instance variables are shared with default access (so they are
+ * directly accessible to the <code>BigDecimal</code> class), but must
+ * never be changed.
+ * <p>
+ * The rounding mode constants have the same names and values as the
+ * constants of the same name in <code>java.math.BigDecimal</code>, to
+ * maintain compatibility with earlier versions of
+ * <code>BigDecimal</code>.
+ *
+ * @see     android.icu.math.BigDecimal
+ * @author  Mike Cowlishaw
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class MathContext implements java.io.Serializable {
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision.
+ * The other settings are set to the default values
+ * (see {@link #DEFAULT}).
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999).
+ *
+ * @param setdigits     The <code>int</code> digits setting
+ *                      for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision and form.
+ * The other settings are set to the default values
+ * (see {@link #DEFAULT}).
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999), or if the value given for the
+ * <code>setform</code> parameter is not one of the appropriate
+ * constants.
+ *
+ * @param setdigits     The <code>int</code> digits setting
+ *                      for this <code>MathContext</code>.
+ * @param setform       The <code>int</code> form setting
+ *                      for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits, int setform) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision, form, and lostDigits setting.
+ * The roundingMode setting is set to its default value
+ * (see {@link #DEFAULT}).
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999), or if the value given for the
+ * <code>setform</code> parameter is not one of the appropriate
+ * constants.
+ *
+ * @param setdigits     The <code>int</code> digits setting
+ *                      for this <code>MathContext</code>.
+ * @param setform       The <code>int</code> form setting
+ *                      for this <code>MathContext</code>.
+ * @param setlostdigits The <code>boolean</code> lostDigits
+ *                      setting for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits, int setform, boolean setlostdigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>MathContext</code> with a specified
+ * precision, form, lostDigits, and roundingMode setting.
+ *
+ * An <code>IllegalArgumentException</code> is thrown if the
+ * <code>setdigits</code> parameter is out of range
+ * (&lt;0 or &gt;999999999), or if the value given for the
+ * <code>setform</code> or <code>setroundingmode</code> parameters is
+ * not one of the appropriate constants.
+ *
+ * @param setdigits       The <code>int</code> digits setting
+ *                        for this <code>MathContext</code>.
+ * @param setform         The <code>int</code> form setting
+ *                        for this <code>MathContext</code>.
+ * @param setlostdigits   The <code>boolean</code> lostDigits
+ *                        setting for this <code>MathContext</code>.
+ * @param setroundingmode The <code>int</code> roundingMode setting
+ *                        for this <code>MathContext</code>.
+ * @throws java.lang.IllegalArgumentException parameter out of range.
+ */
+
+public MathContext(int setdigits, int setform, boolean setlostdigits, int setroundingmode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the digits setting.
+ * This value is always non-negative.
+ *
+ * @return an <code>int</code> which is the value of the digits
+ *         setting
+ */
+
+public int getDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the form setting.
+ * This will be one of
+ * {@link #ENGINEERING},
+ * {@link #PLAIN}, or
+ * {@link #SCIENTIFIC}.
+ *
+ * @return an <code>int</code> which is the value of the form setting
+ */
+
+public int getForm() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lostDigits setting.
+ * This will be either <code>true</code> (enabled) or
+ * <code>false</code> (disabled).
+ *
+ * @return a <code>boolean</code> which is the value of the lostDigits
+ *           setting
+ */
+
+public boolean getLostDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the roundingMode setting.
+ * This will be one of
+ * {@link  #ROUND_CEILING},
+ * {@link  #ROUND_DOWN},
+ * {@link  #ROUND_FLOOR},
+ * {@link  #ROUND_HALF_DOWN},
+ * {@link  #ROUND_HALF_EVEN},
+ * {@link  #ROUND_HALF_UP},
+ * {@link  #ROUND_UNNECESSARY}, or
+ * {@link  #ROUND_UP}.
+ *
+ * @return an <code>int</code> which is the value of the roundingMode
+ *         setting
+ */
+
+public int getRoundingMode() { throw new RuntimeException("Stub!"); }
+
+/** Returns the <code>MathContext</code> as a readable string.
+ * The <code>String</code> returned represents the settings of the
+ * <code>MathContext</code> object as four blank-delimited words
+ * separated by a single blank and with no leading or trailing blanks,
+ * as follows:
+ * <ol>
+ * <li>
+ * <code>digits=</code>, immediately followed by
+ * the value of the digits setting as a numeric word.
+ * <li>
+ * <code>form=</code>, immediately followed by
+ * the value of the form setting as an uppercase word
+ * (one of <code>SCIENTIFIC</code>, <code>PLAIN</code>, or
+ * <code>ENGINEERING</code>).
+ * <li>
+ * <code>lostDigits=</code>, immediately followed by
+ * the value of the lostDigits setting
+ * (<code>1</code> if enabled, <code>0</code> if disabled).
+ * <li>
+ * <code>roundingMode=</code>, immediately followed by
+ * the value of the roundingMode setting as a word.
+ * This word will be the same as the name of the corresponding public
+ * constant.
+ * </ol>
+ * <p>
+ * For example:
+ * <br><code>
+ * digits=9 form=SCIENTIFIC lostDigits=0 roundingMode=ROUND_HALF_UP
+ * </code>
+ * <p>
+ * Additional words may be appended to the result of
+ * <code>toString</code> in the future if more properties are added
+ * to the class.
+ *
+ * @return a <code>String</code> representing the context settings.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * A <code>MathContext</code> object initialized to the default
+ * settings for general-purpose arithmetic.  That is,
+ * <code>digits=9 form=SCIENTIFIC lostDigits=false
+ * roundingMode=ROUND_HALF_UP</code>.
+ *
+ * @see #SCIENTIFIC
+ * @see #ROUND_HALF_UP
+ */
+
+public static final android.icu.math.MathContext DEFAULT;
+static { DEFAULT = null; }
+
+/**
+ * Standard floating point notation (with engineering exponential
+ * format, where the power of ten is a multiple of 3).
+ * Used as a setting to control the form of the result of a
+ * <code>BigDecimal</code> operation.
+ * A zero result in plain form may have a decimal part of one or
+ * more zeros.
+ *
+ * @see #PLAIN
+ * @see #SCIENTIFIC
+ */
+
+public static final int ENGINEERING = 2; // 0x2
+
+/**
+ * Plain (fixed point) notation, without any exponent.
+ * Used as a setting to control the form of the result of a
+ * <code>BigDecimal</code> operation.
+ * A zero result in plain form may have a decimal part of one or
+ * more zeros.
+ *
+ * @see #ENGINEERING
+ * @see #SCIENTIFIC
+ */
+
+public static final int PLAIN = 0; // 0x0
+
+/**
+ * Rounding mode to round to a more positive number.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If any of the discarded digits are non-zero then the result
+ * should be rounded towards the next more positive digit.
+ */
+
+public static final int ROUND_CEILING = 2; // 0x2
+
+/**
+ * Rounding mode to round towards zero.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * All discarded digits are ignored (truncated).  The result is
+ * neither incremented nor decremented.
+ */
+
+public static final int ROUND_DOWN = 1; // 0x1
+
+/**
+ * Rounding mode to round to a more negative number.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If any of the discarded digits are non-zero then the result
+ * should be rounded towards the next more negative digit.
+ */
+
+public static final int ROUND_FLOOR = 3; // 0x3
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant
+ * value is rounded down.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If the discarded digits represent greater than half (0.5 times)
+ * the value of a one in the next position then the result should be
+ * rounded up (away from zero).  Otherwise the discarded digits are
+ * ignored.
+ */
+
+public static final int ROUND_HALF_DOWN = 5; // 0x5
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant
+ * value is rounded to the nearest even neighbor.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If the discarded digits represent greater than half (0.5 times)
+ * the value of a one in the next position then the result should be
+ * rounded up (away from zero).  If they represent less than half,
+ * then the result should be rounded down.
+ * <p>
+ * Otherwise (they represent exactly half) the result is rounded
+ * down if its rightmost digit is even, or rounded up if its
+ * rightmost digit is odd (to make an even digit).
+ */
+
+public static final int ROUND_HALF_EVEN = 6; // 0x6
+
+/**
+ * Rounding mode to round to nearest neighbor, where an equidistant
+ * value is rounded up.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If the discarded digits represent greater than or equal to half
+ * (0.5 times) the value of a one in the next position then the result
+ * should be rounded up (away from zero).  Otherwise the discarded
+ * digits are ignored.
+ */
+
+public static final int ROUND_HALF_UP = 4; // 0x4
+
+/**
+ * Rounding mode to assert that no rounding is necessary.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * Rounding (potential loss of information) is not permitted.
+ * If any of the discarded digits are non-zero then an
+ * <code>ArithmeticException</code> should be thrown.
+ */
+
+public static final int ROUND_UNNECESSARY = 7; // 0x7
+
+/**
+ * Rounding mode to round away from zero.
+ * Used as a setting to control the rounding mode used during a
+ * <code>BigDecimal</code> operation.
+ * <p>
+ * If any of the discarded digits are non-zero then the result will
+ * be rounded up (away from zero).
+ */
+
+public static final int ROUND_UP = 0; // 0x0
+
+/**
+ * Standard floating point notation (with scientific exponential
+ * format, where there is one digit before any decimal point).
+ * Used as a setting to control the form of the result of a
+ * <code>BigDecimal</code> operation.
+ * A zero result in plain form may have a decimal part of one or
+ * more zeros.
+ *
+ * @see #ENGINEERING
+ * @see #PLAIN
+ */
+
+public static final int SCIENTIFIC = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/CompactNotation.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/CompactNotation.java
new file mode 100644
index 0000000..8c251b7
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/CompactNotation.java
@@ -0,0 +1,24 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the scientific notation style to be used when formatting numbers in
+ * NumberFormatter.
+ *
+ * <p>
+ * This class exposes no public functionality. To create a CompactNotation, use one of the factory
+ * methods in {@link android.icu.number.Notation Notation}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CompactNotation extends android.icu.number.Notation {
+
+CompactNotation() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/CurrencyPrecision.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/CurrencyPrecision.java
new file mode 100644
index 0000000..baf1994
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/CurrencyPrecision.java
@@ -0,0 +1,45 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.Currency;
+
+/**
+ * A class that defines a rounding strategy parameterized by a currency to be used when formatting
+ * numbers in NumberFormatter.
+ *
+ * <p>
+ * To create a CurrencyPrecision, use one of the factory methods on Precision.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class CurrencyPrecision extends android.icu.number.Precision {
+
+CurrencyPrecision() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Associates a currency with this rounding strategy.
+ *
+ * <p>
+ * <strong>Calling this method is <em>not required</em></strong>, because the currency specified in
+ * unit() or via a CurrencyAmount passed into format(Measure) is automatically applied to currency
+ * rounding strategies. However, this method enables you to override that automatic association.
+ *
+ * <p>
+ * This method also enables numbers to be formatted using currency rounding rules without explicitly
+ * using a currency format.
+ *
+ * @param currency
+ *            The currency to associate with this rounding strategy.
+ * @return A Precision for chaining or passing to the NumberFormatter rounding() setter.
+ * @throws java.lang.IllegalArgumentException for null Currency
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.Precision withCurrency(android.icu.util.Currency currency) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumber.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumber.java
new file mode 100644
index 0000000..642f098
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumber.java
@@ -0,0 +1,77 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * The result of a number formatting operation. This class allows the result to be exported in several
+ * data types, including a String, an AttributedCharacterIterator, and a BigDecimal.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class FormattedNumber implements android.icu.text.FormattedValue {
+
+FormattedNumber() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Export the formatted number as a BigDecimal. This endpoint is useful for obtaining the exact
+ * number being printed after scaling and rounding have been applied by the number formatting
+ * pipeline.
+ *
+ * @return A BigDecimal representation of the formatted number.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public java.math.BigDecimal toBigDecimal() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumberRange.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumberRange.java
new file mode 100644
index 0000000..5edc325
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FormattedNumberRange.java
@@ -0,0 +1,113 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * The result of a number range formatting operation. This class allows the result to be exported in several data types,
+ * including a String, an AttributedCharacterIterator, and a BigDecimal.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class FormattedNumberRange implements android.icu.text.FormattedValue {
+
+FormattedNumberRange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Export the first formatted number as a BigDecimal. This endpoint is useful for obtaining the exact number being
+ * printed after scaling and rounding have been applied by the number range formatting pipeline.
+ *
+ * @return A BigDecimal representation of the first formatted number.
+ * @see android.icu.number.NumberRangeFormatter
+ * @see #getSecondBigDecimal
+ */
+
+public java.math.BigDecimal getFirstBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Export the second formatted number as a BigDecimal. This endpoint is useful for obtaining the exact number being
+ * printed after scaling and rounding have been applied by the number range formatting pipeline.
+ *
+ * @return A BigDecimal representation of the second formatted number.
+ * @see android.icu.number.NumberRangeFormatter
+ * @see #getFirstBigDecimal
+ */
+
+public java.math.BigDecimal getSecondBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the pair of numbers was successfully formatted as a range or whether an identity fallback was
+ * used. For example, if the first and second number were the same either before or after rounding occurred, an
+ * identity fallback was used.
+ *
+ * @return A RangeIdentityType indicating the resulting identity situation in the formatted number range.
+ * @see android.icu.number.NumberRangeFormatter
+ * @see android.icu.number.NumberRangeFormatter.RangeIdentityFallback
+ */
+
+public android.icu.number.NumberRangeFormatter.RangeIdentityResult getIdentityResult() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FractionPrecision.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FractionPrecision.java
new file mode 100644
index 0000000..93faf7c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/FractionPrecision.java
@@ -0,0 +1,65 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines a rounding strategy based on a number of fraction places and optionally
+ * significant digits to be used when formatting numbers in NumberFormatter.
+ *
+ * <p>
+ * To create a FractionPrecision, use one of the factory methods on Precision.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class FractionPrecision extends android.icu.number.Precision {
+
+FractionPrecision() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ensure that no less than this number of significant digits are retained when rounding according to
+ * fraction rules.
+ *
+ * <p>
+ * For example, with integer rounding, the number 3.141 becomes "3". However, with minimum figures
+ * set to 2, 3.141 becomes "3.1" instead.
+ *
+ * <p>
+ * This setting does not affect the number of trailing zeros. For example, 3.01 would print as "3",
+ * not "3.0".
+ *
+ * @param minSignificantDigits
+ *            The number of significant figures to guarantee.
+ * @return A Precision for chaining or passing to the NumberFormatter rounding() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.Precision withMinDigits(int minSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ensure that no more than this number of significant digits are retained when rounding according to
+ * fraction rules.
+ *
+ * <p>
+ * For example, with integer rounding, the number 123.4 becomes "123". However, with maximum figures
+ * set to 2, 123.4 becomes "120" instead.
+ *
+ * <p>
+ * This setting does not affect the number of trailing zeros. For example, with fixed fraction of 2,
+ * 123.4 would become "120.00".
+ *
+ * @param maxSignificantDigits
+ *            Round the number to no more than this number of significant figures.
+ * @return A Precision for chaining or passing to the NumberFormatter rounding() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.Precision withMaxDigits(int maxSignificantDigits) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/IntegerWidth.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/IntegerWidth.java
new file mode 100644
index 0000000..477dba1
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/IntegerWidth.java
@@ -0,0 +1,53 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the strategy for padding and truncating integers before the decimal separator.
+ *
+ * <p>
+ * To create an IntegerWidth, use one of the factory methods.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IntegerWidth {
+
+private IntegerWidth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Pad numbers at the beginning with zeros to guarantee a certain number of numerals before the
+ * decimal separator.
+ *
+ * <p>
+ * For example, with minInt=3, the number 55 will get printed as "055".
+ *
+ * @param minInt
+ *            The minimum number of places before the decimal separator.
+ * @return An IntegerWidth for chaining or passing to the NumberFormatter integerWidth() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.IntegerWidth zeroFillTo(int minInt) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Truncate numbers exceeding a certain number of numerals before the decimal separator.
+ *
+ * For example, with maxInt=3, the number 1234 will get printed as "234".
+ *
+ * @param maxInt
+ *            The maximum number of places before the decimal separator. maxInt == -1 means no
+ *            truncation.
+ * @return An IntegerWidth for passing to the NumberFormatter integerWidth() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than -1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.IntegerWidth truncateAt(int maxInt) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberFormatter.java
new file mode 100644
index 0000000..6130644
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberFormatter.java
@@ -0,0 +1,93 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.text.Format;
+import java.math.BigInteger;
+import android.icu.math.BigDecimal;
+import android.icu.util.Measure;
+import android.icu.util.CurrencyAmount;
+
+/**
+ * A NumberFormatter that has a locale associated with it; this means .format() methods are available.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class LocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.LocalizedNumberFormatter> {
+
+LocalizedNumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given byte, short, int, or long to a string using the settings specified in the
+ * NumberFormatter fluent setting chain.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(long input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given float or double to a string using the settings specified in the NumberFormatter
+ * fluent setting chain.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(double input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given {@link java.math.BigInteger BigInteger}, {@link android.icu.math.BigDecimal BigDecimal}, or other {@link java.lang.Number Number} to a string using
+ * the settings specified in the NumberFormatter fluent setting chain.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(java.lang.Number input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given {@link android.icu.util.Measure Measure} or {@link android.icu.util.CurrencyAmount CurrencyAmount} to a string using the settings
+ * specified in the NumberFormatter fluent setting chain.
+ *
+ * <p>
+ * The unit specified here overrides any unit that may have been specified in the setter chain. This
+ * method is intended for cases when each input to the number formatter has a different unit.
+ *
+ * @param input
+ *            The number to format.
+ * @return A FormattedNumber object; call .toString() to get the string.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.FormattedNumber format(android.icu.util.Measure input) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a representation of this LocalizedNumberFormat as a {@link java.text.Format}, enabling the
+ * use of this number formatter with APIs that need an object of that type, such as MessageFormat.
+ * <p>
+ * This API is not intended to be used other than for enabling API compatibility. The {@link #format}
+ * methods should normally be used when formatting numbers, not the Format object returned by this
+ * method.
+ *
+ * @return A Format wrapping this LocalizedNumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public java.text.Format toFormat() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberRangeFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberRangeFormatter.java
new file mode 100644
index 0000000..6d13b54
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/LocalizedNumberRangeFormatter.java
@@ -0,0 +1,65 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A NumberRangeFormatter that has a locale associated with it; this means .formatRange() methods are available.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class LocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.LocalizedNumberRangeFormatter> {
+
+LocalizedNumberRangeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given integers to a string using the settings specified in the NumberRangeFormatter fluent setting
+ * chain.
+ *
+ * @param first
+ *            The first number in the range, usually to the left in LTR locales.
+ * @param second
+ *            The second number in the range, usually to the right in LTR locales.
+ * @return A FormattedNumberRange object; call .toString() to get the string.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public android.icu.number.FormattedNumberRange formatRange(int first, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given doubles to a string using the settings specified in the NumberRangeFormatter fluent setting
+ * chain.
+ *
+ * @param first
+ *            The first number in the range, usually to the left in LTR locales.
+ * @param second
+ *            The second number in the range, usually to the right in LTR locales.
+ * @return A FormattedNumberRange object; call .toString() to get the string.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public android.icu.number.FormattedNumberRange formatRange(double first, double second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the given Numbers to a string using the settings specified in the NumberRangeFormatter fluent setting
+ * chain.
+ *
+ * @param first
+ *            The first number in the range, usually to the left in LTR locales.
+ * @param second
+ *            The second number in the range, usually to the right in LTR locales.
+ * @return A FormattedNumberRange object; call .toString() to get the string.
+ * @throws java.lang.IllegalArgumentException if first or second is null
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public android.icu.number.FormattedNumberRange formatRange(java.lang.Number first, java.lang.Number second) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Notation.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Notation.java
new file mode 100644
index 0000000..c9f2c44
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Notation.java
@@ -0,0 +1,169 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the notation style to be used when formatting numbers in NumberFormatter.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Notation {
+
+Notation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using scientific notation (also known as scientific form, standard index form, or
+ * standard form in the UK). The format for scientific notation varies by locale; for example, many
+ * Western locales display the number in the form "#E0", where the number is displayed with one digit
+ * before the decimal separator, zero or more digits after the decimal separator, and the
+ * corresponding power of 10 displayed after the "E".
+ *
+ * <p>
+ * Example outputs in <em>en-US</em> when printing 8.765E4 through 8.765E-3:
+ *
+ * <pre>
+ * 8.765E4
+ * 8.765E3
+ * 8.765E2
+ * 8.765E1
+ * 8.765E0
+ * 8.765E-1
+ * 8.765E-2
+ * 8.765E-3
+ * 0E0
+ * </pre>
+ *
+ * @return A ScientificNotation for chaining or passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.ScientificNotation scientific() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using engineering notation, a variant of scientific notation in which the
+ * exponent must be divisible by 3.
+ *
+ * <p>
+ * Example outputs in <em>en-US</em> when printing 8.765E4 through 8.765E-3:
+ *
+ * <pre>
+ * 87.65E3
+ * 8.765E3
+ * 876.5E0
+ * 87.65E0
+ * 8.765E0
+ * 876.5E-3
+ * 87.65E-3
+ * 8.765E-3
+ * 0E0
+ * </pre>
+ *
+ * @return A ScientificNotation for chaining or passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.ScientificNotation engineering() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using short-form compact notation.
+ *
+ * <p>
+ * <em>Compact notation</em>, defined in Unicode Technical Standard #35 Part 3 Section 2.4.1, prints
+ * numbers with localized prefixes or suffixes corresponding to different powers of ten. Compact
+ * notation is similar to engineering notation in how it scales numbers.
+ *
+ * <p>
+ * Compact notation is ideal for displaying large numbers (over ~1000) to humans while at the same
+ * time minimizing screen real estate.
+ *
+ * <p>
+ * In short form, the powers of ten are abbreviated. In <em>en-US</em>, the abbreviations are "K" for
+ * thousands, "M" for millions, "B" for billions, and "T" for trillions. Example outputs in
+ * <em>en-US</em> when printing 8.765E7 through 8.765E0:
+ *
+ * <pre>
+ * 88M
+ * 8.8M
+ * 876K
+ * 88K
+ * 8.8K
+ * 876
+ * 88
+ * 8.8
+ * </pre>
+ *
+ * <p>
+ * When compact notation is specified without an explicit rounding strategy, numbers are rounded off
+ * to the closest integer after scaling the number by the corresponding power of 10, but with a digit
+ * shown after the decimal separator if there is only one digit before the decimal separator. The
+ * default compact notation rounding strategy is equivalent to:
+ *
+ * <pre>
+ * Rounder.integer().withMinDigits(2)
+ * </pre>
+ *
+ * @return A CompactNotation for passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.CompactNotation compactShort() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using long-form compact notation. For more information on compact notation, see
+ * {@link #compactShort}.
+ *
+ * <p>
+ * In long form, the powers of ten are spelled out fully. Example outputs in <em>en-US</em> when
+ * printing 8.765E7 through 8.765E0:
+ *
+ * <pre>
+ * 88 million
+ * 8.8 million
+ * 876 thousand
+ * 88 thousand
+ * 8.8 thousand
+ * 876
+ * 88
+ * 8.8
+ * </pre>
+ *
+ * @return A CompactNotation for passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.CompactNotation compactLong() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Print the number using simple notation without any scaling by powers of ten. This is the default
+ * behavior.
+ *
+ * <p>
+ * Since this is the default behavior, this method needs to be called only when it is necessary to
+ * override a previous setting.
+ *
+ * <p>
+ * Example outputs in <em>en-US</em> when printing 8.765E7 through 8.765E0:
+ *
+ * <pre>
+ * 87,650,000
+ * 8,765,000
+ * 876,500
+ * 87,650
+ * 8,765
+ * 876.5
+ * 87.65
+ * 8.765
+ * </pre>
+ *
+ * @return A SimpleNotation for passing to the NumberFormatter notation() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.SimpleNotation simple() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatter.java
new file mode 100644
index 0000000..34a1430
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatter.java
@@ -0,0 +1,401 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.ULocale;
+import java.util.Locale;
+
+/**
+ * The main entrypoint to the localized number formatting library introduced in ICU 60. Basic usage
+ * examples:
+ *
+ * <pre>
+ * // Most basic usage:
+ * NumberFormatter.withLocale(...).format(123).toString();  // 1,234 in en-US
+ *
+ * // Custom notation, unit, and rounding strategy:
+ * NumberFormatter.with()
+ *     .notation(Notation.compactShort())
+ *     .unit(Currency.getInstance("EUR"))
+ *     .precision(Precision.maxDigits(2))
+ *     .locale(...)
+ *     .format(1234)
+ *     .toString();  // ?1.2K in en-US
+ *
+ * // Create a formatter in a private static final field:
+ * private static final LocalizedNumberFormatter formatter = NumberFormatter.withLocale(...)
+ *     .unit(NoUnit.PERCENT)
+ *     .precision(Precision.fixedFraction(3));
+ * formatter.format(5.9831).toString();  // 5.983% in en-US
+ *
+ * // Create a "template" in a private static final field but without setting a locale until the call site:
+ * private static final UnlocalizedNumberFormatter template = NumberFormatter.with()
+ *     .sign(SignDisplay.ALWAYS)
+ *     .unitWidth(UnitWidth.FULL_NAME);
+ * template.locale(...).format(new Measure(1234, MeasureUnit.METER)).toString();  // +1,234 meters in en-US
+ * </pre>
+ *
+ * <p>
+ * This API offers more features than {@link android.icu.text.DecimalFormat} and is geared toward new
+ * users of ICU.
+ *
+ * <p>
+ * NumberFormatter instances (i.e., LocalizedNumberFormatter and UnlocalizedNumberFormatter)
+ * are immutable and thread safe. This means that invoking a configuration
+ * method has no effect on the receiving instance; you must store and use the new number formatter
+ * instance it returns instead.
+ *
+ * <pre>
+ * UnlocalizedNumberFormatter formatter = UnlocalizedNumberFormatter.with()
+ *         .notation(Notation.scientific());
+ * formatter.precision(Precision.maxFraction(2)); // does nothing!
+ * formatter.locale(ULocale.ENGLISH).format(9.8765).toString(); // prints "9.8765E0", not "9.88E0"
+ * </pre>
+ *
+ * <p>
+ * This API is based on the <em>fluent</em> design pattern popularized by libraries such as Google's
+ * Guava. For extensive details on the design of this API, read <a href="https://goo.gl/szi5VB">the
+ * design doc</a>.
+ *
+ * @author Shane Carr
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class NumberFormatter {
+
+private NumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is not
+ * currently known at the call site.
+ *
+ * @return An {@link android.icu.number.UnlocalizedNumberFormatter UnlocalizedNumberFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.UnlocalizedNumberFormatter with() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known
+ * at the call site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number formatting.
+ * @return A {@link android.icu.number.LocalizedNumberFormatter LocalizedNumberFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberFormatter withLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberFormatter fluent chain in which the locale is known
+ * at the call site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number formatting.
+ * @return A {@link android.icu.number.LocalizedNumberFormatter LocalizedNumberFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberFormatter withLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+/**
+ * An enum declaring how to render the decimal separator. Example outputs when formatting 1 and 1.1
+ * in <em>en-US</em>:
+ *
+ * <ul>
+ * <li>AUTO: "1" and "1.1"
+ * <li>ALWAYS: "1." and "1.1"
+ * </ul>
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DecimalSeparatorDisplay {
+/**
+ * Show the decimal separator when there are one or more digits to display after the separator,
+ * and do not show it otherwise. This is the default behavior.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+AUTO,
+/**
+ * Always show the decimal separator, even if there are no digits to display after the separator.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ALWAYS;
+}
+
+/**
+ * An enum declaring the strategy for when and how to display grouping separators (i.e., the
+ * separator, often a comma or period, after every 2-3 powers of ten). The choices are several
+ * pre-built strategies for different use cases that employ locale data whenever possible. Example
+ * outputs for 1234 and 1234567 in <em>en-IN</em>:
+ *
+ * <ul>
+ * <li>OFF: 1234 and 12345
+ * <li>MIN2: 1234 and 12,34,567
+ * <li>AUTO: 1,234 and 12,34,567
+ * <li>ON_ALIGNED: 1,234 and 12,34,567
+ * <li>THOUSANDS: 1,234 and 1,234,567
+ * </ul>
+ *
+ * <p>
+ * The default is AUTO, which displays grouping separators unless the locale data says that grouping
+ * is not customary. To force grouping for all numbers greater than 1000 consistently across locales,
+ * use ON_ALIGNED. On the other hand, to display grouping less frequently than the default, use MIN2
+ * or OFF. See the docs of each option for details.
+ *
+ * <p>
+ * Note: This enum specifies the strategy for grouping sizes. To set which character to use as the
+ * grouping separator, use the "symbols" setter.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum GroupingStrategy {
+/**
+ * Do not display grouping separators in any locale.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+OFF,
+/**
+ * Display grouping using locale defaults, except do not show grouping on values smaller than
+ * 10000 (such that there is a <em>minimum of two digits</em> before the first separator).
+ *
+ * <p>
+ * Note that locales may restrict grouping separators to be displayed only on 1 million or
+ * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
+ *
+ * <p>
+ * Locale data is used to determine whether to separate larger numbers into groups of 2
+ * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+MIN2,
+/**
+ * Display grouping using the default strategy for all locales. This is the default behavior.
+ *
+ * <p>
+ * Note that locales may restrict grouping separators to be displayed only on 1 million or
+ * greater (for example, ee and hu) or disable grouping altogether (for example, bg currency).
+ *
+ * <p>
+ * Locale data is used to determine whether to separate larger numbers into groups of 2
+ * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+AUTO,
+/**
+ * Always display the grouping separator on values of at least 1000.
+ *
+ * <p>
+ * This option ignores the locale data that restricts or disables grouping, described in MIN2 and
+ * AUTO. This option may be useful to normalize the alignment of numbers, such as in a
+ * spreadsheet.
+ *
+ * <p>
+ * Locale data is used to determine whether to separate larger numbers into groups of 2
+ * (customary in South Asia) or groups of 3 (customary in Europe and the Americas).
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ON_ALIGNED,
+/**
+ * Use the Western defaults: groups of 3 and enabled for all numbers 1000 or greater. Do not use
+ * locale data for determining the grouping strategy.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+THOUSANDS;
+}
+
+/**
+ * An enum declaring how to denote positive and negative numbers. Example outputs when formatting
+ * 123, 0, and -123 in <em>en-US</em>:
+ *
+ * <ul>
+ * <li>AUTO: "123", "0", and "-123"
+ * <li>ALWAYS: "+123", "+0", and "-123"
+ * <li>NEVER: "123", "0", and "123"
+ * <li>ACCOUNTING: "$123", "$0", and "($123)"
+ * <li>ACCOUNTING_ALWAYS: "+$123", "+$0", and "($123)"
+ * <li>EXCEPT_ZERO: "+123", "0", and "-123"
+ * <li>ACCOUNTING_EXCEPT_ZERO: "+$123", "$0", and "($123)"
+ * </ul>
+ *
+ * <p>
+ * The exact format, including the position and the code point of the sign, differ by locale.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum SignDisplay {
+/**
+ * Show the minus sign on negative numbers, and do not show the sign on positive numbers. This is
+ * the default behavior.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+AUTO,
+/**
+ * Show the minus sign on negative numbers and the plus sign on positive numbers, including zero.
+ * To hide the sign on zero, see {@link #EXCEPT_ZERO}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ALWAYS,
+/**
+ * Do not show the sign on positive or negative numbers.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+NEVER,
+/**
+ * Use the locale-dependent accounting format on negative numbers, and do not show the sign on
+ * positive numbers.
+ *
+ * <p>
+ * The accounting format is defined in CLDR and varies by locale; in many Western locales, the
+ * format is a pair of parentheses around the number.
+ *
+ * <p>
+ * Note: Since CLDR defines the accounting format in the monetary context only, this option falls
+ * back to the AUTO sign display strategy when formatting without a currency unit. This
+ * limitation may be lifted in the future.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ACCOUNTING,
+/**
+ * Use the locale-dependent accounting format on negative numbers, and show the plus sign on
+ * positive numbers, including zero. For more information on the accounting format, see the
+ * ACCOUNTING sign display strategy. To hide the sign on zero, see
+ * {@link #ACCOUNTING_EXCEPT_ZERO}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ACCOUNTING_ALWAYS,
+/**
+ * Show the minus sign on negative numbers and the plus sign on positive numbers. Do not show a
+ * sign on zero, numbers that round to zero, or NaN.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+EXCEPT_ZERO,
+/**
+ * Use the locale-dependent accounting format on negative numbers, and show the plus sign on
+ * positive numbers. Do not show a sign on zero, numbers that round to zero, or NaN. For more
+ * information on the accounting format, see the ACCOUNTING sign display strategy.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ACCOUNTING_EXCEPT_ZERO;
+}
+
+/**
+ * An enum declaring how to render units, including currencies. Example outputs when formatting 123
+ * USD and 123 meters in <em>en-CA</em>:
+ *
+ * <ul>
+ * <li>NARROW: "$123.00" and "123 m"
+ * <li>SHORT: "US$?123.00" and "123 m"
+ * <li>FULL_NAME: "123.00 US dollars" and "123 meters"
+ * <li>ISO_CODE: "USD?123.00" and undefined behavior
+ * <li>HIDDEN: "123.00" and "123"
+ * </ul>
+ *
+ * <p>
+ * This enum is similar to {@link android.icu.text.MeasureFormat.FormatWidth}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum UnitWidth {
+/**
+ * Print an abbreviated version of the unit name. Similar to SHORT, but always use the shortest
+ * available abbreviation or symbol. This option can be used when the context hints at the
+ * identity of the unit. For more information on the difference between NARROW and SHORT, see
+ * SHORT.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the "Narrow" format for measure units and the "?????"
+ * placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+NARROW,
+/**
+ * Print an abbreviated version of the unit name. Similar to NARROW, but use a slightly wider
+ * abbreviation or symbol when there may be ambiguity. This is the default behavior.
+ *
+ * <p>
+ * For example, in <em>es-US</em>, the SHORT form for Fahrenheit is "{0} ?F", but the NARROW form
+ * is "{0}?", since Fahrenheit is the customary unit for temperature in that locale.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the "Short" format for measure units and the "?"
+ * placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+SHORT,
+/**
+ * Print the full name of the unit, without any abbreviations.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the default format for measure units and the "???"
+ * placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+FULL_NAME,
+/**
+ * Use the three-digit ISO XXX code in place of the symbol for displaying currencies.
+ *
+ * <p>
+ * Behavior of this option with non-currency units is not defined at this time.
+ *
+ * <p>
+ * In CLDR, this option corresponds to the "??" placeholder for currencies.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+ISO_CODE,
+/**
+ * Format the number according to the specified unit, but do not display the unit. For
+ * currencies, apply monetary symbols and formats as with SHORT, but omit the currency symbol.
+ * For measure units, the behavior is equivalent to not specifying the unit at all.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+HIDDEN;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatterSettings.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatterSettings.java
new file mode 100644
index 0000000..6afc668
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberFormatterSettings.java
@@ -0,0 +1,440 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.MeasureUnit;
+import android.icu.util.Currency;
+import android.icu.util.Measure;
+import android.icu.number.NumberFormatter.GroupingStrategy;
+import android.icu.util.ULocale;
+import android.icu.text.DecimalFormatSymbols;
+import android.icu.text.NumberingSystem;
+import android.icu.number.NumberFormatter.UnitWidth;
+import android.icu.number.NumberFormatter.SignDisplay;
+import android.icu.number.NumberFormatter.DecimalSeparatorDisplay;
+
+/**
+ * An abstract base class for specifying settings related to number formatting. This class is implemented
+ * by {@link android.icu.number.UnlocalizedNumberFormatter UnlocalizedNumberFormatter} and {@link android.icu.number.LocalizedNumberFormatter LocalizedNumberFormatter}. This class is not intended
+ * for public subclassing.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberFormatterSettings<T extends android.icu.number.NumberFormatterSettings<?>> {
+
+NumberFormatterSettings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the notation style (simple, scientific, or compact) for rendering numbers.
+ *
+ * <ul>
+ * <li>Simple notation: "12,300"
+ * <li>Scientific notation: "1.23E4"
+ * <li>Compact notation: "12K"
+ * </ul>
+ *
+ * <p>
+ * All notation styles will be properly localized with locale data, and all notation styles are
+ * compatible with units, rounding strategies, and other number formatter settings.
+ *
+ * <p>
+ * Pass this method the return value of a {@link android.icu.number.Notation Notation} factory method. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().notation(Notation.compactShort())
+ * </pre>
+ *
+ * The default is to use simple notation.
+ *
+ * @param notation
+ *            The notation strategy to use.
+ * @return The fluent chain.
+ * @see android.icu.number.Notation
+ */
+
+public T notation(android.icu.number.Notation notation) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the unit (unit of measure, currency, or percent) to associate with rendered numbers.
+ *
+ * <ul>
+ * <li>Unit of measure: "12.3 meters"
+ * <li>Currency: "$12.30"
+ * <li>Percent: "12.3%"
+ * </ul>
+ *
+ * <p>
+ * <strong>Note:</strong> The unit can also be specified by passing a {@link android.icu.util.Measure Measure} to
+ * {@link android.icu.number.LocalizedNumberFormatter#format(android.icu.util.Measure) LocalizedNumberFormatter#format(Measure)}. Units specified via the format method take
+ * precedence over units specified here. This setter is designed for situations when the unit is
+ * constant for the duration of the number formatting process.
+ *
+ * <p>
+ * All units will be properly localized with locale data, and all units are compatible with notation
+ * styles, rounding strategies, and other number formatter settings.
+ *
+ * <p>
+ * Pass this method any instance of {@link android.icu.util.MeasureUnit MeasureUnit}. For units of measure:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(MeasureUnit.METER)
+ * </pre>
+ *
+ * Currency:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(Currency.getInstance("USD"))
+ * </pre>
+ *
+ * <p>
+ * See {@link #perUnit} for information on how to format strings like "5 meters per second".
+ *
+ * <p>
+ * If the input usage is correctly set the output unit <b>will change</b>
+ * according to `usage`, `locale` and `unit` value.
+ * </p>
+ *
+ * @param unit
+ *            The unit to render.
+ * @return The fluent chain.
+ * @see android.icu.util.MeasureUnit
+ * @see android.icu.util.Currency
+ * @see #perUnit
+ */
+
+public T unit(android.icu.util.MeasureUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a unit to be used in the denominator. For example, to format "3 m/s", pass METER to the unit
+ * and SECOND to the perUnit.
+ *
+ * <p>
+ * Pass this method any instance of {@link android.icu.util.MeasureUnit MeasureUnit}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(MeasureUnit.METER).perUnit(MeasureUnit.SECOND)
+ * </pre>
+ *
+ * <p>
+ * The default is not to display any unit in the denominator.
+ *
+ * <p>
+ * If a per-unit is specified without a primary unit via {@link #unit}, the behavior is undefined.
+ *
+ * @param perUnit
+ *            The unit to render in the denominator.
+ * @return The fluent chain
+ * @see #unit
+ */
+
+public T perUnit(android.icu.util.MeasureUnit perUnit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the rounding precision to use when formatting numbers.
+ *
+ * <ul>
+ * <li>Round to 3 decimal places: "3.142"
+ * <li>Round to 3 significant figures: "3.14"
+ * <li>Round to the closest nickel: "3.15"
+ * <li>Do not perform rounding: "3.1415926..."
+ * </ul>
+ *
+ * <p>
+ * Pass this method the return value of one of the factory methods on {@link android.icu.number.Precision Precision}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().precision(Precision.fixedFraction(2))
+ * </pre>
+ *
+ * <p>
+ * In most cases, the default rounding precision is to round to 6 fraction places; i.e.,
+ * <code>Precision.maxFraction(6)</code>. The exceptions are if compact notation is being used, then
+ * the compact notation rounding precision is used (see {@link android.icu.number.Notation#compactShort Notation#compactShort} for details), or
+ * if the unit is a currency, then standard currency rounding is used, which varies from currency to
+ * currency (see {@link android.icu.number.Precision#currency Precision#currency} for details).
+ *
+ * @param precision
+ *            The rounding precision to use.
+ * @return The fluent chain.
+ * @see android.icu.number.Precision
+ */
+
+public T precision(android.icu.number.Precision precision) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies how to determine the direction to round a number when it has more digits than fit in the
+ * desired precision.  When formatting 1.235:
+ *
+ * <ul>
+ * <li>Ceiling rounding mode with integer precision: "2"
+ * <li>Half-down rounding mode with 2 fixed fraction digits: "1.23"
+ * <li>Half-up rounding mode with 2 fixed fraction digits: "1.24"
+ * </ul>
+ *
+ * The default is HALF_EVEN. For more information on rounding mode, see the ICU userguide here:
+ *
+ * https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes
+ *
+ * @param roundingMode
+ *            The rounding mode to use.
+ * @return The fluent chain.
+ * @see android.icu.number.Precision
+ */
+
+public T roundingMode(java.math.RoundingMode roundingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the grouping strategy to use when formatting numbers.
+ *
+ * <ul>
+ * <li>Default grouping: "12,300" and "1,230"
+ * <li>Grouping with at least 2 digits: "12,300" and "1230"
+ * <li>No grouping: "12300" and "1230"
+ * </ul>
+ *
+ * <p>
+ * The exact grouping widths will be chosen based on the locale.
+ *
+ * <p>
+ * Pass this method an element from the {@link android.icu.number.NumberFormatter.GroupingStrategy GroupingStrategy} enum. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().grouping(GroupingStrategy.MIN2)
+ * </pre>
+ *
+ * The default is to perform grouping according to locale data; most locales, but not all locales,
+ * enable it by default.
+ *
+ * @param strategy
+ *            The grouping strategy to use.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter.GroupingStrategy
+ */
+
+public T grouping(android.icu.number.NumberFormatter.GroupingStrategy strategy) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the minimum and maximum number of digits to render before the decimal mark.
+ *
+ * <ul>
+ * <li>Zero minimum integer digits: ".08"
+ * <li>One minimum integer digit: "0.08"
+ * <li>Two minimum integer digits: "00.08"
+ * </ul>
+ *
+ * <p>
+ * Pass this method the return value of {@link android.icu.number.IntegerWidth#zeroFillTo(int) IntegerWidth#zeroFillTo(int)}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().integerWidth(IntegerWidth.zeroFillTo(2))
+ * </pre>
+ *
+ * The default is to have one minimum integer digit.
+ *
+ * @param style
+ *            The integer width to use.
+ * @return The fluent chain.
+ * @see android.icu.number.IntegerWidth
+ */
+
+public T integerWidth(android.icu.number.IntegerWidth style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies the symbols (decimal separator, grouping separator, percent sign, numerals, etc.) to use
+ * when rendering numbers.
+ *
+ * <ul>
+ * <li><em>en_US</em> symbols: "12,345.67"
+ * <li><em>fr_FR</em> symbols: "12&nbsp;345,67"
+ * <li><em>de_CH</em> symbols: "12?345.67"
+ * <li><em>my_MY</em> symbols: "??,???.??"
+ * </ul>
+ *
+ * <p>
+ * Pass this method an instance of {@link android.icu.text.DecimalFormatSymbols DecimalFormatSymbols}. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().symbols(DecimalFormatSymbols.getInstance(new ULocale("de_CH")))
+ * </pre>
+ *
+ * <p>
+ * <strong>Note:</strong> DecimalFormatSymbols automatically chooses the best numbering system based
+ * on the locale. In the examples above, the first three are using the Latin numbering system, and
+ * the fourth is using the Myanmar numbering system.
+ *
+ * <p>
+ * <strong>Note:</strong> The instance of DecimalFormatSymbols will be copied: changes made to the
+ * symbols object after passing it into the fluent chain will not be seen.
+ *
+ * <p>
+ * <strong>Note:</strong> Calling this method will override the NumberingSystem previously specified
+ * in {@link #symbols(android.icu.text.NumberingSystem)}.
+ *
+ * <p>
+ * The default is to choose the symbols based on the locale specified in the fluent chain.
+ *
+ * @param symbols
+ *            The DecimalFormatSymbols to use.
+ * @return The fluent chain.
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public T symbols(android.icu.text.DecimalFormatSymbols symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies that the given numbering system should be used when fetching symbols.
+ *
+ * <ul>
+ * <li>Latin numbering system: "12,345"
+ * <li>Myanmar numbering system: "??,???"
+ * <li>Math Sans Bold numbering system: "??,???"
+ * </ul>
+ *
+ * <p>
+ * Pass this method an instance of {@link android.icu.text.NumberingSystem NumberingSystem}. For example, to force the locale to
+ * always use the Latin alphabet numbering system (ASCII digits):
+ *
+ * <pre>
+ * NumberFormatter.with().symbols(NumberingSystem.LATIN)
+ * </pre>
+ *
+ * <p>
+ * <strong>Note:</strong> Calling this method will override the DecimalFormatSymbols previously
+ * specified in {@link #symbols(android.icu.text.DecimalFormatSymbols)}.
+ *
+ * <p>
+ * The default is to choose the best numbering system for the locale.
+ *
+ * @param ns
+ *            The NumberingSystem to use.
+ * @return The fluent chain.
+ * @see android.icu.text.NumberingSystem
+ */
+
+public T symbols(android.icu.text.NumberingSystem ns) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the width of the unit (measure unit or currency). Most common values:
+ *
+ * <ul>
+ * <li>Short: "$12.00", "12 m"
+ * <li>ISO Code: "USD 12.00"
+ * <li>Full name: "12.00 US dollars", "12 meters"
+ * </ul>
+ *
+ * <p>
+ * Pass an element from the {@link android.icu.number.NumberFormatter.UnitWidth UnitWidth} enum to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().unitWidth(UnitWidth.FULL_NAME)
+ * </pre>
+ *
+ * <p>
+ * The default is the SHORT width.
+ *
+ * @param style
+ *            The width to use when rendering numbers.
+ * @return The fluent chain
+ * @see android.icu.number.NumberFormatter.UnitWidth
+ */
+
+public T unitWidth(android.icu.number.NumberFormatter.UnitWidth style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the plus/minus sign display strategy. Most common values:
+ *
+ * <ul>
+ * <li>Auto: "123", "-123"
+ * <li>Always: "+123", "-123"
+ * <li>Accounting: "$123", "($123)"
+ * </ul>
+ *
+ * <p>
+ * Pass an element from the {@link android.icu.number.NumberFormatter.SignDisplay SignDisplay} enum to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().sign(SignDisplay.ALWAYS)
+ * </pre>
+ *
+ * <p>
+ * The default is AUTO sign display.
+ *
+ * @param style
+ *            The sign display strategy to use when rendering numbers.
+ * @return The fluent chain
+ * @see android.icu.number.NumberFormatter.SignDisplay
+ */
+
+public T sign(android.icu.number.NumberFormatter.SignDisplay style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decimal separator display strategy. This affects integer numbers with no fraction part.
+ * Most common values:
+ *
+ * <ul>
+ * <li>Auto: "1"
+ * <li>Always: "1."
+ * </ul>
+ *
+ * <p>
+ * Pass an element from the {@link android.icu.number.NumberFormatter.DecimalSeparatorDisplay DecimalSeparatorDisplay} enum to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().decimal(DecimalSeparatorDisplay.ALWAYS)
+ * </pre>
+ *
+ * <p>
+ * The default is AUTO decimal separator display.
+ *
+ * @param style
+ *            The decimal separator display strategy to use when rendering numbers.
+ * @return The fluent chain
+ * @see android.icu.number.NumberFormatter.DecimalSeparatorDisplay
+ */
+
+public T decimal(android.icu.number.NumberFormatter.DecimalSeparatorDisplay style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a scale (multiplier) to be used to scale the number by an arbitrary amount before formatting.
+ * Most common values:
+ *
+ * <ul>
+ * <li>Multiply by 100: useful for percentages.
+ * <li>Multiply by an arbitrary value: useful for unit conversions.
+ * </ul>
+ *
+ * <p>
+ * Pass an element from a {@link android.icu.number.Scale Scale} factory method to this setter. For example:
+ *
+ * <pre>
+ * NumberFormatter.with().scale(Scale.powerOfTen(2))
+ * </pre>
+ *
+ * <p>
+ * The default is to not apply any multiplier.
+ *
+ * @param scale
+ *            An amount to be multiplied against numbers before formatting.
+ * @return The fluent chain
+ * @see android.icu.number.Scale
+ */
+
+public T scale(android.icu.number.Scale scale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatter.java
new file mode 100644
index 0000000..42d8ad2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatter.java
@@ -0,0 +1,185 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import android.icu.util.ULocale;
+
+/**
+ * The main entrypoint to the formatting of ranges of numbers, including currencies and other units of measurement.
+ * <p>
+ * Usage example:
+ * <pre>
+ * NumberRangeFormatter.with()
+ *         .identityFallback(RangeIdentityFallback.APPROXIMATELY_OR_SINGLE_VALUE)
+ *         .numberFormatterFirst(NumberFormatter.with().unit(MeasureUnit.METER))
+ *         .numberFormatterSecond(NumberFormatter.with().unit(MeasureUnit.KILOMETER))
+ *         .locale(ULocale.UK)
+ *         .formatRange(750, 1.2)
+ *         .toString();
+ * // => "750 m - 1.2 km"
+ * </pre>
+ * <p>
+ * Like NumberFormatter, NumberRangeFormatter instances (i.e., LocalizedNumberRangeFormatter
+ * and UnlocalizedNumberRangeFormatter) are immutable and thread-safe. This API is based on the
+ * <em>fluent</em> design pattern popularized by libraries such as Google's Guava.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberRangeFormatter {
+
+private NumberRangeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is not currently
+ * known at the call site.
+ *
+ * @return An {@link android.icu.number.UnlocalizedNumberRangeFormatter UnlocalizedNumberRangeFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.UnlocalizedNumberRangeFormatter with() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is known at the call
+ * site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number range formatting.
+ * @return A {@link android.icu.number.LocalizedNumberRangeFormatter LocalizedNumberRangeFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberRangeFormatter withLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Call this method at the beginning of a NumberRangeFormatter fluent chain in which the locale is known at the call
+ * site.
+ *
+ * @param locale
+ *            The locale from which to load formats and symbols for number range formatting.
+ * @return A {@link android.icu.number.LocalizedNumberRangeFormatter LocalizedNumberRangeFormatter}, to be used for chaining.
+ */
+
+public static android.icu.number.LocalizedNumberRangeFormatter withLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+/**
+ * Defines how to merge fields that are identical across the range sign.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RangeCollapse {
+/**
+ * Use locale data and heuristics to determine how much of the string to collapse. Could end up collapsing none,
+ * some, or all repeated pieces in a locale-sensitive way.
+ * <p>
+ * The heuristics used for this option are subject to change over time.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+AUTO,
+/**
+ * Do not collapse any part of the number. Example: "3.2 thousand kilograms ? 5.3 thousand kilograms"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+NONE,
+/**
+ * Collapse the unit part of the number, but not the notation, if present. Example: "3.2 thousand ? 5.3 thousand
+ * kilograms"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+UNIT,
+/**
+ * Collapse any field that is equal across the range sign. May introduce ambiguity on the magnitude of the
+ * number. Example: "3.2 ? 5.3 thousand kilograms"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+ALL;
+}
+
+/**
+ * Defines the behavior when the two numbers in the range are identical after rounding. To programmatically detect
+ * when the identity fallback is used, compare the lower and upper BigDecimals via FormattedNumber.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RangeIdentityFallback {
+/**
+ * Show the number as a single value rather than a range. Example: "$5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+SINGLE_VALUE,
+/**
+ * Show the number using a locale-sensitive approximation pattern. If the numbers were the same before rounding,
+ * show the single value. Example: "~$5" or "$5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+APPROXIMATELY_OR_SINGLE_VALUE,
+/**
+ * Show the number using a locale-sensitive approximation pattern. Use the range pattern always, even if the
+ * inputs are the same. Example: "~$5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+APPROXIMATELY,
+/**
+ * Show the number as the range of two equal values. Use the range pattern always, even if the inputs are the
+ * same. Example (with RangeCollapse.NONE): "$5 ? $5"
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+RANGE;
+}
+
+/**
+ * Used in the result class FormattedNumberRange to indicate to the user whether the numbers formatted in the range
+ * were equal or not, and whether or not the identity fallback was applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RangeIdentityResult {
+/**
+ * Used to indicate that the two numbers in the range were equal, even before any rounding rules were applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+EQUAL_BEFORE_ROUNDING,
+/**
+ * Used to indicate that the two numbers in the range were equal, but only after rounding rules were applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+EQUAL_AFTER_ROUNDING,
+/**
+ * Used to indicate that the two numbers in the range were not equal, even after rounding rules were applied.
+ *
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+NOT_EQUAL;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatterSettings.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatterSettings.java
new file mode 100644
index 0000000..efd5250
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/NumberRangeFormatterSettings.java
@@ -0,0 +1,121 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * An abstract base class for specifying settings related to number formatting. This class is implemented by
+ * {@link android.icu.number.UnlocalizedNumberRangeFormatter UnlocalizedNumberRangeFormatter} and {@link android.icu.number.LocalizedNumberRangeFormatter LocalizedNumberRangeFormatter}. This class is not intended for
+ * public subclassing.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberRangeFormatterSettings<T extends android.icu.number.NumberRangeFormatterSettings<?>> {
+
+NumberRangeFormatterSettings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the NumberFormatter instance to use for the numbers in the range. The same formatter is applied to both
+ * sides of the range.
+ * <p>
+ * The NumberFormatter instances must not have a locale applied yet; the locale specified on the
+ * NumberRangeFormatter will be used.
+ *
+ * @param formatter
+ *            The formatter to use for both numbers in the range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T numberFormatterBoth(android.icu.number.UnlocalizedNumberFormatter formatter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the NumberFormatter instance to use for the first number in the range.
+ * <p>
+ * The NumberFormatter instance must not have a locale applied yet; the locale specified on the
+ * NumberRangeFormatter will be used.
+ *
+ * @param formatterFirst
+ *            The formatter to use for the first number in the range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T numberFormatterFirst(android.icu.number.UnlocalizedNumberFormatter formatterFirst) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the NumberFormatter instances to use for the second number in the range.
+ * <p>
+ * The NumberFormatter instance must not have a locale applied yet; the locale specified on the
+ * NumberRangeFormatter will be used.
+ *
+ * @param formatterSecond
+ *            The formatter to use for the second number in the range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberFormatter
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T numberFormatterSecond(android.icu.number.UnlocalizedNumberFormatter formatterSecond) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the aggressiveness of "collapsing" fields across the range separator. Possible values:
+ * <ul>
+ * <li>ALL: "3-5K miles"</li>
+ * <li>UNIT: "3K - 5K miles"</li>
+ * <li>NONE: "3K miles - 5K miles"</li>
+ * <li>AUTO: usually UNIT or NONE, depending on the locale and formatter settings</li>
+ * </ul>
+ * <p>
+ * The default value is AUTO.
+ *
+ * @param collapse
+ *            The collapsing strategy to use for this range.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T collapse(android.icu.number.NumberRangeFormatter.RangeCollapse collapse) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the behavior when the two sides of the range are the same. This could happen if the same two numbers are
+ * passed to the formatRange function, or if different numbers are passed to the function but they become the same
+ * after rounding rules are applied. Possible values:
+ * <ul>
+ * <li>SINGLE_VALUE: "5 miles"</li>
+ * <li>APPROXIMATELY_OR_SINGLE_VALUE: "~5 miles" or "5 miles", depending on whether the number was the same before
+ * rounding was applied</li>
+ * <li>APPROXIMATELY: "~5 miles"</li>
+ * <li>RANGE: "5-5 miles" (with collapse=UNIT)</li>
+ * </ul>
+ * <p>
+ * The default value is APPROXIMATELY.
+ *
+ * @param identityFallback
+ *            The strategy to use when formatting two numbers that end up being the same.
+ * @return The fluent chain.
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+public T identityFallback(android.icu.number.NumberRangeFormatter.RangeIdentityFallback identityFallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Precision.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Precision.java
new file mode 100644
index 0000000..f1c1377
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Precision.java
@@ -0,0 +1,245 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+
+/**
+ * A class that defines the rounding precision to be used when formatting numbers in NumberFormatter.
+ *
+ * <p>
+ * To create a Precision, use one of the factory methods.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Precision {
+
+Precision() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show all available digits to full precision.
+ *
+ * <p>
+ * <strong>NOTE:</strong> When formatting a <em>double</em>, this method, along with
+ * {@link #minFraction} and {@link #minSignificantDigits}, will trigger complex algorithm similar to
+ * <em>Dragon4</em> to determine the low-order digits and the number of digits to display based on
+ * the value of the double. If the number of fraction places or significant digits can be bounded,
+ * consider using {@link #maxFraction} or {@link #maxSignificantDigits} instead to maximize performance.
+ * For more information, read the following blog post.
+ *
+ * <p>
+ * http://www.serpentine.com/blog/2011/06/29/here-be-dragons-advances-in-problems-you-didnt-even-know-you-had/
+ *
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision unlimited() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to the nearest integer.
+ *
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision integer() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of fraction places (numerals after the
+ * decimal separator). Additionally, pad with zeros to ensure that this number of places are always
+ * shown.
+ *
+ * <p>
+ * Example output with minMaxFractionPlaces = 3:
+ *
+ * <p>
+ * 87,650.000<br>
+ * 8,765.000<br>
+ * 876.500<br>
+ * 87.650<br>
+ * 8.765<br>
+ * 0.876<br>
+ * 0.088<br>
+ * 0.009<br>
+ * 0.000 (zero)
+ *
+ * <p>
+ * This method is equivalent to {@link #minMaxFraction} with both arguments equal.
+ *
+ * @param minMaxFractionPlaces
+ *            The minimum and maximum number of numerals to display after the decimal separator
+ *            (rounding if too long or padding with zeros if too short).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision fixedFraction(int minMaxFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Always show at least a certain number of fraction places after the decimal separator, padding with
+ * zeros if necessary. Do not perform rounding (display numbers to their full precision).
+ *
+ * <p>
+ * <strong>NOTE:</strong> If you are formatting <em>doubles</em>, see the performance note in
+ * {@link #unlimited}.
+ *
+ * @param minFractionPlaces
+ *            The minimum number of numerals to display after the decimal separator (padding with
+ *            zeros if necessary).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision minFraction(int minFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of fraction places (numerals after the
+ * decimal separator). Unlike the other fraction rounding strategies, this strategy does <em>not</em>
+ * pad zeros to the end of the number.
+ *
+ * @param maxFractionPlaces
+ *            The maximum number of numerals to display after the decimal mark (rounding if
+ *            necessary).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision maxFraction(int maxFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of fraction places (numerals after the
+ * decimal separator); in addition, always show at least a certain number of places after the decimal
+ * separator, padding with zeros if necessary.
+ *
+ * @param minFractionPlaces
+ *            The minimum number of numerals to display after the decimal separator (padding with
+ *            zeros if necessary).
+ * @param maxFractionPlaces
+ *            The maximum number of numerals to display after the decimal separator (rounding if
+ *            necessary).
+ * @return A FractionPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 0.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.FractionPrecision minMaxFraction(int minFractionPlaces, int maxFractionPlaces) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of significant digits or significant
+ * figures. Additionally, pad with zeros to ensure that this number of significant digits/figures are
+ * always shown.
+ *
+ * <p>
+ * This method is equivalent to {@link #minMaxSignificantDigits} with both arguments equal.
+ *
+ * @param minMaxSignificantDigits
+ *            The minimum and maximum number of significant digits to display (rounding if too long
+ *            or padding with zeros if too short).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision fixedSignificantDigits(int minMaxSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Always show at least a certain number of significant digits/figures, padding with zeros if
+ * necessary. Do not perform rounding (display numbers to their full precision).
+ *
+ * <p>
+ * <strong>NOTE:</strong> If you are formatting <em>doubles</em>, see the performance note in
+ * {@link #unlimited}.
+ *
+ * @param minSignificantDigits
+ *            The minimum number of significant digits to display (padding with zeros if too short).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision minSignificantDigits(int minSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of significant digits/figures.
+ *
+ * @param maxSignificantDigits
+ *            The maximum number of significant digits to display (rounding if too long).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision maxSignificantDigits(int maxSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to a certain number of significant digits/figures; in addition,
+ * always show at least a certain number of significant digits, padding with zeros if necessary.
+ *
+ * @param minSignificantDigits
+ *            The minimum number of significant digits to display (padding with zeros if necessary).
+ * @param maxSignificantDigits
+ *            The maximum number of significant digits to display (rounding if necessary).
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the input number is too big or smaller than 1.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision minMaxSignificantDigits(int minSignificantDigits, int maxSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded if necessary to the closest multiple of a certain rounding increment. For
+ * example, if the rounding increment is 0.5, then round 1.2 to 1 and round 1.3 to 1.5.
+ *
+ * <p>
+ * In order to ensure that numbers are padded to the appropriate number of fraction places, set the
+ * scale on the rounding increment BigDecimal. For example, to round to the nearest 0.5 and always
+ * display 2 numerals after the decimal separator (to display 1.2 as "1.00" and 1.3 as "1.50"), you
+ * can run:
+ *
+ * <pre>
+ * Precision.increment(new BigDecimal("0.50"))
+ * </pre>
+ *
+ * <p>
+ * For more information on the scale of Java BigDecimal, see {@link java.math.BigDecimal#scale()}.
+ *
+ * @param roundingIncrement
+ *            The increment to which to round numbers.
+ * @return A Precision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if the rounding increment is null or non-positive.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Precision increment(java.math.BigDecimal roundingIncrement) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Show numbers rounded and padded according to the rules for the currency unit. The most common
+ * rounding precision settings for currencies include <code>Precision.fixedFraction(2)</code>,
+ * <code>Precision.integer()</code>, and <code>Precision.increment(0.05)</code> for cash transactions
+ * ("nickel rounding").
+ *
+ * <p>
+ * The exact rounding details will be resolved at runtime based on the currency unit specified in the
+ * NumberFormatter chain. To round according to the rules for one currency while displaying the
+ * symbol for another currency, the withCurrency() method can be called on the return value of this
+ * method.
+ *
+ * @param currencyUsage
+ *            Either STANDARD (for digital transactions) or CASH (for transactions where the rounding
+ *            increment may be limited by the available denominations of cash or coins).
+ * @return A CurrencyPrecision for chaining or passing to the NumberFormatter precision() setter.
+ * @throws java.lang.IllegalArgumentException if currencyUsage is null.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.CurrencyPrecision currency(android.icu.util.Currency.CurrencyUsage currencyUsage) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Scale.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Scale.java
new file mode 100644
index 0000000..404e7c0
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/Scale.java
@@ -0,0 +1,76 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.math.BigDecimal;
+
+/**
+ * A class that defines a quantity by which a number should be multiplied when formatting.
+ *
+ * <p>
+ * To create a Multiplier, use one of the factory methods.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Scale {
+
+private Scale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Do not change the value of numbers when formatting or parsing.
+ *
+ * @return A Multiplier to prevent any multiplication.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale none() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply numbers by 100 before formatting. Useful for combining with a percent unit:
+ *
+ * <pre>
+ * NumberFormatter.with().unit(NoUnit.PERCENT).multiplier(Multiplier.powerOfTen(2))
+ * </pre>
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale powerOfTen(int power) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply numbers by an arbitrary value before formatting. Useful for unit conversions.
+ * <p>
+ * This method takes a BigDecimal; also see the version that takes a double.
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale byBigDecimal(java.math.BigDecimal multiplicand) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply numbers by an arbitrary value before formatting. Useful for unit conversions.
+ * <p>
+ * This method takes a double; also see the version that takes a BigDecimal.
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale byDouble(double multiplicand) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Multiply a number by both a power of ten and by an arbitrary double value before formatting.
+ *
+ * @return A Multiplier for passing to the setter in NumberFormatter.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public static android.icu.number.Scale byDoubleAndPowerOfTen(double multiplicand, int power) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/ScientificNotation.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/ScientificNotation.java
new file mode 100644
index 0000000..6266044
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/ScientificNotation.java
@@ -0,0 +1,56 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the scientific notation style to be used when formatting numbers in
+ * NumberFormatter.
+ *
+ * <p>
+ * To create a ScientificNotation, use one of the factory methods in {@link android.icu.number.Notation Notation}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ScientificNotation extends android.icu.number.Notation {
+
+ScientificNotation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the minimum number of digits to show in the exponent of scientific notation, padding with
+ * zeros if necessary. Useful for fixed-width display.
+ *
+ * <p>
+ * For example, with minExponentDigits=2, the number 123 will be printed as "1.23E02" in
+ * <em>en-US</em> instead of the default "1.23E2".
+ *
+ * @param minExponentDigits
+ *            The minimum number of digits to show in the exponent.
+ * @return A ScientificNotation, for chaining.
+ * @throws java.lang.IllegalArgumentException if minExponentDigits is too big or smaller than 1
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.ScientificNotation withMinExponentDigits(int minExponentDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether to show the sign on positive and negative exponents in scientific notation. The
+ * default is AUTO, showing the minus sign but not the plus sign.
+ *
+ * <p>
+ * For example, with exponentSignDisplay=ALWAYS, the number 123 will be printed as "1.23E+2" in
+ * <em>en-US</em> instead of the default "1.23E2".
+ *
+ * @param exponentSignDisplay
+ *            The strategy for displaying the sign in the exponent.
+ * @return A ScientificNotation, for chaining.
+ * @see android.icu.number.NumberFormatter
+ */
+
+public android.icu.number.ScientificNotation withExponentSignDisplay(android.icu.number.NumberFormatter.SignDisplay exponentSignDisplay) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/SimpleNotation.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/SimpleNotation.java
new file mode 100644
index 0000000..9a4e91d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/SimpleNotation.java
@@ -0,0 +1,23 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+
+/**
+ * A class that defines the simple notation style to be used when formatting numbers in NumberFormatter.
+ *
+ * <p>
+ * This class exposes no public functionality. To create a SimpleNotation, use one of the factory methods
+ * in {@link android.icu.number.Notation Notation}.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class SimpleNotation extends android.icu.number.Notation {
+
+SimpleNotation() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberFormatter.java
new file mode 100644
index 0000000..26da43f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberFormatter.java
@@ -0,0 +1,53 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+
+/**
+ * A NumberFormatter that does not yet have a locale. In order to format numbers, a locale must be
+ * specified.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @see android.icu.number.NumberFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnlocalizedNumberFormatter extends android.icu.number.NumberFormatterSettings<android.icu.number.UnlocalizedNumberFormatter> {
+
+UnlocalizedNumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Associate the given locale with the number formatter. The locale is used for picking the
+ * appropriate symbols, formats, and other data for number display.
+ *
+ * <p>
+ * To use the Java default locale, call Locale.getDefault():
+ *
+ * <pre>
+ * NumberFormatter.with(). ... .locale(Locale.getDefault())
+ * </pre>
+ *
+ * @param locale
+ *            The locale to use when loading data for number formatting.
+ * @return The fluent chain
+ */
+
+public android.icu.number.LocalizedNumberFormatter locale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ULocale version of the {@link #locale(java.util.Locale)} setter above.
+ *
+ * @param locale
+ *            The locale to use when loading data for number formatting.
+ * @return The fluent chain
+ * @see #locale(Locale)
+ */
+
+public android.icu.number.LocalizedNumberFormatter locale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberRangeFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberRangeFormatter.java
new file mode 100644
index 0000000..97f67f8
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/number/UnlocalizedNumberRangeFormatter.java
@@ -0,0 +1,53 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.number;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+
+/**
+ * A NumberRangeFormatter that does not yet have a locale. In order to format, a locale must be specified.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * @author sffc
+ * @see android.icu.number.NumberRangeFormatter
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnlocalizedNumberRangeFormatter extends android.icu.number.NumberRangeFormatterSettings<android.icu.number.UnlocalizedNumberRangeFormatter> {
+
+UnlocalizedNumberRangeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Associate the given locale with the number range formatter. The locale is used for picking the
+ * appropriate symbols, formats, and other data for number display.
+ *
+ * <p>
+ * To use the Java default locale, call Locale.getDefault():
+ *
+ * <pre>
+ * NumberFormatter.with(). ... .locale(Locale.getDefault())
+ * </pre>
+ *
+ * @param locale
+ *            The locale to use when loading data for number range formatting.
+ * @return The fluent chain
+ */
+
+public android.icu.number.LocalizedNumberRangeFormatter locale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ULocale version of the {@link #locale(java.util.Locale)} setter above.
+ *
+ * @param locale
+ *            The locale to use when loading data for number range formatting.
+ * @return The fluent chain
+ * @see #locale(Locale)
+ */
+
+public android.icu.number.LocalizedNumberRangeFormatter locale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/AlphabeticIndex.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/AlphabeticIndex.java
new file mode 100644
index 0000000..be6db6e
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/AlphabeticIndex.java
@@ -0,0 +1,503 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2008-2016, Google Inc, International Business Machines Corporation
+ * and others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.text.AlphabeticIndex.Bucket;
+import java.util.Iterator;
+
+/**
+ * AlphabeticIndex supports the creation of a UI index appropriate for a given language.
+ * It can support either direct use, or use with a client that doesn't support localized collation.
+ * The following is an example of what an index might look like in a UI:
+ *
+ * <pre>
+ *  <b>... A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  ...</b>
+ *
+ *  <b>A</b>
+ *     Addison
+ *     Albertson
+ *     Azensky
+ *  <b>B</b>
+ *     Baecker
+ *  ...
+ * </pre>
+ *
+ * The class can generate a list of labels for use as a UI "index", that is, a list of
+ * clickable characters (or character sequences) that allow the user to see a segment
+ * (bucket) of a larger "target" list. That is, each label corresponds to a bucket in
+ * the target list, where everything in the bucket is greater than or equal to the character
+ * (according to the locale's collation). Strings can be added to the index;
+ * they will be in sorted order in the right bucket.
+ * <p>
+ * The class also supports having buckets for strings before the first (underflow),
+ * after the last (overflow), and between scripts (inflow). For example, if the index
+ * is constructed with labels for Russian and English, Greek characters would fall
+ * into an inflow bucket between the other two scripts.
+ *
+ * <p><em>Note:</em> If you expect to have a lot of ASCII or Latin characters
+ * as well as characters from the user's language,
+ * then it is a good idea to call addLabels(ULocale.English).
+ *
+ * <h2>Direct Use</h2>
+ * <p>The following shows an example of building an index directly.
+ *  The "show..." methods below are just to illustrate usage.
+ *
+ * <pre>
+ * // Create a simple index where the values for the strings are Integers, and add the strings
+ *
+ * AlphabeticIndex&lt;Integer&gt; index = new AlphabeticIndex&lt;Integer&gt;(desiredLocale).addLabels(additionalLocale);
+ * int counter = 0;
+ * for (String item : test) {
+ *     index.addRecord(item, counter++);
+ * }
+ * ...
+ * // Show index at top. We could skip or gray out empty buckets
+ *
+ * for (AlphabeticIndex.Bucket&lt;Integer&gt; bucket : index) {
+ *     if (showAll || bucket.size() != 0) {
+ *         showLabelAtTop(UI, bucket.getLabel());
+ *     }
+ * }
+ *  ...
+ * // Show the buckets with their contents, skipping empty buckets
+ *
+ * for (AlphabeticIndex.Bucket&lt;Integer&gt; bucket : index) {
+ *     if (bucket.size() != 0) {
+ *         showLabelInList(UI, bucket.getLabel());
+ *         for (AlphabeticIndex.Record&lt;Integer&gt; item : bucket) {
+ *             showIndexedItem(UI, item.getName(), item.getData());
+ *         }
+ * </pre>
+ *
+ * The caller can build different UIs using this class.
+ * For example, an index character could be omitted or grayed-out
+ * if its bucket is empty. Small buckets could also be combined based on size, such as:
+ *
+ * <pre>
+ * <b>... A-F G-N O-Z ...</b>
+ * </pre>
+ *
+ * <h2>Client Support</h2>
+ * <p>Callers can also use the {@link android.icu.text.AlphabeticIndex.ImmutableIndex AlphabeticIndex.ImmutableIndex}, or the AlphabeticIndex itself,
+ * to support sorting on a client that doesn't support AlphabeticIndex functionality.
+ *
+ * <p>The ImmutableIndex is both immutable and thread-safe.
+ * The corresponding AlphabeticIndex methods are not thread-safe because
+ * they "lazily" build the index buckets.
+ * <ul>
+ * <li>ImmutableIndex.getBucket(index) provides random access to all
+ *     buckets and their labels and label types.
+ * <li>AlphabeticIndex.getBucketLabels() or the bucket iterator on either class
+ *     can be used to get a list of the labels,
+ *     such as "...", "A", "B",..., and send that list to the client.
+ * <li>When the client has a new name, it sends that name to the server.
+ * The server needs to call the following methods,
+ * and communicate the bucketIndex and collationKey back to the client.
+ *
+ * <pre>
+ * int bucketIndex = index.getBucketIndex(name);
+ * String label = immutableIndex.getBucket(bucketIndex).getLabel();  // optional
+ * RawCollationKey collationKey = collator.getRawCollationKey(name, null);
+ * </pre>
+ *
+ * <li>The client would put the name (and associated information) into its bucket for bucketIndex. The collationKey is a
+ * sequence of bytes that can be compared with a binary compare, and produce the right localized result.</li>
+ * </ul>
+ *
+ * @author Mark Davis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class AlphabeticIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+
+/**
+ * Create the index object.
+ *
+ * @param locale
+ *            The locale for the index.
+ */
+
+public AlphabeticIndex(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create the index object.
+ *
+ * @param locale
+ *            The locale for the index.
+ */
+
+public AlphabeticIndex(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create an AlphabeticIndex that uses a specific collator.
+ *
+ * <p>The index will be created with no labels; the addLabels() function must be called
+ * after creation to add the desired labels to the index.
+ *
+ * <p>The index will work directly with the supplied collator. If the caller will need to
+ * continue working with the collator it should be cloned first, so that the
+ * collator provided to the AlphabeticIndex remains unchanged after creation of the index.
+ *
+ * @param collator The collator to use to order the contents of this index.
+ */
+
+public AlphabeticIndex(android.icu.text.RuleBasedCollator collator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add more index characters (aside from what are in the locale)
+ * @param additions additional characters to add to the index, such as A-Z.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.text.UnicodeSet additions) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add more index characters (aside from what are in the locale)
+ * @param additions additional characters to add to the index, such as those in Swedish.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addLabels(android.icu.util.ULocale... additions) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add more index characters (aside from what are in the locale)
+ * @param additions additional characters to add to the index, such as those in Swedish.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addLabels(java.util.Locale... additions) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the overflow label
+ * @param overflowLabel see class description
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setOverflowLabel(java.lang.String overflowLabel) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the default label used in the IndexCharacters' locale for underflow, eg the last item in: X Y Z ...
+ *
+ * @return underflow label
+ */
+
+public java.lang.String getUnderflowLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the underflowLabel label
+ * @param underflowLabel see class description
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(java.lang.String underflowLabel) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the default label used in the IndexCharacters' locale for overflow, eg the first item in: ... A B C
+ *
+ * @return overflow label
+ */
+
+public java.lang.String getOverflowLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the inflowLabel label
+ * @param inflowLabel see class description
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setInflowLabel(java.lang.String inflowLabel) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the default label used for abbreviated buckets <i>between</i> other labels. For example, consider the labels
+ * for Latin and Greek are used: X Y Z ... &#x0391; &#x0392; &#x0393;.
+ *
+ * @return inflow label
+ */
+
+public java.lang.String getInflowLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the limit on the number of labels in the index. The number of buckets can be slightly larger: see getBucketCount().
+ *
+ * @return maxLabelCount maximum number of labels.
+ */
+
+public int getMaxLabelCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a limit on the number of labels in the index. The number of buckets can be slightly larger: see
+ * getBucketCount().
+ *
+ * @param maxLabelCount Set the maximum number of labels. Currently, if the number is exceeded, then every
+ *         nth item is removed to bring the count down. A more sophisticated mechanism may be available in the
+ *         future.
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> setMaxLabelCount(int maxLabelCount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Builds an immutable, thread-safe version of this instance, without data records.
+ *
+ * @return an immutable index instance
+ */
+
+public android.icu.text.AlphabeticIndex.ImmutableIndex<V> buildImmutableIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the labels.
+ *
+ * @return The list of bucket labels, after processing.
+ */
+
+public java.util.List<java.lang.String> getBucketLabels() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a clone of the collator used internally. Note that for performance reasons, the clone is only done once, and
+ * then stored. The next time it is accessed, the same instance is returned.
+ * <p>
+ * <b><i>Don't use this method across threads if you are changing the settings on the collator, at least not without
+ * synchronizing.</i></b>
+ *
+ * @return a clone of the collator used internally
+ */
+
+public android.icu.text.RuleBasedCollator getCollator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a record (name and data) to the index. The name will be used to sort the items into buckets, and to sort
+ * within the bucket. Two records may have the same name. When they do, the sort order is according to the order added:
+ * the first added comes first.
+ *
+ * @param name
+ *            Name, such as a name
+ * @param data
+ *            Data, such as an address or link
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> addRecord(java.lang.CharSequence name, V data) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the bucket number for the given name. This routine permits callers to implement their own bucket handling
+ * mechanisms, including client-server handling. For example, when a new name is created on the client, it can ask
+ * the server for the bucket for that name, and the sortkey (using getCollator). Once the client has that
+ * information, it can put the name into the right bucket, and sort it within that bucket, without having access to
+ * the index or collator.
+ * <p>
+ * Note that the bucket number (and sort key) are only valid for the settings of the current AlphabeticIndex; if
+ * those are changed, then the bucket number and sort key must be regenerated.
+ *
+ * @param name
+ *            Name, such as a name
+ * @return the bucket index for the name
+ */
+
+public int getBucketIndex(java.lang.CharSequence name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clear the index.
+ *
+ * @return this, for chaining
+ */
+
+public android.icu.text.AlphabeticIndex<V> clearRecords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of buckets in the index. This will be the same as the number of labels, plus buckets for the underflow, overflow, and inflow(s).
+ *
+ * @return number of buckets
+ */
+
+public int getBucketCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of records in the index: that is, the total number of distinct &lt;name,data&gt; pairs added with addRecord(...), over all the buckets.
+ *
+ * @return total number of records in buckets
+ */
+
+public int getRecordCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return an iterator over the buckets.
+ *
+ * @return iterator over buckets.
+ */
+
+public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator() { throw new RuntimeException("Stub!"); }
+/**
+ * An index "bucket" with a label string and type.
+ * It is referenced by {@link android.icu.text.AlphabeticIndex#getBucketIndex(java.lang.CharSequence) AlphabeticIndex#getBucketIndex(CharSequence)}
+ * and {@link android.icu.text.AlphabeticIndex.ImmutableIndex#getBucketIndex(java.lang.CharSequence) AlphabeticIndex.ImmutableIndex#getBucketIndex(CharSequence)},
+ * returned by {@link android.icu.text.AlphabeticIndex.ImmutableIndex#getBucket(int) AlphabeticIndex.ImmutableIndex#getBucket(int)},
+ * and {@link android.icu.text.AlphabeticIndex#addRecord(java.lang.CharSequence,java.lang.Object) AlphabeticIndex#addRecord(CharSequence, Object)} adds a record
+ * into a bucket according to the record's name.
+ *
+ * @param <V>
+ *            Data type
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Bucket<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Record<V>> {
+
+private Bucket() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the label
+ *
+ * @return label for the bucket
+ */
+
+public java.lang.String getLabel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is a normal, underflow, overflow, or inflow bucket
+ *
+ * @return is an underflow, overflow, or inflow bucket
+ */
+
+public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the number of records in the bucket.
+ *
+ * @return number of records in bucket
+ */
+
+public int size() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iterator over the records in the bucket
+ */
+
+public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Standard toString()
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+/**
+ * Type of the label
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum LabelType {
+/**
+ * Normal
+ */
+
+NORMAL,
+/**
+ * Underflow (before the first)
+ */
+
+UNDERFLOW,
+/**
+ * Inflow (between scripts)
+ */
+
+INFLOW,
+/**
+ * Overflow (after the last)
+ */
+
+OVERFLOW;
+}
+
+}
+
+/**
+ * Immutable, thread-safe version of {@link android.icu.text.AlphabeticIndex AlphabeticIndex}.
+ * This class provides thread-safe methods for bucketing,
+ * and random access to buckets and their properties,
+ * but does not offer adding records to the index.
+ *
+ * @param <V> The Record value type is unused. It can be omitted for this class
+ * if it was omitted for the AlphabeticIndex that built it.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class ImmutableIndex<V> implements java.lang.Iterable<android.icu.text.AlphabeticIndex.Bucket<V>> {
+
+private ImmutableIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of index buckets and labels, including underflow/inflow/overflow.
+ *
+ * @return the number of index buckets
+ */
+
+public int getBucketCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Finds the index bucket for the given name and returns the number of that bucket.
+ * Use {@link #getBucket(int)} to get the bucket's properties.
+ *
+ * @param name the string to be sorted into an index bucket
+ * @return the bucket number for the name
+ */
+
+public int getBucketIndex(java.lang.CharSequence name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index-th bucket. Returns null if the index is out of range.
+ *
+ * @param index bucket number
+ * @return the index-th bucket
+ */
+
+public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * A (name, data) pair, to be sorted by name into one of the index buckets.
+ * The user data is not used by the index implementation.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Record<V> {
+
+private Record() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the name
+ *
+ * @return the name
+ */
+
+public java.lang.CharSequence getName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the data
+ *
+ * @return the data
+ */
+
+public V getData() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Standard toString()
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Bidi.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Bidi.java
new file mode 100644
index 0000000..34d2a04
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Bidi.java
@@ -0,0 +1,2517 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 2001-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+/* FOOD FOR THOUGHT: currently the reordering modes are a mixture of
+ * algorithm for direct BiDi, algorithm for inverse Bidi and the bizarre
+ * concept of RUNS_ONLY which is a double operation.
+ * It could be advantageous to divide this into 3 concepts:
+ * a) Operation: direct / inverse / RUNS_ONLY
+ * b) Direct algorithm: default / NUMBERS_SPECIAL / GROUP_NUMBERS_WITH_L
+ * c) Inverse algorithm: default / INVERSE_LIKE_DIRECT / NUMBERS_SPECIAL
+ * This would allow combinations not possible today like RUNS_ONLY with
+ * NUMBERS_SPECIAL.
+ * Also allow to set INSERT_MARKS for the direct step of RUNS_ONLY and
+ * REMOVE_CONTROLS for the inverse step.
+ * Not all combinations would be supported, and probably not all do make sense.
+ * This would need to document which ones are supported and what are the
+ * fallbacks for unsupported combinations.
+ */
+
+//TODO: make sample program do something simple but real and complete
+
+
+package android.icu.text;
+
+import android.icu.lang.UCharacter;
+import android.icu.lang.UProperty;
+
+/**
+ *
+ * <h2>Bidi algorithm for ICU</h2>
+ *
+ * This is an implementation of the Unicode Bidirectional Algorithm. The
+ * algorithm is defined in the <a
+ * href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Annex #9</a>.
+ * <p>
+ *
+ * Note: Libraries that perform a bidirectional algorithm and reorder strings
+ * accordingly are sometimes called "Storage Layout Engines". ICU's Bidi and
+ * shaping (ArabicShaping) classes can be used at the core of such "Storage
+ * Layout Engines".
+ *
+ * <h3>General remarks about the API:</h3>
+ *
+ * The &quot;limit&quot; of a sequence of characters is the position just after
+ * their last character, i.e., one more than that position.
+ * <p>
+ *
+ * Some of the API methods provide access to &quot;runs&quot;. Such a
+ * &quot;run&quot; is defined as a sequence of characters that are at the same
+ * embedding level after performing the Bidi algorithm.
+ *
+ * <h3>Basic concept: paragraph</h3>
+ * A piece of text can be divided into several paragraphs by characters
+ * with the Bidi class <code>Block Separator</code>. For handling of
+ * paragraphs, see:
+ * <ul>
+ * <li>{@link #countParagraphs}
+ * <li>{@link #getParaLevel}
+ * <li>{@link #getParagraph}
+ * <li>{@link #getParagraphByIndex}
+ * </ul>
+ *
+ * <h3>Basic concept: text direction</h3>
+ * The direction of a piece of text may be:
+ * <ul>
+ * <li>{@link #LTR}
+ * <li>{@link #RTL}
+ * <li>{@link #MIXED}
+ * <li>{@link #NEUTRAL}
+ * </ul>
+ *
+ * <h3>Basic concept: levels</h3>
+ *
+ * Levels in this API represent embedding levels according to the Unicode
+ * Bidirectional Algorithm.
+ * Their low-order bit (even/odd value) indicates the visual direction.<p>
+ *
+ * Levels can be abstract values when used for the
+ * <code>paraLevel</code> and <code>embeddingLevels</code>
+ * arguments of <code>setPara()</code>; there:
+ * <ul>
+ * <li>the high-order bit of an <code>embeddingLevels[]</code>
+ * value indicates whether the using application is
+ * specifying the level of a character to <i>override</i> whatever the
+ * Bidi implementation would resolve it to.</li>
+ * <li><code>paraLevel</code> can be set to the
+ * pseudo-level values <code>LEVEL_DEFAULT_LTR</code>
+ * and <code>LEVEL_DEFAULT_RTL</code>.</li>
+ * </ul>
+ *
+ * <p>The related constants are not real, valid level values.
+ * <code>DEFAULT_XXX</code> can be used to specify
+ * a default for the paragraph level for
+ * when the <code>setPara()</code> method
+ * shall determine it but there is no
+ * strongly typed character in the input.<p>
+ *
+ * Note that the value for <code>LEVEL_DEFAULT_LTR</code> is even
+ * and the one for <code>LEVEL_DEFAULT_RTL</code> is odd,
+ * just like with normal LTR and RTL level values -
+ * these special values are designed that way. Also, the implementation
+ * assumes that MAX_EXPLICIT_LEVEL is odd.
+ *
+ * <p>Note: The numeric values of the related constants will not change:
+ * They are tied to the use of 7-bit byte values (plus the override bit)
+ * and of the byte data type in this API.
+ *
+ * <p><b>See Also:</b>
+ * <ul>
+ * <li>{@link #LEVEL_DEFAULT_LTR}
+ * <li>{@link #LEVEL_DEFAULT_RTL}
+ * <li>{@link #LEVEL_OVERRIDE}
+ * <li>{@link #MAX_EXPLICIT_LEVEL}
+ * <li>{@link #setPara}
+ * </ul>
+ *
+ * <h3>Basic concept: Reordering Mode</h3>
+ * Reordering mode values indicate which variant of the Bidi algorithm to
+ * use.
+ *
+ * <b>See Also:</b>
+ * <ul>
+ * <li>{@link #setReorderingMode}
+ * <li>{@link #REORDER_DEFAULT}
+ * <li>{@link #REORDER_NUMBERS_SPECIAL}
+ * <li>{@link #REORDER_GROUP_NUMBERS_WITH_R}
+ * <li>{@link #REORDER_RUNS_ONLY}
+ * <li>{@link #REORDER_INVERSE_NUMBERS_AS_L}
+ * <li>{@link #REORDER_INVERSE_LIKE_DIRECT}
+ * <li>{@link #REORDER_INVERSE_FOR_NUMBERS_SPECIAL}
+ * </ul>
+ *
+ * <h3>Basic concept: Reordering Options</h3>
+ * Reordering options can be applied during Bidi text transformations.
+ *
+ * <b>See Also:</b>
+ * <ul>
+ * <li>{@link #setReorderingOptions}
+ * <li>{@link #OPTION_DEFAULT}
+ * <li>{@link #OPTION_INSERT_MARKS}
+ * <li>{@link #OPTION_REMOVE_CONTROLS}
+ * <li>{@link #OPTION_STREAMING}
+ * </ul>
+ *
+ * <h4> Sample code for the ICU Bidi API </h4>
+ *
+ * <h5>Rendering a paragraph with the ICU Bidi API</h5>
+ *
+ * This is (hypothetical) sample code that illustrates how the ICU Bidi API
+ * could be used to render a paragraph of text. Rendering code depends highly on
+ * the graphics system, therefore this sample code must make a lot of
+ * assumptions, which may or may not match any existing graphics system's
+ * properties.
+ *
+ * <p>
+ * The basic assumptions are:
+ *
+ * <ul>
+ * <li>Rendering is done from left to right on a horizontal line.</li>
+ * <li>A run of single-style, unidirectional text can be rendered at once.
+ * </li>
+ * <li>Such a run of text is passed to the graphics system with characters
+ * (code units) in logical order.</li>
+ * <li>The line-breaking algorithm is very complicated and Locale-dependent -
+ * and therefore its implementation omitted from this sample code.</li>
+ * </ul>
+ *
+ * <pre>
+ *
+ *  package android.icu.dev.test.bidi;
+ *
+ *  import android.icu.text.Bidi;
+ *  import android.icu.text.BidiRun;
+ *
+ *  public class Sample {
+ *
+ *      static final int styleNormal = 0;
+ *      static final int styleSelected = 1;
+ *      static final int styleBold = 2;
+ *      static final int styleItalics = 4;
+ *      static final int styleSuper=8;
+ *      static final int styleSub = 16;
+ *
+ *      static class StyleRun {
+ *          int limit;
+ *          int style;
+ *
+ *          public StyleRun(int limit, int style) {
+ *              this.limit = limit;
+ *              this.style = style;
+ *          }
+ *      }
+ *
+ *      static class Bounds {
+ *          int start;
+ *          int limit;
+ *
+ *          public Bounds(int start, int limit) {
+ *              this.start = start;
+ *              this.limit = limit;
+ *          }
+ *      }
+ *
+ *      static int getTextWidth(String text, int start, int limit,
+ *                              StyleRun[] styleRuns, int styleRunCount) {
+ *          // simplistic way to compute the width
+ *          return limit - start;
+ *      }
+ *
+ *      // set limit and StyleRun limit for a line
+ *      // from text[start] and from styleRuns[styleRunStart]
+ *      // using Bidi.getLogicalRun(...)
+ *      // returns line width
+ *      static int getLineBreak(String text, Bounds line, Bidi para,
+ *                              StyleRun styleRuns[], Bounds styleRun) {
+ *          // dummy return
+ *          return 0;
+ *      }
+ *
+ *      // render runs on a line sequentially, always from left to right
+ *
+ *      // prepare rendering a new line
+ *      static void startLine(byte textDirection, int lineWidth) {
+ *          System.out.println();
+ *      }
+ *
+ *      // render a run of text and advance to the right by the run width
+ *      // the text[start..limit-1] is always in logical order
+ *      static void renderRun(String text, int start, int limit,
+ *                            byte textDirection, int style) {
+ *      }
+ *
+ *      // We could compute a cross-product
+ *      // from the style runs with the directional runs
+ *      // and then reorder it.
+ *      // Instead, here we iterate over each run type
+ *      // and render the intersections -
+ *      // with shortcuts in simple (and common) cases.
+ *      // renderParagraph() is the main function.
+ *
+ *      // render a directional run with
+ *      // (possibly) multiple style runs intersecting with it
+ *      static void renderDirectionalRun(String text, int start, int limit,
+ *                                       byte direction, StyleRun styleRuns[],
+ *                                       int styleRunCount) {
+ *          int i;
+ *
+ *          // iterate over style runs
+ *          if (direction == Bidi.LTR) {
+ *              int styleLimit;
+ *              for (i = 0; i &lt; styleRunCount; ++i) {
+ *                  styleLimit = styleRuns[i].limit;
+ *                  if (start &lt; styleLimit) {
+ *                      if (styleLimit &gt; limit) {
+ *                          styleLimit = limit;
+ *                      }
+ *                      renderRun(text, start, styleLimit,
+ *                                direction, styleRuns[i].style);
+ *                      if (styleLimit == limit) {
+ *                          break;
+ *                      }
+ *                      start = styleLimit;
+ *                  }
+ *              }
+ *          } else {
+ *              int styleStart;
+ *
+ *              for (i = styleRunCount-1; i &gt;= 0; --i) {
+ *                  if (i &gt; 0) {
+ *                      styleStart = styleRuns[i-1].limit;
+ *                  } else {
+ *                      styleStart = 0;
+ *                  }
+ *                  if (limit &gt;= styleStart) {
+ *                      if (styleStart &lt; start) {
+ *                          styleStart = start;
+ *                      }
+ *                      renderRun(text, styleStart, limit, direction,
+ *                                styleRuns[i].style);
+ *                      if (styleStart == start) {
+ *                          break;
+ *                      }
+ *                      limit = styleStart;
+ *                  }
+ *              }
+ *          }
+ *      }
+ *
+ *      // the line object represents text[start..limit-1]
+ *      static void renderLine(Bidi line, String text, int start, int limit,
+ *                             StyleRun styleRuns[], int styleRunCount) {
+ *          byte direction = line.getDirection();
+ *          if (direction != Bidi.MIXED) {
+ *              // unidirectional
+ *              if (styleRunCount &lt;= 1) {
+ *                  renderRun(text, start, limit, direction, styleRuns[0].style);
+ *              } else {
+ *                  renderDirectionalRun(text, start, limit, direction,
+ *                                       styleRuns, styleRunCount);
+ *              }
+ *          } else {
+ *              // mixed-directional
+ *              int count, i;
+ *              BidiRun run;
+ *
+ *              try {
+ *                  count = line.countRuns();
+ *              } catch (IllegalStateException e) {
+ *                  e.printStackTrace();
+ *                  return;
+ *              }
+ *              if (styleRunCount &lt;= 1) {
+ *                  int style = styleRuns[0].style;
+ *
+ *                  // iterate over directional runs
+ *                  for (i = 0; i &lt; count; ++i) {
+ *                      run = line.getVisualRun(i);
+ *                      renderRun(text, run.getStart(), run.getLimit(),
+ *                                run.getDirection(), style);
+ *                  }
+ *              } else {
+ *                  // iterate over both directional and style runs
+ *                  for (i = 0; i &lt; count; ++i) {
+ *                      run = line.getVisualRun(i);
+ *                      renderDirectionalRun(text, run.getStart(),
+ *                                           run.getLimit(), run.getDirection(),
+ *                                           styleRuns, styleRunCount);
+ *                  }
+ *              }
+ *          }
+ *      }
+ *
+ *      static void renderParagraph(String text, byte textDirection,
+ *                                  StyleRun styleRuns[], int styleRunCount,
+ *                                  int lineWidth) {
+ *          int length = text.length();
+ *          Bidi para = new Bidi();
+ *          try {
+ *              para.setPara(text,
+ *                           textDirection != 0 ? Bidi.LEVEL_DEFAULT_RTL
+ *                                              : Bidi.LEVEL_DEFAULT_LTR,
+ *                           null);
+ *          } catch (Exception e) {
+ *              e.printStackTrace();
+ *              return;
+ *          }
+ *          byte paraLevel = (byte)(1 &amp; para.getParaLevel());
+ *          StyleRun styleRun = new StyleRun(length, styleNormal);
+ *
+ *          if (styleRuns == null || styleRunCount &lt;= 0) {
+ *              styleRuns = new StyleRun[1];
+ *              styleRunCount = 1;
+ *              styleRuns[0] = styleRun;
+ *          }
+ *          // assume styleRuns[styleRunCount-1].limit&gt;=length
+ *
+ *          int width = getTextWidth(text, 0, length, styleRuns, styleRunCount);
+ *          if (width &lt;= lineWidth) {
+ *              // everything fits onto one line
+ *
+ *              // prepare rendering a new line from either left or right
+ *              startLine(paraLevel, width);
+ *
+ *              renderLine(para, text, 0, length, styleRuns, styleRunCount);
+ *          } else {
+ *              // we need to render several lines
+ *              Bidi line = new Bidi(length, 0);
+ *              int start = 0, limit;
+ *              int styleRunStart = 0, styleRunLimit;
+ *
+ *              for (;;) {
+ *                  limit = length;
+ *                  styleRunLimit = styleRunCount;
+ *                  width = getLineBreak(text, new Bounds(start, limit),
+ *                                       para, styleRuns,
+ *                                       new Bounds(styleRunStart, styleRunLimit));
+ *                  try {
+ *                      line = para.setLine(start, limit);
+ *                  } catch (Exception e) {
+ *                      e.printStackTrace();
+ *                      return;
+ *                  }
+ *                  // prepare rendering a new line
+ *                  // from either left or right
+ *                  startLine(paraLevel, width);
+ *
+ *                  if (styleRunStart &gt; 0) {
+ *                      int newRunCount = styleRuns.length - styleRunStart;
+ *                      StyleRun[] newRuns = new StyleRun[newRunCount];
+ *                      System.arraycopy(styleRuns, styleRunStart, newRuns, 0,
+ *                                       newRunCount);
+ *                      renderLine(line, text, start, limit, newRuns,
+ *                                 styleRunLimit - styleRunStart);
+ *                  } else {
+ *                      renderLine(line, text, start, limit, styleRuns,
+ *                                 styleRunLimit - styleRunStart);
+ *                  }
+ *                  if (limit == length) {
+ *                      break;
+ *                  }
+ *                  start = limit;
+ *                  styleRunStart = styleRunLimit - 1;
+ *                  if (start &gt;= styleRuns[styleRunStart].limit) {
+ *                      ++styleRunStart;
+ *                  }
+ *              }
+ *          }
+ *      }
+ *
+ *      public static void main(String[] args)
+ *      {
+ *          renderParagraph("Some Latin text...", Bidi.LTR, null, 0, 80);
+ *          renderParagraph("Some Hebrew text...", Bidi.RTL, null, 0, 60);
+ *      }
+ *  }
+ *
+ * </pre>
+ *
+ * @author Simon Montagu, Matitiahu Allouche (ported from C code written by Markus W. Scherer)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Bidi {
+
+/**
+ * Allocate a <code>Bidi</code> object.
+ * Such an object is initially empty. It is assigned
+ * the Bidi properties of a piece of text containing one or more paragraphs
+ * by <code>setPara()</code>
+ * or the Bidi properties of a line within a paragraph by
+ * <code>setLine()</code>.<p>
+ * This object can be reused.<p>
+ * <code>setPara()</code> and <code>setLine()</code> will allocate
+ * additional memory for internal structures as necessary.
+ */
+
+public Bidi() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Allocate a <code>Bidi</code> object with preallocated memory
+ * for internal structures.
+ * This method provides a <code>Bidi</code> object like the default constructor
+ * but it also preallocates memory for internal structures
+ * according to the sizings supplied by the caller.<p>
+ * The preallocation can be limited to some of the internal memory
+ * by setting some values to 0 here. That means that if, e.g.,
+ * <code>maxRunCount</code> cannot be reasonably predetermined and should not
+ * be set to <code>maxLength</code> (the only failproof value) to avoid
+ * wasting  memory, then <code>maxRunCount</code> could be set to 0 here
+ * and the internal structures that are associated with it will be allocated
+ * on demand, just like with the default constructor.
+ *
+ * @param maxLength is the maximum text or line length that internal memory
+ *        will be preallocated for. An attempt to associate this object with a
+ *        longer text will fail, unless this value is 0, which leaves the allocation
+ *        up to the implementation.
+ *
+ * @param maxRunCount is the maximum anticipated number of same-level runs
+ *        that internal memory will be preallocated for. An attempt to access
+ *        visual runs on an object that was not preallocated for as many runs
+ *        as the text was actually resolved to will fail,
+ *        unless this value is 0, which leaves the allocation up to the implementation.<br><br>
+ *        The number of runs depends on the actual text and maybe anywhere between
+ *        1 and <code>maxLength</code>. It is typically small.
+ *
+ * @throws java.lang.IllegalArgumentException if maxLength or maxRunCount is less than 0
+ */
+
+public Bidi(int maxLength, int maxRunCount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create Bidi from the given paragraph of text and base direction.
+ *
+ * @param paragraph a paragraph of text
+ * @param flags a collection of flags that control the algorithm. The
+ *        algorithm understands the flags DIRECTION_LEFT_TO_RIGHT,
+ *        DIRECTION_RIGHT_TO_LEFT, DIRECTION_DEFAULT_LEFT_TO_RIGHT, and
+ *        DIRECTION_DEFAULT_RIGHT_TO_LEFT. Other values are reserved.
+ * @see #DIRECTION_LEFT_TO_RIGHT
+ * @see #DIRECTION_RIGHT_TO_LEFT
+ * @see #DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ * @see #DIRECTION_DEFAULT_RIGHT_TO_LEFT
+ */
+
+public Bidi(java.lang.String paragraph, int flags) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create Bidi from the given paragraph of text.<p>
+ *
+ * The RUN_DIRECTION attribute in the text, if present, determines the base
+ * direction (left-to-right or right-to-left). If not present, the base
+ * direction is computed using the Unicode Bidirectional Algorithm,
+ * defaulting to left-to-right if there are no strong directional characters
+ * in the text. This attribute, if present, must be applied to all the text
+ * in the paragraph.<p>
+ *
+ * The BIDI_EMBEDDING attribute in the text, if present, represents
+ * embedding level information.
+ * Negative values indicate overrides at the absolute value of the level.
+ * Positive values indicate embeddings. (See {@link #MAX_EXPLICIT_LEVEL}.)
+ * Where values are zero or not defined, the base
+ * embedding level as determined by the base direction is assumed.<p>
+ *
+ * The NUMERIC_SHAPING attribute in the text, if present, converts European
+ * digits to other decimal digits before running the bidi algorithm. This
+ * attribute, if present, must be applied to all the text in the paragraph.<p>
+ *
+ * Note: this constructor calls setPara() internally.
+ *
+ * @param paragraph a paragraph of text with optional character and
+ *        paragraph attribute information
+ */
+
+public Bidi(java.text.AttributedCharacterIterator paragraph) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create Bidi from the given text, embedding, and direction information.
+ *
+ * <p>The embeddings array may be null. If present, the values represent
+ * embedding level information.
+ * Negative values indicate overrides at the absolute value of the level.
+ * Positive values indicate embeddings. (See {@link #MAX_EXPLICIT_LEVEL}.)
+ * Where values are zero, the base embedding level
+ * as determined by the base direction is assumed,
+ * except for paragraph separators which remain at 0 to prevent reordering of paragraphs.</p>
+ *
+ * <p>Note: This constructor calls setPara() internally,
+ * after converting the java.text.Bidi-style embeddings with negative overrides
+ * into ICU-style embeddings with bit fields for {@link #LEVEL_OVERRIDE} and the level.
+ *
+ * @param text an array containing the paragraph of text to process.
+ * @param textStart the index into the text array of the start of the
+ *        paragraph.
+ * @param embeddings an array containing embedding values for each character
+ *        in the paragraph. This can be null, in which case it is assumed
+ *        that there is no external embedding information.
+ * @param embStart the index into the embedding array of the start of the
+ *        paragraph.
+ * @param paragraphLength the length of the paragraph in the text and
+ *        embeddings arrays.
+ * @param flags a collection of flags that control the algorithm. The
+ *        algorithm understands the flags DIRECTION_LEFT_TO_RIGHT,
+ *        DIRECTION_RIGHT_TO_LEFT, DIRECTION_DEFAULT_LEFT_TO_RIGHT, and
+ *        DIRECTION_DEFAULT_RIGHT_TO_LEFT. Other values are reserved.
+ *
+ * @throws java.lang.IllegalArgumentException if the values in embeddings are
+ *         not within the allowed range
+ *
+ * @see #DIRECTION_LEFT_TO_RIGHT
+ * @see #DIRECTION_RIGHT_TO_LEFT
+ * @see #DIRECTION_DEFAULT_LEFT_TO_RIGHT
+ * @see #DIRECTION_DEFAULT_RIGHT_TO_LEFT
+ */
+
+public Bidi(char[] text, int textStart, byte[] embeddings, int embStart, int paragraphLength, int flags) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modify the operation of the Bidi algorithm such that it
+ * approximates an "inverse Bidi" algorithm. This method
+ * must be called before <code>setPara()</code>.
+ *
+ * <p>The normal operation of the Bidi algorithm as described
+ * in the Unicode Technical Report is to take text stored in logical
+ * (keyboard, typing) order and to determine the reordering of it for visual
+ * rendering.
+ * Some legacy systems store text in visual order, and for operations
+ * with standard, Unicode-based algorithms, the text needs to be transformed
+ * to logical order. This is effectively the inverse algorithm of the
+ * described Bidi algorithm. Note that there is no standard algorithm for
+ * this "inverse Bidi" and that the current implementation provides only an
+ * approximation of "inverse Bidi".
+ *
+ * <p>With <code>isInversed</code> set to <code>true</code>,
+ * this method changes the behavior of some of the subsequent methods
+ * in a way that they can be used for the inverse Bidi algorithm.
+ * Specifically, runs of text with numeric characters will be treated in a
+ * special way and may need to be surrounded with LRM characters when they are
+ * written in reordered sequence.
+ *
+ * <p>Output runs should be retrieved using <code>getVisualRun()</code>.
+ * Since the actual input for "inverse Bidi" is visually ordered text and
+ * <code>getVisualRun()</code> gets the reordered runs, these are actually
+ * the runs of the logically ordered output.
+ *
+ * <p>Calling this method with argument <code>isInverse</code> set to
+ * <code>true</code> is equivalent to calling <code>setReorderingMode</code>
+ * with argument <code>reorderingMode</code>
+ * set to <code>REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
+ * Calling this method with argument <code>isInverse</code> set to
+ * <code>false</code> is equivalent to calling <code>setReorderingMode</code>
+ * with argument <code>reorderingMode</code>
+ * set to <code>REORDER_DEFAULT</code>.
+ *
+ * @param isInverse specifies "forward" or "inverse" Bidi operation.
+ *
+ * @see #setPara
+ * @see #writeReordered
+ * @see #setReorderingMode
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ * @see #REORDER_DEFAULT
+ */
+
+public void setInverse(boolean isInverse) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is this <code>Bidi</code> object set to perform the inverse Bidi
+ * algorithm?
+ * <p>Note: calling this method after setting the reordering mode with
+ * <code>setReorderingMode</code> will return <code>true</code> if the
+ * reordering mode was set to
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>, <code>false</code>
+ * for all other values.
+ *
+ * @return <code>true</code> if the <code>Bidi</code> object is set to
+ * perform the inverse Bidi algorithm by handling numbers as L.
+ *
+ * @see #setInverse
+ * @see #setReorderingMode
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ */
+
+public boolean isInverse() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modify the operation of the Bidi algorithm such that it implements some
+ * variant to the basic Bidi algorithm or approximates an "inverse Bidi"
+ * algorithm, depending on different values of the "reordering mode".
+ * This method must be called before <code>setPara()</code>, and stays in
+ * effect until called again with a different argument.
+ *
+ * <p>The normal operation of the Bidi algorithm as described in the Unicode
+ * Standard Annex #9 is to take text stored in logical (keyboard, typing)
+ * order and to determine how to reorder it for visual rendering.
+ *
+ * <p>With the reordering mode set to a value other than
+ * <code>REORDER_DEFAULT</code>, this method changes the behavior of some of
+ * the subsequent methods in a way such that they implement an inverse Bidi
+ * algorithm or some other algorithm variants.
+ *
+ * <p>Some legacy systems store text in visual order, and for operations
+ * with standard, Unicode-based algorithms, the text needs to be transformed
+ * into logical order. This is effectively the inverse algorithm of the
+ * described Bidi algorithm. Note that there is no standard algorithm for
+ * this "inverse Bidi", so a number of variants are implemented here.
+ *
+ * <p>In other cases, it may be desirable to emulate some variant of the
+ * Logical to Visual algorithm (e.g. one used in MS Windows), or perform a
+ * Logical to Logical transformation.
+ *
+ * <ul>
+ * <li>When the Reordering Mode is set to
+ * <code>REORDER_DEFAULT</code>,
+ * the standard Bidi Logical to Visual algorithm is applied.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_NUMBERS_SPECIAL</code>,
+ * the algorithm used to perform Bidi transformations when calling
+ * <code>setPara</code> should approximate the algorithm used in Microsoft
+ * Windows XP rather than strictly conform to the Unicode Bidi algorithm.
+ * <br>
+ * The differences between the basic algorithm and the algorithm addressed
+ * by this option are as follows:
+ * <ul>
+ *   <li>Within text at an even embedding level, the sequence "123AB"
+ *   (where AB represent R or AL letters) is transformed to "123BA" by the
+ *   Unicode algorithm and to "BA123" by the Windows algorithm.</li>
+ *
+ *   <li>Arabic-Indic numbers (AN) are handled by the Windows algorithm just
+ *   like regular numbers (EN).</li>
+ * </ul></li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_GROUP_NUMBERS_WITH_R</code>,
+ * numbers located between LTR text and RTL text are associated with the RTL
+ * text. For instance, an LTR paragraph with content "abc 123 DEF" (where
+ * upper case letters represent RTL characters) will be transformed to
+ * "abc FED 123" (and not "abc 123 FED"), "DEF 123 abc" will be transformed
+ * to "123 FED abc" and "123 FED abc" will be transformed to "DEF 123 abc".
+ * This makes the algorithm reversible and makes it useful when round trip
+ * (from visual to logical and back to visual) must be achieved without
+ * adding LRM characters. However, this is a variation from the standard
+ * Unicode Bidi algorithm.<br>
+ * The source text should not contain Bidi control characters other than LRM
+ * or RLM.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_RUNS_ONLY</code>,
+ * a "Logical to Logical" transformation must be performed:
+ * <ul>
+ * <li>If the default text level of the source text (argument
+ * <code>paraLevel</code> in <code>setPara</code>) is even, the source text
+ * will be handled as LTR logical text and will be transformed to the RTL
+ * logical text which has the same LTR visual display.</li>
+ * <li>If the default level of the source text is odd, the source text
+ * will be handled as RTL logical text and will be transformed to the
+ * LTR logical text which has the same LTR visual display.</li>
+ * </ul>
+ * This mode may be needed when logical text which is basically Arabic or
+ * Hebrew, with possible included numbers or phrases in English, has to be
+ * displayed as if it had an even embedding level (this can happen if the
+ * displaying application treats all text as if it was basically LTR).
+ * <br>
+ * This mode may also be needed in the reverse case, when logical text which
+ * is basically English, with possible included phrases in Arabic or Hebrew,
+ * has to be displayed as if it had an odd embedding level.
+ * <br>
+ * Both cases could be handled by adding LRE or RLE at the head of the
+ * text, if the display subsystem supports these formatting controls. If it
+ * does not, the problem may be handled by transforming the source text in
+ * this mode before displaying it, so that it will be displayed properly.
+ * <br>
+ * The source text should not contain Bidi control characters other than LRM
+ * or RLM.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>, an "inverse Bidi"
+ * algorithm is applied.
+ * Runs of text with numeric characters will be treated like LTR letters and
+ * may need to be surrounded with LRM characters when they are written in
+ * reordered sequence (the option <code>INSERT_LRM_FOR_NUMERIC</code> can
+ * be used with method <code>writeReordered</code> to this end. This mode
+ * is equivalent to calling <code>setInverse()</code> with
+ * argument <code>isInverse</code> set to <code>true</code>.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_INVERSE_LIKE_DIRECT</code>, the "direct" Logical to
+ * Visual Bidi algorithm is used as an approximation of an "inverse Bidi"
+ * algorithm. This mode is similar to mode
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code> but is closer to the
+ * regular Bidi algorithm.
+ * <br>
+ * For example, an LTR paragraph with the content "FED 123 456 CBA" (where
+ * upper case represents RTL characters) will be transformed to
+ * "ABC 456 123 DEF", as opposed to "DEF 123 456 ABC"
+ * with mode <code>REORDER_INVERSE_NUMBERS_AS_L</code>.<br>
+ * When used in conjunction with option
+ * <code>OPTION_INSERT_MARKS</code>, this mode generally
+ * adds Bidi marks to the output significantly more sparingly than mode
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>.<br> with option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to
+ * <code>writeReordered</code>.</li>
+ *
+ * <li>When the reordering mode is set to
+ * <code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the Logical to Visual
+ * Bidi algorithm used in Windows XP is used as an approximation of an "inverse
+ * Bidi" algorithm.
+ * <br>
+ * For example, an LTR paragraph with the content "abc FED123" (where
+ * upper case represents RTL characters) will be transformed to
+ * "abc 123DEF.</li>
+ * </ul>
+ *
+ * <p>In all the reordering modes specifying an "inverse Bidi" algorithm
+ * (i.e. those with a name starting with <code>REORDER_INVERSE</code>),
+ * output runs should be retrieved using <code>getVisualRun()</code>, and
+ * the output text with <code>writeReordered()</code>. The caller should
+ * keep in mind that in "inverse Bidi" modes the input is actually visually
+ * ordered text and reordered output returned by <code>getVisualRun()</code>
+ * or <code>writeReordered()</code> are actually runs or character string
+ * of logically ordered output.<br>
+ * For all the "inverse Bidi" modes, the source text should not contain
+ * Bidi control characters other than LRM or RLM.
+ *
+ * <p>Note that option <code>OUTPUT_REVERSE</code> of
+ * <code>writeReordered</code> has no useful meaning and should not be used
+ * in conjunction with any value of the reordering mode specifying "inverse
+ * Bidi" or with value <code>REORDER_RUNS_ONLY</code>.
+ *
+ * @param reorderingMode specifies the required variant of the Bidi
+ *                       algorithm.
+ *
+ * @see #setInverse
+ * @see #setPara
+ * @see #writeReordered
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #OUTPUT_REVERSE
+ * @see #REORDER_DEFAULT
+ * @see #REORDER_NUMBERS_SPECIAL
+ * @see #REORDER_GROUP_NUMBERS_WITH_R
+ * @see #REORDER_RUNS_ONLY
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public void setReorderingMode(int reorderingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * What is the requested reordering mode for a given Bidi object?
+ *
+ * @return the current reordering mode of the Bidi object
+ *
+ * @see #setReorderingMode
+ */
+
+public int getReorderingMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specify which of the reordering options should be applied during Bidi
+ * transformations.
+ *
+ * @param options A combination of zero or more of the following
+ * reordering options:
+ * <code>OPTION_DEFAULT</code>, <code>OPTION_INSERT_MARKS</code>,
+ * <code>OPTION_REMOVE_CONTROLS</code>, <code>OPTION_STREAMING</code>.
+ *
+ * @see #getReorderingOptions
+ * @see #OPTION_DEFAULT
+ * @see #OPTION_INSERT_MARKS
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #OPTION_STREAMING
+ */
+
+public void setReorderingOptions(int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * What are the reordering options applied to a given Bidi object?
+ *
+ * @return the current reordering options of the Bidi object
+ *
+ * @see #setReorderingOptions
+ */
+
+public int getReorderingOptions() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the base direction of the text provided according to the Unicode
+ * Bidirectional Algorithm. The base direction is derived from the first
+ * character in the string with bidirectional character type L, R, or AL.
+ * If the first such character has type L, LTR is returned. If the first
+ * such character has type R or AL, RTL is returned. If the string does
+ * not contain any character of these types, then NEUTRAL is returned.
+ * This is a lightweight function for use when only the base direction is
+ * needed and no further bidi processing of the text is needed.
+ * @param paragraph the text whose paragraph level direction is needed.
+ * @return LTR, RTL, NEUTRAL
+ * @see #LTR
+ * @see #RTL
+ * @see #NEUTRAL
+ */
+
+public static byte getBaseDirection(java.lang.CharSequence paragraph) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the context before a call to setPara().<p>
+ *
+ * setPara() computes the left-right directionality for a given piece
+ * of text which is supplied as one of its arguments. Sometimes this piece
+ * of text (the "main text") should be considered in context, because text
+ * appearing before ("prologue") and/or after ("epilogue") the main text
+ * may affect the result of this computation.<p>
+ *
+ * This function specifies the prologue and/or the epilogue for the next
+ * call to setPara(). If successive calls to setPara()
+ * all need specification of a context, setContext() must be called
+ * before each call to setPara(). In other words, a context is not
+ * "remembered" after the following successful call to setPara().<p>
+ *
+ * If a call to setPara() specifies DEFAULT_LTR or
+ * DEFAULT_RTL as paraLevel and is preceded by a call to
+ * setContext() which specifies a prologue, the paragraph level will
+ * be computed taking in consideration the text in the prologue.<p>
+ *
+ * When setPara() is called without a previous call to
+ * setContext, the main text is handled as if preceded and followed
+ * by strong directional characters at the current paragraph level.
+ * Calling setContext() with specification of a prologue will change
+ * this behavior by handling the main text as if preceded by the last
+ * strong character appearing in the prologue, if any.
+ * Calling setContext() with specification of an epilogue will change
+ * the behavior of setPara() by handling the main text as if followed
+ * by the first strong character or digit appearing in the epilogue, if any.<p>
+ *
+ * Note 1: if <code>setContext</code> is called repeatedly without
+ *         calling <code>setPara</code>, the earlier calls have no effect,
+ *         only the last call will be remembered for the next call to
+ *         <code>setPara</code>.<p>
+ *
+ * Note 2: calling <code>setContext(null, null)</code>
+ *         cancels any previous setting of non-empty prologue or epilogue.
+ *         The next call to <code>setPara()</code> will process no
+ *         prologue or epilogue.<p>
+ *
+ * Note 3: users must be aware that even after setting the context
+ *         before a call to setPara() to perform e.g. a logical to visual
+ *         transformation, the resulting string may not be identical to what it
+ *         would have been if all the text, including prologue and epilogue, had
+ *         been processed together.<br>
+ * Example (upper case letters represent RTL characters):<br>
+ * &nbsp;&nbsp;prologue = "<code>abc DE</code>"<br>
+ * &nbsp;&nbsp;epilogue = none<br>
+ * &nbsp;&nbsp;main text = "<code>FGH xyz</code>"<br>
+ * &nbsp;&nbsp;paraLevel = LTR<br>
+ * &nbsp;&nbsp;display without prologue = "<code>HGF xyz</code>"
+ *             ("HGF" is adjacent to "xyz")<br>
+ * &nbsp;&nbsp;display with prologue = "<code>abc HGFED xyz</code>"
+ *             ("HGF" is not adjacent to "xyz")<br>
+ *
+ * @param prologue is the text which precedes the text that
+ *        will be specified in a coming call to setPara().
+ *        If there is no prologue to consider,
+ *        this parameter can be <code>null</code>.
+ *
+ * @param epilogue is the text which follows the text that
+ *        will be specified in a coming call to setPara().
+ *        If there is no epilogue to consider,
+ *        this parameter can be <code>null</code>.
+ *
+ * @see #setPara
+ */
+
+public void setContext(java.lang.String prologue, java.lang.String epilogue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Perform the Unicode Bidi algorithm. It is defined in the
+ * <a href="http://www.unicode.org/reports/tr9/">Unicode Standard Annex #9</a>.
+ *
+ * <p>This method takes a piece of plain text containing one or more paragraphs,
+ * with or without externally specified embedding levels from <i>styled</i>
+ * text and computes the left-right-directionality of each character.</p>
+ *
+ * <p>If the entire text is all of the same directionality, then
+ * the method may not perform all the steps described by the algorithm,
+ * i.e., some levels may not be the same as if all steps were performed.
+ * This is not relevant for unidirectional text.<br>
+ * For example, in pure LTR text with numbers the numbers would get
+ * a resolved level of 2 higher than the surrounding text according to
+ * the algorithm. This implementation may set all resolved levels to
+ * the same value in such a case.</p>
+ *
+ * <p>The text can be composed of multiple paragraphs. Occurrence of a block
+ * separator in the text terminates a paragraph, and whatever comes next starts
+ * a new paragraph. The exception to this rule is when a Carriage Return (CR)
+ * is followed by a Line Feed (LF). Both CR and LF are block separators, but
+ * in that case, the pair of characters is considered as terminating the
+ * preceding paragraph, and a new paragraph will be started by a character
+ * coming after the LF.
+ *
+ * <p>Although the text is passed here as a <code>String</code>, it is
+ * stored internally as an array of characters. Therefore the
+ * documentation will refer to indexes of the characters in the text.
+ *
+ * @param text contains the text that the Bidi algorithm will be performed
+ *        on. This text can be retrieved with <code>getText()</code> or
+ *        <code>getTextAsString</code>.<br>
+ *
+ * @param paraLevel specifies the default level for the text;
+ *        it is typically 0 (LTR) or 1 (RTL).
+ *        If the method shall determine the paragraph level from the text,
+ *        then <code>paraLevel</code> can be set to
+ *        either <code>LEVEL_DEFAULT_LTR</code>
+ *        or <code>LEVEL_DEFAULT_RTL</code>; if the text contains multiple
+ *        paragraphs, the paragraph level shall be determined separately for
+ *        each paragraph; if a paragraph does not include any strongly typed
+ *        character, then the desired default is used (0 for LTR or 1 for RTL).
+ *        Any other value between 0 and <code>MAX_EXPLICIT_LEVEL</code>
+ *        is also valid, with odd levels indicating RTL.
+ *
+ * @param embeddingLevels (in) may be used to preset the embedding and override levels,
+ *        ignoring characters like LRE and PDF in the text.
+ *        A level overrides the directional property of its corresponding
+ *        (same index) character if the level has the
+ *        <code>LEVEL_OVERRIDE</code> bit set.<br><br>
+ *        Aside from that bit, it must be
+ *        <code>paraLevel&lt;=embeddingLevels[]&lt;=MAX_EXPLICIT_LEVEL</code>,
+ *        except that level 0 is always allowed.
+ *        Level 0 for a paragraph separator prevents reordering of paragraphs;
+ *        this only works reliably if <code>LEVEL_OVERRIDE</code>
+ *        is also set for paragraph separators.
+ *        Level 0 for other characters is treated as a wildcard
+ *        and is lifted up to the resolved level of the surrounding paragraph.<br><br>
+ *        <strong>Caution: </strong>A reference to this array, not a copy
+ *        of the levels, will be stored in the <code>Bidi</code> object;
+ *        the <code>embeddingLevels</code>
+ *        should not be modified to avoid unexpected results on subsequent
+ *        Bidi operations. However, the <code>setPara()</code> and
+ *        <code>setLine()</code> methods may modify some or all of the
+ *        levels.<br><br>
+ *        <strong>Note:</strong> the <code>embeddingLevels</code> array must
+ *        have one entry for each character in <code>text</code>.
+ *
+ * @throws java.lang.IllegalArgumentException if the values in embeddingLevels are
+ *         not within the allowed range
+ *
+ * @see #LEVEL_DEFAULT_LTR
+ * @see #LEVEL_DEFAULT_RTL
+ * @see #LEVEL_OVERRIDE
+ * @see #MAX_EXPLICIT_LEVEL
+ */
+
+public void setPara(java.lang.String text, byte paraLevel, byte[] embeddingLevels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Perform the Unicode Bidi algorithm. It is defined in the
+ * <a href="http://www.unicode.org/reports/tr9/">Unicode Standard Annex #9</a>.
+ *
+ * <p>This method takes a piece of plain text containing one or more paragraphs,
+ * with or without externally specified embedding levels from <i>styled</i>
+ * text and computes the left-right-directionality of each character.</p>
+ *
+ * <p>If the entire text is all of the same directionality, then
+ * the method may not perform all the steps described by the algorithm,
+ * i.e., some levels may not be the same as if all steps were performed.
+ * This is not relevant for unidirectional text.<br>
+ * For example, in pure LTR text with numbers the numbers would get
+ * a resolved level of 2 higher than the surrounding text according to
+ * the algorithm. This implementation may set all resolved levels to
+ * the same value in such a case.</p>
+ *
+ * <p>The text can be composed of multiple paragraphs. Occurrence of a block
+ * separator in the text terminates a paragraph, and whatever comes next starts
+ * a new paragraph. The exception to this rule is when a Carriage Return (CR)
+ * is followed by a Line Feed (LF). Both CR and LF are block separators, but
+ * in that case, the pair of characters is considered as terminating the
+ * preceding paragraph, and a new paragraph will be started by a character
+ * coming after the LF.
+ *
+ * <p>The text is stored internally as an array of characters. Therefore the
+ * documentation will refer to indexes of the characters in the text.
+ *
+ * @param chars contains the text that the Bidi algorithm will be performed
+ *        on. This text can be retrieved with <code>getText()</code> or
+ *        <code>getTextAsString</code>.<br>
+ *
+ * @param paraLevel specifies the default level for the text;
+ *        it is typically 0 (LTR) or 1 (RTL).
+ *        If the method shall determine the paragraph level from the text,
+ *        then <code>paraLevel</code> can be set to
+ *        either <code>LEVEL_DEFAULT_LTR</code>
+ *        or <code>LEVEL_DEFAULT_RTL</code>; if the text contains multiple
+ *        paragraphs, the paragraph level shall be determined separately for
+ *        each paragraph; if a paragraph does not include any strongly typed
+ *        character, then the desired default is used (0 for LTR or 1 for RTL).
+ *        Any other value between 0 and <code>MAX_EXPLICIT_LEVEL</code>
+ *        is also valid, with odd levels indicating RTL.
+ *
+ * @param embeddingLevels (in) may be used to preset the embedding and
+ *        override levels, ignoring characters like LRE and PDF in the text.
+ *        A level overrides the directional property of its corresponding
+ *        (same index) character if the level has the
+ *        <code>LEVEL_OVERRIDE</code> bit set.<br><br>
+ *        Aside from that bit, it must be
+ *        <code>paraLevel&lt;=embeddingLevels[]&lt;=MAX_EXPLICIT_LEVEL</code>,
+ *        except that level 0 is always allowed.
+ *        Level 0 for a paragraph separator prevents reordering of paragraphs;
+ *        this only works reliably if <code>LEVEL_OVERRIDE</code>
+ *        is also set for paragraph separators.
+ *        Level 0 for other characters is treated as a wildcard
+ *        and is lifted up to the resolved level of the surrounding paragraph.<br><br>
+ *        <strong>Caution: </strong>A reference to this array, not a copy
+ *        of the levels, will be stored in the <code>Bidi</code> object;
+ *        the <code>embeddingLevels</code>
+ *        should not be modified to avoid unexpected results on subsequent
+ *        Bidi operations. However, the <code>setPara()</code> and
+ *        <code>setLine()</code> methods may modify some or all of the
+ *        levels.<br><br>
+ *        <strong>Note:</strong> the <code>embeddingLevels</code> array must
+ *        have one entry for each character in <code>text</code>.
+ *
+ * @throws java.lang.IllegalArgumentException if the values in embeddingLevels are
+ *         not within the allowed range
+ *
+ * @see #LEVEL_DEFAULT_LTR
+ * @see #LEVEL_DEFAULT_RTL
+ * @see #LEVEL_OVERRIDE
+ * @see #MAX_EXPLICIT_LEVEL
+ */
+
+public void setPara(char[] chars, byte paraLevel, byte[] embeddingLevels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Perform the Unicode Bidi algorithm on a given paragraph, as defined in the
+ * <a href="http://www.unicode.org/unicode/reports/tr9/">Unicode Standard Annex #9</a>,
+ * version 13,
+ * also described in The Unicode Standard, Version 4.0 .<p>
+ *
+ * This method takes a paragraph of text and computes the
+ * left-right-directionality of each character. The text should not
+ * contain any Unicode block separators.<p>
+ *
+ * The RUN_DIRECTION attribute in the text, if present, determines the base
+ * direction (left-to-right or right-to-left). If not present, the base
+ * direction is computed using the Unicode Bidirectional Algorithm,
+ * defaulting to left-to-right if there are no strong directional characters
+ * in the text. This attribute, if present, must be applied to all the text
+ * in the paragraph.<p>
+ *
+ * The BIDI_EMBEDDING attribute in the text, if present, represents
+ * embedding level information.
+ * Negative values indicate overrides at the absolute value of the level.
+ * Positive values indicate embeddings. (See {@link #MAX_EXPLICIT_LEVEL}.)
+ * Where values are zero or not defined, the base
+ * embedding level as determined by the base direction is assumed.<p>
+ *
+ * The NUMERIC_SHAPING attribute in the text, if present, converts European
+ * digits to other decimal digits before running the bidi algorithm. This
+ * attribute, if present, must be applied to all the text in the paragraph.
+ *
+ * If the entire text is all of the same directionality, then
+ * the method may not perform all the steps described by the algorithm,
+ * i.e., some levels may not be the same as if all steps were performed.
+ * This is not relevant for unidirectional text.<br>
+ * For example, in pure LTR text with numbers the numbers would get
+ * a resolved level of 2 higher than the surrounding text according to
+ * the algorithm. This implementation may set all resolved levels to
+ * the same value in such a case.<p>
+ *
+ * @param paragraph a paragraph of text with optional character and
+ *        paragraph attribute information
+ */
+
+public void setPara(java.text.AttributedCharacterIterator paragraph) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specify whether block separators must be allocated level zero,
+ * so that successive paragraphs will progress from left to right.
+ * This method must be called before <code>setPara()</code>.
+ * Paragraph separators (B) may appear in the text.  Setting them to level zero
+ * means that all paragraph separators (including one possibly appearing
+ * in the last text position) are kept in the reordered text after the text
+ * that they follow in the source text.
+ * When this feature is not enabled, a paragraph separator at the last
+ * position of the text before reordering will go to the first position
+ * of the reordered text when the paragraph level is odd.
+ *
+ * @param ordarParaLTR specifies whether paragraph separators (B) must
+ * receive level 0, so that successive paragraphs progress from left to right.
+ *
+ * @see #setPara
+ */
+
+public void orderParagraphsLTR(boolean ordarParaLTR) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is this <code>Bidi</code> object set to allocate level 0 to block
+ * separators so that successive paragraphs progress from left to right?
+ *
+ * @return <code>true</code> if the <code>Bidi</code> object is set to
+ *         allocate level 0 to block separators.
+ */
+
+public boolean isOrderParagraphsLTR() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the directionality of the text.
+ *
+ * @return a value of <code>LTR</code>, <code>RTL</code> or <code>MIXED</code>
+ *         that indicates if the entire text
+ *         represented by this object is unidirectional,
+ *         and which direction, or if it is mixed-directional.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #LTR
+ * @see #RTL
+ * @see #MIXED
+ */
+
+public byte getDirection() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the text.
+ *
+ * @return A <code>String</code> containing the text that the
+ *         <code>Bidi</code> object was created for.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #setLine
+ */
+
+public java.lang.String getTextAsString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the text.
+ *
+ * @return A <code>char</code> array containing the text that the
+ *         <code>Bidi</code> object was created for.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #setLine
+ */
+
+public char[] getText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the length of the text.
+ *
+ * @return The length of the text that the <code>Bidi</code> object was
+ *         created for.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int getLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the length of the source text processed by the last call to
+ * <code>setPara()</code>. This length may be different from the length of
+ * the source text if option <code>OPTION_STREAMING</code> has been
+ * set.
+ * <br>
+ * Note that whenever the length of the text affects the execution or the
+ * result of a method, it is the processed length which must be considered,
+ * except for <code>setPara</code> (which receives unprocessed source text)
+ * and <code>getLength</code> (which returns the original length of the
+ * source text).<br>
+ * In particular, the processed length is the one to consider in the
+ * following cases:
+ * <ul>
+ * <li>maximum value of the <code>limit</code> argument of
+ * <code>setLine</code></li>
+ * <li>maximum value of the <code>charIndex</code> argument of
+ * <code>getParagraph</code></li>
+ * <li>maximum value of the <code>charIndex</code> argument of
+ * <code>getLevelAt</code></li>
+ * <li>number of elements in the array returned by <code>getLevels</code>
+ * </li>
+ * <li>maximum value of the <code>logicalStart</code> argument of
+ * <code>getLogicalRun</code></li>
+ * <li>maximum value of the <code>logicalIndex</code> argument of
+ * <code>getVisualIndex</code></li>
+ * <li>number of elements returned by <code>getLogicalMap</code></li>
+ * <li>length of text processed by <code>writeReordered</code></li>
+ * </ul>
+ *
+ * @return The length of the part of the source text processed by
+ *         the last call to <code>setPara</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #OPTION_STREAMING
+ */
+
+public int getProcessedLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the length of the reordered text resulting from the last call to
+ * <code>setPara()</code>. This length may be different from the length
+ * of the source text if option <code>OPTION_INSERT_MARKS</code>
+ * or option <code>OPTION_REMOVE_CONTROLS</code> has been set.
+ * <br>
+ * This resulting length is the one to consider in the following cases:
+ * <ul>
+ * <li>maximum value of the <code>visualIndex</code> argument of
+ * <code>getLogicalIndex</code></li>
+ * <li>number of elements returned by <code>getVisualMap</code></li>
+ * </ul>
+ * Note that this length stays identical to the source text length if
+ * Bidi marks are inserted or removed using option bits of
+ * <code>writeReordered</code>, or if option
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code> has been set.
+ *
+ * @return The length of the reordered text resulting from
+ *         the last call to <code>setPara</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #setPara
+ * @see #OPTION_INSERT_MARKS
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ */
+
+public int getResultLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the paragraph level of the text.
+ *
+ * @return The paragraph level. If there are multiple paragraphs, their
+ *         level may vary if the required paraLevel is LEVEL_DEFAULT_LTR or
+ *         LEVEL_DEFAULT_RTL.  In that case, the level of the first paragraph
+ *         is returned.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #LEVEL_DEFAULT_LTR
+ * @see #LEVEL_DEFAULT_RTL
+ * @see #getParagraph
+ * @see #getParagraphByIndex
+ */
+
+public byte getParaLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the number of paragraphs.
+ *
+ * @return The number of paragraphs.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int countParagraphs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a paragraph, given the index of this paragraph.
+ *
+ * This method returns information about a paragraph.<p>
+ *
+ * @param paraIndex is the number of the paragraph, in the
+ *        range <code>[0..countParagraphs()-1]</code>.
+ *
+ * @return a BidiRun object with the details of the paragraph:<br>
+ *        <code>start</code> will receive the index of the first character
+ *        of the paragraph in the text.<br>
+ *        <code>limit</code> will receive the limit of the paragraph.<br>
+ *        <code>embeddingLevel</code> will receive the level of the paragraph.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if paraIndex is not in the range
+ *        <code>[0..countParagraphs()-1]</code>
+ *
+ * @see android.icu.text.BidiRun
+ */
+
+public android.icu.text.BidiRun getParagraphByIndex(int paraIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a paragraph, given a position within the text.
+ * This method returns information about a paragraph.<br>
+ * Note: if the paragraph index is known, it is more efficient to
+ * retrieve the paragraph information using getParagraphByIndex().<p>
+ *
+ * @param charIndex is the index of a character within the text, in the
+ *        range <code>[0..getProcessedLength()-1]</code>.
+ *
+ * @return a BidiRun object with the details of the paragraph:<br>
+ *        <code>start</code> will receive the index of the first character
+ *        of the paragraph in the text.<br>
+ *        <code>limit</code> will receive the limit of the paragraph.<br>
+ *        <code>embeddingLevel</code> will receive the level of the paragraph.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if charIndex is not within the legal range
+ *
+ * @see android.icu.text.BidiRun
+ * @see #getParagraphByIndex
+ * @see #getProcessedLength
+ */
+
+public android.icu.text.BidiRun getParagraph(int charIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the index of a paragraph, given a position within the text.<p>
+ *
+ * @param charIndex is the index of a character within the text, in the
+ *        range <code>[0..getProcessedLength()-1]</code>.
+ *
+ * @return The index of the paragraph containing the specified position,
+ *         starting from 0.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if charIndex is not within the legal range
+ *
+ * @see android.icu.text.BidiRun
+ * @see #getProcessedLength
+ */
+
+public int getParagraphIndex(int charIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a custom Bidi classifier used by the UBA implementation for Bidi
+ * class determination.
+ *
+ * @param classifier A new custom classifier. This can be null.
+ *
+ * @see #getCustomClassifier
+ */
+
+public void setCustomClassifier(android.icu.text.BidiClassifier classifier) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the current custom class classifier used for Bidi class
+ * determination.
+ *
+ * @return An instance of class <code>BidiClassifier</code>
+ *
+ * @see #setCustomClassifier
+ */
+
+public android.icu.text.BidiClassifier getCustomClassifier() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves the Bidi class for a given code point.
+ * <p>If a <code>BidiClassifier</code> is defined and returns a value
+ * other than <code>UCharacter.getIntPropertyMaxValue(UProperty.BIDI_CLASS)+1</code>,
+ * that value is used; otherwise the default class determination mechanism is invoked.
+ *
+ * @param c The code point to get a Bidi class for.
+ *
+ * @return The Bidi class for the character <code>c</code> that is in effect
+ *         for this <code>Bidi</code> instance.
+ *
+ * @see android.icu.text.BidiClassifier
+ */
+
+public int getCustomizedClass(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <code>setLine()</code> returns a <code>Bidi</code> object to
+ * contain the reordering information, especially the resolved levels,
+ * for all the characters in a line of text. This line of text is
+ * specified by referring to a <code>Bidi</code> object representing
+ * this information for a piece of text containing one or more paragraphs,
+ * and by specifying a range of indexes in this text.<p>
+ * In the new line object, the indexes will range from 0 to <code>limit-start-1</code>.<p>
+ *
+ * This is used after calling <code>setPara()</code>
+ * for a piece of text, and after line-breaking on that text.
+ * It is not necessary if each paragraph is treated as a single line.<p>
+ *
+ * After line-breaking, rules (L1) and (L2) for the treatment of
+ * trailing WS and for reordering are performed on
+ * a <code>Bidi</code> object that represents a line.<p>
+ *
+ * <strong>Important: </strong>the line <code>Bidi</code> object may
+ * reference data within the global text <code>Bidi</code> object.
+ * You should not alter the content of the global text object until
+ * you are finished using the line object.
+ *
+ * @param start is the line's first index into the text.
+ *
+ * @param limit is just behind the line's last index into the text
+ *        (its last index +1).
+ *
+ * @return a <code>Bidi</code> object that will now represent a line of the text.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ * @throws java.lang.IllegalArgumentException if start and limit are not in the range
+ *         <code>0&lt;=start&lt;limit&lt;=getProcessedLength()</code>,
+ *         or if the specified line crosses a paragraph boundary
+ *
+ * @see #setPara
+ * @see #getProcessedLength
+ */
+
+public android.icu.text.Bidi setLine(int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the level for one character.
+ *
+ * @param charIndex the index of a character.
+ *
+ * @return The level for the character at <code>charIndex</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if charIndex is not in the range
+ *         <code>0&lt;=charIndex&lt;getProcessedLength()</code>
+ *
+ * @see #getProcessedLength
+ */
+
+public byte getLevelAt(int charIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get an array of levels for each character.<p>
+ *
+ * Note that this method may allocate memory under some
+ * circumstances, unlike <code>getLevelAt()</code>.
+ *
+ * @return The levels array for the text,
+ *         or <code>null</code> if an error occurs.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public byte[] getLevels() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a logical run.
+ * This method returns information about a run and is used
+ * to retrieve runs in logical order.<p>
+ * This is especially useful for line-breaking on a paragraph.
+ *
+ * @param logicalPosition is a logical position within the source text.
+ *
+ * @return a BidiRun object filled with <code>start</code> containing
+ *        the first character of the run, <code>limit</code> containing
+ *        the limit of the run, and <code>embeddingLevel</code> containing
+ *        the level of the run.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if logicalPosition is not in the range
+ *         <code>0&lt;=logicalPosition&lt;getProcessedLength()</code>
+ *
+ * @see android.icu.text.BidiRun
+ * @see android.icu.text.BidiRun#getStart()
+ * @see android.icu.text.BidiRun#getLimit()
+ * @see android.icu.text.BidiRun#getEmbeddingLevel()
+ */
+
+public android.icu.text.BidiRun getLogicalRun(int logicalPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the number of runs.
+ * This method may invoke the actual reordering on the
+ * <code>Bidi</code> object, after <code>setPara()</code>
+ * may have resolved only the levels of the text. Therefore,
+ * <code>countRuns()</code> may have to allocate memory,
+ * and may throw an exception if it fails to do so.
+ *
+ * @return The number of runs.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int countRuns() { throw new RuntimeException("Stub!"); }
+
+/**
+ *
+ * Get a <code>BidiRun</code> object according to its index. BidiRun methods
+ * may be used to retrieve the run's logical start, length and level,
+ * which can be even for an LTR run or odd for an RTL run.
+ * In an RTL run, the character at the logical start is
+ * visually on the right of the displayed run.
+ * The length is the number of characters in the run.<p>
+ * <code>countRuns()</code> is normally called
+ * before the runs are retrieved.
+ *
+ * <p>
+ *  Example:
+ * <pre>
+ *  Bidi bidi = new Bidi();
+ *  String text = "abc 123 DEFG xyz";
+ *  bidi.setPara(text, Bidi.RTL, null);
+ *  int i, count=bidi.countRuns(), logicalStart, visualIndex=0, length;
+ *  BidiRun run;
+ *  for (i = 0; i &lt; count; ++i) {
+ *      run = bidi.getVisualRun(i);
+ *      logicalStart = run.getStart();
+ *      length = run.getLength();
+ *      if (Bidi.LTR == run.getEmbeddingLevel()) {
+ *          do { // LTR
+ *              show_char(text.charAt(logicalStart++), visualIndex++);
+ *          } while (--length &gt; 0);
+ *      } else {
+ *          logicalStart += length;  // logicalLimit
+ *          do { // RTL
+ *              show_char(text.charAt(--logicalStart), visualIndex++);
+ *          } while (--length &gt; 0);
+ *      }
+ *  }
+ * </pre>
+ * <p>
+ * Note that in right-to-left runs, code like this places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * <p>
+ * Use of <code>{@link #writeReordered}</code>, optionally with the
+ * <code>{@link #KEEP_BASE_COMBINING}</code> option, can be considered in
+ * order to avoid these issues.
+ *
+ * @param runIndex is the number of the run in visual order, in the
+ *        range <code>[0..countRuns()-1]</code>.
+ *
+ * @return a BidiRun object containing the details of the run. The
+ *         directionality of the run is
+ *         <code>LTR==0</code> or <code>RTL==1</code>,
+ *         never <code>MIXED</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>runIndex</code> is not in
+ *         the range <code>0&lt;=runIndex&lt;countRuns()</code>
+ *
+ * @see #countRuns()
+ * @see android.icu.text.BidiRun
+ * @see android.icu.text.BidiRun#getStart()
+ * @see android.icu.text.BidiRun#getLength()
+ * @see android.icu.text.BidiRun#getEmbeddingLevel()
+ */
+
+public android.icu.text.BidiRun getVisualRun(int runIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the visual position from a logical text position.
+ * If such a mapping is used many times on the same
+ * <code>Bidi</code> object, then calling
+ * <code>getLogicalMap()</code> is more efficient.
+ * <p>
+ * The value returned may be <code>MAP_NOWHERE</code> if there is no
+ * visual position because the corresponding text character is a Bidi
+ * control removed from output by the option
+ * <code>OPTION_REMOVE_CONTROLS</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the visual position returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ * <p>
+ * Note that in right-to-left runs, this mapping places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * Use of <code>{@link #writeReordered}</code>, optionally with the
+ * <code>{@link #KEEP_BASE_COMBINING}</code> option can be considered instead
+ * of using the mapping, in order to avoid these issues.
+ *
+ * @param logicalIndex is the index of a character in the text.
+ *
+ * @return The visual position of this character.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>logicalIndex</code> is not in
+ *         the range <code>0&lt;=logicalIndex&lt;getProcessedLength()</code>
+ *
+ * @see #getLogicalMap
+ * @see #getLogicalIndex
+ * @see #getProcessedLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #writeReordered
+ */
+
+public int getVisualIndex(int logicalIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the logical text position from a visual position.
+ * If such a mapping is used many times on the same
+ * <code>Bidi</code> object, then calling
+ * <code>getVisualMap()</code> is more efficient.
+ * <p>
+ * The value returned may be <code>MAP_NOWHERE</code> if there is no
+ * logical position because the corresponding text character is a Bidi
+ * mark inserted in the output by option
+ * <code>OPTION_INSERT_MARKS</code>.
+ * <p>
+ * This is the inverse method to <code>getVisualIndex()</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the logical position returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ *
+ * @param visualIndex is the visual position of a character.
+ *
+ * @return The index of this character in the text.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>visualIndex</code> is not in
+ *         the range <code>0&lt;=visualIndex&lt;getResultLength()</code>
+ *
+ * @see #getVisualMap
+ * @see #getVisualIndex
+ * @see #getResultLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_INSERT_MARKS
+ * @see #writeReordered
+ */
+
+public int getLogicalIndex(int visualIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a logical-to-visual index map (array) for the characters in the
+ * <code>Bidi</code> (paragraph or line) object.
+ * <p>
+ * Some values in the map may be <code>MAP_NOWHERE</code> if the
+ * corresponding text characters are Bidi controls removed from the visual
+ * output by the option <code>OPTION_REMOVE_CONTROLS</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the visual positions returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ * <p>
+ * Note that in right-to-left runs, this mapping places
+ * second surrogates before first ones (which is generally a bad idea)
+ * and combining characters before base characters.
+ * Use of <code>{@link #writeReordered}</code>, optionally with the
+ * <code>{@link #KEEP_BASE_COMBINING}</code> option can be considered instead
+ * of using the mapping, in order to avoid these issues.
+ *
+ * @return an array of <code>getProcessedLength()</code>
+ *        indexes which will reflect the reordering of the characters.<br><br>
+ *        The index map will result in
+ *        <code>indexMap[logicalIndex]==visualIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #getVisualMap
+ * @see #getVisualIndex
+ * @see #getProcessedLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #writeReordered
+ */
+
+public int[] getLogicalMap() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a visual-to-logical index map (array) for the characters in the
+ * <code>Bidi</code> (paragraph or line) object.
+ * <p>
+ * Some values in the map may be <code>MAP_NOWHERE</code> if the
+ * corresponding text characters are Bidi marks inserted in the visual
+ * output by the option <code>OPTION_INSERT_MARKS</code>.
+ * <p>
+ * When the visual output is altered by using options of
+ * <code>writeReordered()</code> such as <code>INSERT_LRM_FOR_NUMERIC</code>,
+ * <code>KEEP_BASE_COMBINING</code>, <code>OUTPUT_REVERSE</code>,
+ * <code>REMOVE_BIDI_CONTROLS</code>, the logical positions returned may not
+ * be correct. It is advised to use, when possible, reordering options
+ * such as {@link #OPTION_INSERT_MARKS} and {@link #OPTION_REMOVE_CONTROLS}.
+ *
+ * @return an array of <code>getResultLength()</code>
+ *        indexes which will reflect the reordering of the characters.<br><br>
+ *        The index map will result in
+ *        <code>indexMap[visualIndex]==logicalIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #getLogicalMap
+ * @see #getLogicalIndex
+ * @see #getResultLength
+ * @see #MAP_NOWHERE
+ * @see #OPTION_INSERT_MARKS
+ * @see #writeReordered
+ */
+
+public int[] getVisualMap() { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is a convenience method that does not use a <code>Bidi</code> object.
+ * It is intended to be used for when an application has determined the levels
+ * of objects (character sequences) and just needs to have them reordered (L2).
+ * This is equivalent to using <code>getLogicalMap()</code> on a
+ * <code>Bidi</code> object.
+ *
+ * @param levels is an array of levels that have been determined by
+ *        the application.
+ *
+ * @return an array of <code>levels.length</code>
+ *        indexes which will reflect the reordering of the characters.<p>
+ *        The index map will result in
+ *        <code>indexMap[logicalIndex]==visualIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ */
+
+public static int[] reorderLogical(byte[] levels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is a convenience method that does not use a <code>Bidi</code> object.
+ * It is intended to be used for when an application has determined the levels
+ * of objects (character sequences) and just needs to have them reordered (L2).
+ * This is equivalent to using <code>getVisualMap()</code> on a
+ * <code>Bidi</code> object.
+ *
+ * @param levels is an array of levels that have been determined by
+ *        the application.
+ *
+ * @return an array of <code>levels.length</code>
+ *        indexes which will reflect the reordering of the characters.<p>
+ *        The index map will result in
+ *        <code>indexMap[visualIndex]==logicalIndex</code>, where
+ *        <code>indexMap</code> represents the returned array.
+ */
+
+public static int[] reorderVisual(byte[] levels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Invert an index map.
+ * The index mapping of the argument map is inverted and returned as
+ * an array of indexes that we will call the inverse map.
+ *
+ * @param srcMap is an array whose elements define the original mapping
+ * from a source array to a destination array.
+ * Some elements of the source array may have no mapping in the
+ * destination array. In that case, their value will be
+ * the special value <code>MAP_NOWHERE</code>.
+ * All elements must be &gt;=0 or equal to <code>MAP_NOWHERE</code>.
+ * Some elements in the source map may have a value greater than the
+ * srcMap.length if the destination array has more elements than the
+ * source array.
+ * There must be no duplicate indexes (two or more elements with the
+ * same value except <code>MAP_NOWHERE</code>).
+ *
+ * @return an array representing the inverse map.
+ *         This array has a number of elements equal to 1 + the highest
+ *         value in <code>srcMap</code>.
+ *         For elements of the result array which have no matching elements
+ *         in the source array, the corresponding elements in the inverse
+ *         map will receive a value equal to <code>MAP_NOWHERE</code>.
+ *         If element with index i in <code>srcMap</code> has a value k different
+ *         from <code>MAP_NOWHERE</code>, this means that element i of
+ *         the source array maps to element k in the destination array.
+ *         The inverse map will have value i in its k-th element.
+ *         For all elements of the destination array which do not map to
+ *         an element in the source array, the corresponding element in the
+ *         inverse map will have a value equal to <code>MAP_NOWHERE</code>.
+ *
+ * @see #MAP_NOWHERE
+ */
+
+public static int[] invertMap(int[] srcMap) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a Bidi object representing the bidi information on a line of text
+ * within the paragraph represented by the current Bidi. This call is not
+ * required if the entire paragraph fits on one line.
+ *
+ * @param lineStart the offset from the start of the paragraph to the start
+ *        of the line.
+ * @param lineLimit the offset from the start of the paragraph to the limit
+ *        of the line.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ * @throws java.lang.IllegalArgumentException if lineStart and lineLimit are not in the range
+ *         <code>0&lt;=lineStart&lt;lineLimit&lt;=getProcessedLength()</code>,
+ *         or if the specified line crosses a paragraph boundary
+ */
+
+public android.icu.text.Bidi createLineBidi(int lineStart, int lineLimit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the line is not left-to-right or right-to-left. This means
+ * it either has mixed runs of left-to-right and right-to-left text, or the
+ * base direction differs from the direction of the only run of text.
+ *
+ * @return true if the line is not left-to-right or right-to-left.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ */
+
+public boolean isMixed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the line is all left-to-right text and the base direction
+ * is left-to-right.
+ *
+ * @return true if the line is all left-to-right text and the base direction
+ *         is left-to-right.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ */
+
+public boolean isLeftToRight() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the line is all right-to-left text, and the base direction
+ * is right-to-left
+ *
+ * @return true if the line is all right-to-left text, and the base
+ *         direction is right-to-left
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code>
+ */
+
+public boolean isRightToLeft() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the base direction is left-to-right
+ *
+ * @return true if the base direction is left-to-right
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public boolean baseIsLeftToRight() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the base level (0 if left-to-right, 1 if right-to-left).
+ *
+ * @return the base level
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int getBaseLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of level runs.
+ *
+ * @return the number of level runs
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ */
+
+public int getRunCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the level of the nth logical run in this line.
+ *
+ * @param run the index of the run, between 0 and <code>countRuns()-1</code>
+ *
+ * @return the level of the run
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>run</code> is not in
+ *         the range <code>0&lt;=run&lt;countRuns()</code>
+ */
+
+public int getRunLevel(int run) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the index of the character at the start of the nth logical run in
+ * this line, as an offset from the start of the line.
+ *
+ * @param run the index of the run, between 0 and <code>countRuns()</code>
+ *
+ * @return the start of the run
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>run</code> is not in
+ *         the range <code>0&lt;=run&lt;countRuns()</code>
+ */
+
+public int getRunStart(int run) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the index of the character past the end of the nth logical run in
+ * this line, as an offset from the start of the line. For example, this
+ * will return the length of the line for the last run on the line.
+ *
+ * @param run the index of the run, between 0 and <code>countRuns()</code>
+ *
+ * @return the limit of the run
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ * @throws java.lang.IllegalArgumentException if <code>run</code> is not in
+ *         the range <code>0&lt;=run&lt;countRuns()</code>
+ */
+
+public int getRunLimit(int run) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the specified text requires bidi analysis. If this returns
+ * false, the text will display left-to-right. Clients can then avoid
+ * constructing a Bidi object. Text in the Arabic Presentation Forms area of
+ * Unicode is presumed to already be shaped and ordered for display, and so
+ * will not cause this method to return true.
+ *
+ * @param text the text containing the characters to test
+ * @param start the start of the range of characters to test
+ * @param limit the limit of the range of characters to test
+ *
+ * @return true if the range of characters requires bidi analysis
+ */
+
+public static boolean requiresBidi(char[] text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Reorder the objects in the array into visual order based on their levels.
+ * This is a utility method to use when you have a collection of objects
+ * representing runs of text in logical order, each run containing text at a
+ * single level. The elements at <code>index</code> from
+ * <code>objectStart</code> up to <code>objectStart + count</code> in the
+ * objects array will be reordered into visual order assuming
+ * each run of text has the level indicated by the corresponding element in
+ * the levels array (at <code>index - objectStart + levelStart</code>).
+ *
+ * @param levels an array representing the bidi level of each object
+ * @param levelStart the start position in the levels array
+ * @param objects the array of objects to be reordered into visual order
+ * @param objectStart the start position in the objects array
+ * @param count the number of objects to reorder
+ */
+
+public static void reorderVisually(byte[] levels, int levelStart, java.lang.Object[] objects, int objectStart, int count) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Take a <code>Bidi</code> object containing the reordering
+ * information for a piece of text (one or more paragraphs) set by
+ * <code>setPara()</code> or for a line of text set by <code>setLine()</code>
+ * and return a string containing the reordered text.
+ *
+ * <p>The text may have been aliased (only a reference was stored
+ * without copying the contents), thus it must not have been modified
+ * since the <code>setPara()</code> call.
+ *
+ * This method preserves the integrity of characters with multiple
+ * code units and (optionally) combining characters.
+ * Characters in RTL runs can be replaced by mirror-image characters
+ * in the returned string. Note that "real" mirroring has to be done in a
+ * rendering engine by glyph selection and that for many "mirrored"
+ * characters there are no Unicode characters as mirror-image equivalents.
+ * There are also options to insert or remove Bidi control
+ * characters; see the descriptions of the return value and the
+ * <code>options</code> parameter, and of the option bit flags.
+ *
+ * @param options A bit set of options for the reordering that control
+ *                how the reordered text is written.
+ *                The options include mirroring the characters on a code
+ *                point basis and inserting LRM characters, which is used
+ *                especially for transforming visually stored text
+ *                to logically stored text (although this is still an
+ *                imperfect implementation of an "inverse Bidi" algorithm
+ *                because it uses the "forward Bidi" algorithm at its core).
+ *                The available options are:
+ *                <code>DO_MIRRORING</code>,
+ *                <code>INSERT_LRM_FOR_NUMERIC</code>,
+ *                <code>KEEP_BASE_COMBINING</code>,
+ *                <code>OUTPUT_REVERSE</code>,
+ *                <code>REMOVE_BIDI_CONTROLS</code>,
+ *                <code>STREAMING</code>
+ *
+ * @return The reordered text.
+ *         If the <code>INSERT_LRM_FOR_NUMERIC</code> option is set, then
+ *         the length of the returned string could be as large as
+ *         <code>getLength()+2*countRuns()</code>.<br>
+ *         If the <code>REMOVE_BIDI_CONTROLS</code> option is set, then the
+ *         length of the returned string may be less than
+ *         <code>getLength()</code>.<br>
+ *         If none of these options is set, then the length of the returned
+ *         string will be exactly <code>getProcessedLength()</code>.
+ *
+ * @throws java.lang.IllegalStateException if this call is not preceded by a successful
+ *         call to <code>setPara</code> or <code>setLine</code>
+ *
+ * @see #DO_MIRRORING
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #KEEP_BASE_COMBINING
+ * @see #OUTPUT_REVERSE
+ * @see #REMOVE_BIDI_CONTROLS
+ * @see #OPTION_STREAMING
+ * @see #getProcessedLength
+ */
+
+public java.lang.String writeReordered(int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Reverse a Right-To-Left run of Unicode text.
+ *
+ * This method preserves the integrity of characters with multiple
+ * code units and (optionally) combining characters.
+ * Characters can be replaced by mirror-image characters
+ * in the destination buffer. Note that "real" mirroring has
+ * to be done in a rendering engine by glyph selection
+ * and that for many "mirrored" characters there are no
+ * Unicode characters as mirror-image equivalents.
+ * There are also options to insert or remove Bidi control
+ * characters.
+ *
+ * This method is the implementation for reversing RTL runs as part
+ * of <code>writeReordered()</code>. For detailed descriptions
+ * of the parameters, see there.
+ * Since no Bidi controls are inserted here, the output string length
+ * will never exceed <code>src.length()</code>.
+ *
+ * @see #writeReordered
+ *
+ * @param src The RTL run text.
+ *
+ * @param options A bit set of options for the reordering that control
+ *                how the reordered text is written.
+ *                See the <code>options</code> parameter in <code>writeReordered()</code>.
+ *
+ * @return The reordered text.
+ *         If the <code>REMOVE_BIDI_CONTROLS</code> option
+ *         is set, then the length of the returned string may be less than
+ *         <code>src.length()</code>. If this option is not set,
+ *         then the length of the returned string will be exactly
+ *         <code>src.length()</code>.
+ *
+ * @throws java.lang.IllegalArgumentException if <code>src</code> is null.
+ */
+
+public static java.lang.String writeReverse(java.lang.String src, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present, the base
+ * direction is left-to-right.
+ */
+
+public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT = 126; // 0x7e
+
+/**
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present, the base
+ * direction is right-to-left.
+ */
+
+public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = 127; // 0x7f
+
+/**
+ * Constant indicating base direction is left-to-right.
+ */
+
+public static final int DIRECTION_LEFT_TO_RIGHT = 0; // 0x0
+
+/**
+ * Constant indicating base direction is right-to-left.
+ */
+
+public static final int DIRECTION_RIGHT_TO_LEFT = 1; // 0x1
+
+/**
+ * option bit for writeReordered():
+ * replace characters with the "mirrored" property in RTL runs
+ * by their mirror-image mappings
+ *
+ * @see #writeReordered
+ */
+
+public static final short DO_MIRRORING = 2; // 0x2
+
+/**
+ * option bit for writeReordered():
+ * surround the run with LRMs if necessary;
+ * this is part of the approximate "inverse Bidi" algorithm
+ *
+ * <p>This option does not imply corresponding adjustment of the index
+ * mappings.
+ *
+ * @see #setInverse
+ * @see #writeReordered
+ */
+
+public static final short INSERT_LRM_FOR_NUMERIC = 4; // 0x4
+
+/**
+ * option bit for writeReordered():
+ * keep combining characters after their base characters in RTL runs
+ *
+ * @see #writeReordered
+ */
+
+public static final short KEEP_BASE_COMBINING = 1; // 0x1
+
+/** Paragraph level setting<p>
+ *
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present,
+ * then set the paragraph level to 0 (left-to-right).<p>
+ *
+ * If this value is used in conjunction with reordering modes
+ * <code>REORDER_INVERSE_LIKE_DIRECT</code> or
+ * <code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the text to reorder
+ * is assumed to be visual LTR, and the text after reordering is required
+ * to be the corresponding logical string with appropriate contextual
+ * direction. The direction of the result string will be RTL if either
+ * the rightmost or leftmost strong character of the source text is RTL
+ * or Arabic Letter, the direction will be LTR otherwise.<p>
+ *
+ * If reordering option <code>OPTION_INSERT_MARKS</code> is set, an RLM may
+ * be added at the beginning of the result string to ensure round trip
+ * (that the result string, when reordered back to visual, will produce
+ * the original source text).
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public static final byte LEVEL_DEFAULT_LTR = 126; // 0x7e
+
+/** Paragraph level setting<p>
+ *
+ * Constant indicating that the base direction depends on the first strong
+ * directional character in the text according to the Unicode Bidirectional
+ * Algorithm. If no strong directional character is present,
+ * then set the paragraph level to 1 (right-to-left).<p>
+ *
+ * If this value is used in conjunction with reordering modes
+ * <code>REORDER_INVERSE_LIKE_DIRECT</code> or
+ * <code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code>, the text to reorder
+ * is assumed to be visual LTR, and the text after reordering is required
+ * to be the corresponding logical string with appropriate contextual
+ * direction. The direction of the result string will be RTL if either
+ * the rightmost or leftmost strong character of the source text is RTL
+ * or Arabic Letter, or if the text contains no strong character;
+ * the direction will be LTR otherwise.<p>
+ *
+ * If reordering option <code>OPTION_INSERT_MARKS</code> is set, an RLM may
+ * be added at the beginning of the result string to ensure round trip
+ * (that the result string, when reordered back to visual, will produce
+ * the original source text).
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public static final byte LEVEL_DEFAULT_RTL = 127; // 0x7f
+
+/**
+ * Bit flag for level input.
+ * Overrides directional properties.
+ */
+
+public static final byte LEVEL_OVERRIDE = -128; // 0xffffff80
+
+/**
+ * Left-to-right text.
+ * <ul>
+ * <li>As return value for <code>getDirection()</code>, it means
+ *     that the source string contains no right-to-left characters, or
+ *     that the source string is empty and the paragraph level is even.
+ * <li>As return value for <code>getBaseDirection()</code>, it
+ *     means that the first strong character of the source string has
+ *     a left-to-right direction.
+ * </ul>
+ */
+
+public static final byte LTR = 0; // 0x0
+
+/**
+ * Special value which can be returned by the mapping methods when a
+ * logical index has no corresponding visual index or vice-versa. This may
+ * happen for the logical-to-visual mapping of a Bidi control when option
+ * <code>OPTION_REMOVE_CONTROLS</code> is
+ * specified. This can also happen for the visual-to-logical mapping of a
+ * Bidi mark (LRM or RLM) inserted by option
+ * <code>OPTION_INSERT_MARKS</code>.
+ * @see #getVisualIndex
+ * @see #getVisualMap
+ * @see #getLogicalIndex
+ * @see #getLogicalMap
+ * @see #OPTION_INSERT_MARKS
+ * @see #OPTION_REMOVE_CONTROLS
+ */
+
+public static final int MAP_NOWHERE = -1; // 0xffffffff
+
+/**
+ * Maximum explicit embedding level.
+ * Same as the max_depth value in the
+ * <a href="http://www.unicode.org/reports/tr9/#BD2">Unicode Bidirectional Algorithm</a>.
+ * (The maximum resolved level can be up to <code>MAX_EXPLICIT_LEVEL+1</code>).
+ */
+
+public static final byte MAX_EXPLICIT_LEVEL = 125; // 0x7d
+
+/**
+ * Mixed-directional text.
+ * <p>As return value for <code>getDirection()</code>, it means
+ *    that the source string contains both left-to-right and
+ *    right-to-left characters.
+ */
+
+public static final byte MIXED = 2; // 0x2
+
+/**
+ * No strongly directional text.
+ * <p>As return value for <code>getBaseDirection()</code>, it means
+ *    that the source string is missing or empty, or contains neither
+ *    left-to-right nor right-to-left characters.
+ */
+
+public static final byte NEUTRAL = 3; // 0x3
+
+/**
+ * Option value for <code>setReorderingOptions</code>:
+ * disable all the options which can be set with this method
+ * @see #setReorderingOptions
+ */
+
+public static final int OPTION_DEFAULT = 0; // 0x0
+
+/**
+ * Option bit for <code>setReorderingOptions</code>:
+ * insert Bidi marks (LRM or RLM) when needed to ensure correct result of
+ * a reordering to a Logical order
+ *
+ * <p>This option must be set or reset before calling
+ * <code>setPara</code>.
+ *
+ * <p>This option is significant only with reordering modes which generate
+ * a result with Logical order, specifically.
+ * <ul>
+ *   <li><code>REORDER_RUNS_ONLY</code></li>
+ *   <li><code>REORDER_INVERSE_NUMBERS_AS_L</code></li>
+ *   <li><code>REORDER_INVERSE_LIKE_DIRECT</code></li>
+ *   <li><code>REORDER_INVERSE_FOR_NUMBERS_SPECIAL</code></li>
+ * </ul>
+ *
+ * <p>If this option is set in conjunction with reordering mode
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code> or with calling
+ * <code>setInverse(true)</code>, it implies option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to method
+ * <code>writeReordered()</code>.
+ *
+ * <p>For other reordering modes, a minimum number of LRM or RLM characters
+ * will be added to the source text after reordering it so as to ensure
+ * round trip, i.e. when applying the inverse reordering mode on the
+ * resulting logical text with removal of Bidi marks
+ * (option <code>OPTION_REMOVE_CONTROLS</code> set before calling
+ * <code>setPara()</code> or option
+ * <code>REMOVE_BIDI_CONTROLS</code> in
+ * <code>writeReordered</code>), the result will be identical to the
+ * source text in the first transformation.
+ *
+ * <p>This option will be ignored if specified together with option
+ * <code>OPTION_REMOVE_CONTROLS</code>. It inhibits option
+ * <code>REMOVE_BIDI_CONTROLS</code> in calls to method
+ * <code>writeReordered()</code> and it implies option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to method
+ * <code>writeReordered()</code> if the reordering mode is
+ * <code>REORDER_INVERSE_NUMBERS_AS_L</code>.
+ *
+ * @see #setReorderingMode
+ * @see #setReorderingOptions
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #REMOVE_BIDI_CONTROLS
+ * @see #OPTION_REMOVE_CONTROLS
+ * @see #REORDER_RUNS_ONLY
+ * @see #REORDER_INVERSE_NUMBERS_AS_L
+ * @see #REORDER_INVERSE_LIKE_DIRECT
+ * @see #REORDER_INVERSE_FOR_NUMBERS_SPECIAL
+ */
+
+public static final int OPTION_INSERT_MARKS = 1; // 0x1
+
+/**
+ * Option bit for <code>setReorderingOptions</code>:
+ * remove Bidi control characters
+ *
+ * <p>This option must be set or reset before calling
+ * <code>setPara</code>.
+ *
+ * <p>This option nullifies option
+ * <code>OPTION_INSERT_MARKS</code>. It inhibits option
+ * <code>INSERT_LRM_FOR_NUMERIC</code> in calls to method
+ * <code>writeReordered()</code> and it implies option
+ * <code>REMOVE_BIDI_CONTROLS</code> in calls to that method.
+ *
+ * @see #setReorderingMode
+ * @see #setReorderingOptions
+ * @see #OPTION_INSERT_MARKS
+ * @see #INSERT_LRM_FOR_NUMERIC
+ * @see #REMOVE_BIDI_CONTROLS
+ */
+
+public static final int OPTION_REMOVE_CONTROLS = 2; // 0x2
+
+/**
+ * Option bit for <code>setReorderingOptions</code>:
+ * process the output as part of a stream to be continued
+ *
+ * <p>This option must be set or reset before calling
+ * <code>setPara</code>.
+ *
+ * <p>This option specifies that the caller is interested in processing
+ * large text object in parts. The results of the successive calls are
+ * expected to be concatenated by the caller. Only the call for the last
+ * part will have this option bit off.
+ *
+ * <p>When this option bit is on, <code>setPara()</code> may process
+ * less than the full source text in order to truncate the text at a
+ * meaningful boundary. The caller should call
+ * <code>getProcessedLength()</code> immediately after calling
+ * <code>setPara()</code> in order to determine how much of the source
+ * text has been processed. Source text beyond that length should be
+ * resubmitted in following calls to <code>setPara</code>. The
+ * processed length may be less than the length of the source text if a
+ * character preceding the last character of the source text constitutes a
+ * reasonable boundary (like a block separator) for text to be continued.<br>
+ * If the last character of the source text constitutes a reasonable
+ * boundary, the whole text will be processed at once.<br>
+ * If nowhere in the source text there exists
+ * such a reasonable boundary, the processed length will be zero.<br>
+ * The caller should check for such an occurrence and do one of the following:
+ * <ul><li>submit a larger amount of text with a better chance to include
+ *         a reasonable boundary.</li>
+ *     <li>resubmit the same text after turning off option
+ *         <code>OPTION_STREAMING</code>.</li></ul>
+ * In all cases, this option should be turned off before processing the last
+ * part of the text.
+ *
+ * <p>When the <code>OPTION_STREAMING</code> option is used, it is
+ * recommended to call <code>orderParagraphsLTR(true)</code> before calling
+ * <code>setPara()</code> so that later paragraphs may be concatenated to
+ * previous paragraphs on the right.
+ *
+ * @see #setReorderingMode
+ * @see #setReorderingOptions
+ * @see #getProcessedLength
+ */
+
+public static final int OPTION_STREAMING = 4; // 0x4
+
+/**
+ * option bit for writeReordered():
+ * write the output in reverse order
+ *
+ * <p>This has the same effect as calling <code>writeReordered()</code>
+ * first without this option, and then calling
+ * <code>writeReverse()</code> without mirroring.
+ * Doing this in the same step is faster and avoids a temporary buffer.
+ * An example for using this option is output to a character terminal that
+ * is designed for RTL scripts and stores text in reverse order.
+ *
+ * @see #writeReordered
+ */
+
+public static final short OUTPUT_REVERSE = 16; // 0x10
+
+/**
+ * option bit for writeReordered():
+ * remove Bidi control characters
+ * (this does not affect INSERT_LRM_FOR_NUMERIC)
+ *
+ * <p>This option does not imply corresponding adjustment of the index
+ * mappings.
+ *
+ * @see #writeReordered
+ * @see #INSERT_LRM_FOR_NUMERIC
+ */
+
+public static final short REMOVE_BIDI_CONTROLS = 8; // 0x8
+
+/** Reordering mode: Regular Logical to Visual Bidi algorithm according to Unicode.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_DEFAULT = 0; // 0x0
+
+/** Reordering mode: Logical to Visual algorithm grouping numbers with
+ * adjacent R characters (reversible algorithm).
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_GROUP_NUMBERS_WITH_R = 2; // 0x2
+
+/** Reordering mode: Inverse Bidi (Visual to Logical) algorithm for the
+ * <code>REORDER_NUMBERS_SPECIAL</code> Bidi algorithm.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_INVERSE_FOR_NUMBERS_SPECIAL = 6; // 0x6
+
+/** Reordering mode: Visual to Logical algorithm equivalent to the regular
+ * Logical to Visual algorithm.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_INVERSE_LIKE_DIRECT = 5; // 0x5
+
+/** Reordering mode: Visual to Logical algorithm which handles numbers
+ * like L (same algorithm as selected by <code>setInverse(true)</code>.
+ * @see #setInverse
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_INVERSE_NUMBERS_AS_L = 4; // 0x4
+
+/** Reordering mode: Logical to Visual algorithm which handles numbers in
+ * a way which mimicks the behavior of Windows XP.
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_NUMBERS_SPECIAL = 1; // 0x1
+
+/** Reordering mode: Reorder runs only to transform a Logical LTR string
+ * to the logical RTL string with the same display, or vice-versa.<br>
+ * If this mode is set together with option
+ * <code>OPTION_INSERT_MARKS</code>, some Bidi controls in the source
+ * text may be removed and other controls may be added to produce the
+ * minimum combination which has the required display.
+ * @see #OPTION_INSERT_MARKS
+ * @see #setReorderingMode
+ */
+
+public static final short REORDER_RUNS_ONLY = 3; // 0x3
+
+/**
+ * Right-to-left text.
+ * <ul>
+ * <li>As return value for <code>getDirection()</code>, it means
+ *     that the source string contains no left-to-right characters, or
+ *     that the source string is empty and the paragraph level is odd.
+ * <li>As return value for <code>getBaseDirection()</code>, it
+ *     means that the first strong character of the source string has
+ *     a right-to-left direction.
+ * </ul>
+ */
+
+public static final byte RTL = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BidiClassifier.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BidiClassifier.java
new file mode 100644
index 0000000..b8fa07f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BidiClassifier.java
@@ -0,0 +1,82 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2000-2009, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+/* Written by Simon Montagu, Matitiahu Allouche
+ * (ported from C code written by Markus W. Scherer)
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * Overrides default Bidi class values with custom ones.
+ *
+ * <p>The override mechanism requires to define a subclass of
+ * <code>BidiClassifier</code> which overrides the <code>classifier</code>
+ * method to assign customized Bidi classes.</p>
+ *
+ * <p>This may be useful for assigning Bidi classes to PUA characters, or
+ * for special application needs. For instance, an application may want to
+ * handle all spaces like L or R characters (according to the base direction)
+ * when creating the visual ordering of logical lines which are part of a report
+ * organized in columns: there should not be interaction between adjacent
+ * cells.</p>
+ *
+ * <p>To start using this customized
+ * classifier with a Bidi object, it must be specified by calling the
+ * <code>Bidi.setCustomClassifier</code> method; after that, the method
+ * <code>classify</code> of the custom <code>BidiClassifier</code> will be
+ * called by the UBA implementation any time the class of a character is
+ * to be determined.</p>
+ *
+ * @see android.icu.text.Bidi#setCustomClassifier
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BidiClassifier {
+
+/**
+ * @param context Context for this classifier instance.
+ *                May be null.
+ */
+
+public BidiClassifier(java.lang.Object context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets classifier context, which can be used either by a caller or
+ * callee for various purposes.
+ *
+ * @param context Context for this classifier instance.
+ *                May be null.
+ */
+
+public void setContext(java.lang.Object context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current classifier context.
+ */
+
+public java.lang.Object getContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets customized Bidi class for the code point <code>c</code>.
+ * <p>
+ * Default implementation, to be overridden.
+ *
+ * @param c Code point to be classified.
+ * @return An integer representing directional property / Bidi class for the
+ *         given code point <code>c</code>, or UCharacter.getIntPropertyMaxValue(UProperty.BIDI_CLASS)+1
+ *         to signify that there is no need to override the standard Bidi class for
+ *         the given code point.
+ */
+
+public int classify(int c) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BidiRun.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BidiRun.java
new file mode 100644
index 0000000..3168b69
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BidiRun.java
@@ -0,0 +1,92 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 2001-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+/* Written by Simon Montagu, Matitiahu Allouche
+ * (ported from C code written by Markus W. Scherer)
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * A BidiRun represents a sequence of characters at the same embedding level.
+ * The Bidi algorithm decomposes a piece of text into sequences of characters
+ * at the same embedding level, each such sequence is called a "run".
+ *
+ * <p>A BidiRun represents such a run by storing its essential properties,
+ * but does not duplicate the characters which form the run.
+ *
+ * <p>The &quot;limit&quot; of the run is the position just after the
+ * last character, i.e., one more than that position.
+ *
+ * <p>This class has no public constructor, and its members cannot be
+ * modified by users.
+ *
+ * @see android.icu.text.Bidi
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BidiRun {
+
+BidiRun() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the first logical position of the run in the source text
+ */
+
+public int getStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get position of one character after the end of the run in the source text
+ */
+
+public int getLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get length of run
+ */
+
+public int getLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get level of run
+ */
+
+public byte getEmbeddingLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Check if run level is odd
+ * @return true if the embedding level of this run is odd, i.e. it is a
+ *  right-to-left run.
+ */
+
+public boolean isOddRun() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Check if run level is even
+ * @return true if the embedding level of this run is even, i.e. it is a
+ *  left-to-right run.
+ */
+
+public boolean isEvenRun() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get direction of run
+ */
+
+public byte getDirection() { throw new RuntimeException("Stub!"); }
+
+/**
+ * String to display run
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BreakIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BreakIterator.java
new file mode 100644
index 0000000..cc71cff
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/BreakIterator.java
@@ -0,0 +1,705 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import java.text.CharacterIterator;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.BreakIterator}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>A class that locates boundaries in text.  This class defines a protocol for
+ * objects that break up a piece of natural-language text according to a set
+ * of criteria.  Instances or subclasses of BreakIterator can be provided, for
+ * example, to break a piece of text into words, sentences, or logical characters
+ * according to the conventions of some language or group of languages.
+ *
+ * We provide five built-in types of BreakIterator:
+ * <ul><li>getTitleInstance() returns a BreakIterator that locates boundaries
+ * between title breaks.
+ * <li>getSentenceInstance() returns a BreakIterator that locates boundaries
+ * between sentences.  This is useful for triple-click selection, for example.
+ * <li>getWordInstance() returns a BreakIterator that locates boundaries between
+ * words.  This is useful for double-click selection or "find whole words" searches.
+ * This type of BreakIterator makes sure there is a boundary position at the
+ * beginning and end of each legal word.  (Numbers count as words, too.)  Whitespace
+ * and punctuation are kept separate from real words.
+ * <li>getLineInstance() returns a BreakIterator that locates positions where it is
+ * legal for a text editor to wrap lines.  This is similar to word breaking, but
+ * not the same: punctuation and whitespace are generally kept with words (you don't
+ * want a line to start with whitespace, for example), and some special characters
+ * can force a position to be considered a line-break position or prevent a position
+ * from being a line-break position.
+ * <li>getCharacterInstance() returns a BreakIterator that locates boundaries between
+ * logical characters.  Because of the structure of the Unicode encoding, a logical
+ * character may be stored internally as more than one Unicode code point.  (A with an
+ * umlaut may be stored as an a followed by a separate combining umlaut character,
+ * for example, but the user still thinks of it as one character.)  This iterator allows
+ * various processes (especially text editors) to treat as characters the units of text
+ * that a user would think of as characters, rather than the units of text that the
+ * computer sees as "characters".</ul>
+ * The text boundary positions are found according to the rules
+ * described in Unicode Standard Annex #29, Text Boundaries, and
+ * Unicode Standard Annex #14, Line Breaking Properties.  These
+ * are available at http://www.unicode.org/reports/tr14/ and
+ * http://www.unicode.org/reports/tr29/.
+ * <p>
+ * BreakIterator's interface follows an "iterator" model (hence the name), meaning it
+ * has a concept of a "current position" and methods like first(), last(), next(),
+ * and previous() that update the current position.  All BreakIterators uphold the
+ * following invariants:
+ * <ul><li>The beginning and end of the text are always treated as boundary positions.
+ * <li>The current position of the iterator is always a boundary position (random-
+ * access methods move the iterator to the nearest boundary position before or
+ * after the specified position, not _to_ the specified position).
+ * <li>DONE is used as a flag to indicate when iteration has stopped.  DONE is only
+ * returned when the current position is the end of the text and the user calls next(),
+ * or when the current position is the beginning of the text and the user calls
+ * previous().
+ * <li>Break positions are numbered by the positions of the characters that follow
+ * them.  Thus, under normal circumstances, the position before the first character
+ * is 0, the position after the first character is 1, and the position after the
+ * last character is 1 plus the length of the string.
+ * <li>The client can change the position of an iterator, or the text it analyzes,
+ * at will, but cannot change the behavior.  If the user wants different behavior, he
+ * must instantiate a new iterator.</ul>
+ *
+ * BreakIterator accesses the text it analyzes through a CharacterIterator, which makes
+ * it possible to use BreakIterator to analyze text in any text-storage vehicle that
+ * provides a CharacterIterator interface.
+ *
+ * <b>Note:</b>  Some types of BreakIterator can take a long time to create, and
+ * instances of BreakIterator are not currently cached by the system.  For
+ * optimal performance, keep instances of BreakIterator around as long as makes
+ * sense.  For example, when word-wrapping a document, don't create and destroy a
+ * new BreakIterator for each line.  Create one break iterator for the whole document
+ * (or whatever stretch of text you're wrapping) and use it to do the whole job of
+ * wrapping the text.
+ *
+ * <P>
+ * <strong>Examples</strong>:<P>
+ * Creating and using text boundaries
+ * <blockquote>
+ * <pre>
+ * public static void main(String args[]) {
+ *      if (args.length == 1) {
+ *          String stringToExamine = args[0];
+ *          //print each word in order
+ *          BreakIterator boundary = BreakIterator.getWordInstance();
+ *          boundary.setText(stringToExamine);
+ *          printEachForward(boundary, stringToExamine);
+ *          //print each sentence in reverse order
+ *          boundary = BreakIterator.getSentenceInstance(Locale.US);
+ *          boundary.setText(stringToExamine);
+ *          printEachBackward(boundary, stringToExamine);
+ *          printFirst(boundary, stringToExamine);
+ *          printLast(boundary, stringToExamine);
+ *      }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print each element in order
+ * <blockquote>
+ * <pre>
+ * public static void printEachForward(BreakIterator boundary, String source) {
+ *     int start = boundary.first();
+ *     for (int end = boundary.next();
+ *          end != BreakIterator.DONE;
+ *          start = end, end = boundary.next()) {
+ *          System.out.println(source.substring(start,end));
+ *     }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print each element in reverse order
+ * <blockquote>
+ * <pre>
+ * public static void printEachBackward(BreakIterator boundary, String source) {
+ *     int end = boundary.last();
+ *     for (int start = boundary.previous();
+ *          start != BreakIterator.DONE;
+ *          end = start, start = boundary.previous()) {
+ *         System.out.println(source.substring(start,end));
+ *     }
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print first element
+ * <blockquote>
+ * <pre>
+ * public static void printFirst(BreakIterator boundary, String source) {
+ *     int start = boundary.first();
+ *     int end = boundary.next();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print last element
+ * <blockquote>
+ * <pre>
+ * public static void printLast(BreakIterator boundary, String source) {
+ *     int end = boundary.last();
+ *     int start = boundary.previous();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Print the element at a specified position
+ * <blockquote>
+ * <pre>
+ * public static void printAt(BreakIterator boundary, int pos, String source) {
+ *     int end = boundary.following(pos);
+ *     int start = boundary.previous();
+ *     System.out.println(source.substring(start,end));
+ * }
+ * </pre>
+ * </blockquote>
+ *
+ * Find the next word
+ * <blockquote>
+ * <pre>
+ * public static int nextWordStartAfter(int pos, String text) {
+ *     BreakIterator wb = BreakIterator.getWordInstance();
+ *     wb.setText(text);
+ *     int wordStart = wb.following(pos);
+ *     for (;;) {
+ *         int wordLimit = wb.next();
+ *         if (wordLimit == BreakIterator.DONE) {
+ *             return BreakIterator.DONE;
+ *         }
+ *         int wordStatus = wb.getRuleStatus();
+ *         if (wordStatus != BreakIterator.WORD_NONE) {
+ *             return wordStart;
+ *         }
+ *         wordStart = wordLimit;
+ *      }
+ * }
+ * </pre>
+ * The iterator returned by {@link #getWordInstance} is unique in that
+ * the break positions it returns don't represent both the start and end of the
+ * thing being iterated over.  That is, a sentence-break iterator returns breaks
+ * that each represent the end of one sentence and the beginning of the next.
+ * With the word-break iterator, the characters between two boundaries might be a
+ * word, or they might be the punctuation or whitespace between two words.  The
+ * above code uses {@link #getRuleStatus} to identify and ignore boundaries associated
+ * with punctuation or other non-word characters.
+ * </blockquote>
+ *
+ * @see java.text.CharacterIterator
+ *
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class BreakIterator implements java.lang.Cloneable {
+
+/**
+ * Default constructor.  There is no state that is carried by this abstract
+ * base class.
+ */
+
+protected BreakIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone method.  Creates another BreakIterator with the same behavior and
+ * current state as this one.
+ * @return The clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the iterator to the first boundary position.  This is always the beginning
+ * index of the text this iterator iterates over.  For example, if
+ * the iterator iterates over a whole string, this function will
+ * always return 0.
+ * @return The character offset of the beginning of the stretch of text
+ * being broken.
+ */
+
+public abstract int first();
+
+/**
+ * Set the iterator to the last boundary position.  This is always the "past-the-end"
+ * index of the text this iterator iterates over.  For example, if the
+ * iterator iterates over a whole string (call it "text"), this function
+ * will always return text.length().
+ * @return The character offset of the end of the stretch of text
+ * being broken.
+ */
+
+public abstract int last();
+
+/**
+ * Move the iterator by the specified number of steps in the text.
+ * A positive number moves the iterator forward; a negative number
+ * moves the iterator backwards. If this causes the iterator
+ * to move off either end of the text, this function returns DONE;
+ * otherwise, this function returns the position of the appropriate
+ * boundary.  Calling this function is equivalent to calling next() or
+ * previous() n times.
+ * @param n The number of boundaries to advance over (if positive, moves
+ * forward; if negative, moves backwards).
+ * @return The position of the boundary n boundaries from the current
+ * iteration position, or DONE if moving n boundaries causes the iterator
+ * to advance off either end of the text.
+ */
+
+public abstract int next(int n);
+
+/**
+ * Advances the iterator forward one boundary.  The current iteration
+ * position is updated to point to the next boundary position after the
+ * current position, and this is also the value that is returned.  If
+ * the current position is equal to the value returned by last(), or to
+ * DONE, this function returns DONE and sets the current position to
+ * DONE.
+ * @return The position of the first boundary position following the
+ * iteration position.
+ */
+
+public abstract int next();
+
+/**
+ * Move the iterator backward one boundary.  The current iteration
+ * position is updated to point to the last boundary position before
+ * the current position, and this is also the value that is returned.  If
+ * the current position is equal to the value returned by first(), or to
+ * DONE, this function returns DONE and sets the current position to
+ * DONE.
+ * @return The position of the last boundary position preceding the
+ * iteration position.
+ */
+
+public abstract int previous();
+
+/**
+ * Sets the iterator's current iteration position to be the first
+ * boundary position following the specified position.  (Whether the
+ * specified position is itself a boundary position or not doesn't
+ * matter-- this function always moves the iteration position to the
+ * first boundary after the specified position.)  If the specified
+ * position is the past-the-end position, returns DONE.
+ * @param offset The character position to start searching from.
+ * @return The position of the first boundary position following
+ * "offset" (whether or not "offset" itself is a boundary position),
+ * or DONE if "offset" is the past-the-end offset.
+ */
+
+public abstract int following(int offset);
+
+/**
+ * Sets the iterator's current iteration position to be the last
+ * boundary position preceding the specified position.  (Whether the
+ * specified position is itself a boundary position or not doesn't
+ * matter-- this function always moves the iteration position to the
+ * last boundary before the specified position.)  If the specified
+ * position is the starting position, returns DONE.
+ * @param offset The character position to start searching from.
+ * @return The position of the last boundary position preceding
+ * "offset" (whether of not "offset" itself is a boundary position),
+ * or DONE if "offset" is the starting offset of the iterator.
+ */
+
+public int preceding(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the specified position is a boundary position.  If the
+ * function returns true, the current iteration position is set to the
+ * specified position; if the function returns false, the current
+ * iteration position is set as though following() had been called.
+ * @param offset the offset to check.
+ * @return True if "offset" is a boundary position.
+ */
+
+public boolean isBoundary(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the iterator's current position.
+ * @return The iterator's current position.
+ */
+
+public abstract int current();
+
+/**
+ * For RuleBasedBreakIterators, return the status tag from the
+ * break rule that determined the boundary at the current iteration position.
+ * <p>
+ * For break iterator types that do not support a rule status,
+ * a default value of 0 is returned.
+ * <p>
+ * @return The status from the break rule that determined the boundary
+ * at the current iteration position.
+ */
+
+public int getRuleStatus() { throw new RuntimeException("Stub!"); }
+
+/**
+ * For RuleBasedBreakIterators, get the status (tag) values from the break rule(s)
+ * that determined the the boundary at the current iteration position.
+ * <p>
+ * For break iterator types that do not support rule status,
+ * no values are returned.
+ * <p>
+ * If the size  of the output array is insufficient to hold the data,
+ *  the output will be truncated to the available length.  No exception
+ *  will be thrown.
+ *
+ * @param fillInArray an array to be filled in with the status values.
+ * @return          The number of rule status values from rules that determined
+ *                  the the boundary at the current iteration position.
+ *                  In the event that the array is too small, the return value
+ *                  is the total number of status values that were available,
+ *                  not the reduced number that were actually returned.
+ */
+
+public int getRuleStatusVec(int[] fillInArray) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a CharacterIterator over the text being analyzed.
+ * <p>
+ * <b><i>Caution:</i></b>The state of the returned CharacterIterator
+ * must not be modified in any way while the BreakIterator is still in use.
+ * Doing so will lead to undefined behavior of the BreakIterator.
+ * Clone the returned CharacterIterator first and work with that.
+ * <p>
+ * The returned CharacterIterator is a reference
+ * to the <b>actual iterator being used</b> by the BreakIterator.
+ * No guarantees are made about the current position
+ * of this iterator when it is returned; it may differ from the
+ * BreakIterators current position.  If you need to move that
+ * position to examine the text, clone this function's return value first.
+ *
+ * @return A CharacterIterator over the text being analyzed.
+ */
+
+public abstract java.text.CharacterIterator getText();
+
+/**
+ * Sets the iterator to analyze a new piece of text.  The new
+ * piece of text is passed in as a String, and the current
+ * iteration position is reset to the beginning of the string.
+ * (The old text is dropped.)
+ * @param newText A String containing the text to analyze with
+ * this BreakIterator.
+ */
+
+public void setText(java.lang.String newText) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the iterator to analyze a new piece of text.  The new
+ * piece of text is passed in as a CharSequence, and the current
+ * iteration position is reset to the beginning of the text.
+ * (The old text is dropped.)
+ * <p>
+ * The text underlying the CharSequence must not be be modified while
+ * the BreakIterator holds a references to it. (As could possibly occur
+ * with a StringBuilder, for example).
+ * @param newText A CharSequence containing the text to analyze with
+ * this BreakIterator.
+ */
+
+public void setText(java.lang.CharSequence newText) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the iterator to analyze a new piece of text. This function resets
+ * the current iteration position to the beginning of the text.
+ * (The old iterator is dropped.)
+ * <p>
+ * <b><i>Caution:</i></b> The supplied CharacterIterator is used
+ * directly by the BreakIterator, and must not be altered in any
+ * way by code outside of the BreakIterator.
+ * Doing so will lead to undefined behavior of the BreakIterator.
+ *
+ * @param newText A CharacterIterator referring to the text
+ * to analyze with this BreakIterator (the iterator's current
+ * position is ignored, but its other state is significant).
+ */
+
+public abstract void setText(java.text.CharacterIterator newText);
+
+/**
+ * Returns a new instance of BreakIterator that locates word boundaries.
+ * This function assumes that the text being analyzed is in the default
+ * locale's language.
+ * @return An instance of BreakIterator that locates word boundaries.
+ */
+
+public static android.icu.text.BreakIterator getWordInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates word boundaries.
+ * @param where A locale specifying the language of the text to be
+ * analyzed.
+ * @return An instance of BreakIterator that locates word boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getWordInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates word boundaries.
+ * @param where A locale specifying the language of the text to be
+ * analyzed.
+ * @return An instance of BreakIterator that locates word boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getWordInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates legal line-
+ * wrapping positions.  This function assumes the text being broken
+ * is in the default locale's language.
+ * @return A new instance of BreakIterator that locates legal
+ * line-wrapping positions.
+ */
+
+public static android.icu.text.BreakIterator getLineInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates legal line-
+ * wrapping positions.
+ * @param where A Locale specifying the language of the text being broken.
+ * @return A new instance of BreakIterator that locates legal
+ * line-wrapping positions.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getLineInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates legal line-
+ * wrapping positions.
+ * @param where A Locale specifying the language of the text being broken.
+ * @return A new instance of BreakIterator that locates legal
+ * line-wrapping positions.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getLineInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates logical-character
+ * boundaries.  This function assumes that the text being analyzed is
+ * in the default locale's language.
+ * @return A new instance of BreakIterator that locates logical-character
+ * boundaries.
+ */
+
+public static android.icu.text.BreakIterator getCharacterInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getCharacterInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates logical-character
+ * boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getCharacterInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates sentence boundaries.
+ * This function assumes the text being analyzed is in the default locale's
+ * language.
+ * @return A new instance of BreakIterator that locates sentence boundaries.
+ */
+
+public static android.icu.text.BreakIterator getSentenceInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a new instance of BreakIterator that locates sentence boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates sentence boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getSentenceInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates sentence boundaries.
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates sentence boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ */
+
+public static android.icu.text.BreakIterator getSentenceInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates title boundaries.
+ * This function assumes the text being analyzed is in the default locale's
+ * language. The iterator returned locates title boundaries as described for
+ * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
+ * please use a word boundary iterator. {@link #getWordInstance}
+ * @return A new instance of BreakIterator that locates title boundaries.
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated
+public static android.icu.text.BreakIterator getTitleInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates title boundaries.
+ * The iterator returned locates title boundaries as described for
+ * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
+ * please use Word Boundary iterator.{@link #getWordInstance}
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates title boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated
+public static android.icu.text.BreakIterator getTitleInstance(java.util.Locale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a new instance of BreakIterator that locates title boundaries.
+ * The iterator returned locates title boundaries as described for
+ * Unicode 3.2 only. For Unicode 4.0 and above title boundary iteration,
+ * please use Word Boundary iterator.{@link #getWordInstance}
+ * @param where A Locale specifying the language of the text being analyzed.
+ * @return A new instance of BreakIterator that locates title boundaries.
+ * @throws java.lang.NullPointerException if <code>where</code> is null.
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated
+public static android.icu.text.BreakIterator getTitleInstance(android.icu.util.ULocale where) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of locales for which BreakIterators can be used.
+ * @return An array of Locales.  All of the locales in the array can
+ * be used when creating a BreakIterator.
+ */
+
+public static synchronized java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * DONE is returned by previous() and next() after all valid
+ * boundaries have been returned.
+ */
+
+public static final int DONE = -1; // 0xffffffff
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_CHARACTER = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_LINE = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_SENTENCE = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong>
+ * @see #getTitleInstance
+ * @see #getWordInstance
+ * @deprecated ICU 64 Use {@link #getWordInstance} instead.
+ */
+
+@Deprecated public static final int KIND_TITLE = 4; // 0x4
+
+/**
+ * <strong>[icu]</strong>
+ */
+
+public static final int KIND_WORD = 1; // 0x1
+
+/**
+ * Tag value for words containing ideographic characters, lower limit
+ */
+
+public static final int WORD_IDEO = 400; // 0x190
+
+/**
+ * Tag value for words containing ideographic characters, upper limit
+ */
+
+public static final int WORD_IDEO_LIMIT = 500; // 0x1f4
+
+/**
+ * Tag value for words containing kana characters, lower limit
+ */
+
+public static final int WORD_KANA = 300; // 0x12c
+
+/**
+ * Tag value for words containing kana characters, upper limit
+ */
+
+public static final int WORD_KANA_LIMIT = 400; // 0x190
+
+/**
+ * Tag value for words that contain letters, excluding
+ * hiragana, katakana or ideographic characters, lower limit.
+ */
+
+public static final int WORD_LETTER = 200; // 0xc8
+
+/**
+ * Tag value for words containing letters, upper limit
+ */
+
+public static final int WORD_LETTER_LIMIT = 300; // 0x12c
+
+/**
+ * Tag value for "words" that do not fit into any of other categories.
+ * Includes spaces and most punctuation.
+ */
+
+public static final int WORD_NONE = 0; // 0x0
+
+/**
+ * Upper bound for tags for uncategorized words.
+ */
+
+public static final int WORD_NONE_LIMIT = 100; // 0x64
+
+/**
+ * Tag value for words that appear to be numbers, lower limit.
+ */
+
+public static final int WORD_NUMBER = 100; // 0x64
+
+/**
+ * Tag value for words that appear to be numbers, upper limit.
+ */
+
+public static final int WORD_NUMBER_LIMIT = 200; // 0xc8
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CaseMap.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CaseMap.java
new file mode 100644
index 0000000..a8da15b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CaseMap.java
@@ -0,0 +1,380 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import android.icu.lang.UCharacter;
+
+/**
+ * Low-level case mapping options and methods. Immutable.
+ * "Setters" return instances with the union of the current and new options set.
+ *
+ * This class is not intended for public subclassing.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class CaseMap {
+
+private CaseMap() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Lowercasing object with default options.
+ */
+
+public static android.icu.text.CaseMap.Lower toLower() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Uppercasing object with default options.
+ */
+
+public static android.icu.text.CaseMap.Upper toUpper() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Titlecasing object with default options.
+ */
+
+public static android.icu.text.CaseMap.Title toTitle() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return Case folding object with default options.
+ */
+
+public static android.icu.text.CaseMap.Fold fold() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * omits unchanged text when case-mapping with {@link android.icu.text.Edits Edits}.
+ *
+ * @return an options object with this option.
+ */
+
+public abstract android.icu.text.CaseMap omitUnchangedText();
+/**
+ * Case folding options and methods. Immutable.
+ *
+ * @see #fold()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Fold extends android.icu.text.CaseMap {
+
+private Fold() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Fold omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * handles dotted I and dotless i appropriately for Turkic languages (tr, az).
+ *
+ * <p>Uses the Unicode CaseFolding.txt mappings marked with 'T' that
+ * are to be excluded for default mappings and
+ * included for the Turkic-specific mappings.
+ *
+ * @return an options object with this option.
+ * @see android.icu.lang.UCharacter#FOLD_CASE_EXCLUDE_SPECIAL_I
+ */
+
+public android.icu.text.CaseMap.Fold turkic() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Case-folds a string.
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Case-folding is locale-independent and not context-sensitive,
+ * but there is an option for whether to include or exclude mappings for dotted I
+ * and dotless i that are marked with 'T' in CaseFolding.txt.
+ *
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#foldCase(String, int)
+ */
+
+public java.lang.String apply(java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Case-folds a string and optionally records edits (see {@link #omitUnchangedText}).
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Case-folding is locale-independent and not context-sensitive,
+ * but there is an option for whether to include or exclude mappings for dotted I
+ * and dotless i that are marked with 'T' in CaseFolding.txt.
+ *
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#foldCase(String, int)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Lowercasing options and methods. Immutable.
+ *
+ * @see #toLower()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Lower extends android.icu.text.CaseMap {
+
+private Lower() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Lower omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Lowercases a string.
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#toLowerCase(Locale, String)
+ */
+
+public java.lang.String apply(java.util.Locale locale, java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Lowercases a string and optionally records edits (see {@link #omitUnchangedText}).
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#toLowerCase(Locale, String)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.util.Locale locale, java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Titlecasing options and methods. Immutable.
+ *
+ * @see #toTitle()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Title extends android.icu.text.CaseMap {
+
+private Title() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * titlecases the string as a whole rather than each word.
+ * (Titlecases only the character at index 0, possibly adjusted.)
+ *
+ * <p>It is an error to specify multiple titlecasing iterator options together,
+ * including both an option and an explicit BreakIterator.
+ *
+ * @return an options object with this option.
+ * @see #adjustToCased()
+ */
+
+public android.icu.text.CaseMap.Title wholeString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * titlecases sentences rather than words.
+ * (Titlecases only the first character of each sentence, possibly adjusted.)
+ *
+ * <p>It is an error to specify multiple titlecasing iterator options together,
+ * including both an option and an explicit BreakIterator.
+ *
+ * @return an options object with this option.
+ * @see #adjustToCased()
+ */
+
+public android.icu.text.CaseMap.Title sentences() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Title omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * does not lowercase non-initial parts of words when titlecasing.
+ *
+ * <p>By default, titlecasing will titlecase the character at each
+ * (possibly adjusted) BreakIterator index and
+ * lowercase all other characters up to the next iterator index.
+ * With this option, the other characters will not be modified.
+ *
+ * @return an options object with this option.
+ * @see android.icu.lang.UCharacter#TITLECASE_NO_LOWERCASE
+ * @see #adjustToCased()
+ */
+
+public android.icu.text.CaseMap.Title noLowercase() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * does not adjust the titlecasing BreakIterator indexes;
+ * titlecases exactly the characters at breaks from the iterator.
+ *
+ * <p>By default, titlecasing will take each break iterator index,
+ * adjust it to the next relevant character (see {@link #adjustToCased()}),
+ * and titlecase that one.
+ *
+ * <p>Other characters are lowercased.
+ *
+ * @return an options object with this option.
+ * @see android.icu.lang.UCharacter#TITLECASE_NO_BREAK_ADJUSTMENT
+ */
+
+public android.icu.text.CaseMap.Title noBreakAdjustment() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance that behaves like this one but
+ * adjusts each titlecasing BreakIterator index to the next cased character.
+ * (See the Unicode Standard, chapter 3, Default Case Conversion, R3 toTitlecase(X).)
+ *
+ * <p>This used to be the default index adjustment in ICU.
+ * Since ICU 60, the default index adjustment is to the next character that is
+ * a letter, number, symbol, or private use code point.
+ * (Uncased modifier letters are skipped.)
+ * The difference in behavior is small for word titlecasing,
+ * but the new adjustment is much better for whole-string and sentence titlecasing:
+ * It yields "49ers" and "??(abc)?" instead of "49Ers" and "??(Abc)?".
+ *
+ * <p>It is an error to specify multiple titlecasing adjustment options together.
+ *
+ * @return an options object with this option.
+ * @see #noBreakAdjustment()
+ */
+
+public android.icu.text.CaseMap.Title adjustToCased() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Titlecases a string.
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with options bits.)
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param iter      A break iterator to find the first characters of words that are to be titlecased.
+ *                  It is set to the source string (setText())
+ *                  and used one or more times for iteration (first() and next()).
+ *                  If null, then a word break iterator for the locale is used
+ *                  (or something equivalent).
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#toUpperCase(Locale, String)
+ */
+
+public java.lang.String apply(java.util.Locale locale, android.icu.text.BreakIterator iter, java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Titlecases a string and optionally records edits (see {@link #omitUnchangedText}).
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * <p>Titlecasing uses a break iterator to find the first characters of words
+ * that are to be titlecased. It titlecases those characters and lowercases
+ * all others. (This can be modified with options bits.)
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param iter      A break iterator to find the first characters of words that are to be titlecased.
+ *                  It is set to the source string (setText())
+ *                  and used one or more times for iteration (first() and next()).
+ *                  If null, then a word break iterator for the locale is used
+ *                  (or something equivalent).
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#toTitleCase(Locale, String, BreakIterator, int)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.util.Locale locale, android.icu.text.BreakIterator iter, java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Uppercasing options and methods. Immutable.
+ *
+ * @see #toUpper()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Upper extends android.icu.text.CaseMap {
+
+private Upper() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.CaseMap.Upper omitUnchangedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Uppercases a string.
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @return the result string.
+ *
+ * @see android.icu.lang.UCharacter#toUpperCase(Locale, String)
+ */
+
+public java.lang.String apply(java.util.Locale locale, java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Uppercases a string and optionally records edits (see {@link #omitUnchangedText}).
+ * Casing is locale-dependent and context-sensitive.
+ * The result may be longer or shorter than the original.
+ *
+ * @param locale    The locale ID. Can be null for {@link java.util.Locale#getDefault Locale#getDefault}.
+ *                  (See {@link android.icu.util.ULocale#toLocale ULocale#toLocale}.)
+ * @param src       The original string.
+ * @param dest      A buffer for the result string. Must not be null.
+ * @param edits     Records edits for index mapping, working with styled text,
+ *                  and getting only changes (if any).
+ *                  This function calls edits.reset() first. edits can be null.
+ * @return dest with the result string (or only changes) appended.
+ *
+ * @see android.icu.lang.UCharacter#toUpperCase(Locale, String)
+ */
+
+public <A extends java.lang.Appendable> A apply(java.util.Locale locale, java.lang.CharSequence src, A dest, android.icu.text.Edits edits) { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CollationElementIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CollationElementIterator.java
new file mode 100644
index 0000000..bae7436
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CollationElementIterator.java
@@ -0,0 +1,316 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+package android.icu.text;
+
+
+/**
+ * <code>CollationElementIterator</code> is an iterator created by
+ * a RuleBasedCollator to walk through a string. The return result of
+ * each iteration is a 32-bit collation element (CE) that defines the
+ * ordering priority of the next character or sequence of characters
+ * in the source string.
+ *
+ * <p>For illustration, consider the following in Slovak and in traditional Spanish collation:
+ * <blockquote>
+ * <pre>
+ * "ca" -&gt; the first collation element is CE('c') and the second
+ *         collation element is CE('a').
+ * "cha" -&gt; the first collation element is CE('ch') and the second
+ *          collation element is CE('a').
+ * </pre>
+ * </blockquote>
+ * And in German phonebook collation,
+ * <blockquote>
+ * <pre>
+ * Since the character '&#230;' is a composed character of 'a' and 'e', the
+ * iterator returns two collation elements for the single character '&#230;'
+ *
+ * "&#230;b" -&gt; the first collation element is collation_element('a'), the
+ *              second collation element is collation_element('e'), and the
+ *              third collation element is collation_element('b').
+ * </pre>
+ * </blockquote>
+ *
+ * <p>For collation ordering comparison, the collation element results
+ * can not be compared simply by using basic arithmetic operators,
+ * e.g. &lt;, == or &gt;, further processing has to be done. Details
+ * can be found in the ICU
+ * <a href="https://unicode-org.github.io/icu/userguide/collation/architecture">
+ * User Guide</a>. An example of using the CollationElementIterator
+ * for collation ordering comparison is the class
+ * {@link android.icu.text.StringSearch}.
+ *
+ * <p>To construct a CollationElementIterator object, users
+ * call the method getCollationElementIterator() on a
+ * RuleBasedCollator that defines the desired sorting order.
+ *
+ * <p> Example:
+ * <blockquote>
+ * <pre>
+ *  String testString = "This is a test";
+ *  RuleBasedCollator rbc = new RuleBasedCollator("&amp;a&lt;b");
+ *  CollationElementIterator iterator = rbc.getCollationElementIterator(testString);
+ *  int primaryOrder = iterator.IGNORABLE;
+ *  while (primaryOrder != iterator.NULLORDER) {
+ *      int order = iterator.next();
+ *      if (order != iterator.IGNORABLE &amp;&amp;
+ *          order != iterator.NULLORDER) {
+ *          // order is valid, not ignorable and we have not passed the end
+ *          // of the iteration, we do something
+ *          primaryOrder = CollationElementIterator.primaryOrder(order);
+ *          System.out.println("Next primary order 0x" +
+ *                             Integer.toHexString(primaryOrder));
+ *      }
+ *  }
+ * </pre>
+ * </blockquote>
+ * <p>
+ * The method next() returns the collation order of the next character based on
+ * the comparison level of the collator. The method previous() returns the
+ * collation order of the previous character based on the comparison level of
+ * the collator. The Collation Element Iterator moves only in one direction
+ * between calls to reset(), setOffset(), or setText(). That is, next() and
+ * previous() can not be inter-used. Whenever previous() is to be called after
+ * next() or vice versa, reset(), setOffset() or setText() has to be called first
+ * to reset the status, shifting current position to either the end or the start of
+ * the string (reset() or setText()), or the specified position (setOffset()).
+ * Hence at the next call of next() or previous(), the first or last collation order,
+ * or collation order at the specified position will be returned. If a change of
+ * direction is done without one of these calls, the result is undefined.
+ * <p>
+ * This class is not subclassable.
+ * @see android.icu.text.Collator
+ * @see android.icu.text.RuleBasedCollator
+ * @see android.icu.text.StringSearch
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class CollationElementIterator {
+
+CollationElementIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the primary order of the specified collation element,
+ * i.e. the first 16 bits.  This value is unsigned.
+ * @param ce the collation element
+ * @return the element's 16 bits primary order.
+ */
+
+public static int primaryOrder(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the secondary order of the specified collation element,
+ * i.e. the 16th to 23th bits, inclusive.  This value is unsigned.
+ * @param ce the collation element
+ * @return the element's 8 bits secondary order
+ */
+
+public static int secondaryOrder(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the tertiary order of the specified collation element, i.e. the last
+ * 8 bits.  This value is unsigned.
+ * @param ce the collation element
+ * @return the element's 8 bits tertiary order
+ */
+
+public static int tertiaryOrder(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character offset in the source string
+ * corresponding to the next collation element. I.e., getOffset()
+ * returns the position in the source string corresponding to the
+ * collation element that will be returned by the next call to
+ * next() or previous(). This value could be any of:
+ * <ul>
+ * <li> The index of the <b>first</b> character corresponding to
+ * the next collation element. (This means that if
+ * <code>setOffset(offset)</code> sets the index in the middle of
+ * a contraction, <code>getOffset()</code> returns the index of
+ * the first character in the contraction, which may not be equal
+ * to the original offset that was set. Hence calling getOffset()
+ * immediately after setOffset(offset) does not guarantee that the
+ * original offset set will be returned.)
+ * <li> If normalization is on, the index of the <b>immediate</b>
+ * subsequent character, or composite character with the first
+ * character, having a combining class of 0.
+ * <li> The length of the source string, if iteration has reached
+ * the end.
+ *</ul>
+ *
+ * @return The character offset in the source string corresponding to the
+ *         collation element that will be returned by the next call to
+ *         next() or previous().
+ */
+
+public int getOffset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the next collation element in the source string.
+ *
+ * <p>This iterator iterates over a sequence of collation elements
+ * that were built from the string. Because there isn't
+ * necessarily a one-to-one mapping from characters to collation
+ * elements, this doesn't mean the same thing as "return the
+ * collation element [or ordering priority] of the next character
+ * in the string".
+ *
+ * <p>This function returns the collation element that the
+ * iterator is currently pointing to, and then updates the
+ * internal pointer to point to the next element.
+ *
+ * @return the next collation element or NULLORDER if the end of the
+ *         iteration has been reached.
+ */
+
+public int next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the previous collation element in the source string.
+ *
+ * <p>This iterator iterates over a sequence of collation elements
+ * that were built from the string. Because there isn't
+ * necessarily a one-to-one mapping from characters to collation
+ * elements, this doesn't mean the same thing as "return the
+ * collation element [or ordering priority] of the previous
+ * character in the string".
+ *
+ * <p>This function updates the iterator's internal pointer to
+ * point to the collation element preceding the one it's currently
+ * pointing to and then returns that element, while next() returns
+ * the current element and then updates the pointer.
+ *
+ * @return the previous collation element, or NULLORDER when the start of
+ *             the iteration has been reached.
+ */
+
+public int previous() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the cursor to the beginning of the string. The next
+ * call to next() or previous() will return the first and last
+ * collation element in the string, respectively.
+ *
+ * <p>If the RuleBasedCollator used by this iterator has had its
+ * attributes changed, calling reset() will reinitialize the
+ * iterator to use the new attributes.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the iterator to point to the collation element
+ * corresponding to the character at the specified offset. The
+ * value returned by the next call to next() will be the collation
+ * element corresponding to the characters at offset.
+ *
+ * <p>If offset is in the middle of a contracting character
+ * sequence, the iterator is adjusted to the start of the
+ * contracting sequence. This means that getOffset() is not
+ * guaranteed to return the same value set by this method.
+ *
+ * <p>If the decomposition mode is on, and offset is in the middle
+ * of a decomposible range of source text, the iterator may not
+ * return a correct result for the next forwards or backwards
+ * iteration.  The user must ensure that the offset is not in the
+ * middle of a decomposible range.
+ *
+ * @param newOffset the character offset into the original source string to
+ *        set. Note that this is not an offset into the corresponding
+ *        sequence of collation elements.
+ */
+
+public void setOffset(int newOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a new source string for iteration, and reset the offset
+ * to the beginning of the text.
+ *
+ * @param source the new source string for iteration.
+ */
+
+public void setText(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a new source string iterator for iteration, and reset the
+ * offset to the beginning of the text.
+ *
+ * <p>The source iterator's integrity will be preserved since a new copy
+ * will be created for use.
+ * @param source the new source string iterator for iteration.
+ */
+
+public void setText(android.icu.text.UCharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a new source string iterator for iteration, and reset the
+ * offset to the beginning of the text.
+ *
+ * @param source the new source string iterator for iteration.
+ */
+
+public void setText(java.text.CharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum length of any expansion sequence that ends with
+ * the specified collation element. If there is no expansion with this
+ * collation element as the last element, returns 1.
+ *
+ * @param ce a collation element returned by previous() or next().
+ * @return the maximum length of any expansion sequence ending
+ *         with the specified collation element.
+ */
+
+public int getMaxExpansion(int ce) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tests that argument object is equals to this CollationElementIterator.
+ * Iterators are equal if the objects uses the same RuleBasedCollator,
+ * the same source text and have the same current position in iteration.
+ * @param that object to test if it is equals to this
+ *             CollationElementIterator
+ */
+
+public boolean equals(java.lang.Object that) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Mock implementation of hashCode(). This implementation always returns a constant
+ * value. When Java assertion is enabled, this method triggers an assertion failure.
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * This constant is returned by the iterator in the methods
+ * next() and previous() when a collation element result is to be
+ * ignored.
+ *
+ * <p>See class documentation for an example of use.
+ * @see #next
+ * @see #previous */
+
+public static final int IGNORABLE = 0; // 0x0
+
+/**
+ * This constant is returned by the iterator in the methods
+ * next() and previous() when the end or the beginning of the
+ * source string has been reached, and there are no more valid
+ * collation elements to return.
+ *
+ * <p>See class documentation for an example of use.
+ * @see #next
+ * @see #previous */
+
+public static final int NULLORDER = -1; // 0xffffffff
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CollationKey.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CollationKey.java
new file mode 100644
index 0000000..40368e2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CollationKey.java
@@ -0,0 +1,335 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+package android.icu.text;
+
+
+/**
+ * A <code>CollationKey</code> represents a <code>String</code>
+ * under the rules of a specific <code>Collator</code>
+ * object. Comparing two <code>CollationKey</code>s returns the
+ * relative order of the <code>String</code>s they represent.
+ *
+ * <p>Since the rule set of <code>Collator</code>s can differ, the
+ * sort orders of the same string under two different
+ * <code>Collator</code>s might differ.  Hence comparing
+ * <code>CollationKey</code>s generated from different
+ * <code>Collator</code>s can give incorrect results.
+ 
+ * <p>Both the method
+ * <code>CollationKey.compareTo(CollationKey)</code> and the method
+ * <code>Collator.compare(String, String)</code> compare two strings
+ * and returns their relative order.  The performance characteristics
+ * of these two approaches can differ.
+ * Note that collation keys are often less efficient than simply doing comparison.
+ * For more details, see the ICU User Guide.
+ *
+ * <p>During the construction of a <code>CollationKey</code>, the
+ * entire source string is examined and processed into a series of
+ * bits terminated by a null, that are stored in the <code>CollationKey</code>.
+ * When <code>CollationKey.compareTo(CollationKey)</code> executes, it
+ * performs bitwise comparison on the bit sequences.  This can incurs
+ * startup cost when creating the <code>CollationKey</code>, but once
+ * the key is created, binary comparisons are fast.  This approach is
+ * recommended when the same strings are to be compared over and over
+ * again.
+ *
+ * <p>On the other hand, implementations of
+ * <code>Collator.compare(String, String)</code> can examine and
+ * process the strings only until the first characters differing in
+ * order.  This approach is recommended if the strings are to be
+ * compared only once.</p>
+ *
+ * <p>More information about the composition of the bit sequence can
+ * be found in the
+ * <a href="http://www.icu-project.org/userguide/Collate_ServiceArchitecture.html">
+ * user guide</a>.</p>
+ *
+ * <p>The following example shows how <code>CollationKey</code>s can be used
+ * to sort a list of <code>String</code>s.</p>
+ * <blockquote>
+ * <pre>
+ * // Create an array of CollationKeys for the Strings to be sorted.
+ * Collator myCollator = Collator.getInstance();
+ * CollationKey[] keys = new CollationKey[3];
+ * keys[0] = myCollator.getCollationKey("Tom");
+ * keys[1] = myCollator.getCollationKey("Dick");
+ * keys[2] = myCollator.getCollationKey("Harry");
+ * sort( keys );
+ * <br>
+ * //...
+ * <br>
+ * // Inside body of sort routine, compare keys this way
+ * if( keys[i].compareTo( keys[j] ) &gt; 0 )
+ *    // swap keys[i] and keys[j]
+ * <br>
+ * //...
+ * <br>
+ * // Finally, when we've returned from sort.
+ * System.out.println( keys[0].getSourceString() );
+ * System.out.println( keys[1].getSourceString() );
+ * System.out.println( keys[2].getSourceString() );
+ * </pre>
+ * </blockquote>
+ * <p>
+ * This class is not subclassable
+ * @see android.icu.text.Collator
+ * @see android.icu.text.RuleBasedCollator
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class CollationKey implements java.lang.Comparable<android.icu.text.CollationKey> {
+
+/**
+ * CollationKey constructor.
+ * This constructor is given public access, unlike the JDK version, to
+ * allow access to users extending the Collator class. See
+ * {@link android.icu.text.Collator#getCollationKey(java.lang.String) Collator#getCollationKey(String)}.
+ * @param source string this CollationKey is to represent
+ * @param key array of bytes that represent the collation order of argument
+ *            source terminated by a null
+ * @see android.icu.text.Collator
+ */
+
+public CollationKey(java.lang.String source, byte[] key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the source string that this CollationKey represents.
+ * @return source string that this CollationKey represents
+ */
+
+public java.lang.String getSourceString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Duplicates and returns the value of this CollationKey as a sequence
+ * of big-endian bytes terminated by a null.
+ *
+ * <p>If two CollationKeys can be legitimately compared, then one can
+ * compare the byte arrays of each to obtain the same result, e.g.
+ * <pre>
+ * byte key1[] = collationkey1.toByteArray();
+ * byte key2[] = collationkey2.toByteArray();
+ * int key, targetkey;
+ * int i = 0;
+ * do {
+ *       key = key1[i] &amp; 0xFF;
+ *     targetkey = key2[i] &amp; 0xFF;
+ *     if (key &lt; targetkey) {
+ *         System.out.println("String 1 is less than string 2");
+ *         return;
+ *     }
+ *     if (targetkey &lt; key) {
+ *         System.out.println("String 1 is more than string 2");
+ *     }
+ *     i ++;
+ * } while (key != 0 &amp;&amp; targetKey != 0);
+ *
+ * System.out.println("Strings are equal.");
+ * </pre>
+ *
+ * @return CollationKey value in a sequence of big-endian byte bytes
+ *         terminated by a null.
+ */
+
+public byte[] toByteArray() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this CollationKey to another CollationKey.  The
+ * collation rules of the Collator that created this key are
+ * applied.
+ *
+ * <p><strong>Note:</strong> Comparison between CollationKeys
+ * created by different Collators might return incorrect
+ * results.  See class documentation.
+ *
+ * @param target target CollationKey
+ * @return an integer value.  If the value is less than zero this CollationKey
+ *         is less than than target, if the value is zero they are equal, and
+ *         if the value is greater than zero this CollationKey is greater
+ *         than target.
+ * @exception java.lang.NullPointerException is thrown if argument is null.
+ * @see android.icu.text.Collator#compare(String, String)
+ */
+
+public int compareTo(android.icu.text.CollationKey target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this CollationKey and the specified Object for
+ * equality.  The collation rules of the Collator that created
+ * this key are applied.
+ *
+ * <p>See note in compareTo(CollationKey) for warnings about
+ * possible incorrect results.
+ *
+ * @param target the object to compare to.
+ * @return true if the two keys compare as equal, false otherwise.
+ * @see #compareTo(CollationKey)
+ * @exception java.lang.ClassCastException is thrown when the argument is not
+ *            a CollationKey.  NullPointerException is thrown when the argument
+ *            is null.
+ */
+
+public boolean equals(java.lang.Object target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this CollationKey and the argument target CollationKey for
+ * equality.
+ * The collation
+ * rules of the Collator object which created these objects are applied.
+ * <p>
+ * See note in compareTo(CollationKey) for warnings of incorrect results
+ *
+ * @param target the CollationKey to compare to.
+ * @return true if two objects are equal, false otherwise.
+ * @exception java.lang.NullPointerException is thrown when the argument is null.
+ */
+
+public boolean equals(android.icu.text.CollationKey target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a hash code for this CollationKey. The hash value is calculated
+ * on the key itself, not the String from which the key was created. Thus
+ * if x and y are CollationKeys, then x.hashCode(x) == y.hashCode()
+ * if x.equals(y) is true. This allows language-sensitive comparison in a
+ * hash table.
+ *
+ * @return the hash value.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Produces a bound for the sort order of a given collation key and a
+ * strength level. This API does not attempt to find a bound for the
+ * CollationKey String representation, hence null will be returned in its
+ * place.
+ * <p>
+ * Resulting bounds can be used to produce a range of strings that are
+ * between upper and lower bounds. For example, if bounds are produced
+ * for a sortkey of string "smith", strings between upper and lower
+ * bounds with primary strength would include "Smith", "SMITH", "sMiTh".
+ * <p>
+ * There are two upper bounds that can be produced. If BoundMode.UPPER
+ * is produced, strings matched would be as above. However, if a bound
+ * is produced using BoundMode.UPPER_LONG is used, the above example will
+ * also match "Smithsonian" and similar.
+ * <p>
+ * For more on usage, see example in test procedure
+ * <a href="http://source.icu-project.org/repos/icu/icu4j/trunk/src/com/ibm/icu/dev/test/collator/CollationAPITest.java">
+ * src/com/ibm/icu/dev/test/collator/CollationAPITest/TestBounds.
+ * </a>
+ * <p>
+ * Collation keys produced may be compared using the <TT>compare</TT> API.
+ * @param boundType Mode of bound required. It can be BoundMode.LOWER, which
+ *              produces a lower inclusive bound, BoundMode.UPPER, that
+ *              produces upper bound that matches strings of the same
+ *              length or BoundMode.UPPER_LONG that matches strings that
+ *              have the same starting substring as the source string.
+ * @param noOfLevels Strength levels required in the resulting bound
+ *                 (for most uses, the recommended value is PRIMARY). This
+ *                 strength should be less than the maximum strength of
+ *                 this CollationKey.
+ *                 See users guide for explanation on the strength levels a
+ *                 collation key can have.
+ * @return the result bounded CollationKey with a valid sort order but
+ *         a null String representation.
+ * @exception java.lang.IllegalArgumentException thrown when the strength level
+ *            requested is higher than or equal to the strength in this
+ *            CollationKey.
+ *            In the case of an Exception, information
+ *            about the maximum strength to use will be returned in the
+ *            Exception. The user can then call getBound() again with the
+ *            appropriate strength.
+ * @see android.icu.text.CollationKey
+ * @see android.icu.text.CollationKey.BoundMode
+ * @see android.icu.text.Collator#PRIMARY
+ * @see android.icu.text.Collator#SECONDARY
+ * @see android.icu.text.Collator#TERTIARY
+ * @see android.icu.text.Collator#QUATERNARY
+ * @see android.icu.text.Collator#IDENTICAL
+ */
+
+public android.icu.text.CollationKey getBound(int boundType, int noOfLevels) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Merges this CollationKey with another.
+ * The levels are merged with their corresponding counterparts
+ * (primaries with primaries, secondaries with secondaries etc.).
+ * Between the values from the same level a separator is inserted.
+ *
+ * <p>This is useful, for example, for combining sort keys from first and last names
+ * to sort such pairs.
+ * See http://www.unicode.org/reports/tr10/#Merging_Sort_Keys
+ *
+ * <p>The recommended way to achieve "merged" sorting is by
+ * concatenating strings with U+FFFE between them.
+ * The concatenation has the same sort order as the merged sort keys,
+ * but merge(getSortKey(str1), getSortKey(str2)) may differ from getSortKey(str1 + '\uFFFE' + str2).
+ * Using strings with U+FFFE may yield shorter sort keys.
+ *
+ * <p>For details about Sort Key Features see
+ * https://unicode-org.github.io/icu/userguide/collation/api#sort-key-features
+ *
+ * <p>It is possible to merge multiple sort keys by consecutively merging
+ * another one with the intermediate result.
+ *
+ * <p>Only the sort key bytes of the CollationKeys are merged.
+ * This API does not attempt to merge the
+ * String representations of the CollationKeys, hence null will be returned
+ * as the result's String representation.
+ *
+ * <p>Example (uncompressed):
+ * <pre>191B1D 01 050505 01 910505 00
+ * 1F2123 01 050505 01 910505 00</pre>
+ * will be merged as
+ * <pre>191B1D 02 1F2123 01 050505 02 050505 01 910505 02 910505 00</pre>
+ *
+ * @param source CollationKey to merge with
+ * @return a CollationKey that contains the valid merged sort keys
+ *         with a null String representation,
+ *         i.e. <tt>new CollationKey(null, merged_sort_keys)</tt>
+ * @exception java.lang.IllegalArgumentException thrown if source CollationKey
+ *            argument is null or of 0 length.
+ */
+
+public android.icu.text.CollationKey merge(android.icu.text.CollationKey source) { throw new RuntimeException("Stub!"); }
+/**
+ * Options that used in the API CollationKey.getBound() for getting a
+ * CollationKey based on the bound mode requested.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class BoundMode {
+
+private BoundMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Lower bound
+ */
+
+public static final int LOWER = 0; // 0x0
+
+/**
+ * Upper bound that will match strings of exact size
+ */
+
+public static final int UPPER = 1; // 0x1
+
+/**
+ * Upper bound that will match all the strings that have the same
+ * initial substring as the given string
+ */
+
+public static final int UPPER_LONG = 2; // 0x2
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Collator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Collator.java
new file mode 100644
index 0000000..3e4adce
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Collator.java
@@ -0,0 +1,832 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+*******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and
+* others. All Rights Reserved.
+*******************************************************************************
+*/
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Freezable;
+import android.icu.lang.UScript;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.Collator}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>Collator performs locale-sensitive string comparison. A concrete
+ * subclass, RuleBasedCollator, allows customization of the collation
+ * ordering by the use of rule sets.
+ *
+ * <p>A Collator is thread-safe only when frozen. See {@link #isFrozen()} and {@link android.icu.util.Freezable Freezable}.
+ *
+ * <p>Following the <a href=http://www.unicode.org>Unicode
+ * Consortium</a>'s specifications for the
+ * <a href="http://www.unicode.org/unicode/reports/tr10/">Unicode Collation
+ * Algorithm (UCA)</a>, there are 5 different levels of strength used
+ * in comparisons:
+ *
+ * <ul>
+ * <li>PRIMARY strength: Typically, this is used to denote differences between
+ *     base characters (for example, "a" &lt; "b").
+ *     It is the strongest difference. For example, dictionaries are divided
+ *     into different sections by base character.
+ * <li>SECONDARY strength: Accents in the characters are considered secondary
+ *     differences (for example, "as" &lt; "&agrave;s" &lt; "at"). Other
+ *     differences
+ *     between letters can also be considered secondary differences, depending
+ *     on the language. A secondary difference is ignored when there is a
+ *     primary difference anywhere in the strings.
+ * <li>TERTIARY strength: Upper and lower case differences in characters are
+ *     distinguished at tertiary strength (for example, "ao" &lt; "Ao" &lt;
+ *     "a&ograve;"). In addition, a variant of a letter differs from the base
+ *     form on the tertiary strength (such as "A" and "?"). Another
+ *     example is the
+ *     difference between large and small Kana. A tertiary difference is ignored
+ *     when there is a primary or secondary difference anywhere in the strings.
+ * <li>QUATERNARY strength: When punctuation is ignored
+ *     (see <a href="https://unicode-org.github.io/icu/userguide/collation/concepts#ignoring-punctuation">
+ *     Ignoring Punctuations in the User Guide</a>) at PRIMARY to TERTIARY
+ *     strength, an additional strength level can
+ *     be used to distinguish words with and without punctuation (for example,
+ *     "ab" &lt; "a-b" &lt; "aB").
+ *     This difference is ignored when there is a PRIMARY, SECONDARY or TERTIARY
+ *     difference. The QUATERNARY strength should only be used if ignoring
+ *     punctuation is required.
+ * <li>IDENTICAL strength:
+ *     When all other strengths are equal, the IDENTICAL strength is used as a
+ *     tiebreaker. The Unicode code point values of the NFD form of each string
+ *     are compared, just in case there is no difference.
+ *     For example, Hebrew cantellation marks are only distinguished at this
+ *     strength. This strength should be used sparingly, as only code point
+ *     value differences between two strings is an extremely rare occurrence.
+ *     Using this strength substantially decreases the performance for both
+ *     comparison and collation key generation APIs. This strength also
+ *     increases the size of the collation key.
+ * </ul>
+ *
+ * Unlike the JDK, ICU4J's Collator deals only with 2 decomposition modes,
+ * the canonical decomposition mode and one that does not use any decomposition.
+ * The compatibility decomposition mode, java.text.Collator.FULL_DECOMPOSITION
+ * is not supported here. If the canonical
+ * decomposition mode is set, the Collator handles un-normalized text properly,
+ * producing the same results as if the text were normalized in NFD. If
+ * canonical decomposition is turned off, it is the user's responsibility to
+ * ensure that all text is already in the appropriate form before performing
+ * a comparison or before getting a CollationKey.
+ *
+ * <p>For more information about the collation service see the
+ * <a href="https://unicode-org.github.io/icu/userguide/collation">User Guide</a>.
+ *
+ * <p>Examples of use
+ * <pre>
+ * // Get the Collator for US English and set its strength to PRIMARY
+ * Collator usCollator = Collator.getInstance(Locale.US);
+ * usCollator.setStrength(Collator.PRIMARY);
+ * if (usCollator.compare("abc", "ABC") == 0) {
+ *     System.out.println("Strings are equivalent");
+ * }
+ *
+ * The following example shows how to compare two strings using the
+ * Collator for the default locale.
+ *
+ * // Compare two strings in the default locale
+ * Collator myCollator = Collator.getInstance();
+ * myCollator.setDecomposition(NO_DECOMPOSITION);
+ * if (myCollator.compare("&agrave;&#92;u0325", "a&#92;u0325&#768;") != 0) {
+ *     System.out.println("&agrave;&#92;u0325 is not equals to a&#92;u0325&#768; without decomposition");
+ *     myCollator.setDecomposition(CANONICAL_DECOMPOSITION);
+ *     if (myCollator.compare("&agrave;&#92;u0325", "a&#92;u0325&#768;") != 0) {
+ *         System.out.println("Error: &agrave;&#92;u0325 should be equals to a&#92;u0325&#768; with decomposition");
+ *     }
+ *     else {
+ *         System.out.println("&agrave;&#92;u0325 is equals to a&#92;u0325&#768; with decomposition");
+ *     }
+ * }
+ * else {
+ *     System.out.println("Error: &agrave;&#92;u0325 should be not equals to a&#92;u0325&#768; without decomposition");
+ * }
+ * </pre>
+ *
+ * @see android.icu.text.RuleBasedCollator
+ * @see android.icu.text.CollationKey
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Collator implements java.util.Comparator<java.lang.Object>, android.icu.util.Freezable<android.icu.text.Collator>, java.lang.Cloneable {
+
+/**
+ * Empty default constructor to make javadocs happy
+ */
+
+protected Collator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the equality of two Collator objects. Collator objects are equal if they have the same
+ * collation (sorting &amp; searching) behavior.
+ *
+ * <p>The base class checks for null and for equal types.
+ * Subclasses should override.
+ *
+ * @param obj the Collator to compare to.
+ * @return true if this Collator has exactly the same collation behavior as obj, false otherwise.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generates a hash code for this Collator object.
+ *
+ * <p>The implementation exists just for consistency with {@link #equals(java.lang.Object)}
+ * implementation in this class and does not generate a useful hash code.
+ * Subclasses should override this implementation.
+ *
+ * @return a hash code value.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Collator's strength attribute. The strength attribute
+ * determines the minimum level of difference considered significant
+ * during comparison.
+ *
+ * <p>The base class method does nothing. Subclasses should override it if appropriate.
+ *
+ * <p>See the Collator class description for an example of use.
+ * @param newStrength the new strength value.
+ * @see #getStrength
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ * @throws java.lang.IllegalArgumentException if the new strength value is not valid.
+ */
+
+public void setStrength(int newStrength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decomposition mode of this Collator.  Setting this
+ * decomposition attribute with CANONICAL_DECOMPOSITION allows the
+ * Collator to handle un-normalized text properly, producing the
+ * same results as if the text were normalized. If
+ * NO_DECOMPOSITION is set, it is the user's responsibility to
+ * insure that all text is already in the appropriate form before
+ * a comparison or before getting a CollationKey. Adjusting
+ * decomposition mode allows the user to select between faster and
+ * more complete collation behavior.
+ *
+ * <p>Since a great many of the world's languages do not require
+ * text normalization, most locales set NO_DECOMPOSITION as the
+ * default decomposition mode.
+ *
+ * <p>The base class method does nothing. Subclasses should override it if appropriate.
+ *
+ * <p>See getDecomposition for a description of decomposition
+ * mode.
+ *
+ * @param decomposition the new decomposition mode
+ * @see #getDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ * @throws java.lang.IllegalArgumentException If the given value is not a valid
+ *            decomposition mode.
+ */
+
+public void setDecomposition(int decomposition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the reordering codes for this collator.
+ * Collation reordering allows scripts and some other groups of characters
+ * to be moved relative to each other. This reordering is done on top of
+ * the DUCET/CLDR standard collation order. Reordering can specify groups to be placed
+ * at the start and/or the end of the collation order. These groups are specified using
+ * UScript codes and {@link android.icu.text.Collator.ReorderCodes Collator.ReorderCodes} entries.
+ *
+ * <p>By default, reordering codes specified for the start of the order are placed in the
+ * order given after several special non-script blocks. These special groups of characters
+ * are space, punctuation, symbol, currency, and digit. These special groups are represented with
+ * {@link android.icu.text.Collator.ReorderCodes Collator.ReorderCodes} entries. Script groups can be intermingled with
+ * these special non-script groups if those special groups are explicitly specified in the reordering.
+ *
+ * <p>The special code {@link android.icu.text.Collator.ReorderCodes#OTHERS OTHERS}
+ * stands for any script that is not explicitly
+ * mentioned in the list of reordering codes given. Anything that is after OTHERS
+ * will go at the very end of the reordering in the order given.
+ *
+ * <p>The special reorder code {@link android.icu.text.Collator.ReorderCodes#DEFAULT DEFAULT}
+ * will reset the reordering for this collator
+ * to the default for this collator. The default reordering may be the DUCET/CLDR order or may be a reordering that
+ * was specified when this collator was created from resource data or from rules. The
+ * DEFAULT code <b>must</b> be the sole code supplied when it is used.
+ * If not, then an {@link java.lang.IllegalArgumentException IllegalArgumentException} will be thrown.
+ *
+ * <p>The special reorder code {@link android.icu.text.Collator.ReorderCodes#NONE NONE}
+ * will remove any reordering for this collator.
+ * The result of setting no reordering will be to have the DUCET/CLDR ordering used. The
+ * NONE code <b>must</b> be the sole code supplied when it is used.
+ *
+ * @param order the reordering codes to apply to this collator; if this is null or an empty array
+ * then this clears any existing reordering
+ * @see #getReorderCodes
+ * @see #getEquivalentReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public void setReorderCodes(int... order) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Collator for the current default locale.
+ * The default locale is determined by java.util.Locale.getDefault().
+ * @return the Collator for the default locale (for example, en_US) if it
+ *         is created successfully. Otherwise if there is no Collator
+ *         associated with the current locale, the root collator
+ *         will be returned.
+ * @see java.util.Locale#getDefault()
+ * @see #getInstance(Locale)
+ */
+
+public static final android.icu.text.Collator getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clones the collator.
+ * @return a clone of this collator.
+ */
+
+public java.lang.Object clone() throws java.lang.CloneNotSupportedException { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the Collator for the desired locale.
+ *
+ * <p>For some languages, multiple collation types are available;
+ * for example, "de@collation=phonebook".
+ * Starting with ICU 54, collation attributes can be specified via locale keywords as well,
+ * in the old locale extension syntax ("el@colCaseFirst=upper")
+ * or in language tag syntax ("el-u-kf-upper").
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/api">User Guide: Collation API</a>.
+ *
+ * @param locale the desired locale.
+ * @return Collator for the desired locale if it is created successfully.
+ *         Otherwise if there is no Collator
+ *         associated with the current locale, the root collator will
+ *         be returned.
+ * @see java.util.Locale
+ * @see java.util.ResourceBundle
+ * @see #getInstance(Locale)
+ * @see #getInstance()
+ */
+
+public static final android.icu.text.Collator getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Collator for the desired locale.
+ *
+ * <p>For some languages, multiple collation types are available;
+ * for example, "de-u-co-phonebk".
+ * Starting with ICU 54, collation attributes can be specified via locale keywords as well,
+ * in the old locale extension syntax ("el@colCaseFirst=upper", only with {@link android.icu.util.ULocale ULocale})
+ * or in language tag syntax ("el-u-kf-upper").
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/api">User Guide: Collation API</a>.
+ *
+ * @param locale the desired locale.
+ * @return Collator for the desired locale if it is created successfully.
+ *         Otherwise if there is no Collator
+ *         associated with the current locale, the root collator will
+ *         be returned.
+ * @see java.util.Locale
+ * @see java.util.ResourceBundle
+ * @see #getInstance(ULocale)
+ * @see #getInstance()
+ */
+
+public static final android.icu.text.Collator getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of locales, as Locale objects, for which collators
+ * are installed.  Note that Locale objects do not support RFC 3066.
+ * @return the list of locales in which collators are installed.
+ * This list includes any that have been registered, in addition to
+ * those that are installed with ICU4J.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the set of locales, as ULocale objects, for which collators
+ * are installed.  ULocale objects support RFC 3066.
+ * @return the list of locales in which collators are installed.
+ * This list includes any that have been registered, in addition to
+ * those that are installed with ICU4J.
+ */
+
+public static final android.icu.util.ULocale[] getAvailableULocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an array of all possible keywords that are relevant to
+ * collation. At this point, the only recognized keyword for this
+ * service is "collation".
+ * @return an array of valid collation keywords.
+ * @see #getKeywordValues
+ */
+
+public static final java.lang.String[] getKeywords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a keyword, returns an array of all values for
+ * that keyword that are currently in use.
+ * @param keyword one of the keywords returned by getKeywords.
+ * @see #getKeywords
+ */
+
+public static final java.lang.String[] getKeywordValues(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a key and a locale, returns an array of string values in a preferred
+ * order that would make a difference. These are all and only those values where
+ * the open (creation) of the service with the locale formed from the input locale
+ * plus input keyword and that value has different behavior than creation with the
+ * input locale alone.
+ * @param key           one of the keys supported by this service.  For now, only
+ *                      "collation" is supported.
+ * @param locale        the locale
+ * @param commonlyUsed  if set to true it will return only commonly used values
+ *                      with the given locale in preferred order.  Otherwise,
+ *                      it will return all the available values for the locale.
+ * @return an array of string values for the given key and the locale.
+ */
+
+public static final java.lang.String[] getKeywordValuesForLocale(java.lang.String key, android.icu.util.ULocale locale, boolean commonlyUsed) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the functionally equivalent locale for the given
+ * requested locale, with respect to given keyword, for the
+ * collation service.  If two locales return the same result, then
+ * collators instantiated for these locales will behave
+ * equivalently.  The converse is not always true; two collators
+ * may in fact be equivalent, but return different results, due to
+ * internal details.  The return result has no other meaning than
+ * that stated above, and implies nothing as to the relationship
+ * between the two locales.  This is intended for use by
+ * applications who wish to cache collators, or otherwise reuse
+ * collators when possible.  The functional equivalent may change
+ * over time.  For more information, please see the <a
+ * href="https://unicode-org.github.io/icu/userguide/locale#locales-and-services">
+ * Locales and Services</a> section of the ICU User Guide.
+ * @param keyword a particular keyword as enumerated by
+ * getKeywords.
+ * @param locID The requested locale
+ * @param isAvailable If non-null, isAvailable[0] will receive and
+ * output boolean that indicates whether the requested locale was
+ * 'available' to the collation service. If non-null, isAvailable
+ * must have length &gt;= 1.
+ * @return the locale
+ */
+
+public static final android.icu.util.ULocale getFunctionalEquivalent(java.lang.String keyword, android.icu.util.ULocale locID, boolean[] isAvailable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the functionally equivalent locale for the given
+ * requested locale, with respect to given keyword, for the
+ * collation service.
+ * @param keyword a particular keyword as enumerated by
+ * getKeywords.
+ * @param locID The requested locale
+ * @return the locale
+ * @see #getFunctionalEquivalent(String,ULocale,boolean[])
+ */
+
+public static final android.icu.util.ULocale getFunctionalEquivalent(java.lang.String keyword, android.icu.util.ULocale locID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * displayLocale.
+ * @param objectLocale the locale of the collator
+ * @param displayLocale the locale for the collator's display name
+ * @return the display name
+ */
+
+public static java.lang.String getDisplayName(java.util.Locale objectLocale, java.util.Locale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * displayLocale.
+ * @param objectLocale the locale of the collator
+ * @param displayLocale the locale for the collator's display name
+ * @return the display name
+ */
+
+public static java.lang.String getDisplayName(android.icu.util.ULocale objectLocale, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * default <code>DISPLAY</code> locale.
+ * @param objectLocale the locale of the collator
+ * @return the display name
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static java.lang.String getDisplayName(java.util.Locale objectLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the name of the collator for the objectLocale, localized for the
+ * default <code>DISPLAY</code> locale.
+ * @param objectLocale the locale of the collator
+ * @return the display name
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static java.lang.String getDisplayName(android.icu.util.ULocale objectLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Collator's strength attribute. The strength attribute
+ * determines the minimum level of difference considered significant.
+ * <strong>[icu] Note:</strong> This can return QUATERNARY strength, which is not supported by the
+ * JDK version.
+ * <p>
+ * See the Collator class description for more details.
+ * <p>The base class method always returns {@link #TERTIARY}.
+ * Subclasses should override it if appropriate.
+ *
+ * @return this Collator's current strength attribute.
+ * @see #setStrength
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ */
+
+public int getStrength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the decomposition mode of this Collator. The decomposition mode
+ * determines how Unicode composed characters are handled.
+ * <p>
+ * See the Collator class description for more details.
+ * <p>The base class method always returns {@link #NO_DECOMPOSITION}.
+ * Subclasses should override it if appropriate.
+ *
+ * @return the decomposition mode
+ * @see #setDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ */
+
+public int getDecomposition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the equality of two text Strings using
+ * this Collator's rules, strength and decomposition mode.  Convenience method.
+ * @param source the source string to be compared.
+ * @param target the target string to be compared.
+ * @return true if the strings are equal according to the collation
+ *         rules, otherwise false.
+ * @see #compare
+ * @throws java.lang.NullPointerException thrown if either arguments is null.
+ */
+
+public boolean equals(java.lang.String source, java.lang.String target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a UnicodeSet that contains all the characters and sequences tailored
+ * in this collator.
+ * @return a pointer to a UnicodeSet object containing all the
+ *         code points and sequences that may sort differently than
+ *         in the root collator.
+ */
+
+public android.icu.text.UnicodeSet getTailoredSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the source text String to the target text String according to
+ * this Collator's rules, strength and decomposition mode.
+ * Returns an integer less than,
+ * equal to or greater than zero depending on whether the source String is
+ * less than, equal to or greater than the target String. See the Collator
+ * class description for an example of use.
+ *
+ * @param source the source String.
+ * @param target the target String.
+ * @return Returns an integer value. Value is less than zero if source is
+ *         less than target, value is zero if source and target are equal,
+ *         value is greater than zero if source is greater than target.
+ * @see android.icu.text.CollationKey
+ * @see #getCollationKey
+ * @throws java.lang.NullPointerException thrown if either argument is null.
+ */
+
+public abstract int compare(java.lang.String source, java.lang.String target);
+
+/**
+ * Compares the source Object to the target Object.
+ *
+ * @param source the source Object.
+ * @param target the target Object.
+ * @return Returns an integer value. Value is less than zero if source is
+ *         less than target, value is zero if source and target are equal,
+ *         value is greater than zero if source is greater than target.
+ * @throws java.lang.ClassCastException thrown if either arguments cannot be cast to CharSequence.
+ */
+
+public int compare(java.lang.Object source, java.lang.Object target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * Transforms the String into a CollationKey suitable for efficient
+ * repeated comparison.  The resulting key depends on the collator's
+ * rules, strength and decomposition mode.
+ *
+ * <p>Note that collation keys are often less efficient than simply doing comparison.
+ * For more details, see the ICU User Guide.
+ *
+ * <p>See the CollationKey class documentation for more information.
+ * @param source the string to be transformed into a CollationKey.
+ * @return the CollationKey for the given String based on this Collator's
+ *         collation rules. If the source String is null, a null
+ *         CollationKey is returned.
+ * @see android.icu.text.CollationKey
+ * @see #compare(String, String)
+ */
+
+public abstract android.icu.text.CollationKey getCollationKey(java.lang.String source);
+
+/**
+ * <strong>[icu]</strong> Sets the variable top to the top of the specified reordering group.
+ * The variable top determines the highest-sorting character
+ * which is affected by the alternate handling behavior.
+ * If that attribute is set to UCOL_NON_IGNORABLE, then the variable top has no effect.
+ *
+ * <p>The base class implementation throws an UnsupportedOperationException.
+ * @param group one of Collator.ReorderCodes.SPACE, Collator.ReorderCodes.PUNCTUATION,
+ *              Collator.ReorderCodes.SYMBOL, Collator.ReorderCodes.CURRENCY;
+ *              or Collator.ReorderCodes.DEFAULT to restore the default max variable group
+ * @return this
+ * @see #getMaxVariable
+ */
+
+public android.icu.text.Collator setMaxVariable(int group) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the maximum reordering group whose characters are affected by
+ * the alternate handling behavior.
+ *
+ * <p>The base class implementation returns Collator.ReorderCodes.PUNCTUATION.
+ * @return the maximum variable reordering group.
+ * @see #setMaxVariable
+ */
+
+public int getMaxVariable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Gets the variable top value of a Collator.
+ *
+ * @return the variable top primary weight
+ * @see #getMaxVariable
+ */
+
+public abstract int getVariableTop();
+
+/**
+ * <strong>[icu]</strong> Returns the version of this collator object.
+ * @return the version object associated with this collator
+ */
+
+public abstract android.icu.util.VersionInfo getVersion();
+
+/**
+ * <strong>[icu]</strong> Returns the UCA version of this collator object.
+ * @return the version object associated with this collator
+ */
+
+public abstract android.icu.util.VersionInfo getUCAVersion();
+
+/**
+ * Retrieves the reordering codes for this collator.
+ * These reordering codes are a combination of UScript codes and ReorderCodes.
+ * @return a copy of the reordering codes for this collator;
+ * if none are set then returns an empty array
+ * @see #setReorderCodes
+ * @see #getEquivalentReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public int[] getReorderCodes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves all the reorder codes that are grouped with the given reorder code. Some reorder
+ * codes are grouped and must reorder together.
+ * Beginning with ICU 55, scripts only reorder together if they are primary-equal,
+ * for example Hiragana and Katakana.
+ *
+ * @param reorderCode The reorder code to determine equivalence for.
+ * @return the set of all reorder codes in the same group as the given reorder code.
+ * @see #setReorderCodes
+ * @see #getReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public static int[] getEquivalentReorderCodes(int reorderCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether the object has been frozen or not.
+ *
+ * <p>An unfrozen Collator is mutable and not thread-safe.
+ * A frozen Collator is immutable and thread-safe.
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freezes the collator.
+ * @return the collator itself.
+ */
+
+public android.icu.text.Collator freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides for the clone operation. Any clone is initially unfrozen.
+ */
+
+public android.icu.text.Collator cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Decomposition mode value. With CANONICAL_DECOMPOSITION set,
+ * characters that are canonical variants according to the Unicode standard
+ * will be decomposed for collation.
+ *
+ * <p>CANONICAL_DECOMPOSITION corresponds to Normalization Form D as
+ * described in <a href="http://www.unicode.org/unicode/reports/tr15/">
+ * Unicode Technical Report #15</a>.
+ *
+ * @see #NO_DECOMPOSITION
+ * @see #getDecomposition
+ * @see #setDecomposition
+ */
+
+public static final int CANONICAL_DECOMPOSITION = 17; // 0x11
+
+/**
+ * <strong>[icu] Note:</strong> This is for backwards compatibility with Java APIs only.  It
+ * should not be used, IDENTICAL should be used instead.  ICU's
+ * collation does not support Java's FULL_DECOMPOSITION mode.
+ */
+
+public static final int FULL_DECOMPOSITION = 15; // 0xf
+
+/**
+ * Smallest Collator strength value. When all other strengths are equal,
+ * the IDENTICAL strength is used as a tiebreaker. The Unicode code point
+ * values of the NFD form of each string are compared, just in case there
+ * is no difference.
+ * See class documentation for more explanation.
+ * <p>
+ * Note this value is different from JDK's
+ */
+
+public static final int IDENTICAL = 15; // 0xf
+
+/**
+ * Decomposition mode value. With NO_DECOMPOSITION set, Strings
+ * will not be decomposed for collation. This is the default
+ * decomposition setting unless otherwise specified by the locale
+ * used to create the Collator.
+ *
+ * <p><strong>Note</strong> this value is different from the JDK's.
+ * @see #CANONICAL_DECOMPOSITION
+ * @see #getDecomposition
+ * @see #setDecomposition
+ */
+
+public static final int NO_DECOMPOSITION = 16; // 0x10
+
+/**
+ * Strongest collator strength value. Typically used to denote differences
+ * between base characters. See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int PRIMARY = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Fourth level collator strength value.
+ * When punctuation is ignored
+ * (see <a href="https://unicode-org.github.io/icu/userguide/collation/concepts#ignoring-punctuation">
+ * Ignoring Punctuation in the User Guide</a>) at PRIMARY to TERTIARY
+ * strength, an additional strength level can
+ * be used to distinguish words with and without punctuation.
+ * See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int QUATERNARY = 3; // 0x3
+
+/**
+ * Second level collator strength value.
+ * Accents in the characters are considered secondary differences.
+ * Other differences between letters can also be considered secondary
+ * differences, depending on the language.
+ * See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int SECONDARY = 1; // 0x1
+
+/**
+ * Third level collator strength value.
+ * Upper and lower case differences in characters are distinguished at this
+ * strength level. In addition, a variant of a letter differs from the base
+ * form on the tertiary level.
+ * See class documentation for more explanation.
+ * @see #setStrength
+ * @see #getStrength
+ */
+
+public static final int TERTIARY = 2; // 0x2
+/**
+ * Reordering codes for non-script groups that can be reordered under collation.
+ *
+ * @see #getReorderCodes
+ * @see #setReorderCodes
+ * @see #getEquivalentReorderCodes
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static interface ReorderCodes {
+
+/**
+ * Characters with the currency property.
+ * This is equivalent to the rule value "currency".
+ */
+
+public static final int CURRENCY = 4099; // 0x1003
+
+/**
+ * A special reordering code that is used to specify the default reordering codes for a locale.
+ */
+
+public static final int DEFAULT = -1; // 0xffffffff
+
+/**
+ * Characters with the digit property.
+ * This is equivalent to the rule value "digit".
+ */
+
+public static final int DIGIT = 4100; // 0x1004
+
+/**
+ * The first entry in the enumeration of reordering groups. This is intended for use in
+ * range checking and enumeration of the reorder codes.
+ */
+
+public static final int FIRST = 4096; // 0x1000
+
+/**
+ * A special reordering code that is used to specify no reordering codes.
+ */
+
+public static final int NONE = 103; // 0x67
+
+/**
+ * A special reordering code that is used to specify all other codes used for reordering except
+ * for the codes listed as ReorderingCodes and those listed explicitly in a reordering.
+ */
+
+public static final int OTHERS = 103; // 0x67
+
+/**
+ * Characters with the punctuation property.
+ * This is equivalent to the rule value "punct".
+ */
+
+public static final int PUNCTUATION = 4097; // 0x1001
+
+/**
+ * Characters with the space property.
+ * This is equivalent to the rule value "space".
+ */
+
+public static final int SPACE = 4096; // 0x1000
+
+/**
+ * Characters with the symbol property.
+ * This is equivalent to the rule value "symbol".
+ */
+
+public static final int SYMBOL = 4098; // 0x1002
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CompactDecimalFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CompactDecimalFormat.java
new file mode 100644
index 0000000..ed10596
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CompactDecimalFormat.java
@@ -0,0 +1,101 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, Google, International Business Machines Corporation and
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * Formats numbers in compact (abbreviated) notation, like "1.2K" instead of "1200".
+ *
+ * The CompactDecimalFormat produces abbreviated numbers, suitable for display in environments will
+ * limited real estate. For example, 'Hits: 1.2B' instead of 'Hits: 1,200,000,000'. The format will
+ * be appropriate for the given language, such as "1,2 Mrd." for German.
+ *
+ * <p>For numbers under 1000 trillion (under 10^15, such as 123,456,789,012,345), the result will be
+ * short for supported languages. However, the result may sometimes exceed 7 characters, such as
+ * when there are combining marks or thin characters. In such cases, the visual width in fonts
+ * should still be short.
+ *
+ * <p>By default, there are 2 significant digits. After creation, if more than three significant
+ * digits are set (with setMaximumSignificantDigits), or if a fixed number of digits are set (with
+ * setMaximumIntegerDigits or setMaximumFractionDigits), then result may be wider.
+ *
+ * <p>The "short" style is also capable of formatting currency amounts, such as "$1.2M" instead of
+ * "$1,200,000.00" (English) or "5,3?Mio.??" instead of "5.300.000,00 ?" (German). Localized data
+ * concerning longer formats is not available yet in the Unicode CLDR. Because of this, attempting
+ * to format a currency amount using the "long" style will produce an UnsupportedOperationException.
+ *
+ * <p>At this time, negative numbers and parsing are not supported, and will produce an
+ * UnsupportedOperationException. Resetting the pattern prefixes or suffixes is not supported; the
+ * method calls are ignored.
+ *
+ * <p>Note that important methods, like setting the number of decimals, will be moved up from
+ * DecimalFormat to NumberFormat.
+ *
+ * @author markdavis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CompactDecimalFormat extends android.icu.text.DecimalFormat {
+
+CompactDecimalFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a CompactDecimalFormat appropriate for a locale. The result may be affected by the
+ * number system in the locale, such as ar-u-nu-latn.
+ *
+ * @param locale the desired locale
+ * @param style the compact style
+ */
+
+public static android.icu.text.CompactDecimalFormat getInstance(android.icu.util.ULocale locale, android.icu.text.CompactDecimalFormat.CompactStyle style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a CompactDecimalFormat appropriate for a locale. The result may be affected by the
+ * number system in the locale, such as ar-u-nu-latn.
+ *
+ * @param locale the desired locale
+ * @param style the compact style
+ */
+
+public static android.icu.text.CompactDecimalFormat getInstance(java.util.Locale locale, android.icu.text.CompactDecimalFormat.CompactStyle style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parsing is currently unsupported, and throws an UnsupportedOperationException.
+ */
+
+public java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parsing is currently unsupported, and throws an UnsupportedOperationException.
+ */
+
+public android.icu.util.CurrencyAmount parseCurrency(java.lang.CharSequence text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+/**
+ * Style parameter for CompactDecimalFormat.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CompactStyle {
+/**
+ * Short version, like "1.2T"
+ */
+
+SHORT,
+/**
+ * Longer version, like "1.2 trillion", if available. May return same result as SHORT if not.
+ */
+
+LONG;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ConstrainedFieldPosition.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ConstrainedFieldPosition.java
new file mode 100644
index 0000000..b623b2c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ConstrainedFieldPosition.java
@@ -0,0 +1,195 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import java.text.Format.Field;
+
+/**
+ * Represents a span of a string containing a given field.
+ *
+ * This class differs from FieldPosition in the following ways:
+ *
+ *   1. It has information on the field category.
+ *   2. It allows you to set constraints to use when iterating over field positions.
+ *   3. It is used for the newer FormattedValue APIs.
+ *
+ * @author sffc
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ConstrainedFieldPosition {
+
+/**
+ * Initializes a CategoryFieldPosition.
+ *
+ * By default, the CategoryFieldPosition has no iteration constraints.
+ */
+
+public ConstrainedFieldPosition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets this ConstrainedFieldPosition to its initial state, as if it were newly created:
+ *
+ * - Removes any constraints that may have been set on the instance.
+ * - Resets the iteration position.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a constraint on the field.
+ *
+ * When this instance of ConstrainedFieldPosition is passed to {@link android.icu.text.FormattedValue#nextPosition FormattedValue#nextPosition}, positions are
+ * skipped unless they have the given field.
+ *
+ * Any previously set constraints are cleared.
+ *
+ * For example, to loop over all grouping separators:
+ *
+ * <pre>
+ * ConstrainedFieldPosition cfpos;
+ * cfpos.constrainField(NumberFormat.Field.GROUPING_SEPARATOR);
+ * while (fmtval.nextPosition(cfpos)) {
+ *   // handle the grouping separator position
+ * }
+ * </pre>
+ *
+ * Changing the constraint while in the middle of iterating over a FormattedValue
+ * does not generally have well-defined behavior.
+ *
+ * @param field
+ *            The field to fix when iterating.
+ */
+
+public void constrainField(java.text.Format.Field field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a constraint on the field class.
+ *
+ * When this instance of ConstrainedFieldPosition is passed to {@link android.icu.text.FormattedValue#nextPosition FormattedValue#nextPosition}, positions are
+ * skipped unless the field is an instance of the class constraint, including subclasses.
+ *
+ * Any previously set constraints are cleared.
+ *
+ * For example, to loop over only the number-related fields:
+ *
+ * <pre>
+ * ConstrainedFieldPosition cfpos;
+ * cfpos.constrainClass(NumberFormat.Field.class);
+ * while (fmtval.nextPosition(cfpos)) {
+ *   // handle the number-related field position
+ * }
+ * </pre>
+ *
+ * @param classConstraint
+ *            The field class to fix when iterating.
+ */
+
+public void constrainClass(java.lang.Class<?> classConstraint) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the field for the current position.
+ *
+ * The return value is well-defined and non-null only after
+ * FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The field saved in the instance. See above for null conditions.
+ */
+
+public java.text.Format.Field getField() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the INCLUSIVE start index for the current position.
+ *
+ * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The start index saved in the instance.
+ */
+
+public int getStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the EXCLUSIVE end index stored for the current position.
+ *
+ * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The end index saved in the instance.
+ */
+
+public int getLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the value associated with the current field position. The field value is often not set.
+ *
+ * The return value is well-defined only after FormattedValue#nextPosition returns TRUE.
+ *
+ * @return The value for the current position. Might be null.
+ */
+
+public java.lang.Object getFieldValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets an int64 that FormattedValue implementations may use for storage.
+ *
+ * The initial value is zero.
+ *
+ * Users of FormattedValue should not need to call this method.
+ *
+ * @return The current iteration context from {@link #setInt64IterationContext}.
+ */
+
+public long getInt64IterationContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets an int64 that FormattedValue implementations may use for storage.
+ *
+ * Intended to be used by FormattedValue implementations.
+ *
+ * @param context
+ *            The new iteration context.
+ */
+
+public void setInt64IterationContext(long context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets new values for the primary public getters.
+ *
+ * Intended to be used by FormattedValue implementations.
+ *
+ * It is up to the implementation to ensure that the user-requested
+ * constraints are satisfied. This method does not check!
+ *
+ * @param field
+ *            The new field.
+ * @param value
+ *            The new field value. Should be null if there is no value.
+ * @param start
+ *            The new inclusive start index.
+ * @param limit
+ *            The new exclusive end index.
+ */
+
+public void setState(java.text.Format.Field field, java.lang.Object value, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether a given field and value should be included given the
+ * constraints.
+ *
+ * Intended to be used by FormattedValue implementations.
+ *
+ * @param field The field to test.
+ * @param fieldValue The field value to test. Should be null if there is no value.
+ * @return Whether the field should be included given the constraints.
+ */
+
+public boolean matchesField(java.text.Format.Field field, java.lang.Object fieldValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CurrencyPluralInfo.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CurrencyPluralInfo.java
new file mode 100644
index 0000000..1674dcf
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/CurrencyPluralInfo.java
@@ -0,0 +1,160 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * This class represents the information needed by
+ * DecimalFormat to format currency plural,
+ * such as "3.00 US dollars" or "1.00 US dollar".
+ * DecimalFormat creates for itself an instance of
+ * CurrencyPluralInfo from its locale data.
+ * If you need to change any of these symbols, you can get the
+ * CurrencyPluralInfo object from your
+ * DecimalFormat and modify it.
+ *
+ * Following are the information needed for currency plural format and parse:
+ * locale information,
+ * plural rule of the locale,
+ * currency plural pattern of the locale.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CurrencyPluralInfo implements java.lang.Cloneable, java.io.Serializable {
+
+/**
+ * Create a CurrencyPluralInfo object for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public CurrencyPluralInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a CurrencyPluralInfo object for the given locale.
+ * @param locale the locale
+ */
+
+public CurrencyPluralInfo(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a CurrencyPluralInfo object for the given locale.
+ * @param locale the locale
+ */
+
+public CurrencyPluralInfo(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a CurrencyPluralInfo instance for the default locale.
+ *
+ * @return A CurrencyPluralInfo instance.
+ */
+
+public static android.icu.text.CurrencyPluralInfo getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a CurrencyPluralInfo instance for the given locale.
+ *
+ * @param locale the locale.
+ * @return A CurrencyPluralInfo instance.
+ */
+
+public static android.icu.text.CurrencyPluralInfo getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a CurrencyPluralInfo instance for the given locale.
+ *
+ * @param locale the locale.
+ * @return A CurrencyPluralInfo instance.
+ */
+
+public static android.icu.text.CurrencyPluralInfo getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets plural rules of this locale, used for currency plural format
+ *
+ * @return plural rule
+ */
+
+public android.icu.text.PluralRules getPluralRules() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a plural count, gets currency plural pattern of this locale,
+ * used for currency plural format
+ *
+ * @param  pluralCount currency plural count
+ * @return a currency plural pattern based on plural count
+ */
+
+public java.lang.String getCurrencyPluralPattern(java.lang.String pluralCount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get locale
+ *
+ * @return locale
+ */
+
+public android.icu.util.ULocale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set plural rules.  These are initially set in the constructor based on the locale,
+ * and usually do not need to be changed.
+ *
+ * @param ruleDescription new plural rule description
+ */
+
+public void setPluralRules(java.lang.String ruleDescription) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set currency plural patterns.  These are initially set in the constructor based on the
+ * locale, and usually do not need to be changed.
+ *
+ * The decimal digits part of the pattern cannot be specified via this method.  All plural
+ * forms will use the same decimal pattern as set in the constructor of DecimalFormat.  For
+ * example, you can't set "0.0" for plural "few" but "0.00" for plural "many".
+ *
+ * @param pluralCount the plural count for which the currency pattern will
+ *                    be overridden.
+ * @param pattern     the new currency plural pattern
+ */
+
+public void setCurrencyPluralPattern(java.lang.String pluralCount, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set locale.  This also sets both the plural rules and the currency plural patterns to be
+ * the defaults for the locale.
+ *
+ * @param loc the new locale to set
+ */
+
+public void setLocale(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Standard override
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode
+ *
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateFormat.java
new file mode 100644
index 0000000..409f5fa
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateFormat.java
@@ -0,0 +1,1922 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *   Copyright (C) 1996-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Calendar;
+import android.icu.util.GregorianCalendar;
+import java.text.FieldPosition;
+import java.util.Date;
+import android.icu.util.TimeZone;
+import java.text.ParsePosition;
+import java.text.Format;
+import java.text.ParseException;
+import android.icu.util.ULocale.Category;
+import java.io.InvalidObjectException;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DateFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>
+ * DateFormat is an abstract class for date/time formatting subclasses which formats and parses dates or time in a
+ * language-independent manner. The date/time formatting subclass, such as SimpleDateFormat, allows for formatting
+ * (i.e., date -&gt; text), parsing (text -&gt; date), and normalization. The date is represented as a <code>Date</code>
+ * object or as the milliseconds since January 1, 1970, 00:00:00 GMT.
+ *
+ * <p>
+ * DateFormat helps you to format and parse dates for any locale. Your code can be completely independent of the locale
+ * conventions for months, days of the week, or even the calendar format: lunar vs. solar. It provides many class
+ * methods for obtaining default date/time formatters based on the default for a given locale and a number of formatting
+ * styles or arbitrary "skeletons".
+ * <ol>
+ * <li>The formatting styles include FULL, LONG, MEDIUM, and SHORT. More detail and examples of using these styles are
+ * provided in the method descriptions.
+ * <li>The formatting styles only cover a fraction of the necessary usage. You often need to have just certain
+ * combinations of fields, like Month and Year, but have it to be formatted appropriate to a given locale. This is done
+ * using the (misnamed) getPatternInstance() method, supplying a skeleton. There are a number of constants that have
+ * common pre-defined skeletons, such as {@link #MINUTE_SECOND} for something like "13:45" or {@link #YEAR_ABBR_MONTH}
+ * for something like "Sept 2012".
+ * </ol>
+ *
+ * <p>
+ * To format a date for the current Locale, use one of the static factory methods:
+ *
+ * <pre>
+ * myString = DateFormat.getDateInstance().format(myDate);
+ * myString = DateFormat.getPatternInstance(DateFormat.YEAR_ABBR_MONTH).format(myDate);
+ * </pre>
+ * <p>
+ * If you are formatting multiple numbers, it is more efficient to get the format and use it multiple times so that the
+ * system doesn't have to fetch the information about the local language and country conventions multiple times.
+ *
+ * <pre>
+ * DateFormat df = DateFormat.getDateInstance();
+ * for (int i = 0; i &lt; a.length; ++i) {
+ *     output.println(df.format(myDate[i]) + &quot;; &quot;);
+ * }
+ * </pre>
+ * <p>
+ * To format a date for a different Locale, specify it in the call to getDateInstance().
+ *
+ * <pre>
+ * DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
+ * </pre>
+ * <p>
+ * You can use a DateFormat to parse also.
+ *
+ * <pre>
+ * myDate = df.parse(myString);
+ * </pre>
+ * <p>
+ * There are many static factory methods available. Use getDateInstance to get the normal date format for that country.
+ * Use getTimeInstance to get the time format for that country. Use getDateTimeInstance to get a date and time format.
+ * You can pass in different options to these factory methods to control the length of the result; from SHORT to MEDIUM
+ * to LONG to FULL. The exact result depends on the locale, but generally:
+ * <ul>
+ * <li>SHORT is completely numeric, such as 12.13.52 or 3:30pm
+ * <li>MEDIUM is longer, such as Jan 12, 1952
+ * <li>LONG is longer, such as January 12, 1952 or 3:30:32pm
+ * <li>FULL is pretty completely specified, such as Tuesday, April 12, 1952 AD or 3:30:42pm PST.
+ * </ul>
+ *
+ * <p>
+ * Use getPatternInstance to format with a skeleton. Typically this is with a predefined skeleton, like
+ * {@link #YEAR_ABBR_MONTH} for something like "Sept 2012". If you don't want to use one of the predefined skeletons,
+ * you can supply your own. The skeletons are like the patterns in SimpleDateFormat, except they:
+ * <ol>
+ * <li>only keep the field pattern letter and ignore all other parts in a pattern, such as space, punctuation, and
+ * string literals.
+ * <li>are independent of the order of fields.
+ * <li>ignore certain differences in the field's pattern letter length:
+ * <ol>
+ * <li>For those non-digit calendar fields, the pattern letter length is important, such as MMM, MMMM, and MMMMM; E and
+ * EEEE, and the field's pattern letter length is honored.
+ * <li>For the digit calendar fields, such as M or MM, d or dd, yy or yyyy, the field pattern length is ignored and the
+ * best match, which is defined in date time patterns, will be returned without honor the field pattern letter length in
+ * skeleton.
+ * </ol>
+ * </ol>
+ *
+ * <p>
+ * You can also set the time zone on the format if you wish. If you want even more control over the format or parsing,
+ * (or want to give your users more control), you can try casting the DateFormat you get from the factory methods to a
+ * SimpleDateFormat. This will work for the majority of countries; just remember to put it in a try block in case you
+ * encounter an unusual one.
+ *
+ * <p>
+ * You can also use forms of the parse and format methods with ParsePosition and FieldPosition to allow you to
+ * <ul>
+ * <li>progressively parse through pieces of a string.
+ * <li>align any particular field, or find out where it is for selection on the screen.
+ * </ul>
+ *
+ * <h3>Synchronization</h3>
+ *
+ * Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple
+ * threads access a format concurrently, it must be synchronized externally.
+ *
+ * @see android.icu.text.UFormat
+ * @see android.icu.text.NumberFormat
+ * @see android.icu.text.SimpleDateFormat
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.TimeZone
+ * @author Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class DateFormat extends android.icu.text.UFormat {
+
+/**
+ * Creates a new date format.
+ */
+
+protected DateFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a time object into a time string. Examples of time objects
+ * are a time value expressed in milliseconds and a Date object.
+ * @param obj must be a Number or a Date or a Calendar.
+ * @param toAppendTo the string buffer for the returning time string.
+ * @return the formatted time string.
+ * @param fieldPosition keeps track of the position of the field
+ * within the returned string.
+ * On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field. For
+ * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+ * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+ * begin index and end index of fieldPosition will be set to
+ * 0 and 4, respectively.
+ * Notice that if the same time field appears
+ * more than once in a pattern, the fieldPosition will be set for the first
+ * occurrence of that time field. For instance, formatting a Date to
+ * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+ * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+ * the begin index and end index of fieldPosition will be set to
+ * 5 and 8, respectively, for the first occurrence of the timezone
+ * pattern character 'z'.
+ * @see java.text.Format
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a date into a date/time string.
+ * @param cal a Calendar set to the date and time to be formatted
+ * into a date/time string.  When the calendar type is different from
+ * the internal calendar held by this DateFormat instance, the date
+ * and the time zone will be inherited from the input calendar, but
+ * other calendar field values will be calculated by the internal calendar.
+ * @param toAppendTo the string buffer for the returning date/time string.
+ * @param fieldPosition keeps track of the position of the field
+ * within the returned string.
+ * On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field. For
+ * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+ * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+ * begin index and end index of fieldPosition will be set to
+ * 0 and 4, respectively.
+ * Notice that if the same time field appears
+ * more than once in a pattern, the fieldPosition will be set for the first
+ * occurrence of that time field. For instance, formatting a Date to
+ * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+ * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+ * the begin index and end index of fieldPosition will be set to
+ * 5 and 8, respectively, for the first occurrence of the timezone
+ * pattern character 'z'.
+ * @return the formatted date/time string.
+ */
+
+public abstract java.lang.StringBuffer format(android.icu.util.Calendar cal, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fieldPosition);
+
+/**
+ * Formats a Date into a date/time string.
+ * @param date a Date to be formatted into a date/time string.
+ * @param toAppendTo the string buffer for the returning date/time string.
+ * @param fieldPosition keeps track of the position of the field
+ * within the returned string.
+ * On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field. For
+ * example, given a time text "1996.07.10 AD at 15:08:56 PDT",
+ * if the given fieldPosition is DateFormat.YEAR_FIELD, the
+ * begin index and end index of fieldPosition will be set to
+ * 0 and 4, respectively.
+ * Notice that if the same time field appears
+ * more than once in a pattern, the fieldPosition will be set for the first
+ * occurrence of that time field. For instance, formatting a Date to
+ * the time string "1 PM PDT (Pacific Daylight Time)" using the pattern
+ * "h a z (zzzz)" and the alignment field DateFormat.TIMEZONE_FIELD,
+ * the begin index and end index of fieldPosition will be set to
+ * 5 and 8, respectively, for the first occurrence of the timezone
+ * pattern character 'z'.
+ * @return the formatted date/time string.
+ */
+
+public java.lang.StringBuffer format(java.util.Date date, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a Date into a date/time string.
+ * @param date the time value to be formatted into a time string.
+ * @return the formatted time string.
+ */
+
+public final java.lang.String format(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a date/time string. For example, a time text "07/10/96 4:5 PM, PDT"
+ * will be parsed into a Date that is equivalent to Date(837039928046).
+ * Parsing begins at the beginning of the string and proceeds as far as
+ * possible.  Assuming no parse errors were encountered, this function
+ * doesn't return any information about how much of the string was consumed
+ * by the parsing.  If you need that information, use a version of
+ * parse() that takes a ParsePosition.
+ *
+ * <p> By default, parsing is lenient: If the input is not in the form used
+ * by this object's format method but can still be parsed as a date, then
+ * the parse succeeds.  Clients may insist on strict adherence to the
+ * format by calling setLenient(false).
+ *
+ * <p> Note that the normal date formats associated with some calendars - such
+ * as the Chinese lunar calendar - do not specify enough fields to enable
+ * dates to be parsed unambiguously. In the case of the Chinese lunar
+ * calendar, while the year within the current 60-year cycle is specified,
+ * the number of such cycles since the start date of the calendar (in the
+ * ERA field of the Calendar object) is not normally part of the format,
+ * and parsing may assume the wrong era. For cases such as this it is
+ * recommended that clients parse using the parse method that takes a Calendar
+ * with the Calendar passed in set to the current date, or to a date
+ * within the era/cycle that should be assumed if absent in the format.
+ *
+ * @param text  The date/time string to be parsed
+ *
+ * @return      A Date, or null if the input could not be parsed
+ *
+ * @exception  java.text.ParseException  If the given string cannot be parsed as a date.
+ *
+ * @see #parse(String, ParsePosition)
+ */
+
+public java.util.Date parse(java.lang.String text) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a date/time string according to the given parse position.
+ * For example, a time text "07/10/96 4:5 PM, PDT" will be parsed
+ * into a Calendar that is equivalent to Date(837039928046). Before
+ * calling this method the caller should initialize the calendar
+ * in one of two ways (unless existing field information is to be kept):
+ * (1) clear the calendar, or (2) set the calendar to the current date
+ * (or to any date whose fields should be used to supply values that
+ * are missing in the parsed date). For example, Chinese calendar dates
+ * do not normally provide an era/cycle; in this case the calendar that
+ * is passed in should be set to a date within the era that should be
+ * assumed, normally the current era.
+ *
+ * <p> By default, parsing is lenient: If the input is not in the form used
+ * by this object's format method but can still be parsed as a date, then
+ * the parse succeeds.  Clients may insist on strict adherence to the
+ * format by calling setLenient(false).
+ *
+ * @see #setLenient(boolean)
+ *
+ * @param text  The date/time string to be parsed
+ *
+ * @param cal   The calendar set on input to the date and time to be used
+ *              for missing values in the date/time string being parsed,
+ *              and set on output to the parsed date/time. In general, this
+ *              should be initialized before calling this method - either
+ *              cleared or set to the current date, depending on desired
+ *              behavior. If this parse fails, the calendar may still
+ *              have been modified. When the calendar type is different
+ *              from the internal calendar held by this DateFormat
+ *              instance, calendar field values will be parsed based
+ *              on the internal calendar initialized with the time and
+ *              the time zone taken from this calendar, then the
+ *              parse result (time in milliseconds and time zone) will
+ *              be set back to this calendar.
+ *
+ * @param pos   On input, the position at which to start parsing; on
+ *              output, the position at which parsing terminated, or the
+ *              start position if the parse failed.
+ */
+
+public abstract void parse(java.lang.String text, android.icu.util.Calendar cal, java.text.ParsePosition pos);
+
+/**
+ * Parses a date/time string according to the given parse position.  For
+ * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
+ * that is equivalent to Date(837039928046).
+ *
+ * <p> By default, parsing is lenient: If the input is not in the form used
+ * by this object's format method but can still be parsed as a date, then
+ * the parse succeeds.  Clients may insist on strict adherence to the
+ * format by calling setLenient(false).
+ *
+ * <p> Note that the normal date formats associated with some calendars - such
+ * as the Chinese lunar calendar - do not specify enough fields to enable
+ * dates to be parsed unambiguously. In the case of the Chinese lunar
+ * calendar, while the year within the current 60-year cycle is specified,
+ * the number of such cycles since the start date of the calendar (in the
+ * ERA field of the Calendar object) is not normally part of the format,
+ * and parsing may assume the wrong era. For cases such as this it is
+ * recommended that clients parse using the parse method that takes a Calendar
+ * with the Calendar passed in set to the current date, or to a date
+ * within the era/cycle that should be assumed if absent in the format.
+ *
+ * @see #setLenient(boolean)
+ *
+ * @param text  The date/time string to be parsed
+ *
+ * @param pos   On input, the position at which to start parsing; on
+ *              output, the position at which parsing terminated, or the
+ *              start position if the parse failed.
+ *
+ * @return      A Date, or null if the input could not be parsed
+ */
+
+public java.util.Date parse(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a date/time string into an Object.  This convenience method simply
+ * calls parse(String, ParsePosition).
+ *
+ * @see #parse(String, ParsePosition)
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the time formatter with the default formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @return a time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time formatter with the given formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @return a time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @param aLocale the given locale.
+ * @return a time formatter.
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(int style, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @param locale the given ulocale.
+ * @return a time formatter.
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(int style, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the default formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @return a date formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the given formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @return a date formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param aLocale the given locale.
+ * @return a date formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(int style, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date formatter with the given formatting style
+ * for the given locale.
+ * @param style the given formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param locale the given ulocale.
+ * @return a date formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(int style, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the default formatting style
+ * for the default <code>FORMAT</code> locale.
+ * @return a date/time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the given date and time
+ * formatting styles for the default <code>FORMAT</code> locale.
+ * @param dateStyle the given date formatting style. For example,
+ * SHORT for "M/d/yy" in the US locale. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param timeStyle the given time formatting style. For example,
+ * SHORT for "h:mm a" in the US locale. Relative time styles are not currently
+ * supported, and behave just like the corresponding non-relative style.
+ * @return a date/time formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(int dateStyle, int timeStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the given formatting styles
+ * for the given locale.
+ * @param dateStyle the given date formatting style. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param timeStyle the given time formatting style. Relative time styles are not
+ * currently supported, and behave just like the corresponding non-relative style.
+ * @param aLocale the given locale.
+ * @return a date/time formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(int dateStyle, int timeStyle, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the date/time formatter with the given formatting styles
+ * for the given locale.
+ * @param dateStyle the given date formatting style. As currently implemented, relative date
+ * formatting only affects a limited range of calendar days before or after the
+ * current date, based on the CLDR &lt;field type="day"&gt;/&lt;relative&gt; data: For example,
+ * in English, "Yesterday", "Today", and "Tomorrow". Outside of this range, relative
+ * dates are formatted using the corresponding non-relative style.
+ * @param timeStyle the given time formatting style. Relative time styles are not
+ * currently supported, and behave just like the corresponding non-relative style.
+ * @param locale the given ulocale.
+ * @return a date/time formatter.
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(int dateStyle, int timeStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a default date/time formatter that uses the SHORT style for both the
+ * date and the time.
+ */
+
+public static final android.icu.text.DateFormat getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of locales for which DateFormats are installed.
+ * @return the set of locales for which DateFormats are installed.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the calendar to be used by this date format.  Initially, the default
+ * calendar for the specified or default locale is used.
+ * @param newCalendar the new Calendar to be used by the date format
+ */
+
+public void setCalendar(android.icu.util.Calendar newCalendar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the calendar associated with this date/time formatter.
+ * @return the calendar associated with this date/time formatter.
+ */
+
+public android.icu.util.Calendar getCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the number formatter.
+ * @param newNumberFormat the given new NumberFormat.
+ */
+
+public void setNumberFormat(android.icu.text.NumberFormat newNumberFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number formatter which this date/time formatter uses to
+ * format and parse a time.
+ * @return the number formatter which this date/time formatter uses.
+ */
+
+public android.icu.text.NumberFormat getNumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone for the calendar of this DateFormat object.
+ * @param zone the given new time zone.
+ */
+
+public void setTimeZone(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone.
+ * @return the time zone associated with the calendar of DateFormat.
+ */
+
+public android.icu.util.TimeZone getTimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies whether date/time parsing is to be lenient.  With
+ * lenient parsing, the parser may use heuristics to interpret inputs that
+ * do not precisely match this object's format.  Without lenient parsing,
+ * inputs must match this object's format more closely.
+ * <br><br>
+ * <b>Note:</b> ICU 53 introduced finer grained control of leniency (and added
+ * new control points) making the preferred method a combination of
+ * setCalendarLenient() &amp; setBooleanAttribute() calls.
+ * This method supports prior functionality but may not support all
+ * future leniency control &amp; behavior of DateFormat. For control of pre 53 leniency,
+ * Calendar and DateFormat whitespace &amp; numeric tolerance, this method is safe to
+ * use. However, mixing leniency control via this method and modification of the
+ * newer attributes via setBooleanAttribute() may produce undesirable
+ * results.
+ *
+ * @param lenient True specifies date/time interpretation to be lenient.
+ * @see android.icu.util.Calendar#setLenient
+ * @see #setBooleanAttribute(BooleanAttribute, boolean)
+ * @see #setCalendarLenient(boolean)
+ */
+
+public void setLenient(boolean lenient) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether both date/time parsing in the encapsulated Calendar object and DateFormat whitespace &amp;
+ * numeric processing is lenient.
+ */
+
+public boolean isLenient() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specifies whether date/time parsing in the encapsulated Calendar object should be lenient.
+ * With lenient parsing, the parser may use heuristics to interpret inputs that
+ * do not precisely match this object's format.  Without lenient parsing,
+ * inputs must match this object's format more closely.
+ * @param lenient when true, Calendar parsing is lenient
+ * @see android.icu.util.Calendar#setLenient
+ */
+
+public void setCalendarLenient(boolean lenient) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether date/time parsing in the encapsulated Calendar object is lenient.
+ */
+
+public boolean isCalendarLenient() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a boolean attribute for this instance. Aspects of DateFormat leniency are controlled by
+ * boolean attributes.
+ *
+ * @see android.icu.text.DateFormat.BooleanAttribute
+ */
+
+public android.icu.text.DateFormat setBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute key, boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current value for the specified BooleanAttribute for this instance
+ *
+ * if attribute is missing false is returned.
+ *
+ * @see android.icu.text.DateFormat.BooleanAttribute
+ */
+
+public boolean getBooleanAttribute(android.icu.text.DateFormat.BooleanAttribute key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set a particular DisplayContext value in the formatter,
+ * such as CAPITALIZATION_FOR_STANDALONE.
+ *
+ * @param context The DisplayContext value to set.
+ */
+
+public void setContext(android.icu.text.DisplayContext context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Get the formatter's DisplayContext value for the specified DisplayContext.Type,
+ * such as CAPITALIZATION.
+ *
+ * @param type the DisplayContext.Type whose value to return
+ * @return the current DisplayContext setting for the specified type
+ */
+
+public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides hashCode.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates in
+ * the calendar system specified by <code>cal</code>.
+ * <p>
+ * @param cal   The calendar system for which a date format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date format is desired.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar cal, int dateStyle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates in
+ * the calendar system specified by <code>cal</code>.
+ * <p>
+ * @param cal   The calendar system for which a date format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date format is desired.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar cal, int dateStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a time format is desired.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the time format is desired.
+ *
+ * @see DateFormat#getTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar cal, int timeStyle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a time format is desired.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the time format is desired.
+ *
+ * @see DateFormat#getTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar cal, int timeStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ *
+ * @see DateFormat#getDateTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar cal, int dateStyle, int timeStyle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ *
+ * @see DateFormat#getDateTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar cal, int dateStyle, int timeStyle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a date/time formatter that uses the SHORT style
+ * for both the date and the time.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar cal, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a default date/time formatter that uses the SHORT style for both the
+ * date and the time.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstance(android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object for the default locale that can be used
+ * to format dates in the calendar system specified by <code>cal</code>.
+ * <p>
+ * @param cal   The calendar system for which a date format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ */
+
+public static final android.icu.text.DateFormat getDateInstance(android.icu.util.Calendar cal, int dateStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format times in
+ * the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a time format is desired.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @see DateFormat#getTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getTimeInstance(android.icu.util.Calendar cal, int timeStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a {@link android.icu.text.DateFormat DateFormat} object for the default locale that can be used to format
+ * dates and times in the calendar system specified by <code>cal</code>.
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param dateStyle The type of date format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @param timeStyle The type of time format desired.  This can be
+ *              {@link android.icu.text.DateFormat#SHORT DateFormat#SHORT}, {@link android.icu.text.DateFormat#MEDIUM DateFormat#MEDIUM},
+ *              etc.
+ *
+ * @see DateFormat#getDateTimeInstance
+ */
+
+public static final android.icu.text.DateFormat getDateTimeInstance(android.icu.util.Calendar cal, int dateStyle, int timeStyle) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the default locale.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar cal, java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getInstanceForSkeleton(android.icu.util.Calendar cal, java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the default locale.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and times in
+ * the given locale.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.) This can be {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH},
+ *              {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY}, etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar cal, java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a {@link android.icu.text.DateFormat DateFormat} object that can be used to format dates and
+ * times in the calendar system specified by <code>cal</code>.
+ * The getInstanceForSkeleton methods are preferred over the getPatternInstance methods.
+ *
+ * @param cal   The calendar system for which a date/time format is desired.
+ *
+ * @param skeleton The skeleton that selects the fields to be formatted. (Uses the
+ *              {@link android.icu.text.DateTimePatternGenerator DateTimePatternGenerator}.)  This can be
+ *              {@link android.icu.text.DateFormat#ABBR_MONTH DateFormat#ABBR_MONTH}, {@link android.icu.text.DateFormat#MONTH_WEEKDAY_DAY DateFormat#MONTH_WEEKDAY_DAY},
+ *              etc.
+ *
+ * @param locale The locale for which the date/time format is desired.
+ */
+
+public static final android.icu.text.DateFormat getPatternInstance(android.icu.util.Calendar cal, java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant for <i>generic non-location format</i>, abbreviated if possible, such as PT;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String ABBR_GENERIC_TZ = "v";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated month.
+ */
+
+public static final java.lang.String ABBR_MONTH = "MMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated month and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String ABBR_MONTH_DAY = "MMMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String ABBR_MONTH_WEEKDAY_DAY = "MMMEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated quarter.
+ */
+
+public static final java.lang.String ABBR_QUARTER = "QQQ";
+
+/**
+ * <strong>[icu]</strong> Constant for <i>specific non-location format</i>, abbreviated if possible, such as PDT;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String ABBR_SPECIFIC_TZ = "z";
+
+/**
+ * <strong>[icu]</strong> Constant for <i>localized GMT/UTC format</i>, such as GMT+8:00 or HPG-8:00;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String ABBR_UTC_TZ = "ZZZZ";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with abbreviated weekday.
+ */
+
+public static final java.lang.String ABBR_WEEKDAY = "E";
+
+/**
+ * FieldPosition selector for 'a' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#AM_PM Calendar#AM_PM} field.
+ */
+
+public static final int AM_PM_FIELD = 14; // 0xe
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'b' field alignment.
+ * No related Calendar field.
+ * This displays the fixed day period (am/pm/midnight/noon).
+ */
+
+public static final int AM_PM_MIDNIGHT_NOON_FIELD = 35; // 0x23
+
+/**
+ * FieldPosition selector for 'd' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DATE Calendar#DATE} field.
+ */
+
+public static final int DATE_FIELD = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with day.
+ */
+
+public static final java.lang.String DAY = "d";
+
+/**
+ * FieldPosition selector for 'E' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_WEEK Calendar#DAY_OF_WEEK} field.
+ */
+
+public static final int DAY_OF_WEEK_FIELD = 9; // 0x9
+
+/**
+ * FieldPosition selector for 'F' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_WEEK_IN_MONTH Calendar#DAY_OF_WEEK_IN_MONTH} field.
+ */
+
+public static final int DAY_OF_WEEK_IN_MONTH_FIELD = 11; // 0xb
+
+/**
+ * FieldPosition selector for 'D' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_YEAR Calendar#DAY_OF_YEAR} field.
+ */
+
+public static final int DAY_OF_YEAR_FIELD = 10; // 0xa
+
+/**
+ * Constant for default style pattern.  Its value is MEDIUM.
+ */
+
+public static final int DEFAULT = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'e' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DOW_LOCAL Calendar#DOW_LOCAL} field.
+ */
+
+public static final int DOW_LOCAL_FIELD = 19; // 0x13
+
+/**
+ * FieldPosition selector for 'G' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ERA Calendar#ERA} field.
+ */
+
+public static final int ERA_FIELD = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'u' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#EXTENDED_YEAR Calendar#EXTENDED_YEAR} field.
+ */
+
+public static final int EXTENDED_YEAR_FIELD = 20; // 0x14
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'B' field alignment.
+ * No related Calendar field.
+ * This displays the flexible day period.
+ */
+
+public static final int FLEXIBLE_DAY_PERIOD_FIELD = 36; // 0x24
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'S' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MILLISECOND Calendar#MILLISECOND} field.
+ *
+ * Note: Time formats that use 'S' can display a maximum of three
+ * significant digits for fractional seconds, corresponding to millisecond
+ * resolution and a fractional seconds sub-pattern of SSS. If the
+ * sub-pattern is S or SS, the fractional seconds value will be truncated
+ * (not rounded) to the number of display places specified. If the
+ * fractional seconds sub-pattern is longer than SSS, the additional
+ * display places will be filled with zeros.
+ */
+
+public static final int FRACTIONAL_SECOND_FIELD = 8; // 0x8
+
+/**
+ * Constant for full style pattern.
+ */
+
+public static final int FULL = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for <i>generic non-location format</i>, such as Pacific Time;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String GENERIC_TZ = "vvvv";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour, with the locale's preferred hour format (12 or 24).
+ */
+
+public static final java.lang.String HOUR = "j";
+
+/**
+ * FieldPosition selector for 'K' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR Calendar#HOUR} field.
+ * HOUR0_FIELD is used for the zero-based 12-hour clock.
+ * For example, 11:30 PM + 1 hour results in 00:30 AM.
+ */
+
+public static final int HOUR0_FIELD = 16; // 0x10
+
+/**
+ * FieldPosition selector for 'h' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR Calendar#HOUR} field.
+ * HOUR1_FIELD is used for the one-based 12-hour clock.
+ * For example, 11:30 PM + 1 hour results in 12:30 AM.
+ */
+
+public static final int HOUR1_FIELD = 15; // 0xf
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour in 24-hour presentation.
+ */
+
+public static final java.lang.String HOUR24 = "H";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour and minute in 24-hour presentation.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR24_MINUTE = "Hm";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour, minute, and second in
+ * 24-hour presentation.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR24_MINUTE_SECOND = "Hms";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour and minute, with the locale's preferred hour format (12 or 24).
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR_MINUTE = "jm";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with hour, minute, and second,
+ * with the locale's preferred hour format (12 or 24).
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String HOUR_MINUTE_SECOND = "jms";
+
+/**
+ * FieldPosition selector for 'H' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR_OF_DAY Calendar#HOUR_OF_DAY} field.
+ * HOUR_OF_DAY0_FIELD is used for the zero-based 24-hour clock.
+ * For example, 23:59 + 01:00 results in 00:59.
+ */
+
+public static final int HOUR_OF_DAY0_FIELD = 5; // 0x5
+
+/**
+ * FieldPosition selector for 'k' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#HOUR_OF_DAY Calendar#HOUR_OF_DAY} field.
+ * HOUR_OF_DAY1_FIELD is used for the one-based 24-hour clock.
+ * For example, 23:59 + 01:00 results in 24:59.
+ */
+
+public static final int HOUR_OF_DAY1_FIELD = 4; // 0x4
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'g' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#JULIAN_DAY Calendar#JULIAN_DAY} field.
+ */
+
+public static final int JULIAN_DAY_FIELD = 21; // 0x15
+
+/**
+ * <strong>[icu]</strong> Constant for <i>generic location format</i>, such as Los Angeles Time;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String LOCATION_TZ = "VVVV";
+
+/**
+ * Constant for long style pattern.
+ */
+
+public static final int LONG = 1; // 0x1
+
+/**
+ * Constant for medium style pattern.
+ */
+
+public static final int MEDIUM = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'A' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MILLISECONDS_IN_DAY Calendar#MILLISECONDS_IN_DAY} field.
+ */
+
+public static final int MILLISECONDS_IN_DAY_FIELD = 22; // 0x16
+
+/**
+ * Alias for FRACTIONAL_SECOND_FIELD.
+ */
+
+public static final int MILLISECOND_FIELD = 8; // 0x8
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with minute.
+ */
+
+public static final java.lang.String MINUTE = "m";
+
+/**
+ * FieldPosition selector for 'm' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MINUTE Calendar#MINUTE} field.
+ */
+
+public static final int MINUTE_FIELD = 6; // 0x6
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with minute and second.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String MINUTE_SECOND = "ms";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with month.
+ */
+
+public static final java.lang.String MONTH = "MMMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with long month and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String MONTH_DAY = "MMMMd";
+
+/**
+ * FieldPosition selector for 'M' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ */
+
+public static final int MONTH_FIELD = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String MONTH_WEEKDAY_DAY = "MMMMEEEEd";
+
+/**
+ * <strong>[icu]</strong> Constant for empty style pattern.
+ */
+
+public static final int NONE = -1; // 0xffffffff
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with numeric month.
+ */
+
+public static final java.lang.String NUM_MONTH = "M";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with numeric month and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String NUM_MONTH_DAY = "Md";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with numeric month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String NUM_MONTH_WEEKDAY_DAY = "MEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with quarter.
+ */
+
+public static final java.lang.String QUARTER = "QQQQ";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'Q' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ * This displays the quarter.
+ */
+
+public static final int QUARTER_FIELD = 27; // 0x1b
+
+/**
+ * <strong>[icu]</strong> Constant for relative style mask.
+ */
+
+public static final int RELATIVE = 128; // 0x80
+
+/**
+ * <strong>[icu]</strong> Constant for relative default style pattern.
+ */
+
+public static final int RELATIVE_DEFAULT = 130; // 0x82
+
+/**
+ * <strong>[icu]</strong> Constant for relative full style pattern.
+ */
+
+public static final int RELATIVE_FULL = 128; // 0x80
+
+/**
+ * <strong>[icu]</strong> Constant for relative style pattern.
+ */
+
+public static final int RELATIVE_LONG = 129; // 0x81
+
+/**
+ * <strong>[icu]</strong> Constant for relative style pattern.
+ */
+
+public static final int RELATIVE_MEDIUM = 130; // 0x82
+
+/**
+ * <strong>[icu]</strong> Constant for relative style pattern.
+ */
+
+public static final int RELATIVE_SHORT = 131; // 0x83
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with second.
+ */
+
+public static final java.lang.String SECOND = "s";
+
+/**
+ * FieldPosition selector for 's' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#SECOND Calendar#SECOND} field.
+ */
+
+public static final int SECOND_FIELD = 7; // 0x7
+
+/**
+ * Constant for short style pattern.
+ */
+
+public static final int SHORT = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for <i>specific non-location format</i>, such as Pacific Daylight Time;
+ * used in combinations date + time + zone, or time + zone.
+ * @see <a href="http://unicode.org/reports/tr35/#Date_Format_Patterns">LDML Date Format Patterns</a>
+ * @see <a href="http://unicode.org/reports/tr35/#Time_Zone_Fallback">LDML Time Zone Fallback</a>
+ */
+
+public static final java.lang.String SPECIFIC_TZ = "zzzz";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'c' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#DAY_OF_WEEK Calendar#DAY_OF_WEEK} field.
+ * This displays the stand alone day name, if available.
+ */
+
+public static final int STANDALONE_DAY_FIELD = 25; // 0x19
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'L' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ * This displays the stand alone month name, if available.
+ */
+
+public static final int STANDALONE_MONTH_FIELD = 26; // 0x1a
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'q' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#MONTH Calendar#MONTH} field.
+ * This displays the stand alone quarter, if available.
+ */
+
+public static final int STANDALONE_QUARTER_FIELD = 28; // 0x1c
+
+/**
+ * FieldPosition selector for 'z' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.
+ */
+
+public static final int TIMEZONE_FIELD = 17; // 0x11
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'v' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the generic zone
+ * name, if available.
+ */
+
+public static final int TIMEZONE_GENERIC_FIELD = 24; // 0x18
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'X' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the
+ * ISO 8601 local time offset format or UTC indicator ("Z").
+ */
+
+public static final int TIMEZONE_ISO_FIELD = 32; // 0x20
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'x' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the
+ * ISO 8601 local time offset format.
+ */
+
+public static final int TIMEZONE_ISO_LOCAL_FIELD = 33; // 0x21
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'O' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the
+ * localized GMT format.
+ */
+
+public static final int TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31; // 0x1f
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'Z' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.
+ */
+
+public static final int TIMEZONE_RFC_FIELD = 23; // 0x17
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'V' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#ZONE_OFFSET Calendar#ZONE_OFFSET} and
+ * {@link android.icu.util.Calendar#DST_OFFSET Calendar#DST_OFFSET} fields.  This displays the fallback timezone
+ * name when VVVV is specified, and the short standard or daylight
+ * timezone name ignoring commonlyUsed when a single V is specified.
+ */
+
+public static final int TIMEZONE_SPECIAL_FIELD = 29; // 0x1d
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with weekday.
+ */
+
+public static final java.lang.String WEEKDAY = "EEEE";
+
+/**
+ * FieldPosition selector for 'W' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#WEEK_OF_MONTH Calendar#WEEK_OF_MONTH} field.
+ */
+
+public static final int WEEK_OF_MONTH_FIELD = 13; // 0xd
+
+/**
+ * FieldPosition selector for 'w' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#WEEK_OF_YEAR Calendar#WEEK_OF_YEAR} field.
+ */
+
+public static final int WEEK_OF_YEAR_FIELD = 12; // 0xc
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year.
+ */
+
+public static final java.lang.String YEAR = "y";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and abbreviated month.
+ */
+
+public static final java.lang.String YEAR_ABBR_MONTH = "yMMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, abbreviated month, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_ABBR_MONTH_DAY = "yMMMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, abbreviated month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_ABBR_MONTH_WEEKDAY_DAY = "yMMMEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and abbreviated quarter.
+ */
+
+public static final java.lang.String YEAR_ABBR_QUARTER = "yQQQ";
+
+/**
+ * FieldPosition selector for 'y' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#YEAR Calendar#YEAR} field.
+ */
+
+public static final int YEAR_FIELD = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and month.
+ */
+
+public static final java.lang.String YEAR_MONTH = "yMMMM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, month, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_MONTH_DAY = "yMMMMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_MONTH_WEEKDAY_DAY = "yMMMMEEEEd";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'U' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#YEAR Calendar#YEAR} field.
+ * This displays the cyclic year name, if available.
+ */
+
+public static final int YEAR_NAME_FIELD = 30; // 0x1e
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and numeric month.
+ */
+
+public static final java.lang.String YEAR_NUM_MONTH = "yM";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, numeric month, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_NUM_MONTH_DAY = "yMd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year, numeric month, weekday, and day.
+ * Used in combinations date + time, date + time + zone, or time + zone.
+ */
+
+public static final java.lang.String YEAR_NUM_MONTH_WEEKDAY_DAY = "yMEd";
+
+/**
+ * <strong>[icu]</strong> Constant for date skeleton with year and quarter.
+ */
+
+public static final java.lang.String YEAR_QUARTER = "yQQQQ";
+
+/**
+ * <strong>[icu]</strong> FieldPosition selector for 'Y' field alignment,
+ * corresponding to the {@link android.icu.util.Calendar#YEAR_WOY Calendar#YEAR_WOY} field.
+ */
+
+public static final int YEAR_WOY_FIELD = 18; // 0x12
+
+/**
+ * The calendar that <code>DateFormat</code> uses to produce the time field
+ * values needed to implement date and time formatting.  Subclasses should
+ * initialize this to a calendar appropriate for the locale associated with
+ * this <code>DateFormat</code>.
+ * @serial
+ */
+
+protected android.icu.util.Calendar calendar;
+
+/**
+ * The number formatter that <code>DateFormat</code> uses to format numbers
+ * in dates and times.  Subclasses should initialize this to a number format
+ * appropriate for the locale associated with this <code>DateFormat</code>.
+ * @serial
+ */
+
+protected android.icu.text.NumberFormat numberFormat;
+/**
+ * boolean attributes
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum BooleanAttribute {
+/**
+ * indicates whitespace tolerance. Also included is trailing dot tolerance.
+ */
+
+PARSE_ALLOW_WHITESPACE,
+/**
+ * indicates tolerance of numeric data when String data may be assumed.
+ * e.g. YEAR_NAME_FIELD
+ */
+
+PARSE_ALLOW_NUMERIC,
+/**
+ * indicates tolerance of pattern mismatch between input data and specified format pattern.
+ * e.g. accepting "September" for a month pattern of MMM ("Sep")
+ */
+
+PARSE_MULTIPLE_PATTERNS_FOR_MATCH,
+/**
+ * indicates tolerance of a partial literal match
+ * e.g. accepting "--mon-02-march-2011" for a pattern of "'--: 'EEE-WW-MMMM-yyyy"
+ */
+
+PARSE_PARTIAL_LITERAL_MATCH;
+}
+
+/**
+ * The instances of this inner class are used as attribute keys and values
+ * in AttributedCharacterIterator that
+ * DateFormat.formatToCharacterIterator() method returns.
+ *
+ * <p>There is no public constructor to this class, the only instances are the
+ * constants defined here.
+ * <p>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Field extends java.text.Format.Field {
+
+/**
+ * Constructs a <code>DateFormat.Field</code> with the given name and
+ * the <code>Calendar</code> field which this attribute represents.  Use -1 for
+ * <code>calendarField</code> if this field does not have a corresponding
+ * <code>Calendar</code> field.
+ *
+ * @param name          Name of the attribute
+ * @param calendarField <code>Calendar</code> field constant
+ */
+
+protected Field(java.lang.String name, int calendarField) { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>Field</code> constant that corresponds to the <code>
+ * Calendar</code> field <code>calendarField</code>.  If there is no
+ * corresponding <code>Field</code> is available, null is returned.
+ *
+ * @param calendarField <code>Calendar</code> field constant
+ * @return <code>Field</code> associated with the <code>calendarField</code>,
+ * or null if no associated <code>Field</code> is available.
+ * @throws java.lang.IllegalArgumentException if <code>calendarField</code> is not
+ * a valid <code>Calendar</code> field constant.
+ */
+
+public static android.icu.text.DateFormat.Field ofCalendarField(int calendarField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <code>Calendar</code> field associated with this attribute.
+ * If there is no corresponding <code>Calendar</code> available, this will
+ * return -1.
+ *
+ * @return <code>Calendar</code> constant for this attribute.
+ */
+
+public int getCalendarField() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resolves instances being deserialized to the predefined constants.
+ *
+ * @throws java.io.InvalidObjectException if the constant could not be resolved.
+ */
+
+protected java.lang.Object readResolve() throws java.io.InvalidObjectException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant identifying the time of day indicator(am/pm).
+ */
+
+public static final android.icu.text.DateFormat.Field AM_PM;
+static { AM_PM = null; }
+
+/**
+ * <strong>[icu]</strong> Constant identifying the am/pm/midnight/noon field.
+ */
+
+public static final android.icu.text.DateFormat.Field AM_PM_MIDNIGHT_NOON;
+static { AM_PM_MIDNIGHT_NOON = null; }
+
+/**
+ * Constant identifying the day of month field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_MONTH;
+static { DAY_OF_MONTH = null; }
+
+/**
+ * Constant identifying the day of week field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_WEEK;
+static { DAY_OF_WEEK = null; }
+
+/**
+ * Constant identifying the day of week in month field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_WEEK_IN_MONTH;
+static { DAY_OF_WEEK_IN_MONTH = null; }
+
+/**
+ * Constant identifying the day of year field.
+ */
+
+public static final android.icu.text.DateFormat.Field DAY_OF_YEAR;
+static { DAY_OF_YEAR = null; }
+
+/**
+ * Constant identifying the local day of week field.
+ */
+
+public static final android.icu.text.DateFormat.Field DOW_LOCAL;
+static { DOW_LOCAL = null; }
+
+/**
+ * Constant identifying the era field.
+ */
+
+public static final android.icu.text.DateFormat.Field ERA;
+static { ERA = null; }
+
+/**
+ * Constant identifying the extended year field.
+ */
+
+public static final android.icu.text.DateFormat.Field EXTENDED_YEAR;
+static { EXTENDED_YEAR = null; }
+
+/**
+ * <strong>[icu]</strong> Constant identifying the flexible day period field.
+ */
+
+public static final android.icu.text.DateFormat.Field FLEXIBLE_DAY_PERIOD;
+static { FLEXIBLE_DAY_PERIOD = null; }
+
+/**
+ * Constant identifying the hour(0-11) field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR0;
+static { HOUR0 = null; }
+
+/**
+ * Constant identifying the hour(1-12) field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR1;
+static { HOUR1 = null; }
+
+/**
+ * Constant identifying the hour(0-23) of day field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR_OF_DAY0;
+static { HOUR_OF_DAY0 = null; }
+
+/**
+ * Constant identifying the hour(1-24) of day field.
+ */
+
+public static final android.icu.text.DateFormat.Field HOUR_OF_DAY1;
+static { HOUR_OF_DAY1 = null; }
+
+/**
+ * Constant identifying the Julian day field.
+ */
+
+public static final android.icu.text.DateFormat.Field JULIAN_DAY;
+static { JULIAN_DAY = null; }
+
+/**
+ * Constant identifying the millisecond field.
+ */
+
+public static final android.icu.text.DateFormat.Field MILLISECOND;
+static { MILLISECOND = null; }
+
+/**
+ * Constant identifying the milliseconds in day field.
+ */
+
+public static final android.icu.text.DateFormat.Field MILLISECONDS_IN_DAY;
+static { MILLISECONDS_IN_DAY = null; }
+
+/**
+ * Constant identifying the minute field.
+ */
+
+public static final android.icu.text.DateFormat.Field MINUTE;
+static { MINUTE = null; }
+
+/**
+ * Constant identifying the month field.
+ */
+
+public static final android.icu.text.DateFormat.Field MONTH;
+static { MONTH = null; }
+
+/**
+ * Constant identifying the quarter field.
+ */
+
+public static final android.icu.text.DateFormat.Field QUARTER;
+static { QUARTER = null; }
+
+/**
+ * Constant identifying the second field.
+ */
+
+public static final android.icu.text.DateFormat.Field SECOND;
+static { SECOND = null; }
+
+/**
+ * Constant identifying the time zone field.
+ */
+
+public static final android.icu.text.DateFormat.Field TIME_ZONE;
+static { TIME_ZONE = null; }
+
+/**
+ * Constant identifying the week of month field.
+ */
+
+public static final android.icu.text.DateFormat.Field WEEK_OF_MONTH;
+static { WEEK_OF_MONTH = null; }
+
+/**
+ * Constant identifying the week of year field.
+ */
+
+public static final android.icu.text.DateFormat.Field WEEK_OF_YEAR;
+static { WEEK_OF_YEAR = null; }
+
+/**
+ * Constant identifying the year field.
+ */
+
+public static final android.icu.text.DateFormat.Field YEAR;
+static { YEAR = null; }
+
+/**
+ * Constant identifying the year used with week of year field.
+ */
+
+public static final android.icu.text.DateFormat.Field YEAR_WOY;
+static { YEAR_WOY = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateFormatSymbols.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateFormatSymbols.java
new file mode 100644
index 0000000..eb9e1d5
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateFormatSymbols.java
@@ -0,0 +1,561 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.MissingResourceException;
+import java.util.Locale;
+import android.icu.util.Calendar;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DateFormatSymbols}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>DateFormatSymbols</code> is a public class for encapsulating
+ * localizable date-time formatting data, such as the names of the
+ * months, the names of the days of the week, and the time zone data.
+ * <code>DateFormat</code> and <code>SimpleDateFormat</code> both use
+ * <code>DateFormatSymbols</code> to encapsulate this information.
+ *
+ * <p>Typically you shouldn't use <code>DateFormatSymbols</code> directly.
+ * Rather, you are encouraged to create a date-time formatter with the
+ * <code>DateFormat</code> class's factory methods: <code>getTimeInstance</code>,
+ * <code>getDateInstance</code>, or <code>getDateTimeInstance</code>.
+ * These methods automatically create a <code>DateFormatSymbols</code> for
+ * the formatter so that you don't have to. After the
+ * formatter is created, you may modify its format pattern using the
+ * <code>setPattern</code> method. For more information about
+ * creating formatters using <code>DateFormat</code>'s factory methods,
+ * see {@link android.icu.text.DateFormat DateFormat}.
+ *
+ * <p>If you decide to create a date-time formatter with a specific
+ * format pattern for a specific locale, you can do so with:
+ * <blockquote>
+ * <pre>
+ * new SimpleDateFormat(aPattern, new DateFormatSymbols(aLocale)).
+ * </pre>
+ * </blockquote>
+ *
+ * <p><code>DateFormatSymbols</code> objects are clonable. When you obtain
+ * a <code>DateFormatSymbols</code> object, feel free to modify the
+ * date-time formatting data. For instance, you can replace the localized
+ * date-time format pattern characters with the ones that you feel easy
+ * to remember. Or you can change the representative cities
+ * to your favorite ones.
+ *
+ * <p>New <code>DateFormatSymbols</code> subclasses may be added to support
+ * <code>SimpleDateFormat</code> for date-time formatting for additional locales.
+ *
+ * @see          android.icu.text.DateFormat
+ * @see          android.icu.text.SimpleDateFormat
+ * @author       Chen-Lieh Huang
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateFormatSymbols implements java.io.Serializable, java.lang.Cloneable {
+
+/**
+ * Constructs a DateFormatSymbols object by loading format data from
+ * resources for the default <code>FORMAT</code> locale.
+ *
+ * @throws java.util.MissingResourceException if the resources for the default locale
+ *          cannot be found or cannot be loaded.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DateFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a DateFormatSymbols object by loading format data from
+ * resources for the given locale.
+ *
+ * @throws java.util.MissingResourceException if the resources for the specified
+ *          locale cannot be found or cannot be loaded.
+ */
+
+public DateFormatSymbols(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constructs a DateFormatSymbols object by loading format data from
+ * resources for the given ulocale.
+ *
+ * @throws java.util.MissingResourceException if the resources for the specified
+ *          locale cannot be found or cannot be loaded.
+ */
+
+public DateFormatSymbols(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the {@link android.icu.text.DateFormatSymbols DateFormatSymbols} object that should be used to format a
+ * calendar system's dates in the given locale.
+ *
+ * @param cal       The calendar system whose date format symbols are desired.
+ * @param locale    The locale whose symbols are desired.
+ *
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(android.icu.util.Calendar cal, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the {@link android.icu.text.DateFormatSymbols DateFormatSymbols} object that should be used to format a
+ * calendar system's dates in the given locale.
+ * @param cal       The calendar system whose date format symbols are desired.
+ * @param locale    The ulocale whose symbols are desired.
+ *
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(android.icu.util.Calendar cal, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Variant of DateFormatSymbols(Calendar, Locale) that takes the Calendar class
+ * instead of a Calendar instance.
+ * @see #DateFormatSymbols(Calendar, Locale)
+ */
+
+public DateFormatSymbols(java.lang.Class<? extends android.icu.util.Calendar> calendarClass, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Variant of DateFormatSymbols(Calendar, ULocale) that takes the Calendar class
+ * instead of a Calendar instance.
+ * @see #DateFormatSymbols(Calendar, Locale)
+ */
+
+public DateFormatSymbols(java.lang.Class<? extends android.icu.util.Calendar> calendarClass, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fetches a custom calendar's DateFormatSymbols out of the given resource
+ * bundle.  Symbols that are not overridden are inherited from the
+ * default DateFormatSymbols for the locale.
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(java.util.ResourceBundle bundle, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fetches a custom calendar's DateFormatSymbols out of the given resource
+ * bundle.  Symbols that are not overridden are inherited from the
+ * default DateFormatSymbols for the locale.
+ * @see android.icu.text.DateFormatSymbols#DateFormatSymbols(java.util.Locale)
+ */
+
+public DateFormatSymbols(java.util.ResourceBundle bundle, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DateFormatSymbols instance for the default locale.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getInstance</code>,
+ * this method simply returns <code>new android.icu.text.DateFormatSymbols()</code>.
+ * ICU does not support <code>DateFormatSymbolsProvider</code> introduced in Java 6
+ * or its equivalent implementation for now.
+ *
+ * @return A DateFormatSymbols instance.
+ */
+
+public static android.icu.text.DateFormatSymbols getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DateFormatSymbols instance for the given locale.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getInstance</code>,
+ * this method simply returns <code>new android.icu.text.DateFormatSymbols(locale)</code>.
+ * ICU does not support <code>DateFormatSymbolsProvider</code> introduced in Java 6
+ * or its equivalent implementation for now.
+ *
+ * @param locale the locale.
+ * @return A DateFormatSymbols instance.
+ */
+
+public static android.icu.text.DateFormatSymbols getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a DateFormatSymbols instance for the given locale.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getInstance</code>,
+ * this method simply returns <code>new android.icu.text.DateFormatSymbols(locale)</code>.
+ * ICU does not support <code>DateFormatSymbolsProvider</code> introduced in Java 6
+ * or its equivalent implementation for now.
+ *
+ * @param locale the locale.
+ * @return A DateFormatSymbols instance.
+ */
+
+public static android.icu.text.DateFormatSymbols getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of all locales for which the <code>getInstance</code> methods of
+ * this class can return localized instances.
+ *
+ * <strong>[icu] Note:</strong> Unlike <code>java.text.DateFormatSymbols#getAvailableLocales</code>,
+ * this method simply returns the array of <code>Locale</code>s available in this
+ * class.  ICU does not support <code>DateFormatSymbolsProvider</code> introduced in
+ * Java 6 or its equivalent implementation for now.
+ *
+ * @return An array of <code>Locale</code>s for which localized
+ * <code>DateFormatSymbols</code> instances are available.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns abbreviated era strings. For example: "AD" and "BC".
+ * @return the era strings.
+ */
+
+public java.lang.String[] getEras() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets abbreviated era strings. For example: "AD" and "BC".
+ * @param newEras the new era strings.
+ */
+
+public void setEras(java.lang.String[] newEras) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns full era name strings. For example: "Anno Domini" and "Before Christ".
+ * @return the era strings.
+ */
+
+public java.lang.String[] getEraNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets full era name strings. For example: "Anno Domini" and "Before Christ".
+ * @param newEraNames the new era strings.
+ */
+
+public void setEraNames(java.lang.String[] newEraNames) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns narrow era name strings. For example: "A" and "B".
+ * @return the narrow era strings.
+ */
+
+public java.lang.String[] getNarrowEras() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets narrow era name strings. For example: "A" and "B".
+ * @param newNarrowEras the new narrow era strings.
+ */
+
+public void setNarrowEras(java.lang.String[] newNarrowEras) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns month strings. For example: "January", "February", etc.
+ * @return the month strings.
+ */
+
+public java.lang.String[] getMonths() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns month strings. For example: "January", "February", etc.
+ * @param context    The month context, FORMAT or STANDALONE.
+ * @param width      The width or the returned month string,
+ *                   either WIDE, ABBREVIATED, or NARROW.
+ * @return the month strings.
+ */
+
+public java.lang.String[] getMonths(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets month strings. For example: "January", "February", etc.
+ * @param newMonths the new month strings.
+ */
+
+public void setMonths(java.lang.String[] newMonths) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets month strings. For example: "January", "February", etc.
+ * @param newMonths the new month strings.
+ * @param context    The formatting context, FORMAT or STANDALONE.
+ * @param width      The width of the month string,
+ *                   either WIDE, ABBREVIATED, or NARROW.
+ */
+
+public void setMonths(java.lang.String[] newMonths, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns short month strings. For example: "Jan", "Feb", etc.
+ * @return the short month strings.
+ */
+
+public java.lang.String[] getShortMonths() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets short month strings. For example: "Jan", "Feb", etc.
+ * @param newShortMonths the new short month strings.
+ */
+
+public void setShortMonths(java.lang.String[] newShortMonths) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns wide weekday strings. For example: "Sunday", "Monday", etc.
+ * @return the weekday strings. Use <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc. to index the result array.
+ */
+
+public java.lang.String[] getWeekdays() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns weekday strings. For example: "Sunday", "Monday", etc.
+ * @return the weekday strings. Use <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc. to index the result array.
+ * @param context    Formatting context, either FORMAT or STANDALONE.
+ * @param width      Width of strings to be returned, either
+ *                   WIDE, ABBREVIATED, SHORT, or NARROW
+ */
+
+public java.lang.String[] getWeekdays(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets weekday strings. For example: "Sunday", "Monday", etc.
+ * @param newWeekdays The new weekday strings.
+ * @param context     The formatting context, FORMAT or STANDALONE.
+ * @param width       The width of the strings,
+ *                    either WIDE, ABBREVIATED, SHORT, or NARROW.
+ */
+
+public void setWeekdays(java.lang.String[] newWeekdays, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets wide weekday strings. For example: "Sunday", "Monday", etc.
+ * @param newWeekdays the new weekday strings. The array should
+ * be indexed by <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc.
+ */
+
+public void setWeekdays(java.lang.String[] newWeekdays) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns abbreviated weekday strings; for example: "Sun", "Mon", etc.
+ * (Note: the method name is misleading; it does not get the CLDR-style
+ * "short" weekday strings, e.g. "Su", "Mo", etc.)
+ * @return the abbreviated weekday strings. Use <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc. to index the result array.
+ */
+
+public java.lang.String[] getShortWeekdays() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets abbreviated weekday strings; for example: "Sun", "Mon", etc.
+ * (Note: the method name is misleading; it does not set the CLDR-style
+ * "short" weekday strings, e.g. "Su", "Mo", etc.)
+ * @param newAbbrevWeekdays the new abbreviated weekday strings. The array should
+ * be indexed by <code>Calendar.SUNDAY</code>,
+ * <code>Calendar.MONDAY</code>, etc.
+ */
+
+public void setShortWeekdays(java.lang.String[] newAbbrevWeekdays) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns quarter strings. For example: "1st Quarter", "2nd Quarter", etc.
+ * @param context    The quarter context, FORMAT or STANDALONE.
+ * @param width      The width or the returned quarter string,
+ *                   either WIDE or ABBREVIATED. There are no NARROW quarters.
+ * @return the quarter strings.
+ */
+
+public java.lang.String[] getQuarters(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets quarter strings. For example: "1st Quarter", "2nd Quarter", etc.
+ * @param newQuarters the new quarter strings.
+ * @param context    The formatting context, FORMAT or STANDALONE.
+ * @param width      The width of the quarter string,
+ *                   either WIDE or ABBREVIATED. There are no NARROW quarters.
+ */
+
+public void setQuarters(java.lang.String[] newQuarters, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns cyclic year name strings if the calendar has them,
+ * for example: "jia-zi", "yi-chou", etc.
+ * @param context   The usage context: FORMAT, STANDALONE.
+ * @param width     The requested name width: WIDE, ABBREVIATED, SHORT, NARROW.
+ * @return          The year name strings, or null if they are not
+ *                  available for this calendar.
+ */
+
+public java.lang.String[] getYearNames(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets cyclic year name strings, for example: "jia-zi", "yi-chou", etc.
+ * @param yearNames The new cyclic year name strings.
+ * @param context   The usage context: FORMAT, STANDALONE (currently only FORMAT is supported).
+ * @param width     The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported).
+ */
+
+public void setYearNames(java.lang.String[] yearNames, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns calendar zodiac name strings if the calendar has them,
+ * for example: "Rat", "Ox", "Tiger", etc.
+ * @param context   The usage context: FORMAT, STANDALONE.
+ * @param width     The requested name width: WIDE, ABBREVIATED, SHORT, NARROW.
+ * @return          The zodiac name strings, or null if they are not
+ *                  available for this calendar.
+ */
+
+public java.lang.String[] getZodiacNames(int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets calendar zodiac name strings, for example: "Rat", "Ox", "Tiger", etc.
+ * @param zodiacNames   The new zodiac name strings.
+ * @param context   The usage context: FORMAT, STANDALONE (currently only FORMAT is supported).
+ * @param width     The name width: WIDE, ABBREVIATED, NARROW (currently only ABBREVIATED is supported).
+ */
+
+public void setZodiacNames(java.lang.String[] zodiacNames, int context, int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns am/pm strings. For example: "AM" and "PM".
+ * @return the weekday strings.
+ */
+
+public java.lang.String[] getAmPmStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets am/pm strings. For example: "AM" and "PM".
+ * @param newAmpms the new ampm strings.
+ */
+
+public void setAmPmStrings(java.lang.String[] newAmpms) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns time zone strings.
+ * <p>
+ * The array returned by this API is a two dimensional String array and
+ * each row contains at least following strings:
+ * <ul>
+ * <li>ZoneStrings[n][0] - System time zone ID
+ * <li>ZoneStrings[n][1] - Long standard time display name
+ * <li>ZoneStrings[n][2] - Short standard time display name
+ * <li>ZoneStrings[n][3] - Long daylight saving time display name
+ * <li>ZoneStrings[n][4] - Short daylight saving time display name
+ * </ul>
+ * When a localized display name is not available, the corresponding
+ * array element will be <code>null</code>.
+ * <p>
+ * <b>Note</b>: ICU implements the time zone display name formatting algorithm
+ * specified by <a href="http://www.unicode.org/reports/tr35/">UTS#35 Unicode
+ * Locale Data Markup Language(LDML)</a>. The algorithm supports historic
+ * display name changes and various different types of names not available in
+ * {@link java.text.DateFormatSymbols#getZoneStrings()}. For accessing the full
+ * set of time zone string data used by ICU implementation, you should use
+ * {@link android.icu.text.TimeZoneNames TimeZoneNames} APIs instead.
+ *
+ * @return the time zone strings.
+ */
+
+public java.lang.String[][] getZoneStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets time zone strings.
+ * <p>
+ * <b>Note</b>: {@link android.icu.text.SimpleDateFormat SimpleDateFormat} no longer uses the
+ * zone strings stored in a <code>DateFormatSymbols</code>.
+ * Therefore, the time zone strings set by this method have
+ * no effects in an instance of <code>SimpleDateFormat</code>
+ * for formatting time zones. If you want to customize time
+ * zone display names formatted by <code>SimpleDateFormat</code>,
+ * you should customize {@link android.icu.text.TimeZoneFormat TimeZoneFormat} and set the
+ * instance by {@link android.icu.text.SimpleDateFormat#setTimeZoneFormat(android.icu.text.TimeZoneFormat) SimpleDateFormat#setTimeZoneFormat(TimeZoneFormat)}
+ * instead.
+ *
+ * @param newZoneStrings the new time zone strings.
+ */
+
+public void setZoneStrings(java.lang.String[][] newZoneStrings) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns localized date-time pattern characters. For example: 'u', 't', etc.
+ *
+ * <p>Note: ICU no longer provides localized date-time pattern characters for a locale
+ * starting ICU 3.8.  This method returns the non-localized date-time pattern
+ * characters unless user defined localized data is set by setLocalPatternChars.
+ * @return the localized date-time pattern characters.
+ */
+
+public java.lang.String getLocalPatternChars() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets localized date-time pattern characters. For example: 'u', 't', etc.
+ * @param newLocalPatternChars the new localized date-time
+ * pattern characters.
+ */
+
+public void setLocalPatternChars(java.lang.String newLocalPatternChars) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode.
+ * Generates a hash code for the DateFormatSymbols object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes format symbols for the locale and calendar type
+ * @param desiredLocale The locale whose symbols are desired.
+ * @param type          The calendar type whose date format symbols are desired.
+ */
+
+protected void initializeData(android.icu.util.ULocale desiredLocale, java.lang.String type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant for width.
+ */
+
+public static final int ABBREVIATED = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for context.
+ */
+
+public static final int FORMAT = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for width.
+ */
+
+public static final int NARROW = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Constant for width; only supported for weekdays.
+ */
+
+public static final int SHORT = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for context.
+ */
+
+public static final int STANDALONE = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant for width.
+ */
+
+public static final int WIDE = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalFormat.java
new file mode 100644
index 0000000..3599e1d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalFormat.java
@@ -0,0 +1,595 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*   Copyright (C) 2008-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*/
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Calendar;
+import android.icu.util.DateInterval;
+import java.text.FieldPosition;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+import android.icu.util.Output;
+import android.icu.util.TimeZone;
+
+/**
+ * DateIntervalFormat is a class for formatting and parsing date
+ * intervals in a language-independent manner.
+ * Only formatting is supported. Parsing is not supported.
+ *
+ * <P>
+ * Date interval means from one date to another date,
+ * for example, from "Jan 11, 2008" to "Jan 18, 2008".
+ * We introduced class DateInterval to represent it.
+ * DateInterval is a pair of UDate, which is
+ * the standard milliseconds since 24:00 GMT, Jan 1, 1970.
+ *
+ * <P>
+ * DateIntervalFormat formats a DateInterval into
+ * text as compactly as possible.
+ * For example, the date interval format from "Jan 11, 2008" to "Jan 18,. 2008"
+ * is "Jan 11-18, 2008" for English.
+ * And it parses text into DateInterval,
+ * although initially, parsing is not supported.
+ *
+ * <P>
+ * There is no structural information in date time patterns.
+ * For any punctuations and string literals inside a date time pattern,
+ * we do not know whether it is just a separator, or a prefix, or a suffix.
+ * Without such information, so, it is difficult to generate a sub-pattern
+ * (or super-pattern) by algorithm.
+ * So, formatting a DateInterval is pattern-driven. It is very
+ * similar to formatting in SimpleDateFormat.
+ * We introduce class DateIntervalInfo to save date interval
+ * patterns, similar to date time pattern in SimpleDateFormat.
+ *
+ * <P>
+ * Logically, the interval patterns are mappings
+ * from (skeleton, the_largest_different_calendar_field)
+ * to (date_interval_pattern).
+ *
+ * <P>
+ * A skeleton
+ * <ol>
+ * <li>
+ * only keeps the field pattern letter and ignores all other parts
+ * in a pattern, such as space, punctuations, and string literals.
+ * <li>
+ * hides the order of fields.
+ * <li>
+ * might hide a field's pattern letter length.
+ *
+ * For those non-digit calendar fields, the pattern letter length is
+ * important, such as MMM, MMMM, and MMMMM; EEE and EEEE,
+ * and the field's pattern letter length is honored.
+ *
+ * For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy,
+ * the field pattern length is ignored and the best match, which is defined
+ * in date time patterns, will be returned without honor the field pattern
+ * letter length in skeleton.
+ * </ol>
+ *
+ * <P>
+ * The calendar fields we support for interval formatting are:
+ * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, and
+ * second (though we do not currently have specific intervalFormat data for
+ * skeletons with seconds).
+ * Those calendar fields can be defined in the following order:
+ * year &gt; month &gt; date &gt; hour (in day) &gt; minute &gt; second
+ *
+ * The largest different calendar fields between 2 calendars is the
+ * first different calendar field in above order.
+ *
+ * For example: the largest different calendar fields between "Jan 10, 2007"
+ * and "Feb 20, 2008" is year.
+ *
+ * <P>
+ * For other calendar fields, the compact interval formatting is not
+ * supported. And the interval format will be fall back to fall-back
+ * patterns, which is mostly "{date0} - {date1}".
+ *
+ * <P>
+ * There is a set of pre-defined static skeleton strings in DateFormat,
+ * There are pre-defined interval patterns for those pre-defined skeletons
+ * in locales' resource files.
+ * For example, for a skeleton YEAR_ABBR_MONTH_DAY, which is  "yMMMd",
+ * in  en_US, if the largest different calendar field between date1 and date2
+ * is "year", the date interval pattern  is "MMM d, yyyy - MMM d, yyyy",
+ * such as "Jan 10, 2007 - Jan 10, 2008".
+ * If the largest different calendar field between date1 and date2 is "month",
+ * the date interval pattern is "MMM d - MMM d, yyyy",
+ * such as "Jan 10 - Feb 10, 2007".
+ * If the largest different calendar field between date1 and date2 is "day",
+ * the date interval pattern is ""MMM d-d, yyyy", such as "Jan 10-20, 2007".
+ *
+ * For date skeleton, the interval patterns when year, or month, or date is
+ * different are defined in resource files.
+ * For time skeleton, the interval patterns when am/pm, or hour, or minute is
+ * different are defined in resource files.
+ *
+ * <P>
+ * If a skeleton is not found in a locale's DateIntervalInfo, which means
+ * the interval patterns for the skeleton is not defined in resource file,
+ * the interval pattern will falls back to the interval "fallback" pattern
+ * defined in resource file.
+ * If the interval "fallback" pattern is not defined, the default fall-back
+ * is "{date0} - {data1}".
+ *
+ * <P>
+ * For the combination of date and time,
+ * The rule to genearte interval patterns are:
+ * <ol>
+ * <li>
+ *    when the year, month, or day differs, falls back to fall-back
+ *    interval pattern, which mostly is the concatenate the two original
+ *    expressions with a separator between,
+ *    For example, interval pattern from "Jan 10, 2007 10:10 am"
+ *    to "Jan 11, 2007 10:10am" is
+ *    "Jan 10, 2007 10:10 am - Jan 11, 2007 10:10am"
+ * <li>
+ *    otherwise, present the date followed by the range expression
+ *    for the time.
+ *    For example, interval pattern from "Jan 10, 2007 10:10 am"
+ *    to "Jan 10, 2007 11:10am" is "Jan 10, 2007 10:10 am - 11:10am"
+ * </ol>
+ *
+ *
+ * <P>
+ * If two dates are the same, the interval pattern is the single date pattern.
+ * For example, interval pattern from "Jan 10, 2007" to "Jan 10, 2007" is
+ * "Jan 10, 2007".
+ *
+ * Or if the presenting fields between 2 dates have the exact same values,
+ * the interval pattern is the  single date pattern.
+ * For example, if user only requests year and month,
+ * the interval pattern from "Jan 10, 2007" to "Jan 20, 2007" is "Jan 2007".
+ *
+ * <P>
+ * DateIntervalFormat needs the following information for correct
+ * formatting: time zone, calendar type, pattern, date format symbols,
+ * and date interval patterns.
+ * It can be instantiated in several ways:
+ * <ol>
+ * <li>
+ *    create an instance using default or given locale plus given skeleton.
+ *    Users are encouraged to created date interval formatter this way and
+ *    to use the pre-defined skeleton macros, such as
+ *    YEAR_NUM_MONTH, which consists the calendar fields and
+ *    the format style.
+ * </li>
+ * <li>
+ *    create an instance using default or given locale plus given skeleton
+ *    plus a given DateIntervalInfo.
+ *    This factory method is for powerful users who want to provide their own
+ *    interval patterns.
+ *    Locale provides the timezone, calendar, and format symbols information.
+ *    Local plus skeleton provides full pattern information.
+ *    DateIntervalInfo provides the date interval patterns.
+ * </li>
+ * </ol>
+ *
+ * <P>
+ * For the calendar field pattern letter, such as G, y, M, d, a, h, H, m, s etc.
+ * DateIntervalFormat uses the same syntax as that of
+ * DateTime format.
+ *
+ * <P>
+ * Code Sample: general usage
+ * <pre>
+ *
+ *   // the date interval object which the DateIntervalFormat formats on
+ *   // and parses into
+ *   DateInterval dtInterval = new DateInterval(1000*3600*24L, 1000*3600*24*2L);
+ *   DateIntervalFormat dtIntervalFmt = DateIntervalFormat.getInstance(
+ *                   YEAR_MONTH_DAY, Locale("en", "GB", ""));
+ *   StringBuffer str = new StringBuffer("");
+ *   FieldPosition pos = new FieldPosition(0);
+ *   // formatting
+ *   dtIntervalFmt.format(dtInterval, dateIntervalString, pos);
+ *
+ * </pre>
+ *
+ * <P>
+ * Code Sample: for powerful users who wants to use their own interval pattern
+ * <pre>
+ *
+ *     import android.icu.text.DateIntervalInfo;
+ *     import android.icu.text.DateIntervalFormat;
+ *     ....................
+ *
+ *     // Get DateIntervalFormat instance using default locale
+ *     DateIntervalFormat dtitvfmt = DateIntervalFormat.getInstance(YEAR_MONTH_DAY);
+ *
+ *     // Create an empty DateIntervalInfo object, which does not have any interval patterns inside.
+ *     dtitvinf = new DateIntervalInfo();
+ *
+ *     // a series of set interval patterns.
+ *     // Only ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH, DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY,
+ *     MINUTE, SECOND and MILLISECOND are supported.
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.YEAR, "'y ~ y'");
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.MONTH, "yyyy 'diff' MMM d - MMM d");
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.DATE, "yyyy MMM d ~ d");
+ *     dtitvinf.setIntervalPattern("yMMMd", Calendar.HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm");
+ *
+ *     // Set fallback interval pattern. Fallback pattern is used when interval pattern is not found.
+ *     // If the fall-back pattern is not set,  falls back to {date0} - {date1} if interval pattern is not found.
+ *     dtitvinf.setFallbackIntervalPattern("{0} - {1}");
+ *
+ *     // Set above DateIntervalInfo object as the interval patterns of date interval formatter
+ *     dtitvfmt.setDateIntervalInfo(dtitvinf);
+ *
+ *     // Prepare to format
+ *     pos = new FieldPosition(0);
+ *     str = new StringBuffer("");
+ *
+ *     // The 2 calendars should be equivalent, otherwise,  IllegalArgumentException will be thrown by format()
+ *     Calendar fromCalendar = (Calendar) dtfmt.getCalendar().clone();
+ *     Calendar toCalendar = (Calendar) dtfmt.getCalendar().clone();
+ *     fromCalendar.setTimeInMillis(....);
+ *     toCalendar.setTimeInMillis(...);
+ *
+ *     //Formatting given 2 calendars
+ *     dtitvfmt.format(fromCalendar, toCalendar, str, pos);
+ *
+ *
+ * </pre>
+ * <h3>Synchronization</h3>
+ *
+ * The format methods of DateIntervalFormat may be used concurrently from multiple threads.
+ * Functions that alter the state of a DateIntervalFormat object (setters)
+ * may not be used concurrently with any other functions.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateIntervalFormat extends android.icu.text.UFormat {
+
+DateIntervalFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton and  the default <code>FORMAT</code> locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale)
+ * with the value of locale as default <code>FORMAT</code> locale.
+ *
+ * @param skeleton  the skeleton on which interval format based.
+ * @return          a date time interval formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton and a given locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale)
+ *
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/dateintervalformat/DateIntervalFormatSample.java dtitvfmtPreDefinedExample}
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton and a given locale.
+ * <P>
+ * In this factory method,
+ * the date interval pattern information is load from resource files.
+ * Users are encouraged to created date interval formatter this way and
+ * to use the pre-defined skeleton macros.
+ *
+ * <P>
+ * There are pre-defined skeletons in DateFormat,
+ * such as MONTH_DAY, YEAR_MONTH_WEEKDAY_DAY etc.
+ *
+ * Those skeletons have pre-defined interval patterns in resource files.
+ * Users are encouraged to use them.
+ * For example:
+ * DateIntervalFormat.getInstance(DateFormat.MONTH_DAY, false, loc);
+ *
+ * The given Locale provides the interval patterns.
+ * For example, for en_GB, if skeleton is YEAR_ABBR_MONTH_WEEKDAY_DAY,
+ * which is "yMMMEEEd",
+ * the interval patterns defined in resource file to above skeleton are:
+ * "EEE, d MMM, yyyy - EEE, d MMM, yyyy" for year differs,
+ * "EEE, d MMM - EEE, d MMM, yyyy" for month differs,
+ * "EEE, d - EEE, d MMM, yyyy" for day differs,
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton
+ *  DateIntervalInfo, and the default <code>FORMAT</code> locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale, DateIntervalInfo dtitvinf)
+ * with the locale value as default <code>FORMAT</code> locale.
+ *
+ * @param skeleton  the skeleton on which interval format based.
+ * @param dtitvinf  the DateIntervalInfo object to be adopted.
+ * @return          a date time interval formatter.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, android.icu.text.DateIntervalInfo dtitvinf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton
+ * a DateIntervalInfo, and the given locale.
+ *
+ * This is a convenient override of
+ * getInstance(String skeleton, ULocale locale, DateIntervalInfo dtitvinf)
+ *
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/dateintervalformat/DateIntervalFormatSample.java dtitvfmtCustomizedExample}
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @param dtitvinf  the DateIntervalInfo object to be adopted.
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, java.util.Locale locale, android.icu.text.DateIntervalInfo dtitvinf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a DateIntervalFormat from skeleton
+ * a DateIntervalInfo, and the given locale.
+ *
+ * <P>
+ * In this factory method, user provides its own date interval pattern
+ * information, instead of using those pre-defined data in resource file.
+ * This factory method is for powerful users who want to provide their own
+ * interval patterns.
+ *
+ * <P>
+ * There are pre-defined skeleton in DateFormat,
+ * such as MONTH_DAY, YEAR_MONTH_WEEKDAY_DAY etc.
+ *
+ * Those skeletons have pre-defined interval patterns in resource files.
+ * Users are encouraged to use them.
+ * For example:
+ * DateIntervalFormat.getInstance(DateFormat.MONTH_DAY, false, loc,itvinf);
+ *
+ * the DateIntervalInfo provides the interval patterns.
+ *
+ * User are encouraged to set default interval pattern in DateIntervalInfo
+ * as well, if they want to set other interval patterns ( instead of
+ * reading the interval patterns from resource files).
+ * When the corresponding interval pattern for a largest calendar different
+ * field is not found ( if user not set it ), interval format fallback to
+ * the default interval pattern.
+ * If user does not provide default interval pattern, it fallback to
+ * "{date0} - {date1}"
+ *
+ * @param skeleton  the skeleton on which interval format based.
+ * @param locale    the given locale
+ * @param dtitvinf  the DateIntervalInfo object to be adopted.
+ * @return          a date time interval formatter.
+ */
+
+public static final android.icu.text.DateIntervalFormat getInstance(java.lang.String skeleton, android.icu.util.ULocale locale, android.icu.text.DateIntervalInfo dtitvinf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone this Format object polymorphically.
+ * @return    A copy of the object.
+ */
+
+public synchronized java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format an object to produce a string. This method handles Formattable
+ * objects with a DateInterval type.
+ * If a the Formattable object type is not a DateInterval,
+ * IllegalArgumentException is thrown.
+ *
+ * @param obj               The object to format.
+ *                          Must be a DateInterval.
+ * @param appendTo          Output parameter to receive result.
+ *                          Result is appended to existing contents.
+ * @param fieldPosition     On input: an alignment field, if desired.
+ *                          On output: the offsets of the alignment field.
+ *                          There may be multiple instances of a given field type
+ *                          in an interval format; in this case the fieldPosition
+ *                          offsets refer to the first instance.
+ * @return                  Reference to 'appendTo' parameter.
+ * @throws    java.lang.IllegalArgumentException  if the formatted object is not
+ *                                      DateInterval object
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer appendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a DateInterval to produce a string.
+ *
+ * @param dtInterval        DateInterval to be formatted.
+ * @param appendTo          Output parameter to receive result.
+ *                          Result is appended to existing contents.
+ * @param fieldPosition     On input: an alignment field, if desired.
+ *                          On output: the offsets of the alignment field.
+ *                          There may be multiple instances of a given field type
+ *                          in an interval format; in this case the fieldPosition
+ *                          offsets refer to the first instance.
+ * @return                  Reference to 'appendTo' parameter.
+ */
+
+public final java.lang.StringBuffer format(android.icu.util.DateInterval dtInterval, java.lang.StringBuffer appendTo, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a DateInterval to produce a FormattedDateInterval.
+ *
+ * The FormattedDateInterval exposes field information about the formatted string.
+ *
+ * @param dtInterval        DateInterval to be formatted.
+ * @return                  A FormattedDateInterval containing the format result.
+ */
+
+public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.DateInterval dtInterval) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format 2 Calendars to produce a string.
+ *
+ * @param fromCalendar      calendar set to the from date in date interval
+ *                          to be formatted into date interval string
+ * @param toCalendar        calendar set to the to date in date interval
+ *                          to be formatted into date interval string
+ * @param appendTo          Output parameter to receive result.
+ *                          Result is appended to existing contents.
+ * @param pos               On input: an alignment field, if desired.
+ *                          On output: the offsets of the alignment field.
+ *                          There may be multiple instances of a given field type
+ *                          in an interval format; in this case the fieldPosition
+ *                          offsets refer to the first instance.
+ * @return                  Reference to 'appendTo' parameter.
+ * @throws    java.lang.IllegalArgumentException  if the two calendars are not equivalent.
+ */
+
+public final java.lang.StringBuffer format(android.icu.util.Calendar fromCalendar, android.icu.util.Calendar toCalendar, java.lang.StringBuffer appendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format 2 Calendars to produce a FormattedDateInterval.
+ *
+ * The FormattedDateInterval exposes field information about the formatted string.
+ *
+ * @param fromCalendar      calendar set to the from date in date interval
+ *                          to be formatted into date interval string
+ * @param toCalendar        calendar set to the to date in date interval
+ *                          to be formatted into date interval string
+ * @return                  A FormattedDateInterval containing the format result.
+ */
+
+public android.icu.text.DateIntervalFormat.FormattedDateInterval formatToValue(android.icu.util.Calendar fromCalendar, android.icu.util.Calendar toCalendar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Date interval parsing is not supported.
+ * <P>
+ * This method should handle parsing of
+ * date time interval strings into Formattable objects with
+ * DateInterval type, which is a pair of UDate.
+ * <P>
+ * Before calling, set parse_pos.index to the offset you want to start
+ * parsing at in the source. After calling, parse_pos.index is the end of
+ * the text you parsed. If error occurs, index is unchanged.
+ * <P>
+ * When parsing, leading whitespace is discarded (with a successful parse),
+ * while trailing whitespace is left as is.
+ * <P>
+ * See Format.parseObject() for more.
+ *
+ * @param source    The string to be parsed into an object.
+ * @param parse_pos The position to start parsing at. Since no parsing
+ *                  is supported, upon return this param is unchanged.
+ * @return          A newly created Formattable* object, or NULL
+ *                  on failure.
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition parse_pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the date time interval patterns.
+ * @return a copy of the date time interval patterns associated with
+ * this date interval formatter.
+ */
+
+public android.icu.text.DateIntervalInfo getDateIntervalInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the date time interval patterns.
+ * @param newItvPattern   the given interval patterns to copy.
+ */
+
+public void setDateIntervalInfo(android.icu.text.DateIntervalInfo newItvPattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the TimeZone
+ * @return A copy of the TimeZone associated with this date interval formatter.
+ */
+
+public android.icu.util.TimeZone getTimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the TimeZone for the calendar used by this DateIntervalFormat object.
+ * @param zone The new TimeZone, will be cloned for use by this DateIntervalFormat.
+ */
+
+public void setTimeZone(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the date formatter
+ * @return a copy of the date formatter associated with
+ * this date interval formatter.
+ */
+
+public synchronized android.icu.text.DateFormat getDateFormat() { throw new RuntimeException("Stub!"); }
+/**
+ * An immutable class containing the result of a date interval formatting operation.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * Not intended for public subclassing.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class FormattedDateInterval implements android.icu.text.FormattedValue {
+
+FormattedDateInterval() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalInfo.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalInfo.java
new file mode 100644
index 0000000..f79e136
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateIntervalInfo.java
@@ -0,0 +1,338 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2008-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.Calendar;
+
+/**
+ * DateIntervalInfo is a public class for encapsulating localizable
+ * date time interval patterns. It is used by DateIntervalFormat.
+ *
+ * <P>
+ * For most users, ordinary use of DateIntervalFormat does not need to create
+ * DateIntervalInfo object directly.
+ * DateIntervalFormat will take care of it when creating a date interval
+ * formatter when user pass in skeleton and locale.
+ *
+ * <P>
+ * For power users, who want to create their own date interval patterns,
+ * or want to re-set date interval patterns, they could do so by
+ * directly creating DateIntervalInfo and manipulating it.
+ *
+ * <P>
+ * Logically, the interval patterns are mappings
+ * from (skeleton, the_largest_different_calendar_field)
+ * to (date_interval_pattern).
+ *
+ * <P>
+ * A skeleton
+ * <ol>
+ * <li>
+ * only keeps the field pattern letter and ignores all other parts
+ * in a pattern, such as space, punctuations, and string literals.
+ * <li>
+ * hides the order of fields.
+ * <li>
+ * might hide a field's pattern letter length.
+ *
+ * For those non-digit calendar fields, the pattern letter length is
+ * important, such as MMM, MMMM, and MMMMM; EEE and EEEE,
+ * and the field's pattern letter length is honored.
+ *
+ * For the digit calendar fields,  such as M or MM, d or dd, yy or yyyy,
+ * the field pattern length is ignored and the best match, which is defined
+ * in date time patterns, will be returned without honor the field pattern
+ * letter length in skeleton.
+ * </ol>
+ *
+ * <P>
+ * The calendar fields we support for interval formatting are:
+ * year, month, date, day-of-week, am-pm, hour, hour-of-day, minute, and
+ * second (though we do not currently have specific intervalFormat data for
+ * skeletons with seconds).
+ * Those calendar fields can be defined in the following order:
+ * year &gt; month &gt; date &gt; am-pm &gt; hour &gt;  minute &gt; second
+ *
+ * The largest different calendar fields between 2 calendars is the
+ * first different calendar field in above order.
+ *
+ * For example: the largest different calendar fields between "Jan 10, 2007"
+ * and "Feb 20, 2008" is year.
+ *
+ * <P>
+ * There is a set of pre-defined static skeleton strings.
+ * There are pre-defined interval patterns for those pre-defined skeletons
+ * in locales' resource files.
+ * For example, for a skeleton YEAR_ABBR_MONTH_DAY, which is  "yMMMd",
+ * in  en_US, if the largest different calendar field between date1 and date2
+ * is "year", the date interval pattern  is "MMM d, yyyy - MMM d, yyyy",
+ * such as "Jan 10, 2007 - Jan 10, 2008".
+ * If the largest different calendar field between date1 and date2 is "month",
+ * the date interval pattern is "MMM d - MMM d, yyyy",
+ * such as "Jan 10 - Feb 10, 2007".
+ * If the largest different calendar field between date1 and date2 is "day",
+ * the date interval pattern is ""MMM d-d, yyyy", such as "Jan 10-20, 2007".
+ *
+ * For date skeleton, the interval patterns when year, or month, or date is
+ * different are defined in resource files.
+ * For time skeleton, the interval patterns when am/pm, or hour, or minute is
+ * different are defined in resource files.
+ *
+ *
+ * <P>
+ * There are 2 dates in interval pattern. For most locales, the first date
+ * in an interval pattern is the earlier date. There might be a locale in which
+ * the first date in an interval pattern is the later date.
+ * We use fallback format for the default order for the locale.
+ * For example, if the fallback format is "{0} - {1}", it means
+ * the first date in the interval pattern for this locale is earlier date.
+ * If the fallback format is "{1} - {0}", it means the first date is the
+ * later date.
+ * For a particular interval pattern, the default order can be overriden
+ * by prefixing "latestFirst:" or "earliestFirst:" to the interval pattern.
+ * For example, if the fallback format is "{0}-{1}",
+ * but for skeleton "yMMMd", the interval pattern when day is different is
+ * "latestFirst:d-d MMM yy", it means by default, the first date in interval
+ * pattern is the earlier date. But for skeleton "yMMMd", when day is different,
+ * the first date in "d-d MMM yy" is the later date.
+ *
+ * <P>
+ * The recommended way to create a DateIntervalFormat object is to pass in
+ * the locale.
+ * By using a Locale parameter, the DateIntervalFormat object is
+ * initialized with the pre-defined interval patterns for a given or
+ * default locale.
+ * <P>
+ * Users can also create DateIntervalFormat object
+ * by supplying their own interval patterns.
+ * It provides flexibility for power usage.
+ *
+ * <P>
+ * After a DateIntervalInfo object is created, clients may modify
+ * the interval patterns using setIntervalPattern function as so desired.
+ * Currently, users can only set interval patterns when the following
+ * calendar fields are different: ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH,
+ * DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND.
+ * Interval patterns when other calendar fields are different is not supported.
+ * <P>
+ * DateIntervalInfo objects are cloneable.
+ * When clients obtain a DateIntervalInfo object,
+ * they can feel free to modify it as necessary.
+ * <P>
+ * DateIntervalInfo are not expected to be subclassed.
+ * Data for a calendar is loaded out of resource bundles.
+ * Through ICU 4.4, date interval patterns are only supported in the Gregoria
+ * calendar; non-Gregorian calendars are supported from ICU 4.4.1.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateIntervalInfo implements java.lang.Cloneable, android.icu.util.Freezable<android.icu.text.DateIntervalInfo>, java.io.Serializable {
+
+/**
+ * Construct DateIntervalInfo for the given locale,
+ * @param locale  the interval patterns are loaded from the appropriate
+ *                calendar data (specified calendar or default calendar)
+ *                in this locale.
+ */
+
+public DateIntervalInfo(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct DateIntervalInfo for the given {@link java.util.Locale}.
+ * @param locale  the interval patterns are loaded from the appropriate
+ *                calendar data (specified calendar or default calendar)
+ *                in this locale.
+ */
+
+public DateIntervalInfo(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides a way for client to build interval patterns.
+ * User could construct DateIntervalInfo by providing
+ * a list of skeletons and their patterns.
+ * <P>
+ * For example:
+ * <pre>
+ * DateIntervalInfo dIntervalInfo = new DateIntervalInfo();
+ * dIntervalInfo.setIntervalPattern("yMd", Calendar.YEAR, "'from' yyyy-M-d 'to' yyyy-M-d");
+ * dIntervalInfo.setIntervalPattern("yMMMd", Calendar.MONTH, "'from' yyyy MMM d 'to' MMM d");
+ * dIntervalInfo.setIntervalPattern("yMMMd", Calendar.DAY, "yyyy MMM d-d");
+ * dIntervalInfo.setFallbackIntervalPattern("{0} ~ {1}");
+ * </pre>
+ *
+ * Restriction:
+ * Currently, users can only set interval patterns when the following
+ * calendar fields are different: ERA, YEAR, MONTH, DATE,  DAY_OF_MONTH,
+ * DAY_OF_WEEK, AM_PM,  HOUR, HOUR_OF_DAY, MINUTE, SECOND, and MILLISECOND.
+ * Interval patterns when other calendar fields are different are
+ * not supported.
+ *
+ * @param skeleton         the skeleton on which interval pattern based
+ * @param lrgDiffCalUnit   the largest different calendar unit.
+ * @param intervalPattern  the interval pattern on the largest different
+ *                         calendar unit.
+ *                         For example, if lrgDiffCalUnit is
+ *                         "year", the interval pattern for en_US when year
+ *                         is different could be "'from' yyyy 'to' yyyy".
+ * @throws java.lang.IllegalArgumentException  if setting interval pattern on
+ *                            a calendar field that is smaller
+ *                            than the MINIMUM_SUPPORTED_CALENDAR_FIELD
+ * @throws java.lang.UnsupportedOperationException  if the object is frozen
+ */
+
+public void setIntervalPattern(java.lang.String skeleton, int lrgDiffCalUnit, java.lang.String intervalPattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the interval pattern given the largest different calendar field.
+ * @param skeleton   the skeleton
+ * @param field      the largest different calendar field
+ * @return interval pattern  return null if interval pattern is not found.
+ * @throws java.lang.IllegalArgumentException  if getting interval pattern on
+ *                            a calendar field that is smaller
+ *                            than the MINIMUM_SUPPORTED_CALENDAR_FIELD
+ */
+
+public android.icu.text.DateIntervalInfo.PatternInfo getIntervalPattern(java.lang.String skeleton, int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the fallback interval pattern.
+ * @return fallback interval pattern
+ */
+
+public java.lang.String getFallbackIntervalPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Re-set the fallback interval pattern.
+ *
+ * In construction, default fallback pattern is set as "{0} - {1}".
+ * And constructor taking locale as parameter will set the
+ * fallback pattern as what defined in the locale resource file.
+ *
+ * This method provides a way for user to replace the fallback pattern.
+ *
+ * @param fallbackPattern                 fall-back interval pattern.
+ * @throws java.lang.UnsupportedOperationException  if the object is frozen
+ * @throws java.lang.IllegalArgumentException       if there is no pattern {0} or
+ *                                        pattern {1} in fallbakckPattern
+ */
+
+public void setFallbackIntervalPattern(java.lang.String fallbackPattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get default order -- whether the first date in pattern is later date
+ *                      or not.
+ *
+ * return default date ordering in interval pattern. TRUE if the first date
+ *        in pattern is later date, FALSE otherwise.
+ */
+
+public boolean getDefaultOrder() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone this object.
+ * @return     a copy of the object
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateIntervalInfo freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateIntervalInfo cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashcode
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+/**
+ * PatternInfo class saves the first and second part of interval pattern,
+ * and whether the interval pattern is earlier date first.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class PatternInfo implements java.lang.Cloneable, java.io.Serializable {
+
+/**
+ * Constructs a <code>PatternInfo</code> object.
+ * @param firstPart     The first part of interval pattern.
+ * @param secondPart    The second part of interval pattern.
+ * @param firstDateInPtnIsLaterDate Whether the first date in interval patter is later date or not.
+ */
+
+public PatternInfo(java.lang.String firstPart, java.lang.String secondPart, boolean firstDateInPtnIsLaterDate) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first part of interval pattern.
+ * @return The first part of interval pattern.
+ */
+
+public java.lang.String getFirstPart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the second part of interval pattern.
+ * @return The second part of interval pattern.
+ */
+
+public java.lang.String getSecondPart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the first date in interval patter is later date or not.
+ * @return Whether the first date in interval patter is later date or not.
+ */
+
+public boolean firstDateInPtnIsLaterDate() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the specified object with this <code>PatternInfo</code> for equality.
+ * @param a The object to be compared.
+ * @return <code>true</code> if the specified object is equal to this <code>PatternInfo</code>.
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hash code of this <code>PatternInfo</code>.
+ * @return A hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateTimePatternGenerator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateTimePatternGenerator.java
new file mode 100644
index 0000000..d4cfcca
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DateTimePatternGenerator.java
@@ -0,0 +1,493 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ ********************************************************************************
+ * Copyright (C) 2006-2016, Google, International Business Machines Corporation
+ * and others. All Rights Reserved.
+ ********************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale.Category;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * This class provides flexible generation of date format patterns, like
+ * "yy-MM-dd". The user can build up the generator by adding successive
+ * patterns. Once that is done, a query can be made using a "skeleton", which is
+ * a pattern which just includes the desired fields and lengths. The generator
+ * will return the "best fit" pattern corresponding to that skeleton.
+ * <p>
+ * The main method people will use is getBestPattern(String skeleton), since
+ * normally this class is pre-built with data from a particular locale. However,
+ * generators can be built directly from other data as well.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DateTimePatternGenerator implements android.icu.util.Freezable<android.icu.text.DateTimePatternGenerator>, java.lang.Cloneable {
+
+/**
+ * Only for use by subclasses
+ */
+
+protected DateTimePatternGenerator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create empty generator, to be constructed with addPattern(...) etc.
+ */
+
+public static android.icu.text.DateTimePatternGenerator getEmptyInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a flexible generator according to data for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.text.DateTimePatternGenerator getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a flexible generator according to data for a given locale.
+ * @param uLocale The locale to pass.
+ */
+
+public static android.icu.text.DateTimePatternGenerator getInstance(android.icu.util.ULocale uLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a flexible generator according to data for a given locale.
+ * @param locale The {@link java.util.Locale} to pass.
+ */
+
+public static android.icu.text.DateTimePatternGenerator getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the best pattern matching the input skeleton. It is guaranteed to
+ * have all of the fields in the skeleton.
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java getBestPatternExample}
+ * @param skeleton The skeleton is a pattern containing only the variable fields.
+ *            For example, "MMMdd" and "mmhh" are skeletons.
+ * @return Best pattern matching the input skeleton.
+ */
+
+public java.lang.String getBestPattern(java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the best pattern matching the input skeleton. It is guaranteed to
+ * have all of the fields in the skeleton.
+ *
+ * @param skeleton The skeleton is a pattern containing only the variable fields.
+ *            For example, "MMMdd" and "mmhh" are skeletons.
+ * @param options MATCH_xxx options for forcing the length of specified fields in
+ *            the returned pattern to match those in the skeleton (when this would
+ *            not happen otherwise). For default behavior, use MATCH_NO_OPTIONS.
+ * @return Best pattern matching the input skeleton (and options).
+ */
+
+public java.lang.String getBestPattern(java.lang.String skeleton, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a pattern to the generator. If the pattern has the same skeleton as
+ * an existing pattern, and the override parameter is set, then the previous
+ * value is overridden. Otherwise, the previous value is retained. In either
+ * case, the conflicting information is returned in PatternInfo.
+ * <p>
+ * Note that single-field patterns (like "MMM") are automatically added, and
+ * don't need to be added explicitly!
+ * * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java addPatternExample}
+ * @param pattern Pattern to add.
+ * @param override When existing values are to be overridden use true, otherwise
+ *            use false.
+ * @param returnInfo Returned information.
+ */
+
+public android.icu.text.DateTimePatternGenerator addPattern(java.lang.String pattern, boolean override, android.icu.text.DateTimePatternGenerator.PatternInfo returnInfo) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Utility to return a unique skeleton from a given pattern. For example,
+ * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd".
+ *
+ * @param pattern Input pattern, such as "dd/MMM"
+ * @return skeleton, such as "MMMdd"
+ */
+
+public java.lang.String getSkeleton(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Utility to return a unique base skeleton from a given pattern. This is
+ * the same as the skeleton, except that differences in length are minimized
+ * so as to only preserve the difference between string and numeric form. So
+ * for example, both "MMM-dd" and "d/MMM" produce the skeleton "MMMd"
+ * (notice the single d).
+ *
+ * @param pattern Input pattern, such as "dd/MMM"
+ * @return skeleton, such as "MMMdd"
+ */
+
+public java.lang.String getBaseSkeleton(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a list of all the skeletons (in canonical form) from this class,
+ * and the patterns that they map to.
+ *
+ * @param result an output Map in which to place the mapping from skeleton to
+ *            pattern. If you want to see the internal order being used,
+ *            supply a LinkedHashMap. If the input value is null, then a
+ *            LinkedHashMap is allocated.
+ *            <p>
+ *            <i>Issue: an alternate API would be to just return a list of
+ *            the skeletons, and then have a separate routine to get from
+ *            skeleton to pattern.</i>
+ * @return the input Map containing the values.
+ */
+
+public java.util.Map<java.lang.String,java.lang.String> getSkeletons(java.util.Map<java.lang.String,java.lang.String> result) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a list of all the base skeletons (in canonical form) from this class
+ */
+
+public java.util.Set<java.lang.String> getBaseSkeletons(java.util.Set<java.lang.String> result) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adjusts the field types (width and subtype) of a pattern to match what is
+ * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
+ * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
+ * "dd-MMMM hh:mm". This is used internally to get the best match for the
+ * input skeleton, but can also be used externally.
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java replaceFieldTypesExample}
+ * @param pattern input pattern
+ * @param skeleton For the pattern to match to.
+ * @return pattern adjusted to match the skeleton fields widths and subtypes.
+ */
+
+public java.lang.String replaceFieldTypes(java.lang.String pattern, java.lang.String skeleton) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adjusts the field types (width and subtype) of a pattern to match what is
+ * in a skeleton. That is, if you supply a pattern like "d-M H:m", and a
+ * skeleton of "MMMMddhhmm", then the input pattern is adjusted to be
+ * "dd-MMMM hh:mm". This is used internally to get the best match for the
+ * input skeleton, but can also be used externally.
+ *
+ * @param pattern input pattern
+ * @param skeleton For the pattern to match to.
+ * @param options MATCH_xxx options for forcing the length of specified fields in
+ *            the returned pattern to match those in the skeleton (when this would
+ *            not happen otherwise). For default behavior, use MATCH_NO_OPTIONS.
+ * @return pattern adjusted to match the skeleton fields widths and subtypes.
+ */
+
+public java.lang.String replaceFieldTypes(java.lang.String pattern, java.lang.String skeleton, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The date time format is a message format pattern used to compose date and
+ * time patterns. The default value is "{1} {0}", where {1} will be replaced
+ * by the date pattern and {0} will be replaced by the time pattern.
+ * <p>
+ * This is used when the input skeleton contains both date and time fields,
+ * but there is not a close match among the added patterns. For example,
+ * suppose that this object was created by adding "dd-MMM" and "hh:mm", and
+ * its datetimeFormat is the default "{1} {0}". Then if the input skeleton
+ * is "MMMdhmm", there is not an exact match, so the input skeleton is
+ * broken up into two components "MMMd" and "hmm". There are close matches
+ * for those two skeletons, so the result is put together with this pattern,
+ * resulting in "d-MMM h:mm".
+ *
+ * @param dateTimeFormat message format pattern, where {1} will be replaced by the date
+ *            pattern and {0} will be replaced by the time pattern.
+ */
+
+public void setDateTimeFormat(java.lang.String dateTimeFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setDateTimeFormat.
+ *
+ * @return pattern
+ */
+
+public java.lang.String getDateTimeFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The decimal value is used in formatting fractions of seconds. If the
+ * skeleton contains fractional seconds, then this is used with the
+ * fractional seconds. For example, suppose that the input pattern is
+ * "hhmmssSSSS", and the best matching pattern internally is "H:mm:ss", and
+ * the decimal string is ",". Then the resulting pattern is modified to be
+ * "H:mm:ss,SSSS"
+ *
+ * @param decimal The decimal to set to.
+ */
+
+public void setDecimal(java.lang.String decimal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setDecimal.
+ * @return string corresponding to the decimal point
+ */
+
+public java.lang.String getDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * An AppendItem format is a pattern used to append a field if there is no
+ * good match. For example, suppose that the input skeleton is "GyyyyMMMd",
+ * and there is no matching pattern internally, but there is a pattern
+ * matching "yyyyMMMd", say "d-MM-yyyy". Then that pattern is used, plus the
+ * G. The way these two are conjoined is by using the AppendItemFormat for G
+ * (era). So if that value is, say "{0}, {1}" then the final resulting
+ * pattern is "d-MM-yyyy, G".
+ * <p>
+ * There are actually three available variables: {0} is the pattern so far,
+ * {1} is the element we are adding, and {2} is the name of the element.
+ * <p>
+ * This reflects the way that the CLDR data is organized.
+ *
+ * @param field such as ERA
+ * @param value pattern, such as "{0}, {1}"
+ */
+
+public void setAppendItemFormat(int field, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setAppendItemFormats. Values below 0 or at or
+ * above TYPE_LIMIT are illegal arguments.
+ *
+ * @param field The index to retrieve the append item formats.
+ * @return append pattern for field
+ */
+
+public java.lang.String getAppendItemFormat(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the names of fields, eg "era" in English for ERA. These are only
+ * used if the corresponding AppendItemFormat is used, and if it contains a
+ * {2} variable.
+ * <p>
+ * This reflects the way that the CLDR data is organized.
+ *
+ * @param field Index of the append item names.
+ * @param value The value to set the item to.
+ */
+
+public void setAppendItemName(int field, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Getter corresponding to setAppendItemName. Values below 0 or at or above
+ * TYPE_LIMIT are illegal arguments. Note: The more general method
+ * for getting date/time field display names is getFieldDisplayName.
+ *
+ * @param field The index to get the append item name.
+ * @return name for field
+ */
+
+public java.lang.String getAppendItemName(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The general interface to get a display name for a particular date/time field,
+ * in one of several possible display widths.
+ *
+ * @param field The field type, such as ERA.
+ * @param width The desired DisplayWidth, such as DisplayWidth.ABBREVIATED.
+ * @return      The display name for the field
+ */
+
+public java.lang.String getFieldDisplayName(int field, android.icu.text.DateTimePatternGenerator.DisplayWidth width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateTimePatternGenerator freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.DateTimePatternGenerator cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a copy of this <code>DateTimePatternGenerator</code> object.
+ * @return A copy of this <code>DateTimePatternGenerator</code> object.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final int DAY = 7; // 0x7
+
+/**
+ */
+
+public static final int DAYPERIOD = 10; // 0xa
+
+/**
+ */
+
+public static final int DAY_OF_WEEK_IN_MONTH = 9; // 0x9
+
+/**
+ */
+
+public static final int DAY_OF_YEAR = 8; // 0x8
+
+/**
+ */
+
+public static final int ERA = 0; // 0x0
+
+/**
+ */
+
+public static final int FRACTIONAL_SECOND = 14; // 0xe
+
+/**
+ */
+
+public static final int HOUR = 11; // 0xb
+
+/**
+ * Option mask for forcing the width of all date and time fields.
+ * @see #getBestPattern(String, int)
+ * @see #replaceFieldTypes(String, String, int)
+ */
+
+public static final int MATCH_ALL_FIELDS_LENGTH = 65535; // 0xffff
+
+/**
+ * Option mask for forcing the width of hour field.
+ * @see #getBestPattern(String, int)
+ * @see #replaceFieldTypes(String, String, int)
+ */
+
+public static final int MATCH_HOUR_FIELD_LENGTH = 2048; // 0x800
+
+/**
+ * Default option mask used for {@link #getBestPattern(java.lang.String,int)}
+ * and {@link #replaceFieldTypes(java.lang.String,java.lang.String,int)}.
+ * @see #getBestPattern(String, int)
+ * @see #replaceFieldTypes(String, String, int)
+ */
+
+public static final int MATCH_NO_OPTIONS = 0; // 0x0
+
+/**
+ */
+
+public static final int MINUTE = 12; // 0xc
+
+/**
+ */
+
+public static final int MONTH = 3; // 0x3
+
+/**
+ */
+
+public static final int QUARTER = 2; // 0x2
+
+/**
+ */
+
+public static final int SECOND = 13; // 0xd
+
+/**
+ */
+
+public static final int WEEKDAY = 6; // 0x6
+
+/**
+ */
+
+public static final int WEEK_OF_MONTH = 5; // 0x5
+
+/**
+ */
+
+public static final int WEEK_OF_YEAR = 4; // 0x4
+
+/**
+ */
+
+public static final int YEAR = 1; // 0x1
+
+/**
+ */
+
+public static final int ZONE = 15; // 0xf
+/**
+ * Field display name width constants for getFieldDisplayName
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DisplayWidth {
+/**
+ * The full field name
+ */
+
+WIDE,
+/**
+ * An abbreviated field name
+ * (may be the same as the wide version, if short enough)
+ */
+
+ABBREVIATED,
+/**
+ * The shortest possible field name
+ * (may be the same as the abbreviated version)
+ */
+
+NARROW;
+}
+
+/**
+ * PatternInfo supplies output parameters for addPattern(...). It is used because
+ * Java doesn't have real output parameters. It is treated like a struct (eg
+ * Point), so all fields are public.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class PatternInfo {
+
+/**
+ * Simple constructor, since this is treated like a struct.
+ */
+
+public PatternInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final int BASE_CONFLICT = 1; // 0x1
+
+/**
+ */
+
+public static final int CONFLICT = 2; // 0x2
+
+/**
+ */
+
+public static final int OK = 0; // 0x0
+
+/**
+ */
+
+public java.lang.String conflictingPattern;
+
+/**
+ */
+
+public int status;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormat.java
new file mode 100644
index 0000000..c6e8479
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormat.java
@@ -0,0 +1,1515 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.lang.UCharacter;
+import java.text.ParsePosition;
+import android.icu.util.ULocale.Category;
+import android.icu.math.MathContext;
+import android.icu.math.BigDecimal;
+import java.math.RoundingMode;
+import java.math.BigInteger;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DecimalFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <code>DecimalFormat</code> is the primary
+ * concrete subclass of {@link android.icu.text.NumberFormat NumberFormat}. It has a variety of features designed to make it
+ * possible to parse and format numbers in any locale, including support for Western, Arabic, or
+ * Indic digits. It supports different flavors of numbers, including integers ("123"), fixed-point
+ * numbers ("123.4"), scientific notation ("1.23E4"), percentages ("12%"), and currency amounts
+ * ("$123.00", "USD123.00", "123.00 US dollars"). All of these flavors can be easily localized.
+ *
+ * <p>To obtain a number formatter for a specific locale (including the default locale), call one of
+ * NumberFormat's factory methods such as {@link android.icu.text.NumberFormat#getInstance NumberFormat#getInstance}. Do not call
+ * DecimalFormat constructors directly unless you know what you are doing.
+ *
+ * <p>DecimalFormat aims to comply with the specification <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>. Read
+ * the specification for more information on how all the properties in DecimalFormat fit together.
+ *
+ * <p><strong>NOTE:</strong> Starting in ICU 60, there is a new set of APIs for localized number
+ * formatting that are designed to be an improvement over DecimalFormat.  New users are discouraged
+ * from using DecimalFormat.  For more information, see the package android.icu.number.
+ *
+ * <h3>Example Usage</h3>
+ *
+ * <p>Customize settings on a DecimalFormat instance from the NumberFormat factory:
+ *
+ * <blockquote>
+ *
+ * <pre>
+ * NumberFormat f = NumberFormat.getInstance(loc);
+ * if (f instanceof DecimalFormat) {
+ *     ((DecimalFormat) f).setDecimalSeparatorAlwaysShown(true);
+ *     ((DecimalFormat) f).setMinimumGroupingDigits(2);
+ * }
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * <p>Quick and dirty print out a number using the localized number, currency, and percent format
+ * for each locale:
+ *
+ * <blockquote>
+ *
+ * <pre>
+ * for (ULocale uloc : ULocale.getAvailableLocales()) {
+ *     System.out.print(uloc + ":\t");
+ *     System.out.print(NumberFormat.getInstance(uloc).format(1.23));
+ *     System.out.print("\t");
+ *     System.out.print(NumberFormat.getCurrencyInstance(uloc).format(1.23));
+ *     System.out.print("\t");
+ *     System.out.print(NumberFormat.getPercentInstance(uloc).format(1.23));
+ *     System.out.println();
+ * }
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * <h3>Properties and Symbols</h3>
+ *
+ * <p>A DecimalFormat object encapsulates a set of <em>properties</em> and a set of
+ * <em>symbols</em>. Grouping size, rounding mode, and affixes are examples of properties. Locale
+ * digits and the characters used for grouping and decimal separators are examples of symbols.
+ *
+ * <p>To set a custom set of symbols, use {@link #setDecimalFormatSymbols}. Use the various other
+ * setters in this class to set custom values for the properties.
+ *
+ * <h3>Rounding</h3>
+ *
+ * <p>DecimalFormat provides three main strategies to specify the position at which numbers should
+ * be rounded:
+ *
+ * <ol>
+ *   <li><strong>Magnitude:</strong> Display a fixed number of fraction digits; this is the most
+ *       common form.
+ *   <li><strong>Increment:</strong> Round numbers to the closest multiple of a certain increment,
+ *       such as 0.05. This is common in currencies.
+ *   <li><strong>Significant Digits:</strong> Round numbers such that a fixed number of nonzero
+ *       digits are shown. This is most common in scientific notation.
+ * </ol>
+ *
+ * <p>It is not possible to specify more than one rounding strategy. For example, setting a rounding
+ * increment in conjunction with significant digits results in undefined behavior.
+ *
+ * <p>It is also possible to specify the <em>rounding mode</em> to use. The default rounding mode is
+ * "half even", which rounds numbers to their closest increment, with ties broken in favor of
+ * trailing numbers being even. For more information, see {@link #setRoundingMode} and <a
+ * href="https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes">the ICU
+ * User Guide</a>.
+ *
+ * <h3>Pattern Strings</h3>
+ *
+ * <p>A <em>pattern string</em> is a way to serialize some of the available properties for decimal
+ * formatting. However, not all properties are capable of being serialized into a pattern string;
+ * see {@link #applyPattern} for more information.
+ *
+ * <p>Most users should not need to interface with pattern strings directly.
+ *
+ * <p>ICU DecimalFormat aims to follow the specification for pattern strings in <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>.
+ * Refer to that specification for more information on pattern string syntax.
+ *
+ * <h4>Pattern String BNF</h4>
+ *
+ * The following BNF is used when parsing the pattern string into property values:
+ *
+ * <pre>
+ * pattern    := subpattern (';' subpattern)?
+ * subpattern := prefix? number exponent? suffix?
+ * number     := (integer ('.' fraction)?) | sigDigits
+ * prefix     := '&#92;u0000'..'&#92;uFFFD' - specialCharacters
+ * suffix     := '&#92;u0000'..'&#92;uFFFD' - specialCharacters
+ * integer    := '#'* '0'* '0'
+ * fraction   := '0'* '#'*
+ * sigDigits  := '#'* '@' '@'* '#'*
+ * exponent   := 'E' '+'? '0'* '0'
+ * padSpec    := '*' padChar
+ * padChar    := '&#92;u0000'..'&#92;uFFFD' - quote
+ * &#32;
+ * Notation:
+ *   X*       0 or more instances of X
+ *   X?       0 or 1 instances of X
+ *   X|Y      either X or Y
+ *   C..D     any character from C up to D, inclusive
+ *   S-T      characters in S, except those in T
+ * </pre>
+ *
+ * <p>The first subpattern is for positive numbers. The second (optional) subpattern is for negative
+ * numbers.
+ *
+ * <p>Not indicated in the BNF syntax above:
+ *
+ * <ul>
+ *   <li>The grouping separator ',' can occur inside the integer and sigDigits elements, between any
+ *       two pattern characters of that element, as long as the integer or sigDigits element is not
+ *       followed by the exponent element.
+ *   <li>Two grouping intervals are recognized: That between the decimal point and the first
+ *       grouping symbol, and that between the first and second grouping symbols. These intervals
+ *       are identical in most locales, but in some locales they differ. For example, the pattern
+ *       &quot;#,##,###&quot; formats the number 123456789 as &quot;12,34,56,789&quot;.
+ *   <li>The pad specifier <code>padSpec</code> may appear before the prefix, after the prefix,
+ *       before the suffix, after the suffix, or not at all.
+ *   <li>In place of '0', the digits '1' through '9' may be used to indicate a rounding increment.
+ * </ul>
+ *
+ * <h3>Parsing</h3>
+ *
+ * <p>DecimalFormat aims to be able to parse anything that it can output as a formatted string.
+ *
+ * <p>There are two primary parse modes: <em>lenient</em> and <em>strict</em>. Lenient mode should
+ * be used if the goal is to parse user input to a number; strict mode should be used if the goal is
+ * validation. The default is lenient mode. For more information, see {@link #setParseStrict}.
+ *
+ * <p><code>DecimalFormat</code> parses all Unicode characters that represent decimal digits, as
+ * defined by {@link android.icu.lang.UCharacter#digit UCharacter#digit}. In addition, <code>DecimalFormat</code> also recognizes as
+ * digits the ten consecutive characters starting with the localized zero digit defined in the
+ * {@link android.icu.text.DecimalFormatSymbols DecimalFormatSymbols} object. During formatting, the {@link android.icu.text.DecimalFormatSymbols DecimalFormatSymbols}-based
+ * digits are output.
+ *
+ * <p>Grouping separators are ignored in lenient mode (default). In strict mode, grouping separators
+ * must match the locale-specified grouping sizes.
+ *
+ * <p>When using {@link #parseCurrency}, all currencies are accepted, not just the currency
+ * currently set in the formatter. In addition, the formatter is able to parse every currency style
+ * format for a particular locale no matter which style the formatter is constructed with. For
+ * example, a formatter instance gotten from NumberFormat.getInstance(ULocale,
+ * NumberFormat.CURRENCYSTYLE) can parse both "USD1.00" and "3.00 US dollars".
+ *
+ * <p>Whitespace characters (lenient mode) and control characters (lenient and strict mode),
+ * collectively called "ignorables", do not need to match in identity or quantity between the
+ * pattern string and the input string. For example, the pattern "# %" matches "35 %" (with a single
+ * space), "35%" (with no space), "35&nbsp;%" (with a non-breaking space), and "35&nbsp; %" (with
+ * multiple spaces). Arbitrary ignorables are also allowed at boundaries between the parts of the
+ * number: prefix, number, exponent separator, and suffix. Ignorable whitespace characters are those
+ * having the Unicode "blank" property for regular expressions, defined in UTS #18 Annex C, which is
+ * "horizontal" whitespace, like spaces and tabs, but not "vertical" whitespace, like line breaks.
+ * Ignorable control characters are those in the Unicode set [:Default_Ignorable_Code_Point:].
+ *
+ * <p>If {@link #parse(java.lang.String,java.text.ParsePosition)} fails to parse a string, it returns <code>null</code>
+ * and leaves the parse position unchanged. The convenience method {@link #parse(java.lang.String)} indicates
+ * parse failure by throwing a {@link java.text.ParseException}.
+ *
+ * <p>Under the hood, a state table parsing engine is used. To debug a parsing failure during
+ * development, use the following pattern to print details about the state table transitions:
+ *
+ * <pre>
+ * android.icu.impl.number.Parse.DEBUGGING = true;
+ * df.parse("123.45", ppos);
+ * android.icu.impl.number.Parse.DEBUGGING = false;
+ * </pre>
+ *
+ * <h3>Thread Safety and Best Practices</h3>
+ *
+ * <p>Starting with ICU 59, instances of DecimalFormat are thread-safe.
+ *
+ * <p>Under the hood, DecimalFormat maintains an immutable formatter object that is rebuilt whenever
+ * any of the property setters are called. It is therefore best practice to call property setters
+ * only during construction and not when formatting numbers online.
+ *
+ * @see java.text.Format
+ * @see android.icu.text.NumberFormat
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DecimalFormat extends android.icu.text.NumberFormat {
+
+/**
+ * Creates a DecimalFormat based on the number pattern and symbols for the default locale. This is
+ * a convenient way to obtain a DecimalFormat instance when internationalization is not the main
+ * concern.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @see NumberFormat#getInstance
+ * @see NumberFormat#getNumberInstance
+ * @see NumberFormat#getCurrencyInstance
+ * @see NumberFormat#getPercentInstance
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DecimalFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormat based on the given pattern, using symbols for the default locale. This
+ * is a convenient way to obtain a DecimalFormat instance when internationalization is not the
+ * main concern.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @param pattern A pattern string such as "#,##0.00" conforming to <a
+ *     href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS
+ *     #35</a>.
+ * @throws java.lang.IllegalArgumentException if the given pattern is invalid.
+ * @see NumberFormat#getInstance
+ * @see NumberFormat#getNumberInstance
+ * @see NumberFormat#getCurrencyInstance
+ * @see NumberFormat#getPercentInstance
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DecimalFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormat based on the given pattern and symbols. Use this constructor if you
+ * want complete control over the behavior of the formatter.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @param pattern A pattern string such as "#,##0.00" conforming to <a
+ *     href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS
+ *     #35</a>.
+ * @param symbols The set of symbols to be used.
+ * @exception java.lang.IllegalArgumentException if the given pattern is invalid
+ * @see NumberFormat#getInstance
+ * @see NumberFormat#getNumberInstance
+ * @see NumberFormat#getCurrencyInstance
+ * @see NumberFormat#getPercentInstance
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public DecimalFormat(java.lang.String pattern, android.icu.text.DecimalFormatSymbols symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormat based on the given pattern and symbols, with additional control over
+ * the behavior of currency. The style argument determines whether currency rounding rules should
+ * override the pattern, and the {@link android.icu.text.CurrencyPluralInfo CurrencyPluralInfo} object is used for customizing the
+ * plural forms used for currency long names.
+ *
+ * <p>Most users should call the factory methods on NumberFormat, such as {@link android.icu.text.NumberFormat#getNumberInstance  }, which return localized formatter objects, instead of the
+ * DecimalFormat constructors.
+ *
+ * @param pattern a non-localized pattern string
+ * @param symbols the set of symbols to be used
+ * @param infoInput the information used for currency plural format, including currency plural
+ *     patterns and plural rules.
+ * @param style the decimal formatting style, it is one of the following values:
+ *     NumberFormat.NUMBERSTYLE; NumberFormat.CURRENCYSTYLE; NumberFormat.PERCENTSTYLE;
+ *     NumberFormat.SCIENTIFICSTYLE; NumberFormat.INTEGERSTYLE; NumberFormat.ISOCURRENCYSTYLE;
+ *     NumberFormat.PLURALCURRENCYSTYLE;
+ */
+
+public DecimalFormat(java.lang.String pattern, android.icu.text.DecimalFormatSymbols symbols, android.icu.text.CurrencyPluralInfo infoInput, int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses the given pattern string and overwrites the settings specified in the pattern string.
+ * The properties corresponding to the following setters are overwritten, either with their
+ * default values or with the value specified in the pattern string:
+ *
+ * <ol>
+ *   <li>{@link #setDecimalSeparatorAlwaysShown}
+ *   <li>{@link #setExponentSignAlwaysShown}
+ *   <li>{@link #setFormatWidth}
+ *   <li>{@link #setGroupingSize}
+ *   <li>{@link #setMultiplier} (percent/permille)
+ *   <li>{@link #setMaximumFractionDigits}
+ *   <li>{@link #setMaximumIntegerDigits}
+ *   <li>{@link #setMaximumSignificantDigits}
+ *   <li>{@link #setMinimumExponentDigits}
+ *   <li>{@link #setMinimumFractionDigits}
+ *   <li>{@link #setMinimumIntegerDigits}
+ *   <li>{@link #setMinimumSignificantDigits}
+ *   <li>{@link #setPadPosition}
+ *   <li>{@link #setPadCharacter}
+ *   <li>{@link #setRoundingIncrement}
+ *   <li>{@link #setSecondaryGroupingSize}
+ * </ol>
+ *
+ * All other settings remain untouched.
+ *
+ * <p>For more information on pattern strings, see <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>.
+ */
+
+public synchronized void applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the given string to standard notation and then parses it using {@link #applyPattern}.
+ * This method is provided for backwards compatibility and should not be used in new projects.
+ *
+ * <p>Localized notation means that instead of using generic placeholders in the pattern, you use
+ * the corresponding locale-specific characters instead. For example, in locale <em>fr-FR</em>,
+ * the period in the pattern "0.000" means "decimal" in standard notation (as it does in every
+ * other locale), but it means "grouping" in localized notation.
+ *
+ * @param localizedPattern The pattern string in localized notation.
+ */
+
+public synchronized void applyLocalizedPattern(java.lang.String localizedPattern) { throw new RuntimeException("Stub!"); }
+
+/***/
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(double number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(long number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(java.math.BigInteger number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(java.math.BigDecimal number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(android.icu.math.BigDecimal number, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(android.icu.util.CurrencyAmount currAmt, java.lang.StringBuffer result, java.text.FieldPosition fieldPosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.util.CurrencyAmount parseCurrency(java.lang.CharSequence text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a copy of the decimal format symbols used by this formatter.
+ *
+ * @return desired DecimalFormatSymbols
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public synchronized android.icu.text.DecimalFormatSymbols getDecimalFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decimal format symbols used by this formatter. The formatter uses a copy of the
+ * provided symbols.
+ *
+ * @param newSymbols desired DecimalFormatSymbols
+ * @see android.icu.text.DecimalFormatSymbols
+ */
+
+public synchronized void setDecimalFormatSymbols(android.icu.text.DecimalFormatSymbols newSymbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the positive prefix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setPositivePrefix}, the string will be returned
+ * literally.
+ *
+ * @return The string being prepended to positive numbers.
+ */
+
+public synchronized java.lang.String getPositivePrefix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to prepend to positive numbers. For example, if you
+ * set the value "#", then the number 123 will be formatted as "#123" in the locale
+ * <em>en-US</em>.
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param prefix The literal string to prepend to positive numbers.
+ */
+
+public synchronized void setPositivePrefix(java.lang.String prefix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the negative prefix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setNegativePrefix}, the string will be returned
+ * literally.
+ *
+ * @return The string being prepended to negative numbers.
+ */
+
+public synchronized java.lang.String getNegativePrefix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to prepend to negative numbers. For example, if you
+ * set the value "#", then the number -123 will be formatted as "#123" in the locale
+ * <em>en-US</em> (overriding the implicit default '-' in the pattern).
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param prefix The literal string to prepend to negative numbers.
+ */
+
+public synchronized void setNegativePrefix(java.lang.String prefix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the positive suffix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setPositiveSuffix}, the string will be returned
+ * literally.
+ *
+ * @return The string being appended to positive numbers.
+ */
+
+public synchronized java.lang.String getPositiveSuffix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to append to positive numbers. For example, if you
+ * set the value "#", then the number 123 will be formatted as "123#" in the locale
+ * <em>en-US</em>.
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param suffix The literal string to append to positive numbers.
+ */
+
+public synchronized void setPositiveSuffix(java.lang.String suffix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Gets the negative suffix string currently being used to format
+ * numbers.
+ *
+ * <p>If the affix was specified via the pattern, the string returned by this method will have
+ * locale symbols substituted in place of special characters according to the LDML specification.
+ * If the affix was specified via {@link #setNegativeSuffix}, the string will be returned
+ * literally.
+ *
+ * @return The string being appended to negative numbers.
+ */
+
+public synchronized java.lang.String getNegativeSuffix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Affixes:</strong> Sets the string to append to negative numbers. For example, if you
+ * set the value "#", then the number 123 will be formatted as "123#" in the locale
+ * <em>en-US</em>.
+ *
+ * <p>Using this method overrides the affix specified via the pattern, and unlike the pattern, the
+ * string given to this method will be interpreted literally WITHOUT locale symbol substitutions.
+ *
+ * @param suffix The literal string to append to negative numbers.
+ */
+
+public synchronized void setNegativeSuffix(java.lang.String suffix) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether the sign is being shown on positive numbers.
+ *
+ * @return Whether the sign is shown on positive numbers and zero.
+ * @see #setSignAlwaysShown
+ */
+
+public synchronized boolean isSignAlwaysShown() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether to always shown the plus sign ('+' in <em>en</em>) on positive numbers. The rules
+ * in UTS #35 section 3.2.1 will be followed to ensure a locale-aware placement of the sign.
+ *
+ * <p>More specifically, the following strategy will be used to place the plus sign:
+ *
+ * <ol>
+ *   <li><em>Patterns without a negative subpattern:</em> The locale's plus sign will be prepended
+ *       to the positive prefix.
+ *   <li><em>Patterns with a negative subpattern without a '-' sign (e.g., accounting):</em> The
+ *       locale's plus sign will be prepended to the positive prefix, as in case 1.
+ *   <li><em>Patterns with a negative subpattern that has a '-' sign:</em> The locale's plus sign
+ *       will substitute the '-' in the negative subpattern. The positive subpattern will be
+ *       unused.
+ * </ol>
+ *
+ * This method is designed to be used <em>instead of</em> applying a pattern containing an
+ * explicit plus sign, such as "+0;-0". The behavior when combining this method with explicit plus
+ * signs in the pattern is undefined.
+ *
+ * @param value true to always show a sign; false to hide the sign on positive numbers and zero.
+ */
+
+public synchronized void setSignAlwaysShown(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the multiplier being applied to numbers before they are formatted.
+ *
+ * @see #setMultiplier
+ */
+
+public synchronized int getMultiplier() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets a number that will be used to multiply all numbers prior to formatting. For example, when
+ * formatting percents, a multiplier of 100 can be used.
+ *
+ * <p>If a percent or permille sign is specified in the pattern, the multiplier is automatically
+ * set to 100 or 1000, respectively.
+ *
+ * <p>If the number specified here is a power of 10, a more efficient code path will be used.
+ *
+ * @param multiplier The number by which all numbers passed to {@link #format} will be multiplied.
+ * @throws java.lang.IllegalArgumentException If the given multiplier is zero.
+ * @throws java.lang.ArithmeticException when inverting multiplier produces a non-terminating decimal result
+ *         in conjunction with MathContext of unlimited precision.
+ */
+
+public synchronized void setMultiplier(int multiplier) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the increment to which numbers are being rounded.
+ *
+ * @see #setRoundingIncrement
+ */
+
+public synchronized java.math.BigDecimal getRoundingIncrement() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets an increment, or interval, to which
+ * numbers are rounded. For example, a rounding increment of 0.05 will cause the number 1.23 to be
+ * rounded to 1.25 in the default rounding mode.
+ *
+ * <p>The rounding increment can be specified via the pattern string: for example, the pattern
+ * "#,##0.05" encodes a rounding increment of 0.05.
+ *
+ * <p>The rounding increment is applied <em>after</em> any multipliers might take effect; for
+ * example, in scientific notation or when {@link #setMultiplier} is used.
+ *
+ * <p>See {@link #setMaximumFractionDigits} and {@link #setMaximumSignificantDigits} for two other
+ * ways of specifying rounding strategies.
+ *
+ * @param increment The increment to which numbers are to be rounded.
+ * @see #setRoundingMode
+ * @see #setMaximumFractionDigits
+ * @see #setMaximumSignificantDigits
+ */
+
+public synchronized void setRoundingIncrement(java.math.BigDecimal increment) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Overload of {@link
+ * #setRoundingIncrement(java.math.BigDecimal)}.
+ *
+ * @param increment The increment to which numbers are to be rounded.
+ * @see #setRoundingIncrement
+ */
+
+public synchronized void setRoundingIncrement(android.icu.math.BigDecimal increment) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Overload of {@link
+ * #setRoundingIncrement(java.math.BigDecimal)}.
+ *
+ * @param increment The increment to which numbers are to be rounded.
+ * @see #setRoundingIncrement
+ */
+
+public synchronized void setRoundingIncrement(double increment) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding mode being used to round numbers.
+ *
+ * @see #setRoundingMode
+ */
+
+public synchronized int getRoundingMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the {@link java.math.RoundingMode RoundingMode} used to round
+ * numbers. The default rounding mode is HALF_EVEN, which rounds decimals to their closest whole
+ * number, and rounds to the closest even number if at the midpoint.
+ *
+ * <p>For more detail on rounding modes, see <a
+ * href="https://unicode-org.github.io/icu/userguide/format_parse/numbers/rounding-modes">the ICU
+ * User Guide</a>.
+ *
+ * <p>For backwards compatibility, the rounding mode is specified as an int argument, which can be
+ * from either the constants in {@link android.icu.math.BigDecimal BigDecimal} or the ordinal value of {@link java.math.RoundingMode RoundingMode}.
+ * The following two calls are functionally equivalent.
+ *
+ * <pre>
+ * df.setRoundingMode(BigDecimal.ROUND_CEILING);
+ * df.setRoundingMode(RoundingMode.CEILING.ordinal());
+ * </pre>
+ *
+ * @param roundingMode The integer constant rounding mode to use when formatting numbers.
+ */
+
+public synchronized void setRoundingMode(int roundingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the {@link java.math.MathContext} being used to round numbers.
+ *
+ * @see #setMathContext
+ */
+
+public synchronized java.math.MathContext getMathContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets the {@link java.math.MathContext} used
+ * to round numbers. A "math context" encodes both a rounding mode and a number of significant
+ * digits. Most users should call {@link #setRoundingMode} and/or {@link
+ * #setMaximumSignificantDigits} instead of this method.
+ *
+ * <p>When formatting, since no division is ever performed, the default MathContext is unlimited
+ * significant digits. However, when division occurs during parsing to correct for percentages and
+ * multipliers, a MathContext of 34 digits, the IEEE 754R Decimal128 standard, is used by default.
+ * If you require more than 34 digits when parsing, you can set a custom MathContext using this
+ * method.
+ *
+ * @param mathContext The MathContext to use when rounding numbers.
+ * @throws java.lang.ArithmeticException when inverting multiplier produces a non-terminating decimal result
+ *         in conjunction with MathContext of unlimited precision.
+ * @see java.math.MathContext
+ */
+
+public synchronized void setMathContext(java.math.MathContext mathContext) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the {@link android.icu.math.MathContext} being used to round numbers.
+ *
+ * @see #setMathContext
+ */
+
+public synchronized android.icu.math.MathContext getMathContextICU() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Overload of {@link #setMathContext} for
+ * {@link android.icu.math.MathContext}.
+ *
+ * @param mathContextICU The MathContext to use when rounding numbers.
+ * @throws java.lang.ArithmeticException when inverting multiplier produces a non-terminating decimal result
+ *         in conjunction with MathContext of unlimited precision.
+ * @see #setMathContext(java.math.MathContext)
+ */
+
+public synchronized void setMathContextICU(android.icu.math.MathContext mathContextICU) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective minimum number of digits before the decimal separator.
+ *
+ * @see #setMinimumIntegerDigits
+ */
+
+public synchronized int getMinimumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the minimum number of digits to display before
+ * the decimal separator. If the number has fewer than this many digits, the number is padded with
+ * zeros.
+ *
+ * <p>For example, if minimum integer digits is 3, the number 12.3 will be printed as "001.23".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The minimum number of digits before the decimal separator.
+ */
+
+public synchronized void setMinimumIntegerDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective maximum number of digits before the decimal separator.
+ *
+ * @see #setMaximumIntegerDigits
+ */
+
+public synchronized int getMaximumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the maximum number of digits to display before
+ * the decimal separator. If the number has more than this many digits, the number is truncated.
+ *
+ * <p>For example, if maximum integer digits is 3, the number 12345 will be printed as "345".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The maximum number of digits before the decimal separator.
+ */
+
+public synchronized void setMaximumIntegerDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective minimum number of integer digits after the decimal separator.
+ *
+ * @see #setMaximumIntegerDigits
+ */
+
+public synchronized int getMinimumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the minimum number of digits to display after
+ * the decimal separator. If the number has fewer than this many digits, the number is padded with
+ * zeros.
+ *
+ * <p>For example, if minimum fraction digits is 2, the number 123.4 will be printed as "123.40".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * <p>See {@link #setRoundingIncrement} and {@link #setMaximumSignificantDigits} for two other
+ * ways of specifying rounding strategies.
+ *
+ * @param value The minimum number of integer digits after the decimal separator.
+ * @see #setRoundingMode
+ * @see #setRoundingIncrement
+ * @see #setMaximumSignificantDigits
+ */
+
+public synchronized void setMinimumFractionDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the effective maximum number of integer digits after the decimal separator.
+ *
+ * @see #setMaximumIntegerDigits
+ */
+
+public synchronized int getMaximumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Rounding and Digit Limits:</strong> Sets the maximum number of digits to display after
+ * the decimal separator. If the number has more than this many digits, the number is rounded
+ * according to the rounding mode.
+ *
+ * <p>For example, if maximum fraction digits is 2, the number 123.456 will be printed as
+ * "123.46".
+ *
+ * <p>Minimum integer and minimum and maximum fraction digits can be specified via the pattern
+ * string. For example, "#,#00.00#" has 2 minimum integer digits, 2 minimum fraction digits, and 3
+ * maximum fraction digits. Note that it is not possible to specify maximium integer digits in the
+ * pattern except in scientific notation.
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The maximum number of integer digits after the decimal separator.
+ * @see #setRoundingMode
+ */
+
+public synchronized void setMaximumFractionDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether significant digits are being used in rounding.
+ *
+ * @see #setSignificantDigitsUsed
+ */
+
+public synchronized boolean areSignificantDigitsUsed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets whether significant digits are to be
+ * used in rounding.
+ *
+ * <p>Calling <code>df.setSignificantDigitsUsed(true)</code> is functionally equivalent to:
+ *
+ * <pre>
+ * df.setMinimumSignificantDigits(1);
+ * df.setMaximumSignificantDigits(6);
+ * </pre>
+ *
+ * @param useSignificantDigits true to enable significant digit rounding; false to disable it.
+ */
+
+public synchronized void setSignificantDigitsUsed(boolean useSignificantDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the effective minimum number of significant digits displayed.
+ *
+ * @see #setMinimumSignificantDigits
+ */
+
+public synchronized int getMinimumSignificantDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets the minimum number of significant
+ * digits to be displayed. If the number of significant digits is less than this value, the number
+ * will be padded with zeros as necessary.
+ *
+ * <p>For example, if minimum significant digits is 3 and the number is 1.2, the number will be
+ * printed as "1.20".
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * @param value The minimum number of significant digits to display.
+ */
+
+public synchronized void setMinimumSignificantDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the effective maximum number of significant digits displayed.
+ *
+ * @see #setMaximumSignificantDigits
+ */
+
+public synchronized int getMaximumSignificantDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Rounding and Digit Limits:</strong> Sets the maximum number of significant
+ * digits to be displayed. If the number of significant digits in the number exceeds this value,
+ * the number will be rounded according to the current rounding mode.
+ *
+ * <p>For example, if maximum significant digits is 3 and the number is 12345, the number will be
+ * printed as "12300".
+ *
+ * <p>If minimum and maximum integer, fraction, or significant digits conflict with each other,
+ * the most recently specified value is used. For example, if there is a formatter with minInt=5,
+ * and then you set maxInt=3, then minInt will be changed to 3.
+ *
+ * <p>See {@link #setRoundingIncrement} and {@link #setMaximumFractionDigits} for two other ways
+ * of specifying rounding strategies.
+ *
+ * @param value The maximum number of significant digits to display.
+ * @see #setRoundingMode
+ * @see #setRoundingIncrement
+ * @see #setMaximumFractionDigits
+ */
+
+public synchronized void setMaximumSignificantDigits(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum number of characters in formatted output.
+ *
+ * @see #setFormatWidth
+ */
+
+public synchronized int getFormatWidth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Padding:</strong> Sets the minimum width of the string output by the formatting
+ * pipeline. For example, if padding is enabled and paddingWidth is set to 6, formatting the
+ * number "3.14159" with the pattern "0.00" will result in "??3.14" if '?' is your padding string.
+ *
+ * <p>If the number is longer than your padding width, the number will display as if no padding
+ * width had been specified, which may result in strings longer than the padding width.
+ *
+ * <p>Padding can be specified in the pattern string using the '*' symbol. For example, the format
+ * "*x######0" has a format width of 7 and a pad character of 'x'.
+ *
+ * <p>Padding is currently counted in UTF-16 code units; see <a
+ * href="http://bugs.icu-project.org/trac/ticket/13034">ticket #13034</a> for more information.
+ *
+ * @param width The minimum number of characters in the output.
+ * @see #setPadCharacter
+ * @see #setPadPosition
+ */
+
+public synchronized void setFormatWidth(int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the character used for padding.
+ *
+ * @see #setPadCharacter
+ */
+
+public synchronized char getPadCharacter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Padding:</strong> Sets the character used to pad numbers that are narrower than
+ * the width specified in {@link #setFormatWidth}.
+ *
+ * <p>In the pattern string, the padding character is the token that follows '*' before or after
+ * the prefix or suffix.
+ *
+ * @param padChar The character used for padding.
+ * @see #setFormatWidth
+ */
+
+public synchronized void setPadCharacter(char padChar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the position used for padding.
+ *
+ * @see #setPadPosition
+ */
+
+public synchronized int getPadPosition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Padding:</strong> Sets the position where to insert the pad character when
+ * narrower than the width specified in {@link #setFormatWidth}. For example, consider the pattern
+ * "P123S" with padding width 8 and padding char "*". The four positions are:
+ *
+ * <ul>
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_BEFORE_PREFIX DecimalFormat#PAD_BEFORE_PREFIX} ? "***P123S"
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_AFTER_PREFIX DecimalFormat#PAD_AFTER_PREFIX} ? "P***123S"
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_BEFORE_SUFFIX DecimalFormat#PAD_BEFORE_SUFFIX} ? "P123***S"
+ *   <li>{@link android.icu.text.DecimalFormat#PAD_AFTER_SUFFIX DecimalFormat#PAD_AFTER_SUFFIX} ? "P123S***"
+ * </ul>
+ *
+ * @param padPos The position used for padding.
+ * @see #setFormatWidth
+ */
+
+public synchronized void setPadPosition(int padPos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether scientific (exponential) notation is enabled on this formatter.
+ *
+ * @see #setScientificNotation
+ */
+
+public synchronized boolean isScientificNotation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Scientific Notation:</strong> Sets whether this formatter should print in
+ * scientific (exponential) notation. For example, if scientific notation is enabled, the number
+ * 123000 will be printed as "1.23E5" in locale <em>en-US</em>. A locale-specific symbol is used
+ * as the exponent separator.
+ *
+ * <p>Calling <code>df.setScientificNotation(true)</code> is functionally equivalent to calling
+ * <code>df.setMinimumExponentDigits(1)</code>.
+ *
+ * @param useScientific true to enable scientific notation; false to disable it.
+ * @see #setMinimumExponentDigits
+ */
+
+public synchronized void setScientificNotation(boolean useScientific) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the minimum number of digits printed in the exponent in scientific notation.
+ *
+ * @see #setMinimumExponentDigits
+ */
+
+public synchronized byte getMinimumExponentDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Scientific Notation:</strong> Sets the minimum number of digits to be printed in
+ * the exponent. For example, if minimum exponent digits is 3, the number 123000 will be printed
+ * as "1.23E005".
+ *
+ * <p>This setting corresponds to the number of zeros after the 'E' in a pattern string such as
+ * "0.00E000".
+ *
+ * @param minExpDig The minimum number of digits in the exponent.
+ */
+
+public synchronized void setMinimumExponentDigits(byte minExpDig) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether the sign (plus or minus) is always printed in scientific notation.
+ *
+ * @see #setExponentSignAlwaysShown
+ */
+
+public synchronized boolean isExponentSignAlwaysShown() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Scientific Notation:</strong> Sets whether the sign (plus or minus) is always to
+ * be shown in the exponent in scientific notation. For example, if this setting is enabled, the
+ * number 123000 will be printed as "1.23E+5" in locale <em>en-US</em>. The number 0.0000123 will
+ * always be printed as "1.23E-5" in locale <em>en-US</em> whether or not this setting is enabled.
+ *
+ * <p>This setting corresponds to the '+' in a pattern such as "0.00E+0".
+ *
+ * @param expSignAlways true to always shown the sign in the exponent; false to show it for
+ *     negatives but not positives.
+ */
+
+public synchronized void setExponentSignAlwaysShown(boolean expSignAlways) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether or not grouping separators are being printed in the output.
+ *
+ * @see #setGroupingUsed
+ */
+
+public synchronized boolean isGroupingUsed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Grouping:</strong> Sets whether grouping is to be used when formatting numbers.
+ * Grouping means whether the thousands, millions, billions, and larger powers of ten should be
+ * separated by a grouping separator (a comma in <em>en-US</em>).
+ *
+ * <p>For example, if grouping is enabled, 12345 will be printed as "12,345" in <em>en-US</em>. If
+ * grouping were disabled, it would instead be printed as simply "12345".
+ *
+ * @param enabled true to enable grouping separators; false to disable them.
+ * @see #setGroupingSize
+ * @see #setSecondaryGroupingSize
+ */
+
+public synchronized void setGroupingUsed(boolean enabled) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the primary grouping size in use.
+ *
+ * @see #setGroupingSize
+ */
+
+public synchronized int getGroupingSize() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Grouping:</strong> Sets the primary grouping size (distance between grouping
+ * separators) used when formatting large numbers. For most locales, this defaults to 3: the
+ * number of digits between the ones and thousands place, between thousands and millions, and so
+ * forth.
+ *
+ * <p>For example, with a grouping size of 3, the number 1234567 will be formatted as "1,234,567".
+ *
+ * <p>Grouping size can also be specified in the pattern: for example, "#,##0" corresponds to a
+ * grouping size of 3.
+ *
+ * @param width The grouping size to use.
+ * @see #setSecondaryGroupingSize
+ */
+
+public synchronized void setGroupingSize(int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the secondary grouping size in use.
+ *
+ * @see #setSecondaryGroupingSize
+ */
+
+public synchronized int getSecondaryGroupingSize() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Grouping:</strong> Sets the secondary grouping size (distance between grouping
+ * separators after the first separator) used when formatting large numbers. In many south Asian
+ * locales, this is set to 2.
+ *
+ * <p>For example, with primary grouping size 3 and secondary grouping size 2, the number 1234567
+ * will be formatted as "12,34,567".
+ *
+ * <p>Grouping size can also be specified in the pattern: for example, "#,##,##0" corresponds to a
+ * primary grouping size of 3 and a secondary grouping size of 2.
+ *
+ * @param width The secondary grouping size to use.
+ * @see #setGroupingSize
+ */
+
+public synchronized void setSecondaryGroupingSize(int width) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the minimum number of digits before grouping is triggered.
+ *
+ * @see #setMinimumGroupingDigits
+ */
+
+public synchronized int getMinimumGroupingDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the minimum number of digits that must be before the first grouping separator in
+ * order for the grouping separator to be printed. For example, if minimum grouping digits is set
+ * to 2, in <em>en-US</em>, 1234 will be printed as "1234" and 12345 will be printed as "12,345".
+ *
+ * Set the value to:
+ * <ul>
+ * <li>1 to turn off minimum grouping digits.</li>
+ * <li>MINIMUM_GROUPING_DIGITS_AUTO to display grouping using the default
+ * strategy for all locales.</li>
+ * <li>MINIMUM_GROUPING_DIGITS_MIN2 to display grouping using locale defaults,
+ * except do not show grouping on values smaller than 10000 (such that there is a minimum of
+ * two digits before the first separator).</li>
+ * </ul>
+ *
+ * @param number The minimum number of digits before grouping is triggered.
+ */
+
+public synchronized void setMinimumGroupingDigits(int number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the decimal separator is shown on integers.
+ *
+ * @see #setDecimalSeparatorAlwaysShown
+ */
+
+public synchronized boolean isDecimalSeparatorAlwaysShown() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Separators:</strong> Sets whether the decimal separator (a period in <em>en-US</em>) is
+ * shown on integers. For example, if this setting is turned on, formatting 123 will result in
+ * "123." with the decimal separator.
+ *
+ * <p>This setting can be specified in the pattern for integer formats: "#,##0." is an example.
+ *
+ * @param value true to always show the decimal separator; false to show it only when there is a
+ *     fraction part of the number.
+ */
+
+public synchronized void setDecimalSeparatorAlwaysShown(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the currency used to display currency amounts. May be null.
+ *
+ * @see #setCurrency
+ * @see android.icu.text.DecimalFormatSymbols#getCurrency
+ */
+
+public synchronized android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the currency to be used when formatting numbers. The effect is twofold:
+ *
+ * <ol>
+ *   <li>Substitutions for currency symbols in the pattern string will use this currency
+ *   <li>The rounding mode will obey the rules for this currency (see {@link #setCurrencyUsage})
+ * </ol>
+ *
+ * <strong>Important:</strong> Displaying the currency in the output requires that the patter
+ * associated with this formatter contains a currency symbol '?'. This will be the case if the
+ * instance was created via {@link #getCurrencyInstance} or one of its friends.
+ *
+ * @param currency The currency to use.
+ */
+
+public synchronized void setCurrency(android.icu.util.Currency currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the strategy for rounding currency amounts.
+ *
+ * @see #setCurrencyUsage
+ */
+
+public synchronized android.icu.util.Currency.CurrencyUsage getCurrencyUsage() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the currency-dependent strategy to use when rounding numbers. There are two
+ * strategies:
+ *
+ * <ul>
+ *   <li>STANDARD: When the amount displayed is intended for banking statements or electronic
+ *       transfer.
+ *   <li>CASH: When the amount displayed is intended to be representable in physical currency,
+ *       like at a cash register.
+ * </ul>
+ *
+ * CASH mode is relevant in currencies that do not have tender down to the penny. For more
+ * information on the two rounding strategies, see <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Supplemental_Currency_Data">UTS
+ * #35</a>. If omitted, the strategy defaults to STANDARD. To override currency rounding
+ * altogether, use {@link #setMinimumFractionDigits} and {@link #setMaximumFractionDigits} or
+ * {@link #setRoundingIncrement}.
+ *
+ * @param usage The strategy to use when rounding in the current currency.
+ */
+
+public synchronized void setCurrencyUsage(android.icu.util.Currency.CurrencyUsage usage) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the current instance of CurrencyPluralInfo.
+ *
+ * @see #setCurrencyPluralInfo
+ */
+
+public synchronized android.icu.text.CurrencyPluralInfo getCurrencyPluralInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets a custom instance of CurrencyPluralInfo. CurrencyPluralInfo generates pattern
+ * strings for printing currency long names.
+ *
+ * <p><strong>Most users should not call this method directly.</strong> You should instead create
+ * your formatter via <code>NumberFormat.getInstance(NumberFormat.PLURALCURRENCYSTYLE)</code>.
+ *
+ * @param newInfo The CurrencyPluralInfo to use when printing currency long names.
+ */
+
+public synchronized void setCurrencyPluralInfo(android.icu.text.CurrencyPluralInfo newInfo) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether {@link #parse} will always return a BigDecimal.
+ *
+ * @see #setParseBigDecimal
+ */
+
+public synchronized boolean isParseBigDecimal() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Whether to make {@link #parse} prefer returning a {@link android.icu.math.BigDecimal} when
+ * possible. For strings corresponding to return values of Infinity, -Infinity, NaN, and -0.0, a
+ * Double will be returned even if ParseBigDecimal is enabled.
+ *
+ * @param value true to cause {@link #parse} to prefer BigDecimal; false to let {@link #parse}
+ *     return additional data types like Long or BigInteger.
+ */
+
+public synchronized void setParseBigDecimal(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Always returns 1000, the default prior to ICU 59.
+ *
+ * @deprecated Setting max parse digits has no effect since ICU4J 59.
+ */
+
+@Deprecated
+public int getParseMaxDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @param maxDigits Prior to ICU 59, the maximum number of digits in the output number after
+ *     exponential notation is applied.
+ * @deprecated Setting max parse digits has no effect since ICU4J 59.
+ */
+
+@Deprecated
+public void setParseMaxDigits(int maxDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public synchronized boolean isParseStrict() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public synchronized void setParseStrict(boolean parseStrict) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ *
+ * @see #setParseIntegerOnly
+ */
+
+public synchronized boolean isParseIntegerOnly() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>Parsing:</strong> {@inheritDoc}
+ *
+ * <p>This is functionally equivalent to calling {@link #setDecimalPatternMatchRequired} and a
+ * pattern without a decimal point.
+ *
+ * @param parseIntegerOnly true to ignore fractional parts of numbers when parsing; false to
+ *     consume fractional parts.
+ */
+
+public synchronized void setParseIntegerOnly(boolean parseIntegerOnly) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether the presence of a decimal point must match the pattern.
+ *
+ * @see #setDecimalPatternMatchRequired
+ */
+
+public synchronized boolean isDecimalPatternMatchRequired() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> <strong>Parsing:</strong> This method is used to either <em>require</em> or
+ * <em>forbid</em> the presence of a decimal point in the string being parsed (disabled by
+ * default). This feature was designed to be an extra layer of strictness on top of strict
+ * parsing, although it can be used in either lenient mode or strict mode.
+ *
+ * <p>To <em>require</em> a decimal point, call this method in combination with either a pattern
+ * containing a decimal point or with {@link #setDecimalSeparatorAlwaysShown}.
+ *
+ * <pre>
+ * // Require a decimal point in the string being parsed:
+ * df.applyPattern("#.");
+ * df.setDecimalPatternMatchRequired(true);
+ *
+ * // Alternatively:
+ * df.setDecimalSeparatorAlwaysShown(true);
+ * df.setDecimalPatternMatchRequired(true);
+ * </pre>
+ *
+ * To <em>forbid</em> a decimal point, call this method in combination with a pattern containing
+ * no decimal point. Alternatively, use {@link #setParseIntegerOnly} for the same behavior without
+ * depending on the contents of the pattern string.
+ *
+ * <pre>
+ * // Forbid a decimal point in the string being parsed:
+ * df.applyPattern("#");
+ * df.setDecimalPatternMatchRequired(true);
+ * </pre>
+ *
+ * @param value true to either require or forbid the decimal point according to the pattern; false
+ *     to disable this feature.
+ * @see #setParseIntegerOnly
+ */
+
+public synchronized void setDecimalPatternMatchRequired(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether to ignore exponents when parsing.
+ *
+ * @see #setParseNoExponent
+ */
+
+public synchronized boolean isParseNoExponent() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Specifies whether to stop parsing when an exponent separator is encountered. For
+ * example, parses "123E4" to 123 (with parse position 3) instead of 1230000 (with parse position
+ * 5).
+ *
+ * @param value true to prevent exponents from being parsed; false to allow them to be parsed.
+ */
+
+public synchronized void setParseNoExponent(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether to force case (uppercase/lowercase) to match when parsing.
+ *
+ * @see #setParseNoExponent
+ */
+
+public synchronized boolean isParseCaseSensitive() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Specifies whether parsing should require cases to match in affixes, exponent separators,
+ * and currency codes. Case mapping is performed for each code point using {@link android.icu.lang.UCharacter#foldCase  }.
+ *
+ * @param value true to force case (uppercase/lowercase) to match when parsing; false to ignore
+ *     case and perform case folding.
+ */
+
+public synchronized void setParseCaseSensitive(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tests for equality between this formatter and another formatter.
+ *
+ * <p>If two DecimalFormat instances are equal, then they will always produce the same output.
+ * However, the reverse is not necessarily true: if two DecimalFormat instances always produce the
+ * same output, they are not necessarily equal.
+ */
+
+public synchronized boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public synchronized int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default value of toString() with extra DecimalFormat-specific information appended
+ * to the end of the string. This extra information is intended for debugging purposes, and the
+ * format is not guaranteed to be stable.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Serializes this formatter object to a decimal format pattern string. The result of this method
+ * is guaranteed to be <em>functionally</em> equivalent to the pattern string used to create this
+ * instance after incorporating values from the setter methods.
+ *
+ * <p>For more information on decimal format pattern strings, see <a
+ * href="http://unicode.org/reports/tr35/tr35-numbers.html#Number_Format_Patterns">UTS #35</a>.
+ *
+ * <p><strong>Important:</strong> Not all properties are capable of being encoded in a pattern
+ * string. See a list of properties in {@link #applyPattern}.
+ *
+ * @return A decimal format pattern string.
+ */
+
+public synchronized java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Calls {@link #toPattern} and converts the string to localized notation. For more information on
+ * localized notation, see {@link #applyLocalizedPattern}. This method is provided for backwards
+ * compatibility and should not be used in new projects.
+ *
+ * @return A decimal format pattern string in localized notation.
+ */
+
+public synchronized java.lang.String toLocalizedPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted after the prefix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_BEFORE_PREFIX
+ * @see #PAD_BEFORE_SUFFIX
+ * @see #PAD_AFTER_SUFFIX
+ */
+
+public static final int PAD_AFTER_PREFIX = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted after the suffix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_BEFORE_PREFIX
+ * @see #PAD_AFTER_PREFIX
+ * @see #PAD_BEFORE_SUFFIX
+ */
+
+public static final int PAD_AFTER_SUFFIX = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted before the prefix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_AFTER_PREFIX
+ * @see #PAD_BEFORE_SUFFIX
+ * @see #PAD_AFTER_SUFFIX
+ */
+
+public static final int PAD_BEFORE_PREFIX = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant for {@link #getPadPosition()} and {@link #setPadPosition(int)} to specify pad
+ * characters inserted before the suffix.
+ *
+ * @see #setPadPosition
+ * @see #getPadPosition
+ * @see #PAD_BEFORE_PREFIX
+ * @see #PAD_AFTER_PREFIX
+ * @see #PAD_AFTER_SUFFIX
+ */
+
+public static final int PAD_BEFORE_SUFFIX = 2; // 0x2
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormatSymbols.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormatSymbols.java
new file mode 100644
index 0000000..49e761c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DecimalFormatSymbols.java
@@ -0,0 +1,779 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale.Category;
+import android.icu.util.Currency;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.DecimalFormatSymbols}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * This class represents the set of symbols (such as the decimal separator, the grouping
+ * separator, and so on) needed by <code>DecimalFormat</code> to format
+ * numbers. <code>DecimalFormat</code> creates for itself an instance of
+ * <code>DecimalFormatSymbols</code> from its locale data.  If you need to change any of
+ * these symbols, you can get the <code>DecimalFormatSymbols</code> object from your
+ * <code>DecimalFormat</code> and modify it.
+ *
+ * @see          java.util.Locale
+ * @see          android.icu.text.DecimalFormat
+ * @author       Mark Davis
+ * @author       Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class DecimalFormatSymbols implements java.lang.Cloneable, java.io.Serializable {
+
+/**
+ * Creates a DecimalFormatSymbols object for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public DecimalFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a DecimalFormatSymbols object for the given locale.
+ * @param locale the locale
+ */
+
+public DecimalFormatSymbols(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a DecimalFormatSymbols object for the given locale.
+ * @param locale the locale
+ */
+
+public DecimalFormatSymbols(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DecimalFormatSymbols instance for the default locale.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getInstance</code>, this method simply returns
+ * <code>new android.icu.text.DecimalFormatSymbols()</code>.  ICU currently does not
+ * support <code>DecimalFormatSymbolsProvider</code>, which was introduced in Java 6.
+ *
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DecimalFormatSymbols instance for the given locale.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getInstance</code>, this method simply returns
+ * <code>new android.icu.text.DecimalFormatSymbols(locale)</code>.  ICU currently does
+ * not support <code>DecimalFormatSymbolsProvider</code>, which was introduced in Java
+ * 6.
+ *
+ * @param locale the locale.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DecimalFormatSymbols instance for the given locale.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getInstance</code>, this method simply returns
+ * <code>new android.icu.text.DecimalFormatSymbols(locale)</code>.  ICU currently does
+ * not support <code>DecimalFormatSymbolsProvider</code>, which was introduced in Java
+ * 6.
+ *
+ * @param locale the locale.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a DecimalFormatSymbols instance for the given locale with digits and symbols
+ * corresponding to the given {@link android.icu.text.NumberingSystem NumberingSystem}.
+ *
+ * <p>This method behaves equivalently to {@link #getInstance} called with a locale having a
+ * "numbers=xxxx" keyword specifying the numbering system by name.
+ *
+ * <p>In this method, the NumberingSystem argument will be used even if the locale has its own
+ * "numbers=xxxx" keyword.
+ *
+ * @param locale the locale.
+ * @param ns the numbering system.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols forNumberingSystem(java.util.Locale locale, android.icu.text.NumberingSystem ns) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a DecimalFormatSymbols instance for the given locale with digits and symbols
+ * corresponding to the given {@link android.icu.text.NumberingSystem NumberingSystem}.
+ *
+ * <p>This method behaves equivalently to {@link #getInstance} called with a locale having a
+ * "numbers=xxxx" keyword specifying the numbering system by name.
+ *
+ * <p>In this method, the NumberingSystem argument will be used even if the locale has its own
+ * "numbers=xxxx" keyword.
+ *
+ * @param locale the locale.
+ * @param ns the numbering system.
+ * @return A DecimalFormatSymbols instance.
+ */
+
+public static android.icu.text.DecimalFormatSymbols forNumberingSystem(android.icu.util.ULocale locale, android.icu.text.NumberingSystem ns) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of all locales for which the <code>getInstance</code> methods of
+ * this class can return localized instances.
+ *
+ * <p><strong>Note:</strong> Unlike
+ * <code>java.text.DecimalFormatSymbols#getAvailableLocales</code>, this method simply
+ * returns the array of <code>Locale</code>s available for this class.  ICU currently
+ * does not support <code>DecimalFormatSymbolsProvider</code>, which was introduced in
+ * Java 6.
+ *
+ * @return An array of <code>Locale</code>s for which localized
+ * <code>DecimalFormatSymbols</code> instances are available.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for zero. Different for Arabic, etc.
+ * @return the character
+ */
+
+public char getZeroDigit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the array of characters used as digits, in order from 0 through 9
+ * @return The array
+ */
+
+public char[] getDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for zero.
+ * <p>
+ * <b>Note:</b> This method propagates digit 1 to
+ * digit 9 by incrementing code point one by one.
+ *
+ * @param zeroDigit the zero character.
+ */
+
+public void setZeroDigit(char zeroDigit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the array of strings used as digits, in order from 0 through 9
+ * @return The array of ten digit strings
+ * @see #setDigitStrings(String[])
+ */
+
+public java.lang.String[] getDigitStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the array of strings used as digits, in order from 0 through 9
+ * <p>
+ * <b>Note:</b>
+ * <p>
+ * When the input array of digit strings contains any strings
+ * represented by multiple Java chars, then {@link #getDigits()} will return
+ * the default digits ('0' - '9') and {@link #getZeroDigit()} will return the
+ * default zero digit ('0').
+ *
+ * @param digitStrings The array of digit strings. The length of the array must be exactly 10.
+ * @throws java.lang.NullPointerException if the <code>digitStrings</code> is null.
+ * @throws java.lang.IllegalArgumentException if the length of the array is not 10.
+ * @see #getDigitStrings()
+ */
+
+public void setDigitStrings(java.lang.String[] digitStrings) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used to represent a significant digit in a pattern.
+ * @return the significant digit pattern character
+ */
+
+public char getSignificantDigit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used to represent a significant digit in a pattern.
+ * @param sigDigit the significant digit pattern character
+ */
+
+public void setSignificantDigit(char sigDigit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for grouping separator. Different for French, etc.
+ * @return the thousands character
+ */
+
+public char getGroupingSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for grouping separator. Different for French, etc.
+ * @param groupingSeparator the thousands character
+ */
+
+public void setGroupingSeparator(char groupingSeparator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for grouping separator. Different for French, etc.
+ * @return the grouping separator string
+ * @see #setGroupingSeparatorString(String)
+ */
+
+public java.lang.String getGroupingSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for grouping separator.
+ * <p>
+ * <b>Note:</b> When the input grouping separator String is represented
+ * by multiple Java chars, then {@link #getGroupingSeparator()} will
+ * return the default grouping separator character (',').
+ *
+ * @param groupingSeparatorString the grouping separator string
+ * @throws java.lang.NullPointerException if <code>groupingSeparatorString</code> is null.
+ * @see #getGroupingSeparatorString()
+ */
+
+public void setGroupingSeparatorString(java.lang.String groupingSeparatorString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for decimal sign. Different for French, etc.
+ * @return the decimal character
+ */
+
+public char getDecimalSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for decimal sign. Different for French, etc.
+ * @param decimalSeparator the decimal character
+ */
+
+public void setDecimalSeparator(char decimalSeparator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for decimal sign.
+ * @return the decimal sign string
+ * @see #setDecimalSeparatorString(String)
+ */
+
+public java.lang.String getDecimalSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for decimal sign.
+ * <p>
+ * <b>Note:</b> When the input decimal separator String is represented
+ * by multiple Java chars, then {@link #getDecimalSeparator()} will
+ * return the default decimal separator character ('.').
+ *
+ * @param decimalSeparatorString the decimal sign string
+ * @throws java.lang.NullPointerException if <code>decimalSeparatorString</code> is null.
+ * @see #getDecimalSeparatorString()
+ */
+
+public void setDecimalSeparatorString(java.lang.String decimalSeparatorString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for mille percent sign. Different for Arabic, etc.
+ * @return the mille percent character
+ */
+
+public char getPerMill() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for mille percent sign. Different for Arabic, etc.
+ * @param perMill the mille percent character
+ */
+
+public void setPerMill(char perMill) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for permille sign.
+ * @return the permille string
+ * @see #setPerMillString(String)
+ */
+
+public java.lang.String getPerMillString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for permille sign.
+ * <p>
+ * <b>Note:</b> When the input permille String is represented
+ * by multiple Java chars, then {@link #getPerMill()} will
+ * return the default permille character ('&#x2030;').
+ *
+ * @param perMillString the permille string
+ * @throws java.lang.NullPointerException if <code>perMillString</code> is null.
+ * @see #getPerMillString()
+ */
+
+public void setPerMillString(java.lang.String perMillString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for percent sign. Different for Arabic, etc.
+ * @return the percent character
+ */
+
+public char getPercent() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for percent sign. Different for Arabic, etc.
+ * @param percent the percent character
+ */
+
+public void setPercent(char percent) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used for percent sign.
+ * @return the percent string
+ * @see #setPercentString(String)
+ */
+
+public java.lang.String getPercentString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used for percent sign.
+ * <p>
+ * <b>Note:</b> When the input grouping separator String is represented
+ * by multiple Java chars, then {@link #getPercent()} will
+ * return the default percent sign character ('%').
+ *
+ * @param percentString the percent string
+ * @throws java.lang.NullPointerException if <code>percentString</code> is null.
+ * @see #getPercentString()
+ */
+
+public void setPercentString(java.lang.String percentString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used for a digit in a pattern.
+ * @return the digit pattern character
+ */
+
+public char getDigit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used for a digit in a pattern.
+ * @param digit the digit pattern character
+ */
+
+public void setDigit(char digit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used to separate positive and negative subpatterns
+ * in a pattern.
+ * @return the pattern separator character
+ */
+
+public char getPatternSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used to separate positive and negative subpatterns
+ * in a pattern.
+ * @param patternSeparator the pattern separator character
+ */
+
+public void setPatternSeparator(char patternSeparator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the String used to represent infinity. Almost always left
+ * unchanged.
+ * @return the Infinity string
+ */
+
+public java.lang.String getInfinity() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the String used to represent infinity. Almost always left
+ * unchanged.
+ * @param infinity the Infinity String
+ */
+
+public void setInfinity(java.lang.String infinity) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the String used to represent NaN. Almost always left
+ * unchanged.
+ * @return the NaN String
+ */
+
+public java.lang.String getNaN() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the String used to represent NaN. Almost always left
+ * unchanged.
+ * @param NaN the NaN String
+ */
+
+public void setNaN(java.lang.String NaN) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character used to represent minus sign. If no explicit
+ * negative format is specified, one is formed by prefixing
+ * minusSign to the positive format.
+ * @return the minus sign character
+ */
+
+public char getMinusSign() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the character used to represent minus sign. If no explicit
+ * negative format is specified, one is formed by prefixing
+ * minusSign to the positive format.
+ * @param minusSign the minus sign character
+ */
+
+public void setMinusSign(char minusSign) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used to represent minus sign.
+ * @return the minus sign string
+ * @see #setMinusSignString(String)
+ */
+
+public java.lang.String getMinusSignString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used to represent minus sign.
+ * <p>
+ * <b>Note:</b> When the input minus sign String is represented
+ * by multiple Java chars, then {@link #getMinusSign()} will
+ * return the default minus sign character ('-').
+ *
+ * @param minusSignString the minus sign string
+ * @throws java.lang.NullPointerException if <code>minusSignString</code> is null.
+ * @see #getGroupingSeparatorString()
+ */
+
+public void setMinusSignString(java.lang.String minusSignString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the localized plus sign.
+ * @return the plus sign, used in localized patterns and formatted
+ * strings
+ * @see #setPlusSign
+ * @see #setMinusSign
+ * @see #getMinusSign
+ */
+
+public char getPlusSign() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the localized plus sign.
+ * @param plus the plus sign, used in localized patterns and formatted
+ * strings
+ * @see #getPlusSign
+ * @see #setMinusSign
+ * @see #getMinusSign
+ */
+
+public void setPlusSign(char plus) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used to represent plus sign.
+ * @return the plus sign string
+ */
+
+public java.lang.String getPlusSignString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the localized plus sign string.
+ * <p>
+ * <b>Note:</b> When the input plus sign String is represented
+ * by multiple Java chars, then {@link #getPlusSign()} will
+ * return the default plus sign character ('+').
+ *
+ * @param plusSignString the plus sign string, used in localized patterns and formatted
+ * strings
+ * @throws java.lang.NullPointerException if <code>plusSignString</code> is null.
+ * @see #getPlusSignString()
+ */
+
+public void setPlusSignString(java.lang.String plusSignString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the string denoting the local currency.
+ * @return the local currency String.
+ */
+
+public java.lang.String getCurrencySymbol() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the string denoting the local currency.
+ * @param currency the local currency String.
+ */
+
+public void setCurrencySymbol(java.lang.String currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the international string denoting the local currency.
+ * @return the international string denoting the local currency
+ */
+
+public java.lang.String getInternationalCurrencySymbol() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the international string denoting the local currency.
+ * @param currency the international string denoting the local currency.
+ */
+
+public void setInternationalCurrencySymbol(java.lang.String currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the currency symbol, for {@link android.icu.text.DecimalFormatSymbols#getCurrency() DecimalFormatSymbols#getCurrency()} API
+ * compatibility only. ICU clients should use the Currency API directly.
+ * @return the currency used, or null
+ */
+
+public android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the currency.
+ *
+ * <p><strong>Note:</strong> ICU does not use the DecimalFormatSymbols for the currency
+ * any more.  This API is present for API compatibility only.
+ *
+ * <p>This also sets the currency symbol attribute to the currency's symbol
+ * in the DecimalFormatSymbols' locale, and the international currency
+ * symbol attribute to the currency's ISO 4217 currency code.
+ *
+ * @param currency the new currency to be used
+ * @throws java.lang.NullPointerException if <code>currency</code> is null
+ * @see #setCurrencySymbol
+ * @see #setInternationalCurrencySymbol
+ */
+
+public void setCurrency(android.icu.util.Currency currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the monetary decimal separator.
+ * @return the monetary decimal separator character
+ */
+
+public char getMonetaryDecimalSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the monetary decimal separator.
+ * @param sep the monetary decimal separator character
+ */
+
+public void setMonetaryDecimalSeparator(char sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the monetary decimal separator string.
+ * @return the monetary decimal separator string
+ * @see #setMonetaryDecimalSeparatorString(String)
+ */
+
+public java.lang.String getMonetaryDecimalSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the monetary decimal separator string.
+ * <p>
+ * <b>Note:</b> When the input monetary decimal separator String is represented
+ * by multiple Java chars, then {@link #getMonetaryDecimalSeparatorString()} will
+ * return the default monetary decimal separator character ('.').
+ *
+ * @param sep the monetary decimal separator string
+ * @throws java.lang.NullPointerException if <code>sep</code> is null.
+ * @see #getMonetaryDecimalSeparatorString()
+ */
+
+public void setMonetaryDecimalSeparatorString(java.lang.String sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the monetary grouping separator.
+ * @return the monetary grouping separator character
+ */
+
+public char getMonetaryGroupingSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the monetary grouping separator.
+ * @param sep the monetary grouping separator character
+ */
+
+public void setMonetaryGroupingSeparator(char sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the monetary grouping separator.
+ * @return the monetary grouping separator string
+ * @see #setMonetaryGroupingSeparatorString(String)
+ */
+
+public java.lang.String getMonetaryGroupingSeparatorString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the monetary grouping separator string.
+ * <p>
+ * <b>Note:</b> When the input grouping separator String is represented
+ * by multiple Java chars, then {@link #getMonetaryGroupingSeparator()} will
+ * return the default monetary grouping separator character (',').
+ *
+ * @param sep the monetary grouping separator string
+ * @throws java.lang.NullPointerException if <code>sep</code> is null.
+ * @see #getMonetaryGroupingSeparatorString()
+ */
+
+public void setMonetaryGroupingSeparatorString(java.lang.String sep) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the multiplication sign
+ */
+
+public java.lang.String getExponentMultiplicationSign() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the multiplication sign
+ */
+
+public void setExponentMultiplicationSign(java.lang.String exponentMultiplicationSign) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the string used to separate the mantissa from the exponent.
+ * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+ * @return the localized exponent symbol, used in localized patterns
+ * and formatted strings
+ * @see #setExponentSeparator
+ */
+
+public java.lang.String getExponentSeparator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the string used to separate the mantissa from the exponent.
+ * Examples: "x10^" for 1.23x10^4, "E" for 1.23E4.
+ * @param exp the localized exponent symbol, used in localized patterns
+ * and formatted strings
+ * @see #getExponentSeparator
+ */
+
+public void setExponentSeparator(java.lang.String exp) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the character used to pad numbers out to a specified width.  This is
+ * not the pad character itself; rather, it is the special pattern character
+ * <em>preceding</em> the pad character.  In the pattern "*_#,##0", '*' is the pad
+ * escape, and '_' is the pad character.
+ * @return the character
+ * @see #setPadEscape
+ * @see android.icu.text.DecimalFormat#getFormatWidth
+ * @see android.icu.text.DecimalFormat#getPadPosition
+ * @see android.icu.text.DecimalFormat#getPadCharacter
+ */
+
+public char getPadEscape() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the character used to pad numbers out to a specified width.  This is not
+ * the pad character itself; rather, it is the special pattern character
+ * <em>preceding</em> the pad character.  In the pattern "*_#,##0", '*' is the pad
+ * escape, and '_' is the pad character.
+ * @see #getPadEscape
+ * @see android.icu.text.DecimalFormat#setFormatWidth
+ * @see android.icu.text.DecimalFormat#setPadPosition
+ * @see android.icu.text.DecimalFormat#setPadCharacter
+ */
+
+public void setPadEscape(char c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the desired currency spacing value. Original values come from ICU's
+ * CLDR data based on the locale provided during construction, and can be null.  These
+ * values govern what and when text is inserted between a currency code/name/symbol
+ * and the currency amount when formatting money.
+ *
+ * <p>For more information, see <a href="http://www.unicode.org/reports/tr35/#Currencies"
+ * >UTS#35 section 5.10.2</a>.
+ *
+ * @param itemType one of CURRENCY_SPC_CURRENCY_MATCH, CURRENCY_SPC_SURROUNDING_MATCH
+ * or CURRENCY_SPC_INSERT
+ * @param beforeCurrency true to get the <code>beforeCurrency</code> values, false
+ * to get the <code>afterCurrency</code> values.
+ * @return the value, or null.
+ * @see #setPatternForCurrencySpacing(int, boolean, String)
+ */
+
+public java.lang.String getPatternForCurrencySpacing(int itemType, boolean beforeCurrency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the indicated currency spacing pattern or value. See {@link
+ * #getPatternForCurrencySpacing} for more information.
+ *
+ * <p>Values for currency match and surrounding match must be {@link
+ * android.icu.text.UnicodeSet} patterns. Values for insert can be any string.
+ *
+ * <p><strong>Note:</strong> ICU4J does not currently use this information.
+ *
+ * @param itemType one of CURRENCY_SPC_CURRENCY_MATCH, CURRENCY_SPC_SURROUNDING_MATCH
+ * or CURRENCY_SPC_INSERT
+ * @param beforeCurrency true if the pattern is for before the currency symbol.
+ * false if the pattern is for after it.
+ * @param  pattern string to override current setting; can be null.
+ * @see #getPatternForCurrencySpacing(int, boolean)
+ */
+
+public void setPatternForCurrencySpacing(int itemType, boolean beforeCurrency, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale for which this object was constructed.
+ * @return the locale for which this object was constructed
+ */
+
+public java.util.Locale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale for which this object was constructed.
+ * @return the locale for which this object was constructed
+ */
+
+public android.icu.util.ULocale getULocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Indicates the currency match pattern used in {@link #getPatternForCurrencySpacing}.
+ */
+
+public static final int CURRENCY_SPC_CURRENCY_MATCH = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Indicates the insertion value used in {@link #getPatternForCurrencySpacing}.
+ */
+
+public static final int CURRENCY_SPC_INSERT = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Indicates the surrounding match pattern used in {@link
+ * #getPatternForCurrencySpacing}.
+ */
+
+public static final int CURRENCY_SPC_SURROUNDING_MATCH = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DisplayContext.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DisplayContext.java
new file mode 100644
index 0000000..bc416c3
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/DisplayContext.java
@@ -0,0 +1,141 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2012-2015, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * Display context settings.
+ * Note, the specific numeric values are internal and may change.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DisplayContext {
+/**
+ * A possible setting for DIALECT_HANDLING:
+ * use standard names when generating a locale name,
+ * e.g. en_GB displays as 'English (United Kingdom)'.
+ */
+
+STANDARD_NAMES,
+/**
+ * A possible setting for DIALECT_HANDLING:
+ * use dialect names, when generating a locale name,
+ * e.g. en_GB displays as 'British English'.
+ */
+
+DIALECT_NAMES,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context to be used is unknown (this is the default value).
+ */
+
+CAPITALIZATION_NONE,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for the middle of a sentence.
+ */
+
+CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for the beginning of a sentence.
+ */
+
+CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for a user-interface list or menu item.
+ */
+
+CAPITALIZATION_FOR_UI_LIST_OR_MENU,
+/**
+ * A possible setting for CAPITALIZATION:
+ * The capitalization context if a date, date symbol or display name is to be
+ * formatted with capitalization appropriate for stand-alone usage such as an
+ * isolated name on a calendar page.
+ */
+
+CAPITALIZATION_FOR_STANDALONE,
+/**
+ * A possible setting for DISPLAY_LENGTH:
+ * use full names when generating a locale name,
+ * e.g. "United States" for US.
+ */
+
+LENGTH_FULL,
+/**
+ * A possible setting for DISPLAY_LENGTH:
+ * use short names when generating a locale name,
+ * e.g. "U.S." for US.
+ */
+
+LENGTH_SHORT,
+/**
+ * A possible setting for SUBSTITUTE_HANDLING:
+ * Returns a fallback value (e.g., the input code) when no data is available.
+ * This is the default behavior.
+ */
+
+SUBSTITUTE,
+/**
+ * A possible setting for SUBSTITUTE_HANDLING:
+ * Returns a null value when no data is available.
+ */
+
+NO_SUBSTITUTE;
+
+/**
+ * Get the Type part of the enum item
+ * (e.g. CAPITALIZATION)
+ */
+
+public android.icu.text.DisplayContext.Type type() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the value part of the enum item
+ * (e.g. CAPITALIZATION_FOR_STANDALONE)
+ */
+
+public int value() { throw new RuntimeException("Stub!"); }
+/**
+ * Type values for DisplayContext
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Type {
+/**
+ * DIALECT_HANDLING can be set to STANDARD_NAMES or DIALECT_NAMES.
+ */
+
+DIALECT_HANDLING,
+/**
+ * CAPITALIZATION can be set to one of CAPITALIZATION_NONE through
+ * CAPITALIZATION_FOR_STANDALONE.
+ */
+
+CAPITALIZATION,
+/**
+ * DISPLAY_LENGTH can be set to LENGTH_FULL or LENGTH_SHORT.
+ */
+
+DISPLAY_LENGTH,
+/**
+ * SUBSTITUTE_HANDLING can be set to SUBSTITUTE or NO_SUBSTITUTE.
+ */
+
+SUBSTITUTE_HANDLING;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Edits.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Edits.java
new file mode 100644
index 0000000..5315c6f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Edits.java
@@ -0,0 +1,352 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+
+/**
+ * Records lengths of string edits but not replacement text. Supports replacements, insertions, deletions
+ * in linear progression. Does not support moving/reordering of text.
+ * <p>
+ * There are two types of edits: <em>change edits</em> and <em>no-change edits</em>. Add edits to
+ * instances of this class using {@link #addReplace(int,int)} (for change edits) and
+ * {@link #addUnchanged(int)} (for no-change edits). Change edits are retained with full granularity,
+ * whereas adjacent no-change edits are always merged together. In no-change edits, there is a one-to-one
+ * mapping between code points in the source and destination strings.
+ * <p>
+ * After all edits have been added, instances of this class should be considered immutable, and an
+ * {@link android.icu.text.Edits.Iterator Edits.Iterator} can be used for queries.
+ * <p>
+ * There are four flavors of Edits.Iterator:
+ * <ul>
+ * <li>{@link #getFineIterator()} retains full granularity of change edits.
+ * <li>{@link #getFineChangesIterator()} retains full granularity of change edits, and when calling
+ * next() on the iterator, skips over no-change edits (unchanged regions).
+ * <li>{@link #getCoarseIterator()} treats adjacent change edits as a single edit. (Adjacent no-change
+ * edits are automatically merged during the construction phase.)
+ * <li>{@link #getCoarseChangesIterator()} treats adjacent change edits as a single edit, and when
+ * calling next() on the iterator, skips over no-change edits (unchanged regions).
+ * </ul>
+ * <p>
+ * For example, consider the string "abc?DeF", which case-folds to "abcssdef". This string has the
+ * following fine edits:
+ * <ul>
+ * <li>abc ? abc (no-change)
+ * <li>? ? ss (change)
+ * <li>D ? d (change)
+ * <li>e ? e (no-change)
+ * <li>F ? f (change)
+ * </ul>
+ * and the following coarse edits (note how adjacent change edits get merged together):
+ * <ul>
+ * <li>abc ? abc (no-change)
+ * <li>?D ? ssd (change)
+ * <li>e ? e (no-change)
+ * <li>F ? f (change)
+ * </ul>
+ * <p>
+ * The "fine changes" and "coarse changes" iterators will step through only the change edits when their
+ * {@link android.icu.text.Edits.Iterator#next() Edits.Iterator#next()} methods are called. They are identical to the non-change iterators when
+ * their {@link android.icu.text.Edits.Iterator#findSourceIndex(int) Edits.Iterator#findSourceIndex(int)} method is used to walk through the string.
+ * <p>
+ * For examples of how to use this class, see the test <code>TestCaseMapEditsIteratorDocs</code> in
+ * UCharacterCaseTest.java.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class Edits {
+
+/**
+ * Constructs an empty object.
+ */
+
+public Edits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the data but may not release memory.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a no-change edit: a record for an unchanged segment of text.
+ * Normally called from inside ICU string transformation functions, not user code.
+ */
+
+public void addUnchanged(int unchangedLength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a change edit: a record for a text replacement/insertion/deletion.
+ * Normally called from inside ICU string transformation functions, not user code.
+ */
+
+public void addReplace(int oldLength, int newLength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * How much longer is the new text compared with the old text?
+ * @return new length minus old length
+ */
+
+public int lengthDelta() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return true if there are any change edits
+ */
+
+public boolean hasChanges() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return the number of change edits
+ */
+
+public int numberOfChanges() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for coarse-grained change edits
+ * (adjacent change edits are treated as one).
+ * Can be used to perform simple string updates.
+ * Skips no-change edits.
+ * @return an Iterator that merges adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getCoarseChangesIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for coarse-grained change and no-change edits
+ * (adjacent change edits are treated as one).
+ * Can be used to perform simple string updates.
+ * Adjacent change edits are treated as one edit.
+ * @return an Iterator that merges adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getCoarseIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for fine-grained change edits
+ * (full granularity of change edits is retained).
+ * Can be used for modifying styled text.
+ * Skips no-change edits.
+ * @return an Iterator that separates adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getFineChangesIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an Iterator for fine-grained change and no-change edits
+ * (full granularity of change edits is retained).
+ * Can be used for modifying styled text.
+ * @return an Iterator that separates adjacent changes.
+ */
+
+public android.icu.text.Edits.Iterator getFineIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Merges the two input Edits and appends the result to this object.
+ *
+ * <p>Consider two string transformations (for example, normalization and case mapping)
+ * where each records Edits in addition to writing an output string.<br>
+ * Edits ab reflect how substrings of input string a
+ * map to substrings of intermediate string b.<br>
+ * Edits bc reflect how substrings of intermediate string b
+ * map to substrings of output string c.<br>
+ * This function merges ab and bc such that the additional edits
+ * recorded in this object reflect how substrings of input string a
+ * map to substrings of output string c.
+ *
+ * <p>If unrelated Edits are passed in where the output string of the first
+ * has a different length than the input string of the second,
+ * then an IllegalArgumentException is thrown.
+ *
+ * @param ab reflects how substrings of input string a
+ *     map to substrings of intermediate string b.
+ * @param bc reflects how substrings of intermediate string b
+ *     map to substrings of output string c.
+ * @return this, with the merged edits appended
+ */
+
+public android.icu.text.Edits mergeAndAppend(android.icu.text.Edits ab, android.icu.text.Edits bc) { throw new RuntimeException("Stub!"); }
+/**
+ * Access to the list of edits.
+ * <p>
+ * At any moment in time, an instance of this class points to a single edit: a "window" into a span
+ * of the source string and the corresponding span of the destination string. The source string span
+ * starts at {@link #sourceIndex()} and runs for {@link #oldLength()} chars; the destination string
+ * span starts at {@link #destinationIndex()} and runs for {@link #newLength()} chars.
+ * <p>
+ * The iterator can be moved between edits using the {@link #next()} and
+ * {@link #findSourceIndex(int)} methods. Calling any of these methods mutates the iterator
+ * to make it point to the corresponding edit.
+ * <p>
+ * For more information, see the documentation for {@link android.icu.text.Edits Edits}.
+ * <p>
+ * Note: Although this class is called "Iterator", it does not implement {@link java.util.Iterator}.
+ *
+ * @see #getCoarseIterator
+ * @see #getFineIterator
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Iterator {
+
+private Iterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Advances the iterator to the next edit.
+ * @return true if there is another edit
+ */
+
+public boolean next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the iterator to the edit that contains the source index.
+ * The source index may be found in a no-change edit
+ * even if normal iteration would skip no-change edits.
+ * Normal iteration can continue from a found edit.
+ *
+ * <p>The iterator state before this search logically does not matter.
+ * (It may affect the performance of the search.)
+ *
+ * <p>The iterator state after this search is undefined
+ * if the source index is out of bounds for the source string.
+ *
+ * @param i source index
+ * @return true if the edit for the source index was found
+ */
+
+public boolean findSourceIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the iterator to the edit that contains the destination index.
+ * The destination index may be found in a no-change edit
+ * even if normal iteration would skip no-change edits.
+ * Normal iteration can continue from a found edit.
+ *
+ * <p>The iterator state before this search logically does not matter.
+ * (It may affect the performance of the search.)
+ *
+ * <p>The iterator state after this search is undefined
+ * if the source index is out of bounds for the source string.
+ *
+ * @param i destination index
+ * @return true if the edit for the destination index was found
+ */
+
+public boolean findDestinationIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Computes the destination index corresponding to the given source index.
+ * If the source index is inside a change edit (not at its start),
+ * then the destination index at the end of that edit is returned,
+ * since there is no information about index mapping inside a change edit.
+ *
+ * <p>(This means that indexes to the start and middle of an edit,
+ * for example around a grapheme cluster, are mapped to indexes
+ * encompassing the entire edit.
+ * The alternative, mapping an interior index to the start,
+ * would map such an interval to an empty one.)
+ *
+ * <p>This operation will usually but not always modify this object.
+ * The iterator state after this search is undefined.
+ *
+ * @param i source index
+ * @return destination index; undefined if i is not 0..string length
+ */
+
+public int destinationIndexFromSourceIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Computes the source index corresponding to the given destination index.
+ * If the destination index is inside a change edit (not at its start),
+ * then the source index at the end of that edit is returned,
+ * since there is no information about index mapping inside a change edit.
+ *
+ * <p>(This means that indexes to the start and middle of an edit,
+ * for example around a grapheme cluster, are mapped to indexes
+ * encompassing the entire edit.
+ * The alternative, mapping an interior index to the start,
+ * would map such an interval to an empty one.)
+ *
+ * <p>This operation will usually but not always modify this object.
+ * The iterator state after this search is undefined.
+ *
+ * @param i destination index
+ * @return source index; undefined if i is not 0..string length
+ */
+
+public int sourceIndexFromDestinationIndex(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns whether the edit currently represented by the iterator is a change edit.
+ *
+ * @return true if this edit replaces oldLength() units with newLength() different ones.
+ *         false if oldLength units remain unchanged.
+ */
+
+public boolean hasChange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The length of the current span in the source string, which starts at {@link #sourceIndex}.
+ *
+ * @return the number of units in the source string which are replaced or remain unchanged.
+ */
+
+public int oldLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The length of the current span in the destination string, which starts at
+ * {@link #destinationIndex}, or in the replacement string, which starts at
+ * {@link #replacementIndex}.
+ *
+ * @return the number of units in the destination string, if hasChange() is true. Same as
+ *         oldLength if hasChange() is false.
+ */
+
+public int newLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The start index of the current span in the source string; the span has length
+ * {@link #oldLength}.
+ *
+ * @return the current index into the source string
+ */
+
+public int sourceIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The start index of the current span in the replacement string; the span has length
+ * {@link #newLength}. Well-defined only if the current edit is a change edit.
+ * <p>
+ * The <em>replacement string</em> is the concatenation of all substrings of the destination
+ * string corresponding to change edits.
+ * <p>
+ * This method is intended to be used together with operations that write only replacement
+ * characters (e.g., {@link android.icu.text.CaseMap#omitUnchangedText() CaseMap#omitUnchangedText()}). The source string can then be modified
+ * in-place.
+ *
+ * @return the current index into the replacement-characters-only string, not counting unchanged
+ *         spans
+ */
+
+public int replacementIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The start index of the current span in the destination string; the span has length
+ * {@link #newLength}.
+ *
+ * @return the current index into the full destination string
+ */
+
+public int destinationIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * A string representation of the current edit represented by the iterator for debugging. You
+ * should not depend on the contents of the return string; it may change over time.
+ * @return a string representation of the object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/FormattedValue.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/FormattedValue.java
new file mode 100644
index 0000000..5421fab
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/FormattedValue.java
@@ -0,0 +1,75 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2018 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+package android.icu.text;
+
+import android.icu.util.ICUUncheckedIOException;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * An abstract formatted value: a string with associated field attributes.
+ * Many formatters format to classes implementing FormattedValue.
+ *
+ * @author sffc
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface FormattedValue extends java.lang.CharSequence {
+
+/**
+ * Returns the formatted string as a Java String.
+ *
+ * Consider using {@link #appendTo} for greater efficiency.
+ *
+ * @return The formatted string.
+ */
+
+public java.lang.String toString();
+
+/**
+ * Appends the formatted string to an Appendable.
+ * <p>
+ * If an IOException occurs when appending to the Appendable, an unchecked
+ * {@link android.icu.util.ICUUncheckedIOException ICUUncheckedIOException} is thrown instead.
+ *
+ * @param appendable The Appendable to which to append the string output.
+ * @return The same Appendable, for chaining.
+ * @throws android.icu.util.ICUUncheckedIOException if the Appendable throws IOException
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable);
+
+/**
+ * Iterates over field positions in the FormattedValue. This lets you determine the position
+ * of specific types of substrings, like a month or a decimal separator.
+ *
+ * To loop over all field positions:
+ *
+ * <pre>
+ *     ConstrainableFieldPosition cfpos = new ConstrainableFieldPosition();
+ *     while (fmtval.nextPosition(cfpos)) {
+ *         // handle the field position; get information from cfpos
+ *     }
+ * </pre>
+ *
+ * @param cfpos
+ *         The object used for iteration state. This can provide constraints to iterate over
+ *         only one specific field; see {@link android.icu.text.ConstrainedFieldPosition#constrainField ConstrainedFieldPosition#constrainField}.
+ * @return true if a new occurrence of the field was found;
+ *         false otherwise.
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos);
+
+/**
+ * Exports the formatted number as an AttributedCharacterIterator.
+ * <p>
+ * Consider using {@link #nextPosition} if you are trying to get field information.
+ *
+ * @return An AttributedCharacterIterator containing full field information.
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator();
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/IDNA.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/IDNA.java
new file mode 100644
index 0000000..e683e49
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/IDNA.java
@@ -0,0 +1,349 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2003-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+
+/**
+ * Abstract base class for IDNA processing.
+ * See http://www.unicode.org/reports/tr46/
+ * and http://www.ietf.org/rfc/rfc3490.txt
+ * <p>
+ * The IDNA class is not intended for public subclassing.
+ * <p>
+ * The non-static methods implement UTS #46 and IDNA2008.
+ * IDNA2008 is implemented according to UTS #46, see getUTS46Instance().
+ * <p>
+ * IDNA2003 is obsolete. The static methods implement IDNA2003. They are all deprecated.
+ * <p>
+ * IDNA2003 API Overview:
+ * <p>
+ * The static IDNA API methods implement the IDNA protocol as defined in the
+ * <a href="http://www.ietf.org/rfc/rfc3490.txt">IDNA RFC</a>.
+ * The draft defines 2 operations: ToASCII and ToUnicode. Domain labels
+ * containing non-ASCII code points are required to be processed by
+ * ToASCII operation before passing it to resolver libraries. Domain names
+ * that are obtained from resolver libraries are required to be processed by
+ * ToUnicode operation before displaying the domain name to the user.
+ * IDNA requires that implementations process input strings with
+ * <a href="http://www.ietf.org/rfc/rfc3491.txt">Nameprep</a>,
+ * which is a profile of <a href="http://www.ietf.org/rfc/rfc3454.txt">Stringprep</a> ,
+ * and then with <a href="http://www.ietf.org/rfc/rfc3492.txt">Punycode</a>.
+ * Implementations of IDNA MUST fully implement Nameprep and Punycode;
+ * neither Nameprep nor Punycode are optional.
+ * The input and output of ToASCII and ToUnicode operations are Unicode
+ * and are designed to be chainable, i.e., applying ToASCII or ToUnicode operations
+ * multiple times to an input string will yield the same result as applying the operation
+ * once.
+ * ToUnicode(ToUnicode(ToUnicode...(ToUnicode(string)))) == ToUnicode(string)
+ * ToASCII(ToASCII(ToASCII...(ToASCII(string))) == ToASCII(string).
+ *
+ * @author Ram Viswanadha, Markus Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class IDNA {
+
+IDNA() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an IDNA instance which implements UTS #46.
+ * Returns an unmodifiable instance, owned by the caller.
+ * Cache it for multiple operations, and delete it when done.
+ * The instance is thread-safe, that is, it can be used concurrently.
+ * <p>
+ * UTS #46 defines Unicode IDNA Compatibility Processing,
+ * updated to the latest version of Unicode and compatible with both
+ * IDNA2003 and IDNA2008.
+ * <p>
+ * The worker functions use transitional processing, including deviation mappings,
+ * unless NONTRANSITIONAL_TO_ASCII or NONTRANSITIONAL_TO_UNICODE
+ * is used in which case the deviation characters are passed through without change.
+ * <p>
+ * Disallowed characters are mapped to U+FFFD.
+ * <p>
+ * Operations with the UTS #46 instance do not support the
+ * ALLOW_UNASSIGNED option.
+ * <p>
+ * By default, the UTS #46 implementation allows all ASCII characters (as valid or mapped).
+ * When the USE_STD3_RULES option is used, ASCII characters other than
+ * letters, digits, hyphen (LDH) and dot/full stop are disallowed and mapped to U+FFFD.
+ *
+ * @param options Bit set to modify the processing and error checking.
+ * @return the UTS #46 IDNA instance, if successful
+ */
+
+public static android.icu.text.IDNA getUTS46Instance(int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts a single domain name label into its ASCII form for DNS lookup.
+ * If any processing step fails, then info.hasErrors() will be true and
+ * the result might not be an ASCII string.
+ * The label might be modified according to the types of errors.
+ * Labels with severe errors will be left in (or turned into) their Unicode form.
+ *
+ * @param label Input domain name label
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder labelToASCII(java.lang.CharSequence label, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * Converts a single domain name label into its Unicode form for human-readable display.
+ * If any processing step fails, then info.hasErrors() will be true.
+ * The label might be modified according to the types of errors.
+ *
+ * @param label Input domain name label
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder labelToUnicode(java.lang.CharSequence label, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * Converts a whole domain name into its ASCII form for DNS lookup.
+ * If any processing step fails, then info.hasErrors() will be true and
+ * the result might not be an ASCII string.
+ * The domain name might be modified according to the types of errors.
+ * Labels with severe errors will be left in (or turned into) their Unicode form.
+ *
+ * @param name Input domain name
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder nameToASCII(java.lang.CharSequence name, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * Converts a whole domain name into its Unicode form for human-readable display.
+ * If any processing step fails, then info.hasErrors() will be true.
+ * The domain name might be modified according to the types of errors.
+ *
+ * @param name Input domain name
+ * @param dest Destination string object
+ * @param info Output container of IDNA processing details.
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder nameToUnicode(java.lang.CharSequence name, java.lang.StringBuilder dest, android.icu.text.IDNA.Info info);
+
+/**
+ * IDNA option to check for whether the input conforms to the BiDi rules.
+ * For use in static worker and factory methods.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (IDNA2003 always performs a BiDi check.)
+ */
+
+public static final int CHECK_BIDI = 4; // 0x4
+
+/**
+ * IDNA option to check for whether the input conforms to the CONTEXTJ rules.
+ * For use in static worker and factory methods.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (The CONTEXTJ check is new in IDNA2008.)
+ */
+
+public static final int CHECK_CONTEXTJ = 8; // 0x8
+
+/**
+ * IDNA option to check for whether the input conforms to the CONTEXTO rules.
+ * For use in static worker and factory methods.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (The CONTEXTO check is new in IDNA2008.)
+ * <p>This is for use by registries for IDNA2008 conformance.
+ * UTS #46 does not require the CONTEXTO check.
+ */
+
+public static final int CHECK_CONTEXTO = 64; // 0x40
+
+/** 
+ * Default options value: None of the other options are set.
+ * For use in static worker and factory methods.
+ */
+
+public static final int DEFAULT = 0; // 0x0
+
+/**
+ * IDNA option for nontransitional processing in ToASCII().
+ * For use in static worker and factory methods.
+ * <p>By default, ToASCII() uses transitional processing.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.)
+ */
+
+public static final int NONTRANSITIONAL_TO_ASCII = 16; // 0x10
+
+/**
+ * IDNA option for nontransitional processing in ToUnicode().
+ * For use in static worker and factory methods.
+ * <p>By default, ToUnicode() uses transitional processing.
+ * <p>This option is ignored by the IDNA2003 implementation.
+ * (This is only relevant for compatibility of newer IDNA implementations with IDNA2003.)
+ */
+
+public static final int NONTRANSITIONAL_TO_UNICODE = 32; // 0x20
+
+/** 
+ * Option to check whether the input conforms to the STD3 ASCII rules,
+ * for example the restriction of labels to LDH characters
+ * (ASCII Letters, Digits and Hyphen-Minus).
+ * For use in static worker and factory methods.
+ */
+
+public static final int USE_STD3_RULES = 2; // 0x2
+/**
+ * IDNA error bit set values.
+ * When a domain name or label fails a processing step or does not meet the
+ * validity criteria, then one or more of these error bits are set.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Error {
+/**
+ * A non-final domain name label (or the whole domain name) is empty.
+ */
+
+EMPTY_LABEL,
+/**
+ * A domain name label is longer than 63 bytes.
+ * (See STD13/RFC1034 3.1. Name space specifications and terminology.)
+ * This is only checked in ToASCII operations, and only if the output label is all-ASCII.
+ */
+
+LABEL_TOO_LONG,
+/**
+ * A domain name is longer than 255 bytes in its storage form.
+ * (See STD13/RFC1034 3.1. Name space specifications and terminology.)
+ * This is only checked in ToASCII operations, and only if the output domain name is all-ASCII.
+ */
+
+DOMAIN_NAME_TOO_LONG,
+/**
+ * A label starts with a hyphen-minus ('-').
+ */
+
+LEADING_HYPHEN,
+/**
+ * A label ends with a hyphen-minus ('-').
+ */
+
+TRAILING_HYPHEN,
+/**
+ * A label contains hyphen-minus ('-') in the third and fourth positions.
+ */
+
+HYPHEN_3_4,
+/**
+ * A label starts with a combining mark.
+ */
+
+LEADING_COMBINING_MARK,
+/**
+ * A label or domain name contains disallowed characters.
+ */
+
+DISALLOWED,
+/**
+ * A label starts with "xn--" but does not contain valid Punycode.
+ * That is, an xn-- label failed Punycode decoding.
+ */
+
+PUNYCODE,
+/**
+ * A label contains a dot=full stop.
+ * This can occur in an input string for a single-label function.
+ */
+
+LABEL_HAS_DOT,
+/**
+ * An ACE label does not contain a valid label string.
+ * The label was successfully ACE (Punycode) decoded but the resulting
+ * string had severe validation errors. For example,
+ * it might contain characters that are not allowed in ACE labels,
+ * or it might not be normalized.
+ */
+
+INVALID_ACE_LABEL,
+/**
+ * A label does not meet the IDNA BiDi requirements (for right-to-left characters).
+ */
+
+BIDI,
+/**
+ * A label does not meet the IDNA CONTEXTJ requirements.
+ */
+
+CONTEXTJ,
+/**
+ * A label does not meet the IDNA CONTEXTO requirements for punctuation characters.
+ * Some punctuation characters "Would otherwise have been DISALLOWED"
+ * but are allowed in certain contexts. (RFC 5892)
+ */
+
+CONTEXTO_PUNCTUATION,
+/**
+ * A label does not meet the IDNA CONTEXTO requirements for digits.
+ * Arabic-Indic Digits (U+066x) must not be mixed with Extended Arabic-Indic Digits (U+06Fx).
+ */
+
+CONTEXTO_DIGITS;
+}
+
+/**
+ * Output container for IDNA processing errors.
+ * The Info class is not suitable for subclassing.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Info {
+
+/**
+ * Constructor.
+ */
+
+public Info() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Were there IDNA processing errors?
+ * @return true if there were processing errors
+ */
+
+public boolean hasErrors() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a set indicating IDNA processing errors.
+ * @return set of processing errors (modifiable, and not null)
+ */
+
+public java.util.Set<android.icu.text.IDNA.Error> getErrors() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if transitional and nontransitional processing produce different results.
+ * This is the case when the input label or domain name contains
+ * one or more deviation characters outside a Punycode label (see UTS #46).
+ * <ul>
+ * <li>With nontransitional processing, such characters are
+ * copied to the destination string.
+ * <li>With transitional processing, such characters are
+ * mapped (sharp s/sigma) or removed (joiner/nonjoiner).
+ * </ul>
+ * @return true if transitional and nontransitional processing produce different results
+ */
+
+public boolean isTransitionalDifferent() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ListFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ListFormatter.java
new file mode 100644
index 0000000..63a7e18
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ListFormatter.java
@@ -0,0 +1,85 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2012-2016, Google, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.Format;
+
+/**
+ * Immutable class for formatting a list, using data from CLDR (or supplied
+ * separately). The class is not subclassable.
+ *
+ * @author Mark Davis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class ListFormatter {
+
+ListFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a list formatter that is appropriate for a locale.
+ *
+ * @param locale
+ *            the locale in question.
+ * @return ListFormatter
+ */
+
+public static android.icu.text.ListFormatter getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a list formatter that is appropriate for a locale.
+ *
+ * @param locale
+ *            the locale in question.
+ * @return ListFormatter
+ */
+
+public static android.icu.text.ListFormatter getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a list formatter that is appropriate for the default FORMAT locale.
+ *
+ * @return ListFormatter
+ */
+
+public static android.icu.text.ListFormatter getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a list of objects.
+ *
+ * @param items
+ *            items to format. The toString() method is called on each.
+ * @return items formatted into a string
+ */
+
+public java.lang.String format(java.lang.Object... items) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a collection of objects. The toString() method is called on each.
+ *
+ * @param items
+ *            items to format. The toString() method is called on each.
+ * @return items formatted into a string
+ */
+
+public java.lang.String format(java.util.Collection<?> items) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern to use for a particular item count.
+ * @param count the item count.
+ * @return the pattern with {0}, {1}, {2}, etc. For English,
+ * getPatternForNumItems(3) == "{0}, {1}, and {2}"
+ * @throws java.lang.IllegalArgumentException when count is 0 or negative.
+ */
+
+public java.lang.String getPatternForNumItems(int count) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/LocaleDisplayNames.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/LocaleDisplayNames.java
new file mode 100644
index 0000000..f6e9f06
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/LocaleDisplayNames.java
@@ -0,0 +1,316 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import java.util.Locale;
+import android.icu.text.DisplayContext.Type;
+import android.icu.lang.UScript;
+import java.util.Set;
+import android.icu.util.IllformedLocaleException;
+
+/**
+ * Returns display names of ULocales and components of ULocales. For
+ * more information on language, script, region, variant, key, and
+ * values, see {@link android.icu.util.ULocale}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class LocaleDisplayNames {
+
+LocaleDisplayNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience overload of {@link #getInstance(android.icu.util.ULocale,android.icu.text.LocaleDisplayNames.DialectHandling)} that specifies
+ * STANDARD dialect handling.
+ * @param locale the display locale
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience overload of {@link #getInstance(java.util.Locale,android.icu.text.DisplayContext...)} that specifies
+ * {@link android.icu.text.DisplayContext#STANDARD_NAMES DisplayContext#STANDARD_NAMES}.
+ * @param locale the display {@link java.util.Locale}
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of LocaleDisplayNames that returns names formatted for the provided locale,
+ * using the provided dialectHandling.
+ * @param locale the display locale
+ * @param dialectHandling how to select names for locales
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale locale, android.icu.text.LocaleDisplayNames.DialectHandling dialectHandling) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of LocaleDisplayNames that returns names formatted for the provided locale,
+ * using the provided DisplayContext settings
+ * @param locale the display locale
+ * @param contexts one or more context settings (e.g. for dialect
+ *              handling, capitalization, etc.
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(android.icu.util.ULocale locale, android.icu.text.DisplayContext... contexts) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of LocaleDisplayNames that returns names formatted for the provided
+ * {@link java.util.Locale}, using the provided DisplayContext settings
+ * @param locale the display {@link java.util.Locale}
+ * @param contexts one or more context settings (e.g. for dialect
+ *              handling, capitalization, etc.
+ * @return a LocaleDisplayNames instance
+ */
+
+public static android.icu.text.LocaleDisplayNames getInstance(java.util.Locale locale, android.icu.text.DisplayContext... contexts) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale used to determine the display names. This is not necessarily the same
+ * locale passed to {@link #getInstance}.
+ * @return the display locale
+ */
+
+public abstract android.icu.util.ULocale getLocale();
+
+/**
+ * Returns the dialect handling used in the display names.
+ * @return the dialect handling enum
+ */
+
+public abstract android.icu.text.LocaleDisplayNames.DialectHandling getDialectHandling();
+
+/**
+ * Returns the current value for a specified DisplayContext.Type.
+ * @param type the DisplayContext.Type whose value to return
+ * @return the current DisplayContext setting for the specified type
+ */
+
+public abstract android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type type);
+
+/**
+ * Returns the display name of the provided ulocale.
+ * When no display names are available for all or portions
+ * of the original locale ID, those portions may be
+ * used directly (possibly in a more canonical form) as
+ * part of the  returned display name.
+ * @param locale the locale whose display name to return
+ * @return the display name of the provided locale
+ */
+
+public abstract java.lang.String localeDisplayName(android.icu.util.ULocale locale);
+
+/**
+ * Returns the display name of the provided locale.
+ * When no display names are available for all or portions
+ * of the original locale ID, those portions may be
+ * used directly (possibly in a more canonical form) as
+ * part of the  returned display name.
+ * @param locale the locale whose display name to return
+ * @return the display name of the provided locale
+ */
+
+public abstract java.lang.String localeDisplayName(java.util.Locale locale);
+
+/**
+ * Returns the display name of the provided locale id.
+ * When no display names are available for all or portions
+ * of the original locale ID, those portions may be
+ * used directly (possibly in a more canonical form) as
+ * part of the  returned display name.
+ * @param localeId the id of the locale whose display name to return
+ * @return the display name of the provided locale
+ */
+
+public abstract java.lang.String localeDisplayName(java.lang.String localeId);
+
+/**
+ * Returns the display name of the provided language code.
+ * @param lang the language code
+ * @return the display name of the provided language code
+ */
+
+public abstract java.lang.String languageDisplayName(java.lang.String lang);
+
+/**
+ * Returns the display name of the provided script code.
+ * @param script the script code
+ * @return the display name of the provided script code
+ */
+
+public abstract java.lang.String scriptDisplayName(java.lang.String script);
+
+/**
+ * Returns the display name of the provided script code.  See
+ * {@link android.icu.lang.UScript} for recognized script codes.
+ * @param scriptCode the script code number
+ * @return the display name of the provided script code
+ */
+
+public abstract java.lang.String scriptDisplayName(int scriptCode);
+
+/**
+ * Returns the display name of the provided region code.
+ * @param region the region code
+ * @return the display name of the provided region code
+ */
+
+public abstract java.lang.String regionDisplayName(java.lang.String region);
+
+/**
+ * Returns the display name of the provided variant.
+ * @param variant the variant string
+ * @return the display name of the provided variant
+ */
+
+public abstract java.lang.String variantDisplayName(java.lang.String variant);
+
+/**
+ * Returns the display name of the provided locale key.
+ * @param key the locale key name
+ * @return the display name of the provided locale key
+ */
+
+public abstract java.lang.String keyDisplayName(java.lang.String key);
+
+/**
+ * Returns the display name of the provided value (used with the provided key).
+ * @param key the locale key name
+ * @param value the locale key's value
+ * @return the display name of the provided value
+ */
+
+public abstract java.lang.String keyValueDisplayName(java.lang.String key, java.lang.String value);
+
+/**
+ * Return a list of information used to construct a UI list of locale names.
+ * @param collator how to collate?should normally be Collator.getInstance(getDisplayLocale())
+ * @param inSelf if true, compares the nameInSelf, otherwise the nameInDisplayLocale.
+ * Set depending on which field (displayLocale vs self) is to show up in the UI.
+ * If both are to show up in the UI, then it should be the one used for the primary sort order.
+ * @param localeSet a list of locales to present in a UI list. The casing uses the settings in the LocaleDisplayNames instance.
+ * @return an ordered list of UiListItems.
+ * @throws android.icu.util.IllformedLocaleException if any of the locales in localeSet are malformed.
+ */
+
+public java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiList(java.util.Set<android.icu.util.ULocale> localeSet, boolean inSelf, java.util.Comparator<java.lang.Object> collator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a list of information used to construct a UI list of locale names, providing more access to control the sorting.
+ * Normally use getUiList instead.
+ * @param comparator how to sort the UiListItems in the result.
+ * @param localeSet a list of locales to present in a UI list. The casing uses the settings in the LocaleDisplayNames instance.
+ * @return an ordered list of UiListItems.
+ * @throws android.icu.util.IllformedLocaleException if any of the locales in localeSet are malformed.
+ */
+
+public abstract java.util.List<android.icu.text.LocaleDisplayNames.UiListItem> getUiListCompareWholeItems(java.util.Set<android.icu.util.ULocale> localeSet, java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem> comparator);
+/**
+ * Enum used in {@link #getInstance(android.icu.util.ULocale,android.icu.text.LocaleDisplayNames.DialectHandling)}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum DialectHandling {
+/**
+ * Use standard names when generating a locale name,
+ * e.g. en_GB displays as 'English (United Kingdom)'.
+ */
+
+STANDARD_NAMES,
+/**
+ * Use dialect names when generating a locale name,
+ * e.g. en_GB displays as 'British English'.
+ */
+
+DIALECT_NAMES;
+}
+
+/**
+ * Struct-like class used to return information for constructing a UI list, each corresponding to a locale.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class UiListItem {
+
+/**
+ * Constructor, normally only called internally.
+ * @param minimized locale for an input locale
+ * @param modified modified for an input locale
+ * @param nameInDisplayLocale name of the modified locale in the display locale
+ * @param nameInSelf name of the modified locale in itself
+ */
+
+public UiListItem(android.icu.util.ULocale minimized, android.icu.util.ULocale modified, java.lang.String nameInDisplayLocale, java.lang.String nameInSelf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a comparator that compares the locale names for the display locale or the in-self names,
+ * depending on an input parameter.
+ * @param inSelf if true, compares the nameInSelf, otherwise the nameInDisplayLocale
+ * @param comparator (meant for strings, but because Java Collator doesn't have &lt;String&gt;...)
+ * @return UiListItem comparator
+ */
+
+public static java.util.Comparator<android.icu.text.LocaleDisplayNames.UiListItem> getComparator(java.util.Comparator<java.lang.Object> comparator, boolean inSelf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimized locale for an input locale, such as sr-Cyrl ? sr
+ */
+
+public final android.icu.util.ULocale minimized;
+{ minimized = null; }
+
+/**
+ * Returns the modified locale for an input locale, such as sr ? sr-Cyrl, where there is also an sr-Latn in the list
+ */
+
+public final android.icu.util.ULocale modified;
+{ modified = null; }
+
+/**
+ * Returns the name of the modified locale in the display locale, such as "Englisch (VS)" (for 'en-US', where the display locale is 'de').
+ */
+
+public final java.lang.String nameInDisplayLocale;
+{ nameInDisplayLocale = null; }
+
+/**
+ * Returns the name of the modified locale in itself, such as "English (US)" (for 'en-US').
+ */
+
+public final java.lang.String nameInSelf;
+{ nameInSelf = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MeasureFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MeasureFormat.java
new file mode 100644
index 0000000..8d6477a
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MeasureFormat.java
@@ -0,0 +1,318 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **********************************************************************
+ * Copyright (c) 2004-2016, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ **********************************************************************
+ * Author: Alan Liu
+ * Created: April 20, 2004
+ * Since: ICU 3.0
+ **********************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.util.MeasureUnit;
+import android.icu.util.Measure;
+import java.util.Locale;
+import java.text.FieldPosition;
+import java.util.Collection;
+import android.icu.util.ULocale.Category;
+
+/**
+ * A formatter for Measure objects.
+ *
+ * <p>
+ * To format a Measure object, first create a formatter object using a MeasureFormat factory method. Then
+ * use that object's format or formatMeasures methods.
+ *
+ * Here is sample code:
+ *
+ * <pre>
+ * MeasureFormat fmtFr = MeasureFormat.getInstance(ULocale.FRENCH, FormatWidth.SHORT);
+ * Measure measure = new Measure(23, MeasureUnit.CELSIUS);
+ *
+ * // Output: 23 ?C
+ * System.out.println(fmtFr.format(measure));
+ *
+ * Measure measureF = new Measure(70, MeasureUnit.FAHRENHEIT);
+ *
+ * // Output: 70 ?F
+ * System.out.println(fmtFr.format(measureF));
+ *
+ * MeasureFormat fmtFrFull = MeasureFormat.getInstance(ULocale.FRENCH, FormatWidth.WIDE);
+ * // Output: 70 pieds et 5,3 pouces
+ * System.out.println(fmtFrFull.formatMeasures(new Measure(70, MeasureUnit.FOOT),
+ *         new Measure(5.3, MeasureUnit.INCH)));
+ *
+ * // Output: 1 pied et 1 pouce
+ * System.out.println(
+ *         fmtFrFull.formatMeasures(new Measure(1, MeasureUnit.FOOT), new Measure(1, MeasureUnit.INCH)));
+ *
+ * MeasureFormat fmtFrNarrow = MeasureFormat.getInstance(ULocale.FRENCH, FormatWidth.NARROW);
+ * // Output: 1? 1?
+ * System.out.println(fmtFrNarrow.formatMeasures(new Measure(1, MeasureUnit.FOOT),
+ *         new Measure(1, MeasureUnit.INCH)));
+ *
+ * MeasureFormat fmtEn = MeasureFormat.getInstance(ULocale.ENGLISH, FormatWidth.WIDE);
+ *
+ * // Output: 1 inch, 2 feet
+ * fmtEn.formatMeasures(new Measure(1, MeasureUnit.INCH), new Measure(2, MeasureUnit.FOOT));
+ * </pre>
+ * <p>
+ * This class does not do conversions from one unit to another. It simply formats whatever units it is
+ * given
+ * <p>
+ * This class is immutable and thread-safe so long as its deprecated subclass, TimeUnitFormat, is never
+ * used. TimeUnitFormat is not thread-safe, and is mutable. Although this class has existing subclasses,
+ * this class does not support new sub-classes.
+ *
+ * @see android.icu.text.UFormat
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class MeasureFormat extends android.icu.text.UFormat {
+
+MeasureFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the locale, formatWidth, and format.
+ *
+ * @param locale
+ *            the locale.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the {@link java.util.Locale} and formatWidth.
+ *
+ * @param locale
+ *            the {@link java.util.Locale}.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(java.util.Locale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the locale, formatWidth, and format.
+ *
+ * @param locale
+ *            the locale.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @param format
+ *            This is defensively copied.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(android.icu.util.ULocale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth, android.icu.text.NumberFormat format) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create a format from the {@link java.util.Locale}, formatWidth, and format.
+ *
+ * @param locale
+ *            the {@link java.util.Locale}.
+ * @param formatWidth
+ *            hints how long formatted strings should be.
+ * @param format
+ *            This is defensively copied.
+ * @return The new MeasureFormat object.
+ */
+
+public static android.icu.text.MeasureFormat getInstance(java.util.Locale locale, android.icu.text.MeasureFormat.FormatWidth formatWidth, android.icu.text.NumberFormat format) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Able to format Collection&lt;? extends Measure&gt;, Measure[], and Measure by delegating to
+ * formatMeasures. If the pos argument identifies a NumberFormat field, then its indices are set to
+ * the beginning and end of the first such field encountered. MeasureFormat itself does not supply
+ * any fields.
+ *
+ * Calling a <code>formatMeasures</code> method is preferred over calling this method as they give
+ * better performance.
+ *
+ * @param obj
+ *            must be a Collection&lt;? extends Measure&gt;, Measure[], or Measure object.
+ * @param toAppendTo
+ *            Formatted string appended here.
+ * @param fpos
+ *            Identifies a field in the formatted text.
+ * @see java.text.Format#format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition)
+ */
+
+public java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer toAppendTo, java.text.FieldPosition fpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from a string to produce a <code>Measure</code>.
+ *
+ * @see java.text.Format#parseObject(java.lang.String, java.text.ParsePosition)
+ * @throws java.lang.UnsupportedOperationException
+ *             Not supported.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+public android.icu.util.Measure parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a sequence of measures. Uses the ListFormatter unit lists. So, for example, one could
+ * format ?3 feet, 2 inches?. Zero values are formatted (eg, ?3 feet, 0 inches?). It is the caller?s
+ * responsibility to have the appropriate values in appropriate order, and using the appropriate
+ * Number values. Typically the units should be in descending order, with all but the last Measure
+ * having integer values (eg, not ?3.2 feet, 2 inches?).
+ *
+ * @param measures
+ *            a sequence of one or more measures.
+ * @return the formatted string.
+ */
+
+public final java.lang.String formatMeasures(android.icu.util.Measure... measures) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a single measure per unit.
+ *
+ * An example of such a formatted string is "3.5 meters per second."
+ *
+ * @param measure
+ *            the measure object. In above example, 3.5 meters.
+ * @param perUnit
+ *            the per unit. In above example, it is MeasureUnit.SECOND
+ * @param appendTo
+ *            formatted string appended here.
+ * @param pos
+ *            The field position.
+ * @return appendTo.
+ */
+
+public java.lang.StringBuilder formatMeasurePerUnit(android.icu.util.Measure measure, android.icu.util.MeasureUnit perUnit, java.lang.StringBuilder appendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a sequence of measures.
+ *
+ * If the fieldPosition argument identifies a NumberFormat field, then its indices are set to the
+ * beginning and end of the first such field encountered. MeasureFormat itself does not supply any
+ * fields.
+ *
+ * @param appendTo
+ *            the formatted string appended here.
+ * @param fpos
+ *            Identifies a field in the formatted text.
+ * @param measures
+ *            the measures to format.
+ * @return appendTo.
+ * @see android.icu.text.MeasureFormat#formatMeasures(Measure...)
+ */
+
+public java.lang.StringBuilder formatMeasures(java.lang.StringBuilder appendTo, java.text.FieldPosition fpos, android.icu.util.Measure... measures) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the display name of the specified {@link android.icu.util.MeasureUnit MeasureUnit} corresponding to the current locale and
+ * format width.
+ *
+ * @param unit
+ *            The unit for which to get a display name.
+ * @return The display name in the locale and width specified in {@link android.icu.text.MeasureFormat#getInstance MeasureFormat#getInstance},
+ *         or null if there is no display name available for the specified unit.
+ */
+
+public java.lang.String getUnitDisplayName(android.icu.util.MeasureUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Two MeasureFormats, a and b, are equal if and only if they have the same formatWidth, locale, and
+ * equal number formats.
+ */
+
+public final boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public final int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the format width this instance is using.
+ */
+
+public android.icu.text.MeasureFormat.FormatWidth getWidth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the locale of this instance.
+ */
+
+public final android.icu.util.ULocale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a copy of the number format.
+ */
+
+public android.icu.text.NumberFormat getNumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a formatter for CurrencyAmount objects in the given locale.
+ *
+ * @param locale
+ *            desired locale
+ * @return a formatter object
+ */
+
+public static android.icu.text.MeasureFormat getCurrencyFormat(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a formatter for CurrencyAmount objects in the given {@link java.util.Locale}.
+ *
+ * @param locale
+ *            desired {@link java.util.Locale}
+ * @return a formatter object
+ */
+
+public static android.icu.text.MeasureFormat getCurrencyFormat(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a formatter for CurrencyAmount objects in the default <code>FORMAT</code> locale.
+ *
+ * @return a formatter object
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.text.MeasureFormat getCurrencyFormat() { throw new RuntimeException("Stub!"); }
+/**
+ * Formatting width enum.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum FormatWidth {
+/**
+ * Spell out everything.
+ */
+
+WIDE,
+/**
+ * Abbreviate when possible.
+ */
+
+SHORT,
+/**
+ * Brief. Use only a symbol for the unit when possible.
+ */
+
+NARROW,
+/**
+ * Identical to NARROW except when formatMeasures is called with an hour and minute; minute and
+ * second; or hour, minute, and second Measures. In these cases formatMeasures formats as 5:37:23
+ * instead of 5h, 37m, 23s.
+ */
+
+NUMERIC;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MessageFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MessageFormat.java
new file mode 100644
index 0000000..eea79a0
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MessageFormat.java
@@ -0,0 +1,1047 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (c) 2004-2016, International Business Machines
+* Corporation and others.  All Rights Reserved.
+**********************************************************************
+* Author: Alan Liu
+* Created: April 6, 2004
+* Since: ICU 3.0
+**********************************************************************
+*/
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import java.util.Date;
+import java.text.Format;
+import java.util.Map;
+import android.icu.util.ULocale.Category;
+import java.util.Set;
+import java.text.FieldPosition;
+import java.text.AttributedCharacterIterator;
+import java.text.ParsePosition;
+import java.text.ParseException;
+import java.io.InvalidObjectException;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.MessageFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>MessageFormat prepares strings for display to users,
+ * with optional arguments (variables/placeholders).
+ * The arguments can occur in any order, which is necessary for translation
+ * into languages with different grammars.
+ *
+ * <p>A MessageFormat is constructed from a <em>pattern</em> string
+ * with arguments in {curly braces} which will be replaced by formatted values.
+ *
+ * <p><code>MessageFormat</code> differs from the other <code>Format</code>
+ * classes in that you create a <code>MessageFormat</code> object with one
+ * of its constructors (not with a <code>getInstance</code> style factory
+ * method). Factory methods aren't necessary because <code>MessageFormat</code>
+ * itself doesn't implement locale-specific behavior. Any locale-specific
+ * behavior is defined by the pattern that you provide and the
+ * subformats used for inserted arguments.
+ *
+ * <p>Arguments can be named (using identifiers) or numbered (using small ASCII-digit integers).
+ * Some of the API methods work only with argument numbers and throw an exception
+ * if the pattern has named arguments (see {@link #usesNamedArguments()}).
+ *
+ * <p>An argument might not specify any format type. In this case,
+ * a Number value is formatted with a default (for the locale) NumberFormat,
+ * a Date value is formatted with a default (for the locale) DateFormat,
+ * and for any other value its toString() value is used.
+ *
+ * <p>An argument might specify a "simple" type for which the specified
+ * Format object is created, cached and used.
+ *
+ * <p>An argument might have a "complex" type with nested MessageFormat sub-patterns.
+ * During formatting, one of these sub-messages is selected according to the argument value
+ * and recursively formatted.
+ *
+ * <p>After construction, a custom Format object can be set for
+ * a top-level argument, overriding the default formatting and parsing behavior
+ * for that argument.
+ * However, custom formatting can be achieved more simply by writing
+ * a typeless argument in the pattern string
+ * and supplying it with a preformatted string value.
+ *
+ * <p>When formatting, MessageFormat takes a collection of argument values
+ * and writes an output string.
+ * The argument values may be passed as an array
+ * (when the pattern contains only numbered arguments)
+ * or as a Map (which works for both named and numbered arguments).
+ *
+ * <p>Each argument is matched with one of the input values by array index or map key
+ * and formatted according to its pattern specification
+ * (or using a custom Format object if one was set).
+ * A numbered pattern argument is matched with a map key that contains that number
+ * as an ASCII-decimal-digit string (without leading zero).
+ *
+ * <h3><a name="patterns">Patterns and Their Interpretation</a></h3>
+ *
+ * <code>MessageFormat</code> uses patterns of the following form:
+ * <blockquote><pre>
+ * message = messageText (argument messageText)*
+ * argument = noneArg | simpleArg | complexArg
+ * complexArg = choiceArg | pluralArg | selectArg | selectordinalArg
+ *
+ * noneArg = '{' argNameOrNumber '}'
+ * simpleArg = '{' argNameOrNumber ',' argType [',' argStyle] '}'
+ * choiceArg = '{' argNameOrNumber ',' "choice" ',' choiceStyle '}'
+ * pluralArg = '{' argNameOrNumber ',' "plural" ',' pluralStyle '}'
+ * selectArg = '{' argNameOrNumber ',' "select" ',' selectStyle '}'
+ * selectordinalArg = '{' argNameOrNumber ',' "selectordinal" ',' pluralStyle '}'
+ *
+ * choiceStyle: see {@link java.text.ChoiceFormat ChoiceFormat}
+ * pluralStyle: see {@link android.icu.text.PluralFormat PluralFormat}
+ * selectStyle: see {@link android.icu.text.SelectFormat SelectFormat}
+ *
+ * argNameOrNumber = argName | argNumber
+ * argName = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
+ * argNumber = '0' | ('1'..'9' ('0'..'9')*)
+ *
+ * argType = "number" | "date" | "time" | "spellout" | "ordinal" | "duration"
+ * argStyle = "short" | "medium" | "long" | "full" | "integer" | "currency" | "percent" | argStyleText
+ * </pre></blockquote>
+ *
+ * <ul>
+ *   <li>messageText can contain quoted literal strings including syntax characters.
+ *       A quoted literal string begins with an ASCII apostrophe and a syntax character
+ *       (usually a {curly brace}) and continues until the next single apostrophe.
+ *       A double ASCII apostrohpe inside or outside of a quoted string represents
+ *       one literal apostrophe.
+ *   <li>Quotable syntax characters are the {curly braces} in all messageText parts,
+ *       plus the '#' sign in a messageText immediately inside a pluralStyle,
+ *       and the '|' symbol in a messageText immediately inside a choiceStyle.
+ *   <li>See also {@link android.icu.text.MessagePattern.ApostropheMode MessagePattern.ApostropheMode}
+ *   <li>In argStyleText, every single ASCII apostrophe begins and ends quoted literal text,
+ *       and unquoted {curly braces} must occur in matched pairs.
+ * </ul>
+ *
+ * <p>Recommendation: Use the real apostrophe (single quote) character \\u2019 for
+ * human-readable text, and use the ASCII apostrophe (\\u0027 ' )
+ * only in program syntax, like quoting in MessageFormat.
+ * See the annotations for U+0027 Apostrophe in The Unicode Standard.
+ *
+ * <p>The <code>choice</code> argument type is deprecated.
+ * Use <code>plural</code> arguments for proper plural selection,
+ * and <code>select</code> arguments for simple selection among a fixed set of choices.
+ *
+ * <p>The <code>argType</code> and <code>argStyle</code> values are used to create
+ * a <code>Format</code> instance for the format element. The following
+ * table shows how the values map to Format instances. Combinations not
+ * shown in the table are illegal. Any <code>argStyleText</code> must
+ * be a valid pattern string for the Format subclass used.
+ *
+ * <table border=1>
+ *    <tr>
+ *       <th>argType
+ *       <th>argStyle
+ *       <th>resulting Format object
+ *    <tr>
+ *       <td colspan=2><i>(none)</i>
+ *       <td><code>null</code>
+ *    <tr>
+ *       <td rowspan=5><code>number</code>
+ *       <td><i>(none)</i>
+ *       <td><code>NumberFormat.getInstance(getLocale())</code>
+ *    <tr>
+ *       <td><code>integer</code>
+ *       <td><code>NumberFormat.getIntegerInstance(getLocale())</code>
+ *    <tr>
+ *       <td><code>currency</code>
+ *       <td><code>NumberFormat.getCurrencyInstance(getLocale())</code>
+ *    <tr>
+ *       <td><code>percent</code>
+ *       <td><code>NumberFormat.getPercentInstance(getLocale())</code>
+ *    <tr>
+ *       <td><i>argStyleText</i>
+ *       <td><code>new DecimalFormat(argStyleText, new DecimalFormatSymbols(getLocale()))</code>
+ *    <tr>
+ *       <td rowspan=6><code>date</code>
+ *       <td><i>(none)</i>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>short</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.SHORT, getLocale())</code>
+ *    <tr>
+ *       <td><code>medium</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>long</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.LONG, getLocale())</code>
+ *    <tr>
+ *       <td><code>full</code>
+ *       <td><code>DateFormat.getDateInstance(DateFormat.FULL, getLocale())</code>
+ *    <tr>
+ *       <td><i>argStyleText</i>
+ *       <td><code>new SimpleDateFormat(argStyleText, getLocale())</code>
+ *    <tr>
+ *       <td rowspan=6><code>time</code>
+ *       <td><i>(none)</i>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>short</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.SHORT, getLocale())</code>
+ *    <tr>
+ *       <td><code>medium</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.DEFAULT, getLocale())</code>
+ *    <tr>
+ *       <td><code>long</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.LONG, getLocale())</code>
+ *    <tr>
+ *       <td><code>full</code>
+ *       <td><code>DateFormat.getTimeInstance(DateFormat.FULL, getLocale())</code>
+ *    <tr>
+ *       <td><i>argStyleText</i>
+ *       <td><code>new SimpleDateFormat(argStyleText, getLocale())</code>
+ *    <tr>
+ *       <td><code>spellout</code>
+ *       <td><i>argStyleText (optional)</i>
+ *       <td><code>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.SPELLOUT)
+ *           <br>&nbsp;&nbsp;&nbsp;&nbsp;.setDefaultRuleset(argStyleText);</code>
+ *    <tr>
+ *       <td><code>ordinal</code>
+ *       <td><i>argStyleText (optional)</i>
+ *       <td><code>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.ORDINAL)
+ *           <br>&nbsp;&nbsp;&nbsp;&nbsp;.setDefaultRuleset(argStyleText);</code>
+ *    <tr>
+ *       <td><code>duration</code>
+ *       <td><i>argStyleText (optional)</i>
+ *       <td><code>new RuleBasedNumberFormat(getLocale(), RuleBasedNumberFormat.DURATION)
+ *           <br>&nbsp;&nbsp;&nbsp;&nbsp;.setDefaultRuleset(argStyleText);</code>
+ * </table>
+ *
+ * <h4><a name="diffsjdk">Differences from java.text.MessageFormat</a></h4>
+ *
+ * <p>The ICU MessageFormat supports both named and numbered arguments,
+ * while the JDK MessageFormat only supports numbered arguments.
+ * Named arguments make patterns more readable.
+ *
+ * <p>ICU implements a more user-friendly apostrophe quoting syntax.
+ * In message text, an apostrophe only begins quoting literal text
+ * if it immediately precedes a syntax character (mostly {curly braces}).<br>
+ * In the JDK MessageFormat, an apostrophe always begins quoting,
+ * which requires common text like "don't" and "aujourd'hui"
+ * to be written with doubled apostrophes like "don''t" and "aujourd''hui".
+ * For more details see {@link android.icu.text.MessagePattern.ApostropheMode MessagePattern.ApostropheMode}.
+ *
+ * <p>ICU does not create a ChoiceFormat object for a choiceArg, pluralArg or selectArg
+ * but rather handles such arguments itself.
+ * The JDK MessageFormat does create and use a ChoiceFormat object
+ * (<code>new ChoiceFormat(argStyleText)</code>).
+ * The JDK does not support plural and select arguments at all.
+ *
+ * <h4>Usage Information</h4>
+ *
+ * <p>Here are some examples of usage:
+ * <blockquote>
+ * <pre>
+ * Object[] arguments = {
+ *     7,
+ *     new Date(System.currentTimeMillis()),
+ *     "a disturbance in the Force"
+ * };
+ *
+ * String result = MessageFormat.format(
+ *     "At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
+ *     arguments);
+ *
+ * <em>output</em>: At 12:30 PM on Jul 3, 2053, there was a disturbance
+ *           in the Force on planet 7.
+ *
+ * </pre>
+ * </blockquote>
+ * Typically, the message format will come from resources, and the
+ * arguments will be dynamically set at runtime.
+ *
+ * <p>Example 2:
+ * <blockquote>
+ * <pre>
+ * Object[] testArgs = { 3, "MyDisk" };
+ *
+ * MessageFormat form = new MessageFormat(
+ *     "The disk \"{1}\" contains {0} file(s).");
+ *
+ * System.out.println(form.format(testArgs));
+ *
+ * // output, with different testArgs
+ * <em>output</em>: The disk "MyDisk" contains 0 file(s).
+ * <em>output</em>: The disk "MyDisk" contains 1 file(s).
+ * <em>output</em>: The disk "MyDisk" contains 1,273 file(s).
+ * </pre>
+ * </blockquote>
+ *
+ * <p>For messages that include plural forms, you can use a plural argument:
+ * <pre>
+ * MessageFormat msgFmt = new MessageFormat(
+ *     "{num_files, plural, " +
+ *     "=0{There are no files on disk \"{disk_name}\".}" +
+ *     "=1{There is one file on disk \"{disk_name}\".}" +
+ *     "other{There are # files on disk \"{disk_name}\".}}",
+ *     ULocale.ENGLISH);
+ * Map args = new HashMap();
+ * args.put("num_files", 0);
+ * args.put("disk_name", "MyDisk");
+ * System.out.println(msgFmt.format(args));
+ * args.put("num_files", 3);
+ * System.out.println(msgFmt.format(args));
+ *
+ * <em>output</em>:
+ * There are no files on disk "MyDisk".
+ * There are 3 files on "MyDisk".
+ * </pre>
+ * See {@link android.icu.text.PluralFormat PluralFormat} and {@link android.icu.text.PluralRules PluralRules} for details.
+ *
+ * <h4><a name="synchronization">Synchronization</a></h4>
+ *
+ * <p>MessageFormats are not synchronized.
+ * It is recommended to create separate format instances for each thread.
+ * If multiple threads access a format concurrently, it must be synchronized
+ * externally.
+ *
+ * @see          java.util.Locale
+ * @see          java.text.Format
+ * @see          android.icu.text.NumberFormat
+ * @see          android.icu.text.DecimalFormat
+ * @see          java.text.ChoiceFormat
+ * @see          android.icu.text.PluralFormat
+ * @see          android.icu.text.SelectFormat
+ * @author       Mark Davis
+ * @author       Markus Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class MessageFormat extends android.icu.text.UFormat {
+
+/**
+ * Constructs a MessageFormat for the default <code>FORMAT</code> locale and the
+ * specified pattern.
+ * Sets the locale and calls applyPattern(pattern).
+ *
+ * @param pattern the pattern for this message format
+ * @exception java.lang.IllegalArgumentException if the pattern is invalid
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public MessageFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a MessageFormat for the specified locale and
+ * pattern.
+ * Sets the locale and calls applyPattern(pattern).
+ *
+ * @param pattern the pattern for this message format
+ * @param locale the locale for this message format
+ * @exception java.lang.IllegalArgumentException if the pattern is invalid
+ */
+
+public MessageFormat(java.lang.String pattern, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a MessageFormat for the specified locale and
+ * pattern.
+ * Sets the locale and calls applyPattern(pattern).
+ *
+ * @param pattern the pattern for this message format
+ * @param locale the locale for this message format
+ * @exception java.lang.IllegalArgumentException if the pattern is invalid
+ */
+
+public MessageFormat(java.lang.String pattern, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the locale to be used for creating argument Format objects.
+ * This affects subsequent calls to the {@link #applyPattern applyPattern}
+ * method as well as to the <code>format</code> and
+ * {@link #formatToCharacterIterator formatToCharacterIterator} methods.
+ *
+ * @param locale the locale to be used when creating or comparing subformats
+ */
+
+public void setLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the locale to be used for creating argument Format objects.
+ * This affects subsequent calls to the {@link #applyPattern applyPattern}
+ * method as well as to the <code>format</code> and
+ * {@link #formatToCharacterIterator formatToCharacterIterator} methods.
+ *
+ * @param locale the locale to be used when creating or comparing subformats
+ */
+
+public void setLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the locale that's used when creating or comparing subformats.
+ *
+ * @return the locale used when creating or comparing subformats
+ */
+
+public java.util.Locale getLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale that's used when creating argument Format objects.
+ *
+ * @return the locale used when creating or comparing subformats
+ */
+
+public android.icu.util.ULocale getULocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the pattern used by this message format.
+ * Parses the pattern and caches Format objects for simple argument types.
+ * Patterns and their interpretation are specified in the
+ * <a href="#patterns">class description</a>.
+ *
+ * @param pttrn the pattern for this message format
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ */
+
+public void applyPattern(java.lang.String pttrn) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the ApostropheMode and the pattern used by this message format.
+ * Parses the pattern and caches Format objects for simple argument types.
+ * Patterns and their interpretation are specified in the
+ * <a href="#patterns">class description</a>.
+ * <p>
+ * This method is best used only once on a given object to avoid confusion about the mode,
+ * and after constructing the object with an empty pattern string to minimize overhead.
+ *
+ * @param pattern the pattern for this message format
+ * @param aposMode the new ApostropheMode
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ * @see android.icu.text.MessagePattern.ApostropheMode
+ */
+
+public void applyPattern(java.lang.String pattern, android.icu.text.MessagePattern.ApostropheMode aposMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>
+ * @return this instance's ApostropheMode.
+ */
+
+public android.icu.text.MessagePattern.ApostropheMode getApostropheMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the applied pattern string.
+ * @return the pattern string
+ * @throws java.lang.IllegalStateException after custom Format objects have been set
+ *         via setFormat() or similar APIs
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format objects to use for the values passed into
+ * <code>format</code> methods or returned from <code>parse</code>
+ * methods. The indices of elements in <code>newFormats</code>
+ * correspond to the argument indices used in the previously set
+ * pattern string.
+ * The order of formats in <code>newFormats</code> thus corresponds to
+ * the order of elements in the <code>arguments</code> array passed
+ * to the <code>format</code> methods or the result array returned
+ * by the <code>parse</code> methods.
+ * <p>
+ * If an argument index is used for more than one format element
+ * in the pattern string, then the corresponding new format is used
+ * for all such format elements. If an argument index is not used
+ * for any format element in the pattern string, then the
+ * corresponding new format is ignored. If fewer formats are provided
+ * than needed, then only the formats for argument indices less
+ * than <code>newFormats.length</code> are replaced.
+ *
+ * This method is only supported if the format does not use
+ * named arguments, otherwise an IllegalArgumentException is thrown.
+ *
+ * @param newFormats the new formats to use
+ * @throws java.lang.NullPointerException if <code>newFormats</code> is null
+ * @throws java.lang.IllegalArgumentException if this formatter uses named arguments
+ */
+
+public void setFormatsByArgumentIndex(java.text.Format[] newFormats) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the Format objects to use for the values passed into
+ * <code>format</code> methods or returned from <code>parse</code>
+ * methods. The keys in <code>newFormats</code> are the argument
+ * names in the previously set pattern string, and the values
+ * are the formats.
+ * <p>
+ * Only argument names from the pattern string are considered.
+ * Extra keys in <code>newFormats</code> that do not correspond
+ * to an argument name are ignored.  Similarly, if there is no
+ * format in newFormats for an argument name, the formatter
+ * for that argument remains unchanged.
+ * <p>
+ * This may be called on formats that do not use named arguments.
+ * In this case the map will be queried for key Strings that
+ * represent argument indices, e.g. "0", "1", "2" etc.
+ *
+ * @param newFormats a map from String to Format providing new
+ *        formats for named arguments.
+ */
+
+public void setFormatsByArgumentName(java.util.Map<java.lang.String,java.text.Format> newFormats) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format objects to use for the format elements in the
+ * previously set pattern string.
+ * The order of formats in <code>newFormats</code> corresponds to
+ * the order of format elements in the pattern string.
+ * <p>
+ * If more formats are provided than needed by the pattern string,
+ * the remaining ones are ignored. If fewer formats are provided
+ * than needed, then only the first <code>newFormats.length</code>
+ * formats are replaced.
+ * <p>
+ * Since the order of format elements in a pattern string often
+ * changes during localization, it is generally better to use the
+ * {@link #setFormatsByArgumentIndex setFormatsByArgumentIndex}
+ * method, which assumes an order of formats corresponding to the
+ * order of elements in the <code>arguments</code> array passed to
+ * the <code>format</code> methods or the result array returned by
+ * the <code>parse</code> methods.
+ *
+ * @param newFormats the new formats to use
+ * @exception java.lang.NullPointerException if <code>newFormats</code> is null
+ */
+
+public void setFormats(java.text.Format[] newFormats) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format object to use for the format elements within the
+ * previously set pattern string that use the given argument
+ * index.
+ * The argument index is part of the format element definition and
+ * represents an index into the <code>arguments</code> array passed
+ * to the <code>format</code> methods or the result array returned
+ * by the <code>parse</code> methods.
+ * <p>
+ * If the argument index is used for more than one format element
+ * in the pattern string, then the new format is used for all such
+ * format elements. If the argument index is not used for any format
+ * element in the pattern string, then the new format is ignored.
+ *
+ * This method is only supported when exclusively numbers are used for
+ * argument names. Otherwise an IllegalArgumentException is thrown.
+ *
+ * @param argumentIndex the argument index for which to use the new format
+ * @param newFormat the new format to use
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public void setFormatByArgumentIndex(int argumentIndex, java.text.Format newFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the Format object to use for the format elements within the
+ * previously set pattern string that use the given argument
+ * name.
+ * <p>
+ * If the argument name is used for more than one format element
+ * in the pattern string, then the new format is used for all such
+ * format elements. If the argument name is not used for any format
+ * element in the pattern string, then the new format is ignored.
+ * <p>
+ * This API may be used on formats that do not use named arguments.
+ * In this case <code>argumentName</code> should be a String that names
+ * an argument index, e.g. "0", "1", "2"... etc.  If it does not name
+ * a valid index, the format will be ignored.  No error is thrown.
+ *
+ * @param argumentName the name of the argument to change
+ * @param newFormat the new format to use
+ */
+
+public void setFormatByArgumentName(java.lang.String argumentName, java.text.Format newFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Format object to use for the format element with the given
+ * format element index within the previously set pattern string.
+ * The format element index is the zero-based number of the format
+ * element counting from the start of the pattern string.
+ * <p>
+ * Since the order of format elements in a pattern string often
+ * changes during localization, it is generally better to use the
+ * {@link #setFormatByArgumentIndex setFormatByArgumentIndex}
+ * method, which accesses format elements based on the argument
+ * index they specify.
+ *
+ * @param formatElementIndex the index of a format element within the pattern
+ * @param newFormat the format to use for the specified format element
+ * @exception java.lang.ArrayIndexOutOfBoundsException if formatElementIndex is equal to or
+ *            larger than the number of format elements in the pattern string
+ */
+
+public void setFormat(int formatElementIndex, java.text.Format newFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Format objects used for the values passed into
+ * <code>format</code> methods or returned from <code>parse</code>
+ * methods. The indices of elements in the returned array
+ * correspond to the argument indices used in the previously set
+ * pattern string.
+ * The order of formats in the returned array thus corresponds to
+ * the order of elements in the <code>arguments</code> array passed
+ * to the <code>format</code> methods or the result array returned
+ * by the <code>parse</code> methods.
+ * <p>
+ * If an argument index is used for more than one format element
+ * in the pattern string, then the format used for the last such
+ * format element is returned in the array. If an argument index
+ * is not used for any format element in the pattern string, then
+ * null is returned in the array.
+ *
+ * This method is only supported when exclusively numbers are used for
+ * argument names. Otherwise an IllegalArgumentException is thrown.
+ *
+ * @return the formats used for the arguments within the pattern
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.text.Format[] getFormatsByArgumentIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Format objects used for the format elements in the
+ * previously set pattern string.
+ * The order of formats in the returned array corresponds to
+ * the order of format elements in the pattern string.
+ * <p>
+ * Since the order of format elements in a pattern string often
+ * changes during localization, it's generally better to use the
+ * {@link #getFormatsByArgumentIndex()}
+ * method, which assumes an order of formats corresponding to the
+ * order of elements in the <code>arguments</code> array passed to
+ * the <code>format</code> methods or the result array returned by
+ * the <code>parse</code> methods.
+ *
+ * This method is only supported when exclusively numbers are used for
+ * argument names. Otherwise an IllegalArgumentException is thrown.
+ *
+ * @return the formats used for the format elements in the pattern
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.text.Format[] getFormats() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the top-level argument names. For more details, see
+ * {@link #setFormatByArgumentName(java.lang.String,java.text.Format)}.
+ * @return a Set of argument names
+ */
+
+public java.util.Set<java.lang.String> getArgumentNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the first top-level format associated with the given argument name.
+ * For more details, see {@link #setFormatByArgumentName(java.lang.String,java.text.Format)}.
+ * @param argumentName The name of the desired argument.
+ * @return the Format associated with the name, or null if there isn't one.
+ */
+
+public java.text.Format getFormatByArgumentName(java.lang.String argumentName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats an array of objects and appends the <code>MessageFormat</code>'s
+ * pattern, with arguments replaced by the formatted objects, to the
+ * provided <code>StringBuffer</code>.
+ * <p>
+ * The text substituted for the individual format elements is derived from
+ * the current subformat of the format element and the
+ * <code>arguments</code> element at the format element's argument index
+ * as indicated by the first matching line of the following table. An
+ * argument is <i>unavailable</i> if <code>arguments</code> is
+ * <code>null</code> or has fewer than argumentIndex+1 elements.  When
+ * an argument is unavailable no substitution is performed.
+ *
+ * <table border=1>
+ *    <tr>
+ *       <th>argType or Format
+ *       <th>value object
+ *       <th>Formatted Text
+ *    <tr>
+ *       <td><i>any</i>
+ *       <td><i>unavailable</i>
+ *       <td><code>"{" + argNameOrNumber + "}"</code>
+ *    <tr>
+ *       <td><i>any</i>
+ *       <td><code>null</code>
+ *       <td><code>"null"</code>
+ *    <tr>
+ *       <td>custom Format <code>!= null</code>
+ *       <td><i>any</i>
+ *       <td><code>customFormat.format(argument)</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><code>instanceof Number</code>
+ *       <td><code>NumberFormat.getInstance(getLocale()).format(argument)</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><code>instanceof Date</code>
+ *       <td><code>DateFormat.getDateTimeInstance(DateFormat.SHORT,
+ *           DateFormat.SHORT, getLocale()).format(argument)</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><code>instanceof String</code>
+ *       <td><code>argument</code>
+ *    <tr>
+ *       <td>noneArg, or custom Format <code>== null</code>
+ *       <td><i>any</i>
+ *       <td><code>argument.toString()</code>
+ *    <tr>
+ *       <td>complexArg
+ *       <td><i>any</i>
+ *       <td>result of recursive formatting of a selected sub-message
+ * </table>
+ * <p>
+ * If <code>pos</code> is non-null, and refers to
+ * <code>Field.ARGUMENT</code>, the location of the first formatted
+ * string will be returned.
+ *
+ * This method is only supported when the format does not use named
+ * arguments, otherwise an IllegalArgumentException is thrown.
+ *
+ * @param arguments an array of objects to be formatted and substituted.
+ * @param result where text is appended.
+ * @param pos On input: an alignment field, if desired.
+ *            On output: the offsets of the alignment field.
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object[] arguments, java.lang.StringBuffer result, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a map of objects and appends the <code>MessageFormat</code>'s
+ * pattern, with arguments replaced by the formatted objects, to the
+ * provided <code>StringBuffer</code>.
+ * <p>
+ * The text substituted for the individual format elements is derived from
+ * the current subformat of the format element and the
+ * <code>arguments</code> value corresopnding to the format element's
+ * argument name.
+ * <p>
+ * A numbered pattern argument is matched with a map key that contains that number
+ * as an ASCII-decimal-digit string (without leading zero).
+ * <p>
+ * An argument is <i>unavailable</i> if <code>arguments</code> is
+ * <code>null</code> or does not have a value corresponding to an argument
+ * name in the pattern.  When an argument is unavailable no substitution
+ * is performed.
+ *
+ * @param arguments a map of objects to be formatted and substituted.
+ * @param result where text is appended.
+ * @param pos On input: an alignment field, if desired.
+ *            On output: the offsets of the alignment field.
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @return the passed-in StringBuffer
+ */
+
+public final java.lang.StringBuffer format(java.util.Map<java.lang.String,java.lang.Object> arguments, java.lang.StringBuffer result, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a MessageFormat with the given pattern and uses it
+ * to format the given arguments. This is equivalent to
+ * <blockquote>
+ *     <code>(new {@link #MessageFormat(java.lang.String) MessageFormat}(pattern)).{@link
+ *     #format(java.lang.Object[],java.lang.StringBuffer,java.text.FieldPosition)
+ *     format}(arguments, new StringBuffer(), null).toString()</code>
+ * </blockquote>
+ *
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public static java.lang.String format(java.lang.String pattern, java.lang.Object... arguments) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a MessageFormat with the given pattern and uses it to
+ * format the given arguments.  The pattern must identifyarguments
+ * by name instead of by number.
+ * <p>
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ * @see #format(Map, StringBuffer, FieldPosition)
+ * @see #format(String, Object[])
+ */
+
+public static java.lang.String format(java.lang.String pattern, java.util.Map<java.lang.String,java.lang.Object> arguments) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if this MessageFormat uses named arguments,
+ * and false otherwise.  See class description.
+ *
+ * @return true if named arguments are used.
+ */
+
+public boolean usesNamedArguments() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a map or array of objects and appends the <code>MessageFormat</code>'s
+ * pattern, with format elements replaced by the formatted objects, to the
+ * provided <code>StringBuffer</code>.
+ * This is equivalent to either of
+ * <blockquote>
+ *     <code>{@link #format(java.lang.Object[],java.lang.StringBuffer,java.text.FieldPosition) format}((Object[]) arguments, result, pos)</code>
+ *     <code>{@link #format(java.util.Map,java.lang.StringBuffer,java.text.FieldPosition) format}((Map) arguments, result, pos)</code>
+ * </blockquote>
+ * A map must be provided if this format uses named arguments, otherwise
+ * an IllegalArgumentException will be thrown.
+ * @param arguments a map or array of objects to be formatted
+ * @param result where text is appended
+ * @param pos On input: an alignment field, if desired
+ *            On output: the offsets of the alignment field
+ * @throws java.lang.IllegalArgumentException if an argument in
+ *         <code>arguments</code> is not of the type
+ *         expected by the format element(s) that use it
+ * @throws java.lang.IllegalArgumentException if <code>arguments</code> is
+ *         an array of Object and this format uses named arguments
+ */
+
+public final java.lang.StringBuffer format(java.lang.Object arguments, java.lang.StringBuffer result, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats an array of objects and inserts them into the
+ * <code>MessageFormat</code>'s pattern, producing an
+ * <code>AttributedCharacterIterator</code>.
+ * You can use the returned <code>AttributedCharacterIterator</code>
+ * to build the resulting String, as well as to determine information
+ * about the resulting String.
+ * <p>
+ * The text of the returned <code>AttributedCharacterIterator</code> is
+ * the same that would be returned by
+ * <blockquote>
+ *     <code>{@link #format(java.lang.Object[],java.lang.StringBuffer,java.text.FieldPosition) format}(arguments, new StringBuffer(), null).toString()</code>
+ * </blockquote>
+ * <p>
+ * In addition, the <code>AttributedCharacterIterator</code> contains at
+ * least attributes indicating where text was generated from an
+ * argument in the <code>arguments</code> array. The keys of these attributes are of
+ * type <code>MessageFormat.Field</code>, their values are
+ * <code>Integer</code> objects indicating the index in the <code>arguments</code>
+ * array of the argument from which the text was generated.
+ * <p>
+ * The attributes/value from the underlying <code>Format</code>
+ * instances that <code>MessageFormat</code> uses will also be
+ * placed in the resulting <code>AttributedCharacterIterator</code>.
+ * This allows you to not only find where an argument is placed in the
+ * resulting String, but also which fields it contains in turn.
+ *
+ * @param arguments an array of objects to be formatted and substituted.
+ * @return AttributedCharacterIterator describing the formatted value.
+ * @exception java.lang.NullPointerException if <code>arguments</code> is null.
+ * @throws java.lang.IllegalArgumentException if a value in the
+ *         <code>arguments</code> array is not of the type
+ *         expected by the corresponding argument or custom Format object.
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object arguments) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses the string.
+ *
+ * <p>Caveats: The parse may fail in a number of circumstances.
+ * For example:
+ * <ul>
+ * <li>If one of the arguments does not occur in the pattern.
+ * <li>If the format of an argument loses information, such as
+ *     with a choice format where a large number formats to "many".
+ * <li>Does not yet handle recursion (where
+ *     the substituted strings contain {n} references.)
+ * <li>Will not always find a match (or the correct match)
+ *     if some part of the parse is ambiguous.
+ *     For example, if the pattern "{1},{2}" is used with the
+ *     string arguments {"a,b", "c"}, it will format as "a,b,c".
+ *     When the result is parsed, it will return {"a", "b,c"}.
+ * <li>If a single argument is parsed more than once in the string,
+ *     then the later parse wins.
+ * </ul>
+ * When the parse fails, use ParsePosition.getErrorIndex() to find out
+ * where in the string did the parsing failed. The returned error
+ * index is the starting offset of the sub-patterns that the string
+ * is comparing with. For example, if the parsing string "AAA {0} BBB"
+ * is comparing against the pattern "AAD {0} BBB", the error index is
+ * 0. When an error occurs, the call to this method will return null.
+ * If the source is null, return an empty array.
+ *
+ * @throws java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.lang.Object[] parse(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Parses the string, returning the results in a Map.
+ * This is similar to the version that returns an array
+ * of Object.  This supports both named and numbered
+ * arguments-- if numbered, the keys in the map are the
+ * corresponding ASCII-decimal-digit strings (e.g. "0", "1", "2"...).
+ *
+ * @param source the text to parse
+ * @param pos the position at which to start parsing.  on return,
+ *        contains the result of the parse.
+ * @return a Map containing key/value pairs for each parsed argument.
+ */
+
+public java.util.Map<java.lang.String,java.lang.Object> parseToMap(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from the beginning of the given string to produce an object
+ * array.
+ * The method may not use the entire text of the given string.
+ * <p>
+ * See the {@link #parse(java.lang.String,java.text.ParsePosition)} method for more information
+ * on message parsing.
+ *
+ * @param source A <code>String</code> whose beginning should be parsed.
+ * @return An <code>Object</code> array parsed from the string.
+ * @exception java.text.ParseException if the beginning of the specified string cannot be parsed.
+ * @exception java.lang.IllegalArgumentException if this format uses named arguments
+ */
+
+public java.lang.Object[] parse(java.lang.String source) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Parses text from the beginning of the given string to produce a map from
+ * argument to values. The method may not use the entire text of the given string.
+ *
+ * <p>See the {@link #parse(java.lang.String,java.text.ParsePosition)} method for more information on
+ * message parsing.
+ *
+ * @param source A <code>String</code> whose beginning should be parsed.
+ * @return A <code>Map</code> parsed from the string.
+ * @throws java.text.ParseException if the beginning of the specified string cannot
+ *         be parsed.
+ * @see #parseToMap(String, ParsePosition)
+ */
+
+public java.util.Map<java.lang.String,java.lang.Object> parseToMap(java.lang.String source) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from a string to produce an object array or Map.
+ * <p>
+ * The method attempts to parse text starting at the index given by
+ * <code>pos</code>.
+ * If parsing succeeds, then the index of <code>pos</code> is updated
+ * to the index after the last character used (parsing does not necessarily
+ * use all characters up to the end of the string), and the parsed
+ * object array is returned. The updated <code>pos</code> can be used to
+ * indicate the starting point for the next call to this method.
+ * If an error occurs, then the index of <code>pos</code> is not
+ * changed, the error index of <code>pos</code> is set to the index of
+ * the character where the error occurred, and null is returned.
+ * <p>
+ * See the {@link #parse(java.lang.String,java.text.ParsePosition)} method for more information
+ * on message parsing.
+ *
+ * @param source A <code>String</code>, part of which should be parsed.
+ * @param pos A <code>ParsePosition</code> object with index and error
+ *            index information as described above.
+ * @return An <code>Object</code> parsed from the string, either an
+ *         array of Object, or a Map, depending on whether named
+ *         arguments are used.  This can be queried using <code>usesNamedArguments</code>.
+ *         In case of error, returns null.
+ * @throws java.lang.NullPointerException if <code>pos</code> is null.
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts an 'apostrophe-friendly' pattern into a standard
+ * pattern.
+ * <em>This is obsolete for ICU 4.8 and higher MessageFormat pattern strings.</em>
+ * It can still be useful together with {@link java.text.MessageFormat}.
+ *
+ * <p>See the class description for more about apostrophes and quoting,
+ * and differences between ICU and {@link java.text.MessageFormat}.
+ *
+ * <p>{@link java.text.MessageFormat} and ICU 4.6 and earlier MessageFormat
+ * treat all ASCII apostrophes as
+ * quotes, which is problematic in some languages, e.g.
+ * French, where apostrophe is commonly used.  This utility
+ * assumes that only an unpaired apostrophe immediately before
+ * a brace is a true quote.  Other unpaired apostrophes are paired,
+ * and the resulting standard pattern string is returned.
+ *
+ * <p><b>Note</b>: It is not guaranteed that the returned pattern
+ * is indeed a valid pattern.  The only effect is to convert
+ * between patterns having different quoting semantics.
+ *
+ * <p><b>Note</b>: This method only works on top-level messageText,
+ * not messageText nested inside a complexArg.
+ *
+ * @param pattern the 'apostrophe-friendly' pattern to convert
+ * @return the standard equivalent of the original pattern
+ */
+
+public static java.lang.String autoQuoteApostrophe(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+/**
+ * Defines constants that are used as attribute keys in the
+ * <code>AttributedCharacterIterator</code> returned
+ * from <code>MessageFormat.formatToCharacterIterator</code>.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Field extends java.text.Format.Field {
+
+/**
+ * Create a <code>Field</code> with the specified name.
+ *
+ * @param name The name of the attribute
+ */
+
+protected Field(java.lang.String name) { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Resolves instances being deserialized to the predefined constants.
+ *
+ * @return resolved MessageFormat.Field constant
+ * @throws java.io.InvalidObjectException if the constant could not be resolved.
+ */
+
+protected java.lang.Object readResolve() throws java.io.InvalidObjectException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant identifying a portion of a message that was generated
+ * from an argument passed into <code>formatToCharacterIterator</code>.
+ * The value associated with the key will be an <code>Integer</code>
+ * indicating the index in the <code>arguments</code> array of the
+ * argument from which the text was generated.
+ */
+
+public static final android.icu.text.MessageFormat.Field ARGUMENT;
+static { ARGUMENT = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MessagePattern.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MessagePattern.java
new file mode 100644
index 0000000..252e0ee
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/MessagePattern.java
@@ -0,0 +1,685 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*   Copyright (C) 2010-2016, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*   created on: 2010aug21
+*   created by: Markus W. Scherer
+*/
+
+
+package android.icu.text;
+
+
+/**
+ * Parses and represents ICU MessageFormat patterns.
+ * Also handles patterns for ChoiceFormat, PluralFormat and SelectFormat.
+ * Used in the implementations of those classes as well as in tools
+ * for message validation, translation and format conversion.
+ * <p>
+ * The parser handles all syntax relevant for identifying message arguments.
+ * This includes "complex" arguments whose style strings contain
+ * nested MessageFormat pattern substrings.
+ * For "simple" arguments (with no nested MessageFormat pattern substrings),
+ * the argument style is not parsed any further.
+ * <p>
+ * The parser handles named and numbered message arguments and allows both in one message.
+ * <p>
+ * Once a pattern has been parsed successfully, iterate through the parsed data
+ * with countParts(), getPart() and related methods.
+ * <p>
+ * The data logically represents a parse tree, but is stored and accessed
+ * as a list of "parts" for fast and simple parsing and to minimize object allocations.
+ * Arguments and nested messages are best handled via recursion.
+ * For every _START "part", {@link #getLimitPartIndex(int)} efficiently returns
+ * the index of the corresponding _LIMIT "part".
+ * <p>
+ * List of "parts":
+ * <pre>
+ * message = MSG_START (SKIP_SYNTAX | INSERT_CHAR | REPLACE_NUMBER | argument)* MSG_LIMIT
+ * argument = noneArg | simpleArg | complexArg
+ * complexArg = choiceArg | pluralArg | selectArg
+ *
+ * noneArg = ARG_START.NONE (ARG_NAME | ARG_NUMBER) ARG_LIMIT.NONE
+ * simpleArg = ARG_START.SIMPLE (ARG_NAME | ARG_NUMBER) ARG_TYPE [ARG_STYLE] ARG_LIMIT.SIMPLE
+ * choiceArg = ARG_START.CHOICE (ARG_NAME | ARG_NUMBER) choiceStyle ARG_LIMIT.CHOICE
+ * pluralArg = ARG_START.PLURAL (ARG_NAME | ARG_NUMBER) pluralStyle ARG_LIMIT.PLURAL
+ * selectArg = ARG_START.SELECT (ARG_NAME | ARG_NUMBER) selectStyle ARG_LIMIT.SELECT
+ *
+ * choiceStyle = ((ARG_INT | ARG_DOUBLE) ARG_SELECTOR message)+
+ * pluralStyle = [ARG_INT | ARG_DOUBLE] (ARG_SELECTOR [ARG_INT | ARG_DOUBLE] message)+
+ * selectStyle = (ARG_SELECTOR message)+
+ * </pre>
+ * <ul>
+ *   <li>Literal output text is not represented directly by "parts" but accessed
+ *       between parts of a message, from one part's getLimit() to the next part's getIndex().
+ *   <li><code>ARG_START.CHOICE</code> stands for an ARG_START Part with ArgType CHOICE.
+ *   <li>In the choiceStyle, the ARG_SELECTOR has the '&lt;', the '#' or
+ *       the less-than-or-equal-to sign (U+2264).
+ *   <li>In the pluralStyle, the first, optional numeric Part has the "offset:" value.
+ *       The optional numeric Part between each (ARG_SELECTOR, message) pair
+ *       is the value of an explicit-number selector like "=2",
+ *       otherwise the selector is a non-numeric identifier.
+ *   <li>The REPLACE_NUMBER Part can occur only in an immediate sub-message of the pluralStyle.
+ * </ul>
+ * <p>
+ * This class is not intended for public subclassing.
+ *
+ * @author Markus Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class MessagePattern implements java.lang.Cloneable, android.icu.util.Freezable<android.icu.text.MessagePattern> {
+
+/**
+ * Constructs an empty MessagePattern with default ApostropheMode.
+ */
+
+public MessagePattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an empty MessagePattern.
+ * @param mode Explicit ApostropheMode.
+ */
+
+public MessagePattern(android.icu.text.MessagePattern.ApostropheMode mode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a MessagePattern with default ApostropheMode and
+ * parses the MessageFormat pattern string.
+ * @param pattern a MessageFormat pattern string
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public MessagePattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a MessageFormat pattern string.
+ * @param pattern a MessageFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parse(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a ChoiceFormat pattern string.
+ * @param pattern a ChoiceFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parseChoiceStyle(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a PluralFormat pattern string.
+ * @param pattern a PluralFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parsePluralStyle(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a SelectFormat pattern string.
+ * @param pattern a SelectFormat pattern string
+ * @return this
+ * @throws java.lang.IllegalArgumentException for syntax errors in the pattern string
+ * @throws java.lang.IndexOutOfBoundsException if certain limits are exceeded
+ *         (e.g., argument number too high, argument name too long, etc.)
+ * @throws java.lang.NumberFormatException if a number could not be parsed
+ */
+
+public android.icu.text.MessagePattern parseSelectStyle(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears this MessagePattern.
+ * countParts() will return 0.
+ */
+
+public void clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears this MessagePattern and sets the ApostropheMode.
+ * countParts() will return 0.
+ * @param mode The new ApostropheMode.
+ */
+
+public void clearPatternAndSetApostropheMode(android.icu.text.MessagePattern.ApostropheMode mode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @param other another object to compare with.
+ * @return true if this object is equivalent to the other one.
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return this instance's ApostropheMode.
+ */
+
+public android.icu.text.MessagePattern.ApostropheMode getApostropheMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return the parsed pattern string (null if none was parsed).
+ */
+
+public java.lang.String getPatternString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Does the parsed pattern have named arguments like {first_name}?
+ * @return true if the parsed pattern has at least one named argument.
+ */
+
+public boolean hasNamedArguments() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Does the parsed pattern have numbered arguments like {2}?
+ * @return true if the parsed pattern has at least one numbered argument.
+ */
+
+public boolean hasNumberedArguments() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Validates and parses an argument name or argument number string.
+ * An argument name must be a "pattern identifier", that is, it must contain
+ * no Unicode Pattern_Syntax or Pattern_White_Space characters.
+ * If it only contains ASCII digits, then it must be a small integer with no leading zero.
+ * @param name Input string.
+ * @return &gt;=0 if the name is a valid number,
+ *         ARG_NAME_NOT_NUMBER (-1) if it is a "pattern identifier" but not all ASCII digits,
+ *         ARG_NAME_NOT_VALID (-2) if it is neither.
+ */
+
+public static int validateArgumentName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a version of the parsed pattern string where each ASCII apostrophe
+ * is doubled (escaped) if it is not already, and if it is not interpreted as quoting syntax.
+ * <p>
+ * For example, this turns "I don't '{know}' {gender,select,female{h''er}other{h'im}}."
+ * into "I don''t '{know}' {gender,select,female{h''er}other{h''im}}."
+ * @return the deep-auto-quoted version of the parsed pattern string.
+ * @see android.icu.text.MessageFormat#autoQuoteApostrophe(String)
+ */
+
+public java.lang.String autoQuoteApostropheDeep() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of "parts" created by parsing the pattern string.
+ * Returns 0 if no pattern has been parsed or clear() was called.
+ * @return the number of pattern parts.
+ */
+
+public int countParts() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the i-th pattern "part".
+ * @param i The index of the Part data. (0..countParts()-1)
+ * @return the i-th pattern "part".
+ * @throws java.lang.IndexOutOfBoundsException if i is outside the (0..countParts()-1) range
+ */
+
+public android.icu.text.MessagePattern.Part getPart(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Part.Type of the i-th pattern "part".
+ * Convenience method for getPart(i).getType().
+ * @param i The index of the Part data. (0..countParts()-1)
+ * @return The Part.Type of the i-th Part.
+ * @throws java.lang.IndexOutOfBoundsException if i is outside the (0..countParts()-1) range
+ */
+
+public android.icu.text.MessagePattern.Part.Type getPartType(int i) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern index of the specified pattern "part".
+ * Convenience method for getPart(partIndex).getIndex().
+ * @param partIndex The index of the Part data. (0..countParts()-1)
+ * @return The pattern index of this Part.
+ * @throws java.lang.IndexOutOfBoundsException if partIndex is outside the (0..countParts()-1) range
+ */
+
+public int getPatternIndex(int partIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the substring of the pattern string indicated by the Part.
+ * Convenience method for getPatternString().substring(part.getIndex(), part.getLimit()).
+ * @param part a part of this MessagePattern.
+ * @return the substring associated with part.
+ */
+
+public java.lang.String getSubstring(android.icu.text.MessagePattern.Part part) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the part's substring with the input string s.
+ * @param part a part of this MessagePattern.
+ * @param s a string.
+ * @return true if getSubstring(part).equals(s).
+ */
+
+public boolean partSubstringMatches(android.icu.text.MessagePattern.Part part, java.lang.String s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numeric value associated with an ARG_INT or ARG_DOUBLE.
+ * @param part a part of this MessagePattern.
+ * @return the part's numeric value, or NO_NUMERIC_VALUE if this is not a numeric part.
+ */
+
+public double getNumericValue(android.icu.text.MessagePattern.Part part) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the "offset:" value of a PluralFormat argument, or 0 if none is specified.
+ * @param pluralStart the index of the first PluralFormat argument style part. (0..countParts()-1)
+ * @return the "offset:" value.
+ * @throws java.lang.IndexOutOfBoundsException if pluralStart is outside the (0..countParts()-1) range
+ */
+
+public double getPluralOffset(int pluralStart) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the ARG|MSG_LIMIT part corresponding to the ARG|MSG_START at start.
+ * @param start The index of some Part data (0..countParts()-1);
+ *        this Part should be of Type ARG_START or MSG_START.
+ * @return The first i&gt;start where getPart(i).getType()==ARG|MSG_LIMIT at the same nesting level,
+ *         or start itself if getPartType(msgStart)!=ARG|MSG_START.
+ * @throws java.lang.IndexOutOfBoundsException if start is outside the (0..countParts()-1) range
+ */
+
+public int getLimitPartIndex(int start) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates and returns a copy of this object.
+ * @return a copy of this object (or itself if frozen).
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates and returns an unfrozen copy of this object.
+ * @return a copy of this object.
+ */
+
+public android.icu.text.MessagePattern cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freezes this object, making it immutable and thread-safe.
+ * @return this
+ */
+
+public android.icu.text.MessagePattern freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether this object is frozen (immutable) or not.
+ * @return true if this object is frozen.
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return value from {@link #validateArgumentName(java.lang.String)} for when
+ * the string is a valid "pattern identifier" but not a number.
+ */
+
+public static final int ARG_NAME_NOT_NUMBER = -1; // 0xffffffff
+
+/**
+ * Return value from {@link #validateArgumentName(java.lang.String)} for when
+ * the string is invalid.
+ * It might not be a valid "pattern identifier",
+ * or it have only ASCII digits but there is a leading zero or the number is too large.
+ */
+
+public static final int ARG_NAME_NOT_VALID = -2; // 0xfffffffe
+
+/**
+ * Special value that is returned by getNumericValue(Part) when no
+ * numeric value is defined for a part.
+ * @see #getNumericValue
+ */
+
+public static final double NO_NUMERIC_VALUE = -1.23456789E8;
+/**
+ * Mode for when an apostrophe starts quoted literal text for MessageFormat output.
+ * The default is DOUBLE_OPTIONAL unless overridden via ICUConfig
+ * (/com/ibm/icu/ICUConfig.properties).
+ * <p>
+ * A pair of adjacent apostrophes always results in a single apostrophe in the output,
+ * even when the pair is between two single, text-quoting apostrophes.
+ * <p>
+ * The following table shows examples of desired MessageFormat.format() output
+ * with the pattern strings that yield that output.
+ *
+ * <table>
+ *   <tr>
+ *     <th>Desired output</th>
+ *     <th>DOUBLE_OPTIONAL</th>
+ *     <th>DOUBLE_REQUIRED</th>
+ *   </tr>
+ *   <tr>
+ *     <td>I see {many}</td>
+ *     <td>I see '{many}'</td>
+ *     <td>(same)</td>
+ *   </tr>
+ *   <tr>
+ *     <td>I said {'Wow!'}</td>
+ *     <td>I said '{''Wow!''}'</td>
+ *     <td>(same)</td>
+ *   </tr>
+ *   <tr>
+ *     <td>I don't know</td>
+ *     <td>I don't know OR<br> I don''t know</td>
+ *     <td>I don''t know</td>
+ *   </tr>
+ * </table>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ApostropheMode {
+/**
+ * A literal apostrophe is represented by
+ * either a single or a double apostrophe pattern character.
+ * Within a MessageFormat pattern, a single apostrophe only starts quoted literal text
+ * if it immediately precedes a curly brace {},
+ * or a pipe symbol | if inside a choice format,
+ * or a pound symbol # if inside a plural format.
+ * <p>
+ * This is the default behavior starting with ICU 4.8.
+ */
+
+DOUBLE_OPTIONAL,
+/**
+ * A literal apostrophe must be represented by
+ * a double apostrophe pattern character.
+ * A single apostrophe always starts quoted literal text.
+ * <p>
+ * This is the behavior of ICU 4.6 and earlier, and of {@link java.text.MessageFormat}.
+ */
+
+DOUBLE_REQUIRED;
+}
+
+/**
+ * Argument type constants.
+ * Returned by Part.getArgType() for ARG_START and ARG_LIMIT parts.
+ *
+ * Messages nested inside an argument are each delimited by MSG_START and MSG_LIMIT,
+ * with a nesting level one greater than the surrounding message.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ArgType {
+/**
+ * The argument has no specified type.
+ */
+
+NONE,
+/**
+ * The argument has a "simple" type which is provided by the ARG_TYPE part.
+ * An ARG_STYLE part might follow that.
+ */
+
+SIMPLE,
+/**
+ * The argument is a ChoiceFormat with one or more
+ * ((ARG_INT | ARG_DOUBLE), ARG_SELECTOR, message) tuples.
+ */
+
+CHOICE,
+/**
+ * The argument is a cardinal-number PluralFormat with an optional ARG_INT or ARG_DOUBLE offset
+ * (e.g., offset:1)
+ * and one or more (ARG_SELECTOR [explicit-value] message) tuples.
+ * If the selector has an explicit value (e.g., =2), then
+ * that value is provided by the ARG_INT or ARG_DOUBLE part preceding the message.
+ * Otherwise the message immediately follows the ARG_SELECTOR.
+ */
+
+PLURAL,
+/**
+ * The argument is a SelectFormat with one or more (ARG_SELECTOR, message) pairs.
+ */
+
+SELECT,
+/**
+ * The argument is an ordinal-number PluralFormat
+ * with the same style parts sequence and semantics as {@link android.icu.text.MessagePattern.ArgType#PLURAL ArgType#PLURAL}.
+ */
+
+SELECTORDINAL;
+
+/**
+ * @return true if the argument type has a plural style part sequence and semantics,
+ * for example {@link android.icu.text.MessagePattern.ArgType#PLURAL ArgType#PLURAL} and {@link android.icu.text.MessagePattern.ArgType#SELECTORDINAL ArgType#SELECTORDINAL}.
+ */
+
+public boolean hasPluralStyle() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * A message pattern "part", representing a pattern parsing event.
+ * There is a part for the start and end of a message or argument,
+ * for quoting and escaping of and with ASCII apostrophes,
+ * and for syntax elements of "complex" arguments.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Part {
+
+private Part() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the type of this part.
+ * @return the part type.
+ */
+
+public android.icu.text.MessagePattern.Part.Type getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern string index associated with this Part.
+ * @return this part's pattern string index.
+ */
+
+public int getIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the pattern substring associated with this Part.
+ * This is 0 for some parts.
+ * @return this part's pattern substring length.
+ */
+
+public int getLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern string limit (exclusive-end) index associated with this Part.
+ * Convenience method for getIndex()+getLength().
+ * @return this part's pattern string limit index, same as getIndex()+getLength().
+ */
+
+public int getLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a value associated with this part.
+ * See the documentation of each part type for details.
+ * @return the part value.
+ */
+
+public int getValue() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the argument type if this part is of type ARG_START or ARG_LIMIT,
+ * otherwise ArgType.NONE.
+ * @return the argument type for this part.
+ */
+
+public android.icu.text.MessagePattern.ArgType getArgType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return a string representation of this part.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @param other another object to compare with.
+ * @return true if this object is equivalent to the other one.
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+/**
+ * Part type constants.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Type {
+/**
+ * Start of a message pattern (main or nested).
+ * The length is 0 for the top-level message
+ * and for a choice argument sub-message, otherwise 1 for the '{'.
+ * The value indicates the nesting level, starting with 0 for the main message.
+ * <p>
+ * There is always a later MSG_LIMIT part.
+ */
+
+MSG_START,
+/**
+ * End of a message pattern (main or nested).
+ * The length is 0 for the top-level message and
+ * the last sub-message of a choice argument,
+ * otherwise 1 for the '}' or (in a choice argument style) the '|'.
+ * The value indicates the nesting level, starting with 0 for the main message.
+ */
+
+MSG_LIMIT,
+/**
+ * Indicates a substring of the pattern string which is to be skipped when formatting.
+ * For example, an apostrophe that begins or ends quoted text
+ * would be indicated with such a part.
+ * The value is undefined and currently always 0.
+ */
+
+SKIP_SYNTAX,
+/**
+ * Indicates that a syntax character needs to be inserted for auto-quoting.
+ * The length is 0.
+ * The value is the character code of the insertion character. (U+0027=APOSTROPHE)
+ */
+
+INSERT_CHAR,
+/**
+ * Indicates a syntactic (non-escaped) # symbol in a plural variant.
+ * When formatting, replace this part's substring with the
+ * (value-offset) for the plural argument value.
+ * The value is undefined and currently always 0.
+ */
+
+REPLACE_NUMBER,
+/**
+ * Start of an argument.
+ * The length is 1 for the '{'.
+ * The value is the ordinal value of the ArgType. Use getArgType().
+ * <p>
+ * This part is followed by either an ARG_NUMBER or ARG_NAME,
+ * followed by optional argument sub-parts (see ArgType constants)
+ * and finally an ARG_LIMIT part.
+ */
+
+ARG_START,
+/**
+ * End of an argument.
+ * The length is 1 for the '}'.
+ * The value is the ordinal value of the ArgType. Use getArgType().
+ */
+
+ARG_LIMIT,
+/**
+ * The argument number, provided by the value.
+ */
+
+ARG_NUMBER,
+/**
+ * The argument name.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_NAME,
+/**
+ * The argument type.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_TYPE,
+/**
+ * The argument style text.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_STYLE,
+/**
+ * A selector substring in a "complex" argument style.
+ * The value is undefined and currently always 0.
+ */
+
+ARG_SELECTOR,
+/**
+ * An integer value, for example the offset or an explicit selector value
+ * in a PluralFormat style.
+ * The part value is the integer value.
+ */
+
+ARG_INT,
+/**
+ * A numeric value, for example the offset or an explicit selector value
+ * in a PluralFormat style.
+ * The part value is an index into an internal array of numeric values;
+ * use getNumericValue().
+ */
+
+ARG_DOUBLE;
+
+/**
+ * Indicates whether this part has a numeric value.
+ * If so, then that numeric value can be retrieved via {@link android.icu.text.MessagePattern#getNumericValue(android.icu.text.MessagePattern.Part) MessagePattern#getNumericValue(Part)}.
+ * @return true if this part has a numeric value.
+ */
+
+public boolean hasNumericValue() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Normalizer.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Normalizer.java
new file mode 100644
index 0000000..8d880fd
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Normalizer.java
@@ -0,0 +1,370 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2000-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.CharacterIterator;
+import android.icu.lang.UCharacter;
+
+/**
+ * Old Unicode normalization API.
+ *
+ * <p>This API has been replaced by the {@link android.icu.text.Normalizer2 Normalizer2} class and is only available
+ * for backward compatibility. This class simply delegates to the Normalizer2 class.
+ * There are two exceptions: The new API does not provide a replacement for
+ * <code>QuickCheckResult</code> and <code>compare()</code>.
+ *
+ * <p><code>normalize</code> transforms Unicode text into an equivalent composed or
+ * decomposed form, allowing for easier sorting and searching of text.
+ * <code>normalize</code> supports the standard normalization forms described in
+ * <a href="http://www.unicode.org/unicode/reports/tr15/" target="unicode">
+ * Unicode Standard Annex #15 &mdash; Unicode Normalization Forms</a>.
+ *
+ * <p>Characters with accents or other adornments can be encoded in
+ * several different ways in Unicode.  For example, take the character A-acute.
+ * In Unicode, this can be encoded as a single character (the
+ * "composed" form):
+ *
+ * <pre>
+ *      00C1    LATIN CAPITAL LETTER A WITH ACUTE
+ * </pre>
+ *
+ * or as two separate characters (the "decomposed" form):
+ *
+ * <pre>
+ *      0041    LATIN CAPITAL LETTER A
+ *      0301    COMBINING ACUTE ACCENT
+ * </pre>
+ *
+ * <p>To a user of your program, however, both of these sequences should be
+ * treated as the same "user-level" character "A with acute accent".  When you
+ * are searching or comparing text, you must ensure that these two sequences are
+ * treated equivalently.  In addition, you must handle characters with more than
+ * one accent.  Sometimes the order of a character's combining accents is
+ * significant, while in other cases accent sequences in different orders are
+ * really equivalent.
+ *
+ * <p>Similarly, the string "ffi" can be encoded as three separate letters:
+ *
+ * <pre>
+ *      0066    LATIN SMALL LETTER F
+ *      0066    LATIN SMALL LETTER F
+ *      0069    LATIN SMALL LETTER I
+ * </pre>
+ *
+ * or as the single character
+ *
+ * <pre>
+ *      FB03    LATIN SMALL LIGATURE FFI
+ * </pre>
+ *
+ * <p>The ffi ligature is not a distinct semantic character, and strictly speaking
+ * it shouldn't be in Unicode at all, but it was included for compatibility
+ * with existing character sets that already provided it.  The Unicode standard
+ * identifies such characters by giving them "compatibility" decompositions
+ * into the corresponding semantic characters.  When sorting and searching, you
+ * will often want to use these mappings.
+ *
+ * <p><code>normalize</code> helps solve these problems by transforming text into
+ * the canonical composed and decomposed forms as shown in the first example
+ * above. In addition, you can have it perform compatibility decompositions so
+ * that you can treat compatibility characters the same as their equivalents.
+ * Finally, <code>normalize</code> rearranges accents into the proper canonical
+ * order, so that you do not have to worry about accent rearrangement on your
+ * own.
+ *
+ * <p>Form FCD, "Fast C or D", is also designed for collation.
+ * It allows to work on strings that are not necessarily normalized
+ * with an algorithm (like in collation) that works under "canonical closure",
+ * i.e., it treats precomposed characters and their decomposed equivalents the
+ * same.
+ *
+ * <p>It is not a normalization form because it does not provide for uniqueness of
+ * representation. Multiple strings may be canonically equivalent (their NFDs
+ * are identical) and may all conform to FCD without being identical themselves.
+ *
+ * <p>The form is defined such that the "raw decomposition", the recursive
+ * canonical decomposition of each character, results in a string that is
+ * canonically ordered. This means that precomposed characters are allowed for
+ * as long as their decompositions do not need canonical reordering.
+ *
+ * <p>Its advantage for a process like collation is that all NFD and most NFC texts
+ * - and many unnormalized texts - already conform to FCD and do not need to be
+ * normalized (NFD) for such a process. The FCD quick check will return YES for
+ * most strings in practice.
+ *
+ * <p>normalize(FCD) may be implemented with NFD.
+ *
+ * <p>For more details on FCD see Unicode Technical Note #5 (Canonical Equivalence in Applications):
+ * http://www.unicode.org/notes/tn5/#FCD
+ *
+ * <p>ICU collation performs either NFD or FCD normalization automatically if
+ * normalization is turned on for the collator object. Beyond collation and
+ * string search, normalized strings may be useful for string equivalence
+ * comparisons, transliteration/transcription, unique representations, etc.
+ *
+ * <p>The W3C generally recommends to exchange texts in NFC.
+ * Note also that most legacy character encodings use only precomposed forms and
+ * often do not encode any combining marks by themselves. For conversion to such
+ * character encodings the Unicode text needs to be normalized to NFC.
+ * For more usage examples, see the Unicode Standard Annex.
+ *
+ * <p>Note: The Normalizer class also provides API for iterative normalization.
+ * While the setIndex() and getIndex() refer to indices in the
+ * underlying Unicode input text, the next() and previous() methods
+ * iterate through characters in the normalized output.
+ * This means that there is not necessarily a one-to-one correspondence
+ * between characters returned by next() and previous() and the indices
+ * passed to and returned from setIndex() and getIndex().
+ * It is for this reason that Normalizer does not implement the CharacterIterator interface.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class Normalizer implements java.lang.Cloneable {
+
+Normalizer() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clones this <tt>Normalizer</tt> object.  All properties of this
+ * object are duplicated in the new object, including the cloning of any
+ * {@link java.text.CharacterIterator CharacterIterator} that was passed in to the constructor
+ * or to {@link #setText(java.text.CharacterIterator) setText}.
+ * However, the text storage underlying
+ * the <tt>CharacterIterator</tt> is not duplicated unless the
+ * iterator's <tt>clone</tt> method does so.
+ *
+ * @deprecated ICU 56 Use {@link android.icu.text.Normalizer2 Normalizer2} instead.
+ * @hide original deprecated declaration
+ */
+
+@Deprecated
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare two strings for canonical equivalence.
+ * Further options include case-insensitive comparison and
+ * code point order (as opposed to code unit order).
+ *
+ * Canonical equivalence between two strings is defined as their normalized
+ * forms (NFD or NFC) being identical.
+ * This function compares strings incrementally instead of normalizing
+ * (and optionally case-folding) both strings entirely,
+ * improving performance significantly.
+ *
+ * Bulk normalization is only necessary if the strings do not fulfill the
+ * FCD conditions. Only in this case, and only if the strings are relatively
+ * long, is memory allocated temporarily.
+ * For FCD strings and short non-FCD strings there is no memory allocation.
+ *
+ * Semantically, this is equivalent to
+ *   strcmp[CodePointOrder](foldCase(NFD(s1)), foldCase(NFD(s2)))
+ * where code point order and foldCase are all optional.
+ *
+ * @param s1        First source character array.
+ * @param s1Start   start index of source
+ * @param s1Limit   limit of the source
+ *
+ * @param s2        Second source character array.
+ * @param s2Start   start index of the source
+ * @param s2Limit   limit of the source
+ *
+ * @param options A bit set of options:
+ *   - FOLD_CASE_DEFAULT or 0 is used for default options:
+ *     Case-sensitive comparison in code unit order, and the input strings
+ *     are quick-checked for FCD.
+ *
+ *   - INPUT_IS_FCD
+ *     Set if the caller knows that both s1 and s2 fulfill the FCD
+ *     conditions.If not set, the function will quickCheck for FCD
+ *     and normalize if necessary.
+ *
+ *   - COMPARE_CODE_POINT_ORDER
+ *     Set to choose code point order instead of code unit order
+ *
+ *   - COMPARE_IGNORE_CASE
+ *     Set to compare strings case-insensitively using case folding,
+ *     instead of case-sensitively.
+ *     If set, then the following case folding options are used.
+ *
+ *
+ * @return &lt;0 or 0 or &gt;0 as usual for string comparisons
+ */
+
+public static int compare(char[] s1, int s1Start, int s1Limit, char[] s2, int s2Start, int s2Limit, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare two strings for canonical equivalence.
+ * Further options include case-insensitive comparison and
+ * code point order (as opposed to code unit order).
+ *
+ * Canonical equivalence between two strings is defined as their normalized
+ * forms (NFD or NFC) being identical.
+ * This function compares strings incrementally instead of normalizing
+ * (and optionally case-folding) both strings entirely,
+ * improving performance significantly.
+ *
+ * Bulk normalization is only necessary if the strings do not fulfill the
+ * FCD conditions. Only in this case, and only if the strings are relatively
+ * long, is memory allocated temporarily.
+ * For FCD strings and short non-FCD strings there is no memory allocation.
+ *
+ * Semantically, this is equivalent to
+ *   strcmp[CodePointOrder](foldCase(NFD(s1)), foldCase(NFD(s2)))
+ * where code point order and foldCase are all optional.
+ *
+ * @param s1 First source string.
+ * @param s2 Second source string.
+ *
+ * @param options A bit set of options:
+ *   - FOLD_CASE_DEFAULT or 0 is used for default options:
+ *     Case-sensitive comparison in code unit order, and the input strings
+ *     are quick-checked for FCD.
+ *
+ *   - INPUT_IS_FCD
+ *     Set if the caller knows that both s1 and s2 fulfill the FCD
+ *     conditions. If not set, the function will quickCheck for FCD
+ *     and normalize if necessary.
+ *
+ *   - COMPARE_CODE_POINT_ORDER
+ *     Set to choose code point order instead of code unit order
+ *
+ *   - COMPARE_IGNORE_CASE
+ *     Set to compare strings case-insensitively using case folding,
+ *     instead of case-sensitively.
+ *     If set, then the following case folding options are used.
+ *
+ * @return &lt;0 or 0 or &gt;0 as usual for string comparisons
+ */
+
+public static int compare(java.lang.String s1, java.lang.String s2, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare two strings for canonical equivalence.
+ * Further options include case-insensitive comparison and
+ * code point order (as opposed to code unit order).
+ * Convenience method.
+ *
+ * @param s1 First source string.
+ * @param s2 Second source string.
+ *
+ * @param options A bit set of options:
+ *   - FOLD_CASE_DEFAULT or 0 is used for default options:
+ *     Case-sensitive comparison in code unit order, and the input strings
+ *     are quick-checked for FCD.
+ *
+ *   - INPUT_IS_FCD
+ *     Set if the caller knows that both s1 and s2 fulfill the FCD
+ *     conditions. If not set, the function will quickCheck for FCD
+ *     and normalize if necessary.
+ *
+ *   - COMPARE_CODE_POINT_ORDER
+ *     Set to choose code point order instead of code unit order
+ *
+ *   - COMPARE_IGNORE_CASE
+ *     Set to compare strings case-insensitively using case folding,
+ *     instead of case-sensitively.
+ *     If set, then the following case folding options are used.
+ *
+ * @return &lt;0 or 0 or &gt;0 as usual for string comparisons
+ */
+
+public static int compare(char[] s1, char[] s2, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method that can have faster implementation
+ * by not allocating buffers.
+ * @param char32a    the first code point to be checked against the
+ * @param char32b    the second code point
+ * @param options    A bit set of options
+ */
+
+public static int compare(int char32a, int char32b, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method that can have faster implementation
+ * by not allocating buffers.
+ * @param char32a   the first code point to be checked against
+ * @param str2      the second string
+ * @param options   A bit set of options
+ */
+
+public static int compare(int char32a, java.lang.String str2, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Option bit for compare:
+ * Compare strings in code point order instead of code unit order.
+ */
+
+public static final int COMPARE_CODE_POINT_ORDER = 32768; // 0x8000
+
+/**
+ * Option bit for compare:
+ * Perform case-insensitive comparison.
+ */
+
+public static final int COMPARE_IGNORE_CASE = 65536; // 0x10000
+
+/**
+ * Option bit for compare:
+ * Case sensitively compare the strings
+ */
+
+public static final int FOLD_CASE_DEFAULT = 0; // 0x0
+
+/**
+ * Option value for case folding:
+ * Use the modified set of mappings provided in CaseFolding.txt to handle dotted I
+ * and dotless i appropriately for Turkic languages (tr, az).
+ * @see android.icu.lang.UCharacter#FOLD_CASE_EXCLUDE_SPECIAL_I
+ */
+
+public static final int FOLD_CASE_EXCLUDE_SPECIAL_I = 1; // 0x1
+
+/**
+ * Option bit for compare:
+ * Both input strings are assumed to fulfill FCD conditions.
+ */
+
+public static final int INPUT_IS_FCD = 131072; // 0x20000
+
+/**
+ * Indicates it cannot be determined if string is in the normalized
+ * format without further thorough checks.
+ */
+
+public static final android.icu.text.Normalizer.QuickCheckResult MAYBE;
+static { MAYBE = null; }
+
+/**
+ * Indicates that string is not in the normalized format
+ */
+
+public static final android.icu.text.Normalizer.QuickCheckResult NO;
+static { NO = null; }
+
+/**
+ * Indicates that string is in the normalized format
+ */
+
+public static final android.icu.text.Normalizer.QuickCheckResult YES;
+static { YES = null; }
+/**
+ * Result values for quickCheck().
+ * For details see Unicode Technical Report 15.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class QuickCheckResult {
+
+private QuickCheckResult() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Normalizer2.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Normalizer2.java
new file mode 100644
index 0000000..2128331
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Normalizer2.java
@@ -0,0 +1,401 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ *   Copyright (C) 2009-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import android.icu.util.ICUUncheckedIOException;
+import java.io.IOException;
+
+/**
+ * Unicode normalization functionality for standard Unicode normalization or
+ * for using custom mapping tables.
+ * All instances of this class are unmodifiable/immutable.
+ * The Normalizer2 class is not intended for public subclassing.
+ * <p>
+ * The primary functions are to produce a normalized string and to detect whether
+ * a string is already normalized.
+ * The most commonly used normalization forms are those defined in
+ * http://www.unicode.org/unicode/reports/tr15/
+ * However, this API supports additional normalization forms for specialized purposes.
+ * For example, NFKC_Casefold is provided via getInstance("nfkc_cf", COMPOSE)
+ * and can be used in implementations of UTS #46.
+ * <p>
+ * Not only are the standard compose and decompose modes supplied,
+ * but additional modes are provided as documented in the Mode enum.
+ * <p>
+ * Some of the functions in this class identify normalization boundaries.
+ * At a normalization boundary, the portions of the string
+ * before it and starting from it do not interact and can be handled independently.
+ * <p>
+ * The spanQuickCheckYes() stops at a normalization boundary.
+ * When the goal is a normalized string, then the text before the boundary
+ * can be copied, and the remainder can be processed with normalizeSecondAndAppend().
+ * <p>
+ * The hasBoundaryBefore(), hasBoundaryAfter() and isInert() functions test whether
+ * a character is guaranteed to be at a normalization boundary,
+ * regardless of context.
+ * This is used for moving from one normalization boundary to the next
+ * or preceding boundary, and for performing iterative normalization.
+ * <p>
+ * Iterative normalization is useful when only a small portion of a
+ * longer string needs to be processed.
+ * For example, in ICU, iterative normalization is used by the NormalizationTransliterator
+ * (to avoid replacing already-normalized text) and ucol_nextSortKeyPart()
+ * (to process only the substring for which sort key bytes are computed).
+ * <p>
+ * The set of normalization boundaries returned by these functions may not be
+ * complete: There may be more boundaries that could be returned.
+ * Different functions may return different boundaries.
+ * @author Markus W. Scherer
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Normalizer2 {
+
+Normalizer2() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFC normalization.
+ * Same as getInstance(null, "nfc", Mode.COMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFCInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFD normalization.
+ * Same as getInstance(null, "nfc", Mode.DECOMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFDInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFKC normalization.
+ * Same as getInstance(null, "nfkc", Mode.COMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFKCInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFKD normalization.
+ * Same as getInstance(null, "nfkc", Mode.DECOMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFKDInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance for Unicode NFKC_Casefold normalization.
+ * Same as getInstance(null, "nfkc_cf", Mode.COMPOSE).
+ * Returns an unmodifiable singleton instance.
+ * @return the requested Normalizer2, if successful
+ */
+
+public static android.icu.text.Normalizer2 getNFKCCasefoldInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Normalizer2 instance which uses the specified data file
+ * (an ICU data file if data=null, or else custom binary data)
+ * and which composes or decomposes text according to the specified mode.
+ * Returns an unmodifiable singleton instance.
+ * <ul>
+ * <li>Use data=null for data files that are part of ICU's own data.
+ * <li>Use name="nfc" and COMPOSE/DECOMPOSE for Unicode standard NFC/NFD.
+ * <li>Use name="nfkc" and COMPOSE/DECOMPOSE for Unicode standard NFKC/NFKD.
+ * <li>Use name="nfkc_cf" and COMPOSE for Unicode standard NFKC_CF=NFKC_Casefold.
+ * </ul>
+ * If data!=null, then the binary data is read once and cached using the provided
+ * name as the key.
+ * If you know or expect the data to be cached already, you can use data!=null
+ * for non-ICU data as well.
+ * <p>Any {@link java.io.IOException} is wrapped into a {@link android.icu.util.ICUUncheckedIOException}.
+ * @param data the binary, big-endian normalization (.nrm file) data, or null for ICU data
+ * @param name "nfc" or "nfkc" or "nfkc_cf" or name of custom data file
+ * @param mode normalization mode (compose or decompose etc.)
+ * @return the requested Normalizer2, if successful
+ * @deprecated Don't use because the binary {@code data} format is not stable across API levels.
+ */
+
+@Deprecated
+public static android.icu.text.Normalizer2 getInstance(java.io.InputStream data, java.lang.String name, android.icu.text.Normalizer2.Mode mode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the normalized form of the source string.
+ * @param src source string
+ * @return normalized src
+ */
+
+public java.lang.String normalize(java.lang.CharSequence src) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Writes the normalized form of the source string to the destination string
+ * (replacing its contents) and returns the destination string.
+ * The source and destination strings must be different objects.
+ * @param src source string
+ * @param dest destination string; its contents is replaced with normalized src
+ * @return dest
+ */
+
+public abstract java.lang.StringBuilder normalize(java.lang.CharSequence src, java.lang.StringBuilder dest);
+
+/**
+ * Writes the normalized form of the source string to the destination Appendable
+ * and returns the destination Appendable.
+ * The source and destination strings must be different objects.
+ *
+ * <p>Any {@link java.io.IOException} is wrapped into a {@link android.icu.util.ICUUncheckedIOException}.
+ *
+ * @param src source string
+ * @param dest destination Appendable; gets normalized src appended
+ * @return dest
+ */
+
+public abstract java.lang.Appendable normalize(java.lang.CharSequence src, java.lang.Appendable dest);
+
+/**
+ * Appends the normalized form of the second string to the first string
+ * (merging them at the boundary) and returns the first string.
+ * The result is normalized if the first string was normalized.
+ * The first and second strings must be different objects.
+ * @param first string, should be normalized
+ * @param second string, will be normalized
+ * @return first
+ */
+
+public abstract java.lang.StringBuilder normalizeSecondAndAppend(java.lang.StringBuilder first, java.lang.CharSequence second);
+
+/**
+ * Appends the second string to the first string
+ * (merging them at the boundary) and returns the first string.
+ * The result is normalized if both the strings were normalized.
+ * The first and second strings must be different objects.
+ * @param first string, should be normalized
+ * @param second string, should be normalized
+ * @return first
+ */
+
+public abstract java.lang.StringBuilder append(java.lang.StringBuilder first, java.lang.CharSequence second);
+
+/**
+ * Gets the decomposition mapping of c.
+ * Roughly equivalent to normalizing the String form of c
+ * on a DECOMPOSE Normalizer2 instance, but much faster, and except that this function
+ * returns null if c does not have a decomposition mapping in this instance's data.
+ * This function is independent of the mode of the Normalizer2.
+ * @param c code point
+ * @return c's decomposition mapping, if any; otherwise null
+ */
+
+public abstract java.lang.String getDecomposition(int c);
+
+/**
+ * Gets the raw decomposition mapping of c.
+ *
+ * <p>This is similar to the getDecomposition() method but returns the
+ * raw decomposition mapping as specified in UnicodeData.txt or
+ * (for custom data) in the mapping files processed by the gennorm2 tool.
+ * By contrast, getDecomposition() returns the processed,
+ * recursively-decomposed version of this mapping.
+ *
+ * <p>When used on a standard NFKC Normalizer2 instance,
+ * getRawDecomposition() returns the Unicode Decomposition_Mapping (dm) property.
+ *
+ * <p>When used on a standard NFC Normalizer2 instance,
+ * it returns the Decomposition_Mapping only if the Decomposition_Type (dt) is Canonical (Can);
+ * in this case, the result contains either one or two code points (=1..4 Java chars).
+ *
+ * <p>This function is independent of the mode of the Normalizer2.
+ * The default implementation returns null.
+ * @param c code point
+ * @return c's raw decomposition mapping, if any; otherwise null
+ */
+
+public java.lang.String getRawDecomposition(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Performs pairwise composition of a &amp; b and returns the composite if there is one.
+ *
+ * <p>Returns a composite code point c only if c has a two-way mapping to a+b.
+ * In standard Unicode normalization, this means that
+ * c has a canonical decomposition to a+b
+ * and c does not have the Full_Composition_Exclusion property.
+ *
+ * <p>This function is independent of the mode of the Normalizer2.
+ * The default implementation returns a negative value.
+ * @param a A (normalization starter) code point.
+ * @param b Another code point.
+ * @return The non-negative composite code point if there is one; otherwise a negative value.
+ */
+
+public int composePair(int a, int b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the combining class of c.
+ * The default implementation returns 0
+ * but all standard implementations return the Unicode Canonical_Combining_Class value.
+ * @param c code point
+ * @return c's combining class
+ */
+
+public int getCombiningClass(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tests if the string is normalized.
+ * Internally, in cases where the quickCheck() method would return "maybe"
+ * (which is only possible for the two COMPOSE modes) this method
+ * resolves to "yes" or "no" to provide a definitive result,
+ * at the cost of doing more work in those cases.
+ * @param s input string
+ * @return true if s is normalized
+ */
+
+public abstract boolean isNormalized(java.lang.CharSequence s);
+
+/**
+ * Tests if the string is normalized.
+ * For the two COMPOSE modes, the result could be "maybe" in cases that
+ * would take a little more work to resolve definitively.
+ * Use spanQuickCheckYes() and normalizeSecondAndAppend() for a faster
+ * combination of quick check + normalization, to avoid
+ * re-checking the "yes" prefix.
+ * @param s input string
+ * @return the quick check result
+ */
+
+public abstract android.icu.text.Normalizer.QuickCheckResult quickCheck(java.lang.CharSequence s);
+
+/**
+ * Returns the end of the normalized substring of the input string.
+ * In other words, with <code>end=spanQuickCheckYes(s);</code>
+ * the substring <code>s.subSequence(0, end)</code>
+ * will pass the quick check with a "yes" result.
+ * <p>
+ * The returned end index is usually one or more characters before the
+ * "no" or "maybe" character: The end index is at a normalization boundary.
+ * (See the class documentation for more about normalization boundaries.)
+ * <p>
+ * When the goal is a normalized string and most input strings are expected
+ * to be normalized already, then call this method,
+ * and if it returns a prefix shorter than the input string,
+ * copy that prefix and use normalizeSecondAndAppend() for the remainder.
+ * @param s input string
+ * @return "yes" span end index
+ */
+
+public abstract int spanQuickCheckYes(java.lang.CharSequence s);
+
+/**
+ * Tests if the character always has a normalization boundary before it,
+ * regardless of context.
+ * If true, then the character does not normalization-interact with
+ * preceding characters.
+ * In other words, a string containing this character can be normalized
+ * by processing portions before this character and starting from this
+ * character independently.
+ * This is used for iterative normalization. See the class documentation for details.
+ * @param c character to test
+ * @return true if c has a normalization boundary before it
+ */
+
+public abstract boolean hasBoundaryBefore(int c);
+
+/**
+ * Tests if the character always has a normalization boundary after it,
+ * regardless of context.
+ * If true, then the character does not normalization-interact with
+ * following characters.
+ * In other words, a string containing this character can be normalized
+ * by processing portions up to this character and after this
+ * character independently.
+ * This is used for iterative normalization. See the class documentation for details.
+ * <p>
+ * Note that this operation may be significantly slower than hasBoundaryBefore().
+ * @param c character to test
+ * @return true if c has a normalization boundary after it
+ */
+
+public abstract boolean hasBoundaryAfter(int c);
+
+/**
+ * Tests if the character is normalization-inert.
+ * If true, then the character does not change, nor normalization-interact with
+ * preceding or following characters.
+ * In other words, a string containing this character can be normalized
+ * by processing portions before this character and after this
+ * character independently.
+ * This is used for iterative normalization. See the class documentation for details.
+ * <p>
+ * Note that this operation may be significantly slower than hasBoundaryBefore().
+ * @param c character to test
+ * @return true if c is normalization-inert
+ */
+
+public abstract boolean isInert(int c);
+/**
+ * Constants for normalization modes.
+ * For details about standard Unicode normalization forms
+ * and about the algorithms which are also used with custom mapping tables
+ * see http://www.unicode.org/unicode/reports/tr15/
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Mode {
+/**
+ * Decomposition followed by composition.
+ * Same as standard NFC when using an "nfc" instance.
+ * Same as standard NFKC when using an "nfkc" instance.
+ * For details about standard Unicode normalization forms
+ * see http://www.unicode.org/unicode/reports/tr15/
+ */
+
+COMPOSE,
+/**
+ * Map, and reorder canonically.
+ * Same as standard NFD when using an "nfc" instance.
+ * Same as standard NFKD when using an "nfkc" instance.
+ * For details about standard Unicode normalization forms
+ * see http://www.unicode.org/unicode/reports/tr15/
+ */
+
+DECOMPOSE,
+/**
+ * "Fast C or D" form.
+ * If a string is in this form, then further decomposition <i>without reordering</i>
+ * would yield the same form as DECOMPOSE.
+ * Text in "Fast C or D" form can be processed efficiently with data tables
+ * that are "canonically closed", that is, that provide equivalent data for
+ * equivalent text, without having to be fully normalized.<br>
+ * Not a standard Unicode normalization form.<br>
+ * Not a unique form: Different FCD strings can be canonically equivalent.<br>
+ * For details see http://www.unicode.org/notes/tn5/#FCD
+ */
+
+FCD,
+/**
+ * Compose only contiguously.
+ * Also known as "FCC" or "Fast C Contiguous".
+ * The result will often but not always be in NFC.
+ * The result will conform to FCD which is useful for processing.<br>
+ * Not a standard Unicode normalization form.<br>
+ * For details see http://www.unicode.org/notes/tn5/#FCC
+ */
+
+COMPOSE_CONTIGUOUS;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/NumberFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/NumberFormat.java
new file mode 100644
index 0000000..f0d98dd
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/NumberFormat.java
@@ -0,0 +1,1002 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import android.icu.number.NumberFormatter;
+import java.text.Format;
+import java.math.BigInteger;
+import android.icu.util.CurrencyAmount;
+import java.text.ParseException;
+import java.util.Set;
+import android.icu.util.ULocale.Category;
+import android.icu.util.Currency;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.NumberFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p>
+ * <strong>IMPORTANT:</strong> New users are strongly encouraged to see if
+ * {@code NumberFormatter} fits their use case.  Although not deprecated, this
+ * class, NumberFormat, is only provided for java.text.NumberFormat compatibility.
+ * <hr>
+ *
+ * <code>NumberFormat</code> is the abstract base class for all number
+ * formats. This class provides the interface for formatting and parsing
+ * numbers. <code>NumberFormat</code> also provides methods for determining
+ * which locales have number formats, and what their names are.
+ *
+ * <code>NumberFormat</code> helps you to format and parse numbers for any locale.
+ * Your code can be completely independent of the locale conventions for
+ * decimal points, thousands-separators, or even the particular decimal
+ * digits used, or whether the number format is even decimal.
+ *
+ * <p>
+ * To format a number for the current Locale, use one of the factory
+ * class methods:
+ * <blockquote>
+ * <pre>
+ *  myString = NumberFormat.getInstance().format(myNumber);
+ * </pre>
+ * </blockquote>
+ * If you are formatting multiple numbers, it is
+ * more efficient to get the format and use it multiple times so that
+ * the system doesn't have to fetch the information about the local
+ * language and country conventions multiple times.
+ * <blockquote>
+ * <pre>
+ * NumberFormat nf = NumberFormat.getInstance();
+ * for (int i = 0; i &lt; a.length; ++i) {
+ *     output.println(nf.format(myNumber[i]) + "; ");
+ * }
+ * </pre>
+ * </blockquote>
+ * To format a number for a different Locale, specify it in the
+ * call to <code>getInstance</code>.
+ * <blockquote>
+ * <pre>
+ * NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
+ * </pre>
+ * </blockquote>
+ * You can also use a <code>NumberFormat</code> to parse numbers:
+ * <blockquote>
+ * <pre>
+ * myNumber = nf.parse(myString);
+ * </pre>
+ * </blockquote>
+ * Use <code>getInstance</code> or <code>getNumberInstance</code> to get the
+ * normal number format. Use <code>getIntegerInstance</code> to get an
+ * integer number format. Use <code>getCurrencyInstance</code> to get the
+ * currency number format. And use <code>getPercentInstance</code> to get a
+ * format for displaying percentages. Some factory methods are found within
+ * subclasses of NumberFormat. With this format, a fraction like
+ * 0.53 is displayed as 53%.
+ *
+ * <p>
+ * Starting from ICU 4.2, you can use getInstance() by passing in a 'style'
+ * as parameter to get the correct instance.
+ * For example,
+ * use getInstance(...NUMBERSTYLE) to get the normal number format,
+ * getInstance(...PERCENTSTYLE) to get a format for displaying percentage,
+ * getInstance(...SCIENTIFICSTYLE) to get a format for displaying scientific number,
+ * getInstance(...INTEGERSTYLE) to get an integer number format,
+ * getInstance(...CURRENCYSTYLE) to get the currency number format,
+ * in which the currency is represented by its symbol, for example, "$3.00".
+ * getInstance(...ISOCURRENCYSTYLE)  to get the currency number format,
+ * in which the currency is represented by its ISO code, for example "USD3.00".
+ * getInstance(...PLURALCURRENCYSTYLE) to get the currency number format,
+ * in which the currency is represented by its full name in plural format,
+ * for example, "3.00 US dollars" or "1.00 US dollar".
+ *
+ *
+ * <p>
+ * You can also control the display of numbers with such methods as
+ * <code>setMinimumFractionDigits</code>.
+ * If you want even more control over the format or parsing,
+ * or want to give your users more control,
+ * you can try casting the <code>NumberFormat</code> you get from the factory methods
+ * to a <code>DecimalFormat</code>. This will work for the vast majority
+ * of locales; just remember to put it in a <code>try</code> block in case you
+ * encounter an unusual one.
+ *
+ * <p>
+ * NumberFormat is designed such that some controls
+ * work for formatting and others work for parsing.  The following is
+ * the detailed description for each these control methods,
+ * <p>
+ * setParseIntegerOnly : only affects parsing, e.g.
+ * if true,  "3456.78" -&gt; 3456 (and leaves the parse position just after '6')
+ * if false, "3456.78" -&gt; 3456.78 (and leaves the parse position just after '8')
+ * This is independent of formatting.  If you want to not show a decimal point
+ * where there might be no digits after the decimal point, use
+ * setDecimalSeparatorAlwaysShown on DecimalFormat.
+ * <p>
+ * You can also use forms of the <code>parse</code> and <code>format</code>
+ * methods with <code>ParsePosition</code> and <code>FieldPosition</code> to
+ * allow you to:
+ * <ul>
+ * <li> progressively parse through pieces of a string
+ * <li> align the decimal point and other areas
+ * </ul>
+ * For example, you can align numbers in two ways:
+ * <ol>
+ * <li> If you are using a monospaced font with spacing for alignment,
+ *      you can pass the <code>FieldPosition</code> in your format call, with
+ *      <code>field</code> = <code>INTEGER_FIELD</code>. On output,
+ *      <code>getEndIndex</code> will be set to the offset between the
+ *      last character of the integer and the decimal. Add
+ *      (desiredSpaceCount - getEndIndex) spaces at the front of the string.
+ *
+ * <li> If you are using proportional fonts,
+ *      instead of padding with spaces, measure the width
+ *      of the string in pixels from the start to <code>getEndIndex</code>.
+ *      Then move the pen by
+ *      (desiredPixelWidth - widthToAlignmentPoint) before drawing the text.
+ *      It also works where there is no decimal, but possibly additional
+ *      characters at the end, e.g., with parentheses in negative
+ *      numbers: "(12)" for -12.
+ * </ol>
+ *
+ * <h3>Synchronization</h3>
+ * <p>
+ * Number formats are generally not synchronized. It is recommended to create
+ * separate format instances for each thread. If multiple threads access a format
+ * concurrently, it must be synchronized externally.
+ *
+ * <h4>DecimalFormat</h4>
+ * <p>DecimalFormat is the concrete implementation of NumberFormat, and the
+ * NumberFormat API is essentially an abstraction from DecimalFormat's API.
+ * Refer to DecimalFormat for more information about this API.</p>
+ *
+ * see          DecimalFormat
+ * see          java.text.ChoiceFormat
+ * @author       Mark Davis
+ * @author       Helena Shih
+ * @author       Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class NumberFormat extends android.icu.text.UFormat {
+
+/**
+ * Empty constructor.  Public for API compatibility with historic versions of
+ * {@link java.text.NumberFormat} which had public constructor even though this is
+ * an abstract class.
+ */
+
+public NumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a number and appends the resulting text to the given string buffer.
+ * <strong>[icu] Note:</strong> recognizes <code>BigInteger</code>
+ * and <code>BigDecimal</code> objects.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public java.lang.StringBuffer format(java.lang.Object number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from a string to produce a number.
+ * @param source the String to parse
+ * @param parsePosition the position at which to start the parse
+ * @return the parsed number, or null
+ * @see java.text.NumberFormat#parseObject(String, ParsePosition)
+ */
+
+public final java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object)
+ */
+
+public final java.lang.String format(double number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object)
+ */
+
+public final java.lang.String format(long number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Convenience method to format a BigInteger.
+ */
+
+public final java.lang.String format(java.math.BigInteger number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method to format a BigDecimal.
+ */
+
+public final java.lang.String format(java.math.BigDecimal number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Convenience method to format an ICU BigDecimal.
+ */
+
+public final java.lang.String format(android.icu.math.BigDecimal number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Convenience method to format a CurrencyAmount.
+ */
+
+public final java.lang.String format(android.icu.util.CurrencyAmount currAmt) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(double number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(long number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats a BigInteger. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(java.math.BigInteger number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats a BigDecimal. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(java.math.BigDecimal number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats an ICU BigDecimal. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public abstract java.lang.StringBuffer format(android.icu.math.BigDecimal number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos);
+
+/**
+ * <strong>[icu]</strong> Formats a CurrencyAmount. Specialization of format.
+ * @see java.text.Format#format(Object, StringBuffer, FieldPosition)
+ */
+
+public java.lang.StringBuffer format(android.icu.util.CurrencyAmount currAmt, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Long if possible (e.g., within the range [Long.MIN_VALUE,
+ * Long.MAX_VALUE] and with no decimals); otherwise, returns another type,
+ * such as a BigDecimal, BigInteger, or Double. The return type is not
+ * guaranteed other than for the Long case.
+ *
+ * <p>If IntegerOnly is set, will stop at a decimal
+ * point (or equivalent; e.g., for rational numbers "1 2/3", will stop
+ * after the 1).
+ *
+ * <p>Does not throw an exception; if no object can be parsed, index is
+ * unchanged!
+ *
+ * <p>For more detail on parsing, see the "Parsing" header in the class
+ * documentation of {@link android.icu.text.DecimalFormat DecimalFormat}.
+ *
+ * @see #isParseIntegerOnly
+ * @see android.icu.text.DecimalFormat#setParseBigDecimal
+ * @see java.text.Format#parseObject(String, ParsePosition)
+ */
+
+public abstract java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition);
+
+/**
+ * Parses text from the beginning of the given string to produce a number.
+ * The method might not use the entire text of the given string.
+ *
+ * @param text A String whose beginning should be parsed.
+ * @return A Number parsed from the string.
+ * @throws java.text.ParseException if the beginning of the specified string
+ * cannot be parsed.
+ * @see #format
+ */
+
+public java.lang.Number parse(java.lang.String text) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses text from the given string as a CurrencyAmount.  Unlike
+ * the parse() method, this method will attempt to parse a generic
+ * currency name, searching for a match of this object's locale's
+ * currency display names, or for a 3-letter ISO currency code.
+ * This method will fail if this format is not a currency format,
+ * that is, if it does not contain the currency pattern symbol
+ * (U+00A4) in its prefix or suffix.
+ *
+ * @param text the text to parse
+ * @param pos input-output position; on input, the position within
+ * text to match; must have 0 &lt;= pos.getIndex() &lt; text.length();
+ * on output, the position after the last matched character. If
+ * the parse fails, the position in unchanged upon output.
+ * @return a CurrencyAmount, or null upon failure
+ */
+
+public android.icu.util.CurrencyAmount parseCurrency(java.lang.CharSequence text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this format will parse numbers as integers only.
+ * For example in the English locale, with ParseIntegerOnly true, the
+ * string "1234." would be parsed as the integer value 1234 and parsing
+ * would stop at the "." character.  The decimal separator accepted
+ * by the parse operation is locale-dependent and determined by the
+ * subclass.
+ *
+ * @return true if this will parse integers only
+ */
+
+public boolean isParseIntegerOnly() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether to ignore the fraction part of a number when parsing
+ * (defaults to false). If a string contains a decimal point, parsing will stop before the decimal
+ * point. Note that determining whether a character is a decimal point depends on the locale.
+ *
+ * <p>For example, in <em>en-US</em>, parsing the string "123.45" will return the number 123 and
+ * parse position 3.
+ *
+ * @param value true if this should parse integers only
+ * @see #isParseIntegerOnly
+ */
+
+public void setParseIntegerOnly(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets whether strict parsing is in effect.  When this is true, the string
+ * is required to be a stronger match to the pattern than when lenient parsing is in
+ * effect.  More specifically, the following conditions cause a parse failure relative
+ * to lenient mode (examples use the pattern "#,##0.#"):<ul>
+ * <li>The presence and position of special symbols, including currency, must match the
+ * pattern.<br>
+ * '+123' fails (there is no plus sign in the pattern)</li>
+ * <li>Leading or doubled grouping separators<br>
+ * ',123' and '1,,234" fail</li>
+ * <li>Groups of incorrect length when grouping is used<br>
+ * '1,23' and '1234,567' fail, but '1234' passes</li>
+ * <li>Grouping separators used in numbers followed by exponents<br>
+ * '1,234E5' fails, but '1234E5' and '1,234E' pass ('E' is not an exponent when
+ * not followed by a number)</li>
+ * </ul>
+ * When strict parsing is off,  all grouping separators are ignored.
+ * This is the default behavior.
+ * @param value True to enable strict parsing.  Default is false.
+ * @see #isParseStrict
+ */
+
+public void setParseStrict(boolean value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether strict parsing is in effect.
+ * @return true if strict parsing is in effect
+ * @see #setParseStrict
+ */
+
+public boolean isParseStrict() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set a particular DisplayContext value in the formatter,
+ * such as CAPITALIZATION_FOR_STANDALONE.
+ *
+ * @param context The DisplayContext value to set.
+ */
+
+public void setContext(android.icu.text.DisplayContext context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Get the formatter's DisplayContext value for the specified DisplayContext.Type,
+ * such as CAPITALIZATION.
+ *
+ * @param type the DisplayContext.Type whose value to return
+ * @return the current DisplayContext setting for the specified type
+ */
+
+public android.icu.text.DisplayContext getContext(android.icu.text.DisplayContext.Type type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default number format for the current default <code>FORMAT</code> locale.
+ * The default format is one of the styles provided by the other
+ * factory methods: getNumberInstance, getIntegerInstance,
+ * getCurrencyInstance or getPercentInstance.
+ * Exactly which one is locale-dependent.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default number format for the specified locale.
+ * The default format is one of the styles provided by the other
+ * factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
+ * Exactly which one is locale-dependent.
+ */
+
+public static android.icu.text.NumberFormat getInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the default number format for the specified locale.
+ * The default format is one of the styles provided by the other
+ * factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
+ * Exactly which one is locale-dependent.
+ */
+
+public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a specific style number format for default <code>FORMAT</code> locale.
+ * @param style  number format style
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getInstance(int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a specific style number format for a specific locale.
+ * @param inLocale  the specific locale.
+ * @param style     number format style
+ */
+
+public static android.icu.text.NumberFormat getInstance(java.util.Locale inLocale, int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a general-purpose number format for the current default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getNumberInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a general-purpose number format for the specified locale.
+ */
+
+public static android.icu.text.NumberFormat getNumberInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a general-purpose number format for the specified locale.
+ */
+
+public static android.icu.text.NumberFormat getNumberInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an integer number format for the current default <code>FORMAT</code> locale. The
+ * returned number format is configured to round floating point numbers
+ * to the nearest integer using IEEE half-even rounding (see {@link
+ * android.icu.math.BigDecimal#ROUND_HALF_EVEN ROUND_HALF_EVEN}) for formatting,
+ * and to parse only the integer part of an input string (see {@link
+ * #isParseIntegerOnly isParseIntegerOnly}).
+ *
+ * @return a number format for integer values
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getIntegerInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an integer number format for the specified locale. The
+ * returned number format is configured to round floating point numbers
+ * to the nearest integer using IEEE half-even rounding (see {@link
+ * android.icu.math.BigDecimal#ROUND_HALF_EVEN ROUND_HALF_EVEN}) for formatting,
+ * and to parse only the integer part of an input string (see {@link
+ * #isParseIntegerOnly isParseIntegerOnly}).
+ *
+ * @param inLocale the locale for which a number format is needed
+ * @return a number format for integer values
+ */
+
+public static android.icu.text.NumberFormat getIntegerInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an integer number format for the specified locale. The
+ * returned number format is configured to round floating point numbers
+ * to the nearest integer using IEEE half-even rounding (see {@link
+ * android.icu.math.BigDecimal#ROUND_HALF_EVEN ROUND_HALF_EVEN}) for formatting,
+ * and to parse only the integer part of an input string (see {@link
+ * #isParseIntegerOnly isParseIntegerOnly}).
+ *
+ * @param inLocale the locale for which a number format is needed
+ * @return a number format for integer values
+ */
+
+public static android.icu.text.NumberFormat getIntegerInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency format for the current default <code>FORMAT</code> locale.
+ * @return a number format for currency
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getCurrencyInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency format for the specified locale.
+ * @return a number format for currency
+ */
+
+public static android.icu.text.NumberFormat getCurrencyInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a currency format for the specified locale.
+ * @return a number format for currency
+ */
+
+public static android.icu.text.NumberFormat getCurrencyInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a percentage format for the current default <code>FORMAT</code> locale.
+ * @return a number format for percents
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getPercentInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a percentage format for the specified locale.
+ * @return a number format for percents
+ */
+
+public static android.icu.text.NumberFormat getPercentInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a percentage format for the specified locale.
+ * @return a number format for percents
+ */
+
+public static android.icu.text.NumberFormat getPercentInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a scientific format for the current default <code>FORMAT</code> locale.
+ * @return a scientific number format
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static final android.icu.text.NumberFormat getScientificInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a scientific format for the specified locale.
+ * @return a scientific number format
+ */
+
+public static android.icu.text.NumberFormat getScientificInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a scientific format for the specified locale.
+ * @return a scientific number format
+ */
+
+public static android.icu.text.NumberFormat getScientificInstance(android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the list of Locales for which NumberFormats are available.
+ * @return the available locales
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ * Two NumberFormats are equal they are of the same class
+ * and the user-specified values for settings
+ * (groupingUsed, parseIntegerOnly, maximumIntegerDigits, etc.)
+ * are equal.
+ * @param obj the object to compare against
+ * @return true if the object is equal to this.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if grouping is used in this format. For example, in the
+ * en_US locale, with grouping on, the number 1234567 will be formatted
+ * as "1,234,567". The grouping separator as well as the size of each group
+ * is locale-dependent and is determined by subclasses of NumberFormat.
+ * Grouping affects both parsing and formatting.
+ * @return true if grouping is used
+ * @see #setGroupingUsed
+ */
+
+public boolean isGroupingUsed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether or not grouping will be used in this format.  Grouping
+ * affects both parsing and formatting.
+ * @see #isGroupingUsed
+ * @param newValue true to use grouping.
+ */
+
+public void setGroupingUsed(boolean newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum number of digits allowed in the integer portion of a
+ * number.  The default value is 40, which subclasses can override.
+ *
+ * When formatting, if the number of digits exceeds this value, the highest-
+ * significance digits are truncated until the limit is reached, in accordance
+ * with UTS#35.
+ *
+ * This setting has no effect on parsing.
+ *
+ * @return the maximum number of integer digits
+ * @see #setMaximumIntegerDigits
+ */
+
+public int getMaximumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the maximum number of digits allowed in the integer portion of a
+ * number. This must be &gt;= minimumIntegerDigits.  If the
+ * new value for maximumIntegerDigits is less than the current value
+ * of minimumIntegerDigits, then minimumIntegerDigits will also be set to
+ * the new value.
+ * @param newValue the maximum number of integer digits to be shown; if
+ * less than zero, then zero is used.  Subclasses might enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMaximumIntegerDigits
+ */
+
+public void setMaximumIntegerDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum number of digits allowed in the integer portion of a
+ * number.  The default value is 1, which subclasses can override.
+ * When formatting, if this value is not reached, numbers are padded on the
+ * left with the locale-specific '0' character to ensure at least this
+ * number of integer digits.  When parsing, this has no effect.
+ * @return the minimum number of integer digits
+ * @see #setMinimumIntegerDigits
+ */
+
+public int getMinimumIntegerDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the minimum number of digits allowed in the integer portion of a
+ * number.  This must be &lt;= maximumIntegerDigits.  If the
+ * new value for minimumIntegerDigits is more than the current value
+ * of maximumIntegerDigits, then maximumIntegerDigits will also be set to
+ * the new value.
+ * @param newValue the minimum number of integer digits to be shown; if
+ * less than zero, then zero is used. Subclasses might enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMinimumIntegerDigits
+ */
+
+public void setMinimumIntegerDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum number of digits allowed in the fraction
+ * portion of a number.  The default value is 3, which subclasses
+ * can override.  When formatting, the exact behavior when this
+ * value is exceeded is subclass-specific.  When parsing, this has
+ * no effect.
+ * @return the maximum number of fraction digits
+ * @see #setMaximumFractionDigits
+ */
+
+public int getMaximumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the maximum number of digits allowed in the fraction portion of a
+ * number. This must be &gt;= minimumFractionDigits.  If the
+ * new value for maximumFractionDigits is less than the current value
+ * of minimumFractionDigits, then minimumFractionDigits will also be set to
+ * the new value.
+ * @param newValue the maximum number of fraction digits to be shown; if
+ * less than zero, then zero is used. The concrete subclass may enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMaximumFractionDigits
+ */
+
+public void setMaximumFractionDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum number of digits allowed in the fraction portion of a
+ * number.  The default value is 0, which subclasses can override.
+ * When formatting, if this value is not reached, numbers are padded on
+ * the right with the locale-specific '0' character to ensure at least
+ * this number of fraction digits.  When parsing, this has no effect.
+ * @return the minimum number of fraction digits
+ * @see #setMinimumFractionDigits
+ */
+
+public int getMinimumFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the minimum number of digits allowed in the fraction portion of a
+ * number.  This must be &lt;= maximumFractionDigits.  If the
+ * new value for minimumFractionDigits exceeds the current value
+ * of maximumFractionDigits, then maximumFractionDigits will also be set to
+ * the new value.
+ * @param newValue the minimum number of fraction digits to be shown; if
+ * less than zero, then zero is used.  Subclasses might enforce an
+ * upper limit to this value appropriate to the numeric type being formatted.
+ * @see #getMinimumFractionDigits
+ */
+
+public void setMinimumFractionDigits(int newValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the <tt>Currency</tt> object used to display currency
+ * amounts.  This takes effect immediately, if this format is a
+ * currency format.  If this format is not a currency format, then
+ * the currency object is used if and when this object becomes a
+ * currency format.
+ * @param theCurrency new currency object to use.  May be null for
+ * some subclasses.
+ */
+
+public void setCurrency(android.icu.util.Currency theCurrency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the <tt>Currency</tt> object used to display currency
+ * amounts.  This may be null.
+ */
+
+public android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding mode used in this NumberFormat.  The default implementation of
+ * tis method in NumberFormat always throws <code>UnsupportedOperationException</code>.
+ * @return A rounding mode, between <code>BigDecimal.ROUND_UP</code>
+ * and <code>BigDecimal.ROUND_UNNECESSARY</code>.
+ * @see #setRoundingMode(int)
+ */
+
+public int getRoundingMode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the rounding mode used in this NumberFormat.  The default implementation of
+ * tis method in NumberFormat always throws <code>UnsupportedOperationException</code>.
+ * @param roundingMode A rounding mode, between
+ * <code>BigDecimal.ROUND_UP</code> and
+ * <code>BigDecimal.ROUND_UNNECESSARY</code>.
+ * @see #getRoundingMode()
+ */
+
+public void setRoundingMode(int roundingMode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a specific style number format for a specific locale.
+ * @param desiredLocale  the specific locale.
+ * @param choice         number format style
+ * @throws java.lang.IllegalArgumentException  if choice is not one of
+ *                                   NUMBERSTYLE, CURRENCYSTYLE,
+ *                                   PERCENTSTYLE, SCIENTIFICSTYLE,
+ *                                   INTEGERSTYLE, ISOCURRENCYSTYLE,
+ *                                   PLURALCURRENCYSTYLE, ACCOUNTINGCURRENCYSTYLE.
+ *                                   CASHCURRENCYSTYLE, STANDARDCURRENCYSTYLE.
+ */
+
+public static android.icu.text.NumberFormat getInstance(android.icu.util.ULocale desiredLocale, int choice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for the provided locale and choice.
+ * @param forLocale the locale of the data.
+ * @param choice the pattern format.
+ * @return the pattern
+ */
+
+protected static java.lang.String getPattern(android.icu.util.ULocale forLocale, int choice) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency symbol
+ * to represent currency for accounting, for example: "($3.00), instead of
+ * "-$3.00" ({@link #CURRENCYSTYLE}).
+ * Overrides any style specified using -cf- key in locale.
+ */
+
+public static final int ACCOUNTINGCURRENCYSTYLE = 7; // 0x7
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency cash style of format which uses currency
+ * ISO code to represent currency, for example: "NT$3" instead of "NT$3.23".
+ */
+
+public static final int CASHCURRENCYSTYLE = 8; // 0x8
+
+/**
+ * <strong>[icu]</strong> Constant to specify general currency style of format. Defaults to
+ * STANDARDCURRENCYSTYLE, using currency symbol, for example "$3.00", with
+ * non-accounting style for negative values (e.g. minus sign).
+ * The specific style may be specified using the -cf- locale key.
+ */
+
+public static final int CURRENCYSTYLE = 1; // 0x1
+
+/**
+ * Field constant used to construct a FieldPosition object. Signifies that
+ * the position of the fraction part of a formatted number should be returned.
+ * @see java.text.FieldPosition
+ */
+
+public static final int FRACTION_FIELD = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Constant to specify a integer number style format.
+ */
+
+public static final int INTEGERSTYLE = 4; // 0x4
+
+/**
+ * Field constant used to construct a FieldPosition object. Signifies that
+ * the position of the integer part of a formatted number should be returned.
+ * @see java.text.FieldPosition
+ */
+
+public static final int INTEGER_FIELD = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency
+ * ISO code to represent currency, for example: "USD3.00".
+ */
+
+public static final int ISOCURRENCYSTYLE = 5; // 0x5
+
+/**
+ * <strong>[icu]</strong> Constant to specify normal number style of format.
+ */
+
+public static final int NUMBERSTYLE = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Constant to specify a style of format to display percent.
+ */
+
+public static final int PERCENTSTYLE = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency
+ * long name with plural format to represent currency, for example,
+ * "3.00 US Dollars".
+ */
+
+public static final int PLURALCURRENCYSTYLE = 6; // 0x6
+
+/**
+ * <strong>[icu]</strong> Constant to specify a style of format to display scientific number.
+ */
+
+public static final int SCIENTIFICSTYLE = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> Constant to specify currency style of format which uses currency symbol
+ * to represent currency, for example "$3.00", using non-accounting style for
+ * negative values (e.g. minus sign).
+ * Overrides any style specified using -cf- key in locale.
+ */
+
+public static final int STANDARDCURRENCYSTYLE = 9; // 0x9
+/**
+ * The instances of this inner class are used as attribute keys and values
+ * in AttributedCharacterIterator that
+ * NumberFormat.formatToCharacterIterator() method returns.
+ * <p>
+ * There is no public constructor to this class, the only instances are the
+ * constants defined here.
+ * <p>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Field extends java.text.Format.Field {
+
+/**
+ * Constructs a new instance of NumberFormat.Field with the given field
+ * name.
+ */
+
+protected Field(java.lang.String fieldName) { super(null); throw new RuntimeException("Stub!"); }
+
+/**
+ * serizalization method resolve instances to the constant
+ * NumberFormat.Field values
+ */
+
+protected java.lang.Object readResolve() throws java.io.InvalidObjectException { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field COMPACT;
+static { COMPACT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field CURRENCY;
+static { CURRENCY = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field DECIMAL_SEPARATOR;
+static { DECIMAL_SEPARATOR = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field EXPONENT;
+static { EXPONENT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field EXPONENT_SIGN;
+static { EXPONENT_SIGN = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field EXPONENT_SYMBOL;
+static { EXPONENT_SYMBOL = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field FRACTION;
+static { FRACTION = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field GROUPING_SEPARATOR;
+static { GROUPING_SEPARATOR = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field INTEGER;
+static { INTEGER = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field MEASURE_UNIT;
+static { MEASURE_UNIT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field PERCENT;
+static { PERCENT = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field PERMILLE;
+static { PERMILLE = null; }
+
+/**
+ */
+
+public static final android.icu.text.NumberFormat.Field SIGN;
+static { SIGN = null; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/NumberingSystem.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/NumberingSystem.java
new file mode 100644
index 0000000..f80482c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/NumberingSystem.java
@@ -0,0 +1,143 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>NumberingSystem</code> is the base class for all number
+ * systems. This class provides the interface for setting different numbering
+ * system types, whether it be a simple alternate digit system such as
+ * Thai digits or Devanagari digits, or an algorithmic numbering system such
+ * as Hebrew numbering or Chinese numbering.
+ *
+ * @author       John Emmons
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class NumberingSystem {
+
+/**
+ * Default constructor.  Returns a numbering system that uses the Latin-script decimal
+ * digits 0 through 9.  This should be equivalent to NumberingSystem.LATIN.
+ */
+
+public NumberingSystem() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Factory method for creating a numbering system.
+ * @param radix_in The radix for this numbering system.  ICU currently
+ * supports only numbering systems whose radix is 10.
+ * @param isAlgorithmic_in Specifies whether the numbering system is algorithmic
+ * (true) or numeric (false).
+ * @param desc_in String used to describe the characteristics of the numbering
+ * system.  For numeric systems, this string contains the digits used by the
+ * numbering system, in order, starting from zero.  For algorithmic numbering
+ * systems, the string contains the name of the RBNF ruleset in the locale's
+ * NumberingSystemRules section that will be used to format numbers using
+ * this numbering system.
+ */
+
+public static android.icu.text.NumberingSystem getInstance(int radix_in, boolean isAlgorithmic_in, java.lang.String desc_in) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default numbering system for the specified locale.
+ */
+
+public static android.icu.text.NumberingSystem getInstance(java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default numbering system for the specified ULocale.
+ */
+
+public static android.icu.text.NumberingSystem getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default numbering system for the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.text.NumberingSystem getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a numbering system from one of the predefined numbering systems
+ * known to ICU.  Numbering system names are based on the numbering systems
+ * defined in CLDR.  To get a list of available numbering systems, use the
+ * getAvailableNames method.
+ * @param name The name of the desired numbering system.  Numbering system
+ * names often correspond with the name of the script they are associated
+ * with.  For example, "thai" for Thai digits, "hebr" for Hebrew numerals.
+ * @return The NumberingSystem instance, or null if not available.
+ */
+
+public static android.icu.text.NumberingSystem getInstanceByName(java.lang.String name) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string array containing a list of the names of numbering systems
+ * currently known to ICU.
+ *
+ * @return An array of strings in alphabetical (invariant) order.
+ */
+
+public static java.lang.String[] getAvailableNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method to determine if a given digit string is valid for use as a
+ * descriptor of a numeric ( non-algorithmic ) numbering system.  In order for
+ * a digit string to be valid, it must contain exactly ten Unicode code points.
+ */
+
+public static boolean isValidDigitString(java.lang.String str) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the radix of the current numbering system.
+ */
+
+public int getRadix() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the description string of the current numbering system.
+ * The description string describes the characteristics of the numbering
+ * system.  For numeric systems, this string contains the digits used by the
+ * numbering system, in order, starting from zero.  For algorithmic numbering
+ * systems, the string contains the name of the RBNF ruleset in the locale's
+ * NumberingSystemRules section that will be used to format numbers using
+ * this numbering system.
+ */
+
+public java.lang.String getDescription() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the string representing the name of the numbering system.
+ */
+
+public java.lang.String getName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numbering system's algorithmic status.  If true,
+ * the numbering system is algorithmic and uses an RBNF formatter to
+ * format numerals.  If false, the numbering system is numeric and
+ * uses a fixed set of digits.
+ */
+
+public boolean isAlgorithmic() { throw new RuntimeException("Stub!"); }
+
+/**
+ * For convenience, an instance representing the <em>latn</em> numbering system, which
+ * corresponds to digits in the ASCII range '0' through '9'.
+ */
+
+public static final android.icu.text.NumberingSystem LATIN;
+static { LATIN = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/PluralFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/PluralFormat.java
new file mode 100644
index 0000000..78b198f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/PluralFormat.java
@@ -0,0 +1,384 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2007-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+import java.util.Locale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>PluralFormat</code> supports the creation of internationalized
+ * messages with plural inflection. It is based on <i>plural
+ * selection</i>, i.e. the caller specifies messages for each
+ * plural case that can appear in the user's language and the
+ * <code>PluralFormat</code> selects the appropriate message based on
+ * the number.
+ *
+ * <h3>The Problem of Plural Forms in Internationalized Messages</h3>
+ * <p>
+ * Different languages have different ways to inflect
+ * plurals. Creating internationalized messages that include plural
+ * forms is only feasible when the framework is able to handle plural
+ * forms of <i>all</i> languages correctly. <code>ChoiceFormat</code>
+ * doesn't handle this well, because it attaches a number interval to
+ * each message and selects the message whose interval contains a
+ * given number. This can only handle a finite number of
+ * intervals. But in some languages, like Polish, one plural case
+ * applies to infinitely many intervals (e.g., the paucal case applies to
+ * numbers ending with 2, 3, or 4 except those ending with 12, 13, or
+ * 14). Thus <code>ChoiceFormat</code> is not adequate.
+ * <p>
+ * <code>PluralFormat</code> deals with this by breaking the problem
+ * into two parts:
+ * <ul>
+ * <li>It uses <code>PluralRules</code> that can define more complex
+ *     conditions for a plural case than just a single interval. These plural
+ *     rules define both what plural cases exist in a language, and to
+ *     which numbers these cases apply.
+ * <li>It provides predefined plural rules for many languages. Thus, the programmer
+ *     need not worry about the plural cases of a language and
+ *     does not have to define the plural cases; they can simply
+ *     use the predefined keywords. The whole plural formatting of messages can
+ *     be done using localized patterns from resource bundles. For predefined plural
+ *     rules, see the CLDR <i>Language Plural Rules</i> page at
+ *    http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ * </ul>
+ *
+ * <h4>Usage of <code>PluralFormat</code></h4>
+ * <p>Note: Typically, plural formatting is done via <code>MessageFormat</code>
+ * with a <code>plural</code> argument type,
+ * rather than using a stand-alone <code>PluralFormat</code>.
+ * <p>
+ * This discussion assumes that you use <code>PluralFormat</code> with
+ * a predefined set of plural rules. You can create one using one of
+ * the constructors that takes a <code>ULocale</code> object. To
+ * specify the message pattern, you can either pass it to the
+ * constructor or set it explicitly using the
+ * <code>applyPattern()</code> method. The <code>format()</code>
+ * method takes a number object and selects the message of the
+ * matching plural case. This message will be returned.
+ *
+ * <h5>Patterns and Their Interpretation</h5>
+ * <p>
+ * The pattern text defines the message output for each plural case of the
+ * specified locale. Syntax:
+ * <blockquote><pre>
+ * pluralStyle = [offsetValue] (selector '{' message '}')+
+ * offsetValue = "offset:" number
+ * selector = explicitValue | keyword
+ * explicitValue = '=' number  // adjacent, no white space in between
+ * keyword = [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
+ * message: see {@link android.icu.text.MessageFormat MessageFormat}
+ * </pre></blockquote>
+ * Pattern_White_Space between syntax elements is ignored, except
+ * between the {curly braces} and their sub-message,
+ * and between the '=' and the number of an explicitValue.
+ * <p>
+ * There are 6 predefined case keywords in CLDR/ICU - 'zero', 'one', 'two', 'few', 'many' and
+ * 'other'. You always have to define a message text for the default plural case
+ * "<code>other</code>" which is contained in every rule set.
+ * If you do not specify a message text for a particular plural case, the
+ * message text of the plural case "<code>other</code>" gets assigned to this
+ * plural case.
+ * <p>
+ * When formatting, the input number is first matched against the explicitValue clauses.
+ * If there is no exact-number match, then a keyword is selected by calling
+ * the <code>PluralRules</code> with the input number <em>minus the offset</em>.
+ * (The offset defaults to 0 if it is omitted from the pattern string.)
+ * If there is no clause with that keyword, then the "other" clauses is returned.
+ * <p>
+ * An unquoted pound sign (<code>#</code>) in the selected sub-message
+ * itself (i.e., outside of arguments nested in the sub-message)
+ * is replaced by the input number minus the offset.
+ * The number-minus-offset value is formatted using a
+ * <code>NumberFormat</code> for the <code>PluralFormat</code>'s locale. If you
+ * need special number formatting, you have to use a <code>MessageFormat</code>
+ * and explicitly specify a <code>NumberFormat</code> argument.
+ * <strong>Note:</strong> That argument is formatting without subtracting the offset!
+ * If you need a custom format and have a non-zero offset, then you need to pass the
+ * number-minus-offset value as a separate parameter.
+ *
+ * <p>For a usage example, see the {@link android.icu.text.MessageFormat MessageFormat} class documentation.
+ *
+ * <h4>Defining Custom Plural Rules</h4>
+ * <p>If you need to use <code>PluralFormat</code> with custom rules, you can
+ * create a <code>PluralRules</code> object and pass it to
+ * <code>PluralFormat</code>'s constructor. If you also specify a locale in this
+ * constructor, this locale will be used to format the number in the message
+ * texts.
+ * <p>
+ * For more information about <code>PluralRules</code>, see
+ * {@link android.icu.text.PluralRules PluralRules}.
+ *
+ * @author tschumann (Tim Schumann)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class PluralFormat extends android.icu.text.UFormat {
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for the default <code>FORMAT</code> locale.
+ * This locale will be used to get the set of plural rules and for standard
+ * number formatting.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given locale.
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given
+ * {@link java.util.Locale}.
+ * @param locale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ */
+
+public PluralFormat(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules.
+ * The standard number formatting will be done using the default <code>FORMAT</code> locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat(android.icu.text.PluralRules rules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules.
+ * The standard number formatting will be done using the given locale.
+ * @param ulocale the default number formatting will be done using this
+ *        locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules rules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules.
+ * The standard number formatting will be done using the given locale.
+ * @param locale the default number formatting will be done using this
+ *        locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ */
+
+public PluralFormat(java.util.Locale locale, android.icu.text.PluralRules rules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new <code>PluralFormat</code> for the plural type.
+ * The standard number formatting will be done using the given locale.
+ * @param ulocale the default number formatting will be done using this
+ *        locale.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new <code>PluralFormat</code> for the plural type.
+ * The standard number formatting will be done using the given {@link java.util.Locale}.
+ * @param locale the default number formatting will be done using this
+ *        locale.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ */
+
+public PluralFormat(java.util.Locale locale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given pattern string.
+ * The default <code>FORMAT</code> locale will be used to get the set of plural rules and for
+ * standard number formatting.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given pattern string and
+ * locale.
+ * The locale will be used to get the set of plural rules and for
+ * standard number formatting.
+ * <p>Example code:{@sample external/icu/android_icu4j/src/samples/java/android/icu/samples/text/pluralformat/PluralFormatSample.java PluralFormatExample}
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules and a
+ * pattern.
+ * The standard number formatting will be done using the default <code>FORMAT</code> locale.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public PluralFormat(android.icu.text.PluralRules rules, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new cardinal-number <code>PluralFormat</code> for a given set of rules, a
+ * pattern and a locale.
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ * @param rules defines the behavior of the <code>PluralFormat</code>
+ *        object.
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules rules, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a new <code>PluralFormat</code> for a plural type, a
+ * pattern and a locale.
+ * @param ulocale the <code>PluralFormat</code> will be configured with
+ *        rules for this locale. This locale will also be used for standard
+ *        number formatting.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ * @param  pattern the pattern for this <code>PluralFormat</code>.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public PluralFormat(android.icu.util.ULocale ulocale, android.icu.text.PluralRules.PluralType type, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the pattern used by this plural format.
+ * The method parses the pattern and creates a map of format strings
+ * for the plural rules.
+ * Patterns and their interpretation are specified in the class description.
+ *
+ * @param pattern the pattern for this plural format.
+ * @throws java.lang.IllegalArgumentException if the pattern is invalid.
+ */
+
+public void applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for this PluralFormat.
+ *
+ * @return the pattern string
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a plural message for a given number.
+ *
+ * @param number a number for which the plural message should be formatted.
+ *        If no pattern has been applied to this
+ *        <code>PluralFormat</code> object yet, the formatted number will
+ *        be returned.
+ * @return the string containing the formatted plural message.
+ */
+
+public final java.lang.String format(double number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a plural message for a given number and appends the formatted
+ * message to the given <code>StringBuffer</code>.
+ * @param number a number object (instance of <code>Number</code> for which
+ *        the plural message should be formatted. If no pattern has been
+ *        applied to this <code>PluralFormat</code> object yet, the
+ *        formatted number will be returned.
+ *        Note: If this object is not an instance of <code>Number</code>,
+ *              the <code>toAppendTo</code> will not be modified.
+ * @param toAppendTo the formatted message will be appended to this
+ *        <code>StringBuffer</code>.
+ * @param pos will be ignored by this method.
+ * @return the string buffer passed in as toAppendTo, with formatted text
+ *         appended.
+ * @throws java.lang.IllegalArgumentException if number is not an instance of Number
+ */
+
+public java.lang.StringBuffer format(java.lang.Object number, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method is not yet supported by <code>PluralFormat</code>.
+ * @param text the string to be parsed.
+ * @param parsePosition defines the position where parsing is to begin,
+ * and upon return, the position where parsing left off.  If the position
+ * has not changed upon return, then parsing failed.
+ * @return nothing because this method is not yet implemented.
+ * @throws java.lang.UnsupportedOperationException will always be thrown by this method.
+ */
+
+public java.lang.Number parse(java.lang.String text, java.text.ParsePosition parsePosition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method is not yet supported by <code>PluralFormat</code>.
+ * @param source the string to be parsed.
+ * @param pos defines the position where parsing is to begin,
+ * and upon return, the position where parsing left off.  If the position
+ * has not changed upon return, then parsing failed.
+ * @return nothing because this method is not yet implemented.
+ * @throws java.lang.UnsupportedOperationException will always be thrown by this method.
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the number format used by this formatter.  You only need to
+ * call this if you want a different number format than the default
+ * formatter for the locale.
+ * @param format the number format to use.
+ */
+
+public void setNumberFormat(android.icu.text.NumberFormat format) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this equals the provided PluralFormat.
+ * @param rhs the PluralFormat to compare against
+ * @return true if this equals rhs
+ */
+
+public boolean equals(android.icu.text.PluralFormat rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/PluralRules.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/PluralRules.java
new file mode 100644
index 0000000..f16a5ff
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/PluralRules.java
@@ -0,0 +1,421 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2007-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import java.util.Locale;
+import android.icu.number.FormattedNumber;
+import android.icu.number.NumberFormatter;
+
+/**
+ * <p>
+ * Defines rules for mapping non-negative numeric values onto a small set of keywords.
+ * </p>
+ * <p>
+ * Rules are constructed from a text description, consisting of a series of keywords and conditions. The {@link #select}
+ * method examines each condition in order and returns the keyword for the first condition that matches the number. If
+ * none match, {@link #KEYWORD_OTHER} is returned.
+ * </p>
+ * <p>
+ * A PluralRules object is immutable. It contains caches for sample values, but those are synchronized.
+ * <p>
+ * PluralRules is Serializable so that it can be used in formatters, which are serializable.
+ * </p>
+ * <p>
+ * For more information, details, and tips for writing rules, see the <a
+ * href="http://www.unicode.org/draft/reports/tr35/tr35.html#Language_Plural_Rules">LDML spec, C.11 Language Plural
+ * Rules</a>
+ * </p>
+ * <p>
+ * Examples:
+ * </p>
+ *
+ * <pre>
+ * &quot;one: n is 1; few: n in 2..4&quot;
+ * </pre>
+ * <p>
+ * This defines two rules, for 'one' and 'few'. The condition for 'one' is "n is 1" which means that the number must be
+ * equal to 1 for this condition to pass. The condition for 'few' is "n in 2..4" which means that the number must be
+ * between 2 and 4 inclusive - and be an integer - for this condition to pass. All other numbers are assigned the
+ * keyword "other" by the default rule.
+ * </p>
+ *
+ * <pre>
+ * &quot;zero: n is 0; one: n is 1; zero: n mod 100 in 1..19&quot;
+ * </pre>
+ * <p>
+ * This illustrates that the same keyword can be defined multiple times. Each rule is examined in order, and the first
+ * keyword whose condition passes is the one returned. Also notes that a modulus is applied to n in the last rule. Thus
+ * its condition holds for 119, 219, 319...
+ * </p>
+ *
+ * <pre>
+ * &quot;one: n is 1; few: n mod 10 in 2..4 and n mod 100 not in 12..14&quot;
+ * </pre>
+ * <p>
+ * This illustrates conjunction and negation. The condition for 'few' has two parts, both of which must be met:
+ * "n mod 10 in 2..4" and "n mod 100 not in 12..14". The first part applies a modulus to n before the test as in the
+ * previous example. The second part applies a different modulus and also uses negation, thus it matches all numbers
+ * _not_ in 12, 13, 14, 112, 113, 114, 212, 213, 214...
+ * </p>
+ * <p>
+ * Syntax:
+ * </p>
+ * <pre>
+ * rules         = rule (';' rule)*
+ * rule          = keyword ':' condition
+ * keyword       = &lt;identifier&gt;
+ * condition     = and_condition ('or' and_condition)*
+ * and_condition = relation ('and' relation)*
+ * relation      = not? expr not? rel not? range_list
+ * expr          = ('n' | 'i' | 'f' | 'v' | 't') (mod value)?
+ * not           = 'not' | '!'
+ * rel           = 'in' | 'is' | '=' | '?' | 'within'
+ * mod           = 'mod' | '%'
+ * range_list    = (range | value) (',' range_list)*
+ * value         = digit+
+ * digit         = 0|1|2|3|4|5|6|7|8|9
+ * range         = value'..'value
+ * </pre>
+ * <p>Each <b>not</b> term inverts the meaning; however, there should not be more than one of them.</p>
+ * <p>
+ * The i, f, t, and v values are defined as follows:
+ * </p>
+ * <ul>
+ * <li>i to be the integer digits.</li>
+ * <li>f to be the visible decimal digits, as an integer.</li>
+ * <li>t to be the visible decimal digits?without trailing zeros?as an integer.</li>
+ * <li>v to be the number of visible fraction digits.</li>
+ * <li>j is defined to only match integers. That is j is 3 fails if v != 0 (eg for 3.1 or 3.0).</li>
+ * </ul>
+ * <p>
+ * Examples are in the following table:
+ * </p>
+ * <table border='1' style="border-collapse:collapse">
+ * <tbody>
+ * <tr>
+ * <th>n</th>
+ * <th>i</th>
+ * <th>f</th>
+ * <th>v</th>
+ * </tr>
+ * <tr>
+ * <td>1.0</td>
+ * <td>1</td>
+ * <td align="right">0</td>
+ * <td>1</td>
+ * </tr>
+ * <tr>
+ * <td>1.00</td>
+ * <td>1</td>
+ * <td align="right">0</td>
+ * <td>2</td>
+ * </tr>
+ * <tr>
+ * <td>1.3</td>
+ * <td>1</td>
+ * <td align="right">3</td>
+ * <td>1</td>
+ * </tr>
+ * <tr>
+ * <td>1.03</td>
+ * <td>1</td>
+ * <td align="right">3</td>
+ * <td>2</td>
+ * </tr>
+ * <tr>
+ * <td>1.23</td>
+ * <td>1</td>
+ * <td align="right">23</td>
+ * <td>2</td>
+ * </tr>
+ * </tbody>
+ * </table>
+ * <p>
+ * An "identifier" is a sequence of characters that do not have the Unicode Pattern_Syntax or Pattern_White_Space
+ * properties.
+ * <p>
+ * The difference between 'in' and 'within' is that 'in' only includes integers in the specified range, while 'within'
+ * includes all values. Using 'within' with a range_list consisting entirely of values is the same as using 'in' (it's
+ * not an error).
+ * </p>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class PluralRules implements java.io.Serializable {
+
+private PluralRules() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Parses a plural rules description and returns a PluralRules.
+ * @param description the rule description.
+ * @throws java.text.ParseException if the description cannot be parsed.
+ *    The exception index is typically not set, it will be -1.
+ */
+
+public static android.icu.text.PluralRules parseDescription(java.lang.String description) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a PluralRules from a description if it is parsable,
+ * otherwise returns null.
+ * @param description the rule description.
+ * @return the PluralRules
+ */
+
+public static android.icu.text.PluralRules createRules(java.lang.String description) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined cardinal-number <code>PluralRules</code> for a given
+ * locale.
+ * Same as forLocale(locale, PluralType.CARDINAL).
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined cardinal-number <code>PluralRules</code> for a given
+ * {@link java.util.Locale}.
+ * Same as forLocale(locale, PluralType.CARDINAL).
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined <code>PluralRules</code> for a given
+ * locale and the plural type.
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(android.icu.util.ULocale locale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides access to the predefined <code>PluralRules</code> for a given
+ * {@link java.util.Locale} and the plural type.
+ *
+ * <p>ICU defines plural rules for many locales based on CLDR <i>Language Plural Rules</i>.
+ * For these predefined rules, see CLDR page at
+ * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html
+ *
+ * @param locale The locale for which a <code>PluralRules</code> object is
+ *   returned.
+ * @param type The plural type (e.g., cardinal or ordinal).
+ * @return The predefined <code>PluralRules</code> object for this locale.
+ *   If there's no predefined rules for this locale, the rules
+ *   for the closest parent in the locale hierarchy that has one will
+ *   be returned.  The final fallback always returns the default
+ *   rules.
+ */
+
+public static android.icu.text.PluralRules forLocale(java.util.Locale locale, android.icu.text.PluralRules.PluralType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a floating-point number, returns the keyword of the first rule
+ * that applies to the number.
+ *
+ * @param number The number for which the rule has to be determined.
+ * @return The keyword of the selected rule.
+ */
+
+public java.lang.String select(double number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a formatted number, returns the keyword of the first rule that
+ * applies to the number.
+ *
+ * A FormattedNumber allows you to specify an exponent or trailing zeros,
+ * which can affect the plural category. To get a FormattedNumber, see
+ * {@link android.icu.number.NumberFormatter NumberFormatter}.
+ *
+ * @param number The number for which the rule has to be determined.
+ * @return The keyword of the selected rule.
+ */
+
+public java.lang.String select(android.icu.number.FormattedNumber number) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a set of all rule keywords used in this <code>PluralRules</code>
+ * object.  The rule "other" is always present by default.
+ *
+ * @return The set of keywords.
+ */
+
+public java.util.Set<java.lang.String> getKeywords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the unique value that this keyword matches, or {@link #NO_UNIQUE_VALUE}
+ * if the keyword matches multiple values or is not defined for this PluralRules.
+ *
+ * @param keyword the keyword to check for a unique value
+ * @return The unique value for the keyword, or NO_UNIQUE_VALUE.
+ */
+
+public double getUniqueKeywordValue(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns all the values that trigger this keyword, or null if the number of such
+ * values is unlimited.
+ *
+ * @param keyword the keyword
+ * @return the values that trigger this keyword, or null.  The returned collection
+ * is immutable. It will be empty if the keyword is not defined.
+ */
+
+public java.util.Collection<java.lang.Double> getAllKeywordValues(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of integer values for which select() would return that keyword,
+ * or null if the keyword is not defined. The returned collection is unmodifiable.
+ * The returned list is not complete, and there might be additional values that
+ * would return the keyword.
+ *
+ * @param keyword the keyword to test
+ * @return a list of values matching the keyword.
+ */
+
+public java.util.Collection<java.lang.Double> getSamples(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if rhs is equal to this.
+ * @param rhs the PluralRules to compare to.
+ * @return true if this and rhs are equal.
+ */
+
+public boolean equals(android.icu.text.PluralRules rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * The default rules that accept any number and return
+ * {@link #KEYWORD_OTHER}.
+ */
+
+public static final android.icu.text.PluralRules DEFAULT;
+static { DEFAULT = null; }
+
+/**
+ * Common name for the 'paucal' or other special plural form.
+ */
+
+public static final java.lang.String KEYWORD_FEW = "few";
+
+/**
+ * Common name for the arabic (11 to 99) plural form.
+ */
+
+public static final java.lang.String KEYWORD_MANY = "many";
+
+/**
+ * Common name for the 'singular' plural form.
+ */
+
+public static final java.lang.String KEYWORD_ONE = "one";
+
+/**
+ * Common name for the default plural form.  This name is returned
+ * for values to which no other form in the rule applies.  It
+ * can additionally be assigned rules of its own.
+ */
+
+public static final java.lang.String KEYWORD_OTHER = "other";
+
+/**
+ * Common name for the 'dual' plural form.
+ */
+
+public static final java.lang.String KEYWORD_TWO = "two";
+
+/**
+ * Common name for the 'zero' plural form.
+ */
+
+public static final java.lang.String KEYWORD_ZERO = "zero";
+
+/**
+ * Value returned by {@link #getUniqueKeywordValue} when there is no
+ * unique value to return.
+ */
+
+public static final double NO_UNIQUE_VALUE = -0.00123456777;
+/**
+ * Type of plurals and PluralRules.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum PluralType {
+/**
+ * Plural rules for cardinal numbers: 1 file vs. 2 files.
+ */
+
+CARDINAL,
+/**
+ * Plural rules for ordinal numbers: 1st file, 2nd file, 3rd file, 4th file, etc.
+ */
+
+ORDINAL;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/RelativeDateTimeFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/RelativeDateTimeFormatter.java
new file mode 100644
index 0000000..759ba3d
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/RelativeDateTimeFormatter.java
@@ -0,0 +1,655 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2013-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import java.text.Format;
+
+/**
+ * Formats simple relative dates. There are two types of relative dates that
+ * it handles:
+ * <ul>
+ *   <li>relative dates with a quantity e.g "in 5 days"</li>
+ *   <li>relative dates without a quantity e.g "next Tuesday"</li>
+ * </ul>
+ * <p>
+ * This API is very basic and is intended to be a building block for more
+ * fancy APIs. The caller tells it exactly what to display in a locale
+ * independent way. While this class automatically provides the correct plural
+ * forms, the grammatical form is otherwise as neutral as possible. It is the
+ * caller's responsibility to handle cut-off logic such as deciding between
+ * displaying "in 7 days" or "in 1 week." This API supports relative dates
+ * involving one single unit. This API does not support relative dates
+ * involving compound units.
+ * e.g "in 5 days and 4 hours" nor does it support parsing.
+ * This class is both immutable and thread-safe.
+ * <p>
+ * Here are some examples of use:
+ * <blockquote>
+ * <pre>
+ * RelativeDateTimeFormatter fmt = RelativeDateTimeFormatter.getInstance();
+ * fmt.format(1, Direction.NEXT, RelativeUnit.DAYS); // "in 1 day"
+ * fmt.format(3, Direction.NEXT, RelativeUnit.DAYS); // "in 3 days"
+ * fmt.format(3.2, Direction.LAST, RelativeUnit.YEARS); // "3.2 years ago"
+ *
+ * fmt.format(Direction.LAST, AbsoluteUnit.SUNDAY); // "last Sunday"
+ * fmt.format(Direction.THIS, AbsoluteUnit.SUNDAY); // "this Sunday"
+ * fmt.format(Direction.NEXT, AbsoluteUnit.SUNDAY); // "next Sunday"
+ * fmt.format(Direction.PLAIN, AbsoluteUnit.SUNDAY); // "Sunday"
+ *
+ * fmt.format(Direction.LAST, AbsoluteUnit.DAY); // "yesterday"
+ * fmt.format(Direction.THIS, AbsoluteUnit.DAY); // "today"
+ * fmt.format(Direction.NEXT, AbsoluteUnit.DAY); // "tomorrow"
+ *
+ * fmt.format(Direction.PLAIN, AbsoluteUnit.NOW); // "now"
+ * </pre>
+ * </blockquote>
+ * <p>
+ * In the future, we may add more forms, such as abbreviated/short forms
+ * (3 secs ago), and relative day periods ("yesterday afternoon"), etc.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class RelativeDateTimeFormatter {
+
+private RelativeDateTimeFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for the default locale.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular locale.
+ *
+ * @param locale the locale.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular {@link java.util.Locale}.
+ *
+ * @param locale the {@link java.util.Locale}.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular locale that uses a particular
+ * NumberFormat object.
+ *
+ * @param locale the locale
+ * @param nf the number format object. It is defensively copied to ensure thread-safety
+ * and immutability of this class.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale locale, android.icu.text.NumberFormat nf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular locale that uses a particular
+ * NumberFormat object, style, and capitalization context
+ *
+ * @param locale the locale
+ * @param nf the number format object. It is defensively copied to ensure thread-safety
+ * and immutability of this class. May be null.
+ * @param style the style.
+ * @param capitalizationContext the capitalization context.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(android.icu.util.ULocale locale, android.icu.text.NumberFormat nf, android.icu.text.RelativeDateTimeFormatter.Style style, android.icu.text.DisplayContext capitalizationContext) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a RelativeDateTimeFormatter for a particular {@link java.util.Locale} that uses a
+ * particular NumberFormat object.
+ *
+ * @param locale the {@link java.util.Locale}
+ * @param nf the number format object. It is defensively copied to ensure thread-safety
+ * and immutability of this class.
+ * @return An instance of RelativeDateTimeFormatter.
+ */
+
+public static android.icu.text.RelativeDateTimeFormatter getInstance(java.util.Locale locale, android.icu.text.NumberFormat nf) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date with a quantity such as "in 5 days" or
+ * "3 months ago".
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatToValue().
+ *
+ * @param quantity The numerical amount e.g 5. This value is formatted
+ * according to this object's {@link android.icu.text.NumberFormat NumberFormat} object.
+ * @param direction NEXT means a future relative date; LAST means a past
+ * relative date.
+ * @param unit the unit e.g day? month? year?
+ * @return the formatted string
+ * @throws java.lang.IllegalArgumentException if direction is something other than
+ * NEXT or LAST.
+ */
+
+public java.lang.String format(double quantity, android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date with a quantity such as "in 5 days" or
+ * "3 months ago".
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by format().
+ *
+ * @param quantity The numerical amount e.g 5. This value is formatted
+ * according to this object's {@link android.icu.text.NumberFormat NumberFormat} object.
+ * @param direction NEXT means a future relative date; LAST means a past
+ * relative date.
+ * @param unit the unit e.g day? month? year?
+ * @return the formatted relative datetime
+ * @throws java.lang.IllegalArgumentException if direction is something other than
+ * NEXT or LAST.
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double quantity, android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.RelativeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a numeric style, e.g. "1 week ago", "in 1 week",
+ * "5 weeks ago", "in 5 weeks".
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatNumericToValue().
+ *
+ * @param offset    The signed offset for the specified unit. This
+ *                  will be formatted according to this object's
+ *                  NumberFormat object.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public java.lang.String formatNumeric(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a numeric style, e.g. "1 week ago", "in 1 week",
+ * "5 weeks ago", "in 5 weeks".
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by formatNumeric().
+ *
+ * @param offset    The signed offset for the specified unit. This
+ *                  will be formatted according to this object's
+ *                  NumberFormat object.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatNumericToValue(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date without a quantity.
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatToValue().
+ *
+ * @param direction NEXT, LAST, THIS, etc.
+ * @param unit e.g SATURDAY, DAY, MONTH
+ * @return the formatted string. If direction has a value that is documented as not being
+ *  fully supported in every locale (for example NEXT_2 or LAST_2) then this function may
+ *  return null to signal that no formatted string is available.
+ * @throws java.lang.IllegalArgumentException if the direction is incompatible with
+ * unit this can occur with NOW which can only take PLAIN.
+ */
+
+public java.lang.String format(android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a relative date without a quantity.
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by format().
+ *
+ * @param direction NEXT, LAST, THIS, etc.
+ * @param unit e.g SATURDAY, DAY, MONTH
+ * @return the formatted string. If direction has a value that is documented as not being
+ *  fully supported in every locale (for example NEXT_2 or LAST_2) then this function may
+ *  return null to signal that no formatted string is available.
+ * @throws java.lang.IllegalArgumentException if the direction is incompatible with
+ * unit this can occur with NOW which can only take PLAIN.
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(android.icu.text.RelativeDateTimeFormatter.Direction direction, android.icu.text.RelativeDateTimeFormatter.AbsoluteUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a text style if possible, e.g. "last week", "this week",
+ * "next week", "yesterday", "tomorrow". Falls back to numeric
+ * style if no appropriate text term is available for the specified
+ * offset in the object?s locale.
+ *
+ * This method returns a String. To get more information about the
+ * formatting result, use formatToValue().
+ *
+ * @param offset    The signed offset for the specified field.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public java.lang.String format(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format a combination of RelativeDateTimeUnit and numeric offset
+ * using a text style if possible, e.g. "last week", "this week",
+ * "next week", "yesterday", "tomorrow". Falls back to numeric
+ * style if no appropriate text term is available for the specified
+ * offset in the object?s locale.
+ *
+ * This method returns a FormattedRelativeDateTime, which exposes more
+ * information than the String returned by format().
+ *
+ * @param offset    The signed offset for the specified field.
+ * @param unit      The unit to use when formatting the relative
+ *                  date, e.g. RelativeDateTimeUnit.WEEK,
+ *                  RelativeDateTimeUnit.FRIDAY.
+ * @return          The formatted string (may be empty in case of error)
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double offset, android.icu.text.RelativeDateTimeFormatter.RelativeDateTimeUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Combines a relative date string and a time string in this object's
+ * locale. This is done with the same date-time separator used for the
+ * default calendar in this locale.
+ * @param relativeDateString the relative date e.g 'yesterday'
+ * @param timeString the time e.g '3:45'
+ * @return the date and time concatenated according to the default
+ * calendar in this locale e.g 'yesterday, 3:45'
+ */
+
+public java.lang.String combineDateAndTime(java.lang.String relativeDateString, java.lang.String timeString) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a copy of the NumberFormat this object is using.
+ * @return A copy of the NumberFormat.
+ */
+
+public android.icu.text.NumberFormat getNumberFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return capitalization context.
+ * @return The capitalization context.
+ */
+
+public android.icu.text.DisplayContext getCapitalizationContext() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return style
+ * @return The formatting style.
+ */
+
+public android.icu.text.RelativeDateTimeFormatter.Style getFormatStyle() { throw new RuntimeException("Stub!"); }
+/**
+ * Represents an absolute unit.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum AbsoluteUnit {
+/**
+ * Sunday
+ */
+
+SUNDAY,
+/**
+ * Monday
+ */
+
+MONDAY,
+/**
+ * Tuesday
+ */
+
+TUESDAY,
+/**
+ * Wednesday
+ */
+
+WEDNESDAY,
+/**
+ * Thursday
+ */
+
+THURSDAY,
+/**
+ * Friday
+ */
+
+FRIDAY,
+/**
+ * Saturday
+ */
+
+SATURDAY,
+/**
+ * Day
+ */
+
+DAY,
+/**
+ * Week
+ */
+
+WEEK,
+/**
+ * Month
+ */
+
+MONTH,
+/**
+ * Year
+ */
+
+YEAR,
+/**
+ * Now
+ */
+
+NOW,
+/**
+ * Quarter
+ */
+
+QUARTER,
+/**
+ * Hour
+ */
+
+HOUR,
+/**
+ * Minute
+ */
+
+MINUTE;
+}
+
+/**
+ * Represents a direction for an absolute unit e.g "Next Tuesday"
+ * or "Last Tuesday"
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Direction {
+/**
+ * Two before. Not fully supported in every locale
+ */
+
+LAST_2,
+/**
+ * Last
+ */
+
+LAST,
+/**
+ * This
+ */
+
+THIS,
+/**
+ * Next
+ */
+
+NEXT,
+/**
+ * Two after. Not fully supported in every locale
+ */
+
+NEXT_2,
+/**
+ * Plain, which means the absence of a qualifier
+ */
+
+PLAIN;
+}
+
+/**
+ * Represents the result of a formatting operation of a relative datetime.
+ * Access the string value or field information.
+ *
+ * Instances of this class are immutable and thread-safe.
+ *
+ * Not intended for public subclassing.
+ *
+ * @author sffc
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class FormattedRelativeDateTime implements android.icu.text.FormattedValue {
+
+private FormattedRelativeDateTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int length() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public char charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.CharSequence subSequence(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public <A extends java.lang.Appendable> A appendTo(A appendable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean nextPosition(android.icu.text.ConstrainedFieldPosition cfpos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator toCharacterIterator() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Represents the unit for formatting a relative date. e.g "in 5 days"
+ * or "next year"
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RelativeDateTimeUnit {
+/**
+ * Specifies that relative unit is year, e.g. "last year",
+ * "in 5 years".
+ */
+
+YEAR,
+/**
+ * Specifies that relative unit is quarter, e.g. "last quarter",
+ * "in 5 quarters".
+ */
+
+QUARTER,
+/**
+ * Specifies that relative unit is month, e.g. "last month",
+ * "in 5 months".
+ */
+
+MONTH,
+/**
+ * Specifies that relative unit is week, e.g. "last week",
+ * "in 5 weeks".
+ */
+
+WEEK,
+/**
+ * Specifies that relative unit is day, e.g. "yesterday",
+ * "in 5 days".
+ */
+
+DAY,
+/**
+ * Specifies that relative unit is hour, e.g. "1 hour ago",
+ * "in 5 hours".
+ */
+
+HOUR,
+/**
+ * Specifies that relative unit is minute, e.g. "1 minute ago",
+ * "in 5 minutes".
+ */
+
+MINUTE,
+/**
+ * Specifies that relative unit is second, e.g. "1 second ago",
+ * "in 5 seconds".
+ */
+
+SECOND,
+/**
+ * Specifies that relative unit is Sunday, e.g. "last Sunday",
+ * "this Sunday", "next Sunday", "in 5 Sundays".
+ */
+
+SUNDAY,
+/**
+ * Specifies that relative unit is Monday, e.g. "last Monday",
+ * "this Monday", "next Monday", "in 5 Mondays".
+ */
+
+MONDAY,
+/**
+ * Specifies that relative unit is Tuesday, e.g. "last Tuesday",
+ * "this Tuesday", "next Tuesday", "in 5 Tuesdays".
+ */
+
+TUESDAY,
+/**
+ * Specifies that relative unit is Wednesday, e.g. "last Wednesday",
+ * "this Wednesday", "next Wednesday", "in 5 Wednesdays".
+ */
+
+WEDNESDAY,
+/**
+ * Specifies that relative unit is Thursday, e.g. "last Thursday",
+ * "this Thursday", "next Thursday", "in 5 Thursdays".
+ */
+
+THURSDAY,
+/**
+ * Specifies that relative unit is Friday, e.g. "last Friday",
+ * "this Friday", "next Friday", "in 5 Fridays".
+ */
+
+FRIDAY,
+/**
+ * Specifies that relative unit is Saturday, e.g. "last Saturday",
+ * "this Saturday", "next Saturday", "in 5 Saturdays".
+ */
+
+SATURDAY;
+}
+
+/**
+ * Represents the unit for formatting a relative date. e.g "in 5 days"
+ * or "in 3 months"
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum RelativeUnit {
+/**
+ * Seconds
+ */
+
+SECONDS,
+/**
+ * Minutes
+ */
+
+MINUTES,
+/**
+ * Hours
+ */
+
+HOURS,
+/**
+ * Days
+ */
+
+DAYS,
+/**
+ * Weeks
+ */
+
+WEEKS,
+/**
+ * Months
+ */
+
+MONTHS,
+/**
+ * Years
+ */
+
+YEARS;
+}
+
+/**
+ * The formatting style
+ *
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Style {
+/**
+ * Everything spelled out.
+ */
+
+LONG,
+/**
+ * Abbreviations used when possible.
+ */
+
+SHORT,
+/**
+ * Use single letters when possible.
+ */
+
+NARROW;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Replaceable.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Replaceable.java
new file mode 100644
index 0000000..5e4788f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Replaceable.java
@@ -0,0 +1,189 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <code>Replaceable</code> is an interface representing a
+ * string of characters that supports the replacement of a range of
+ * itself with a new string of characters.  It is used by APIs that
+ * change a piece of text while retaining metadata.  Metadata is data
+ * other than the Unicode characters returned by char32At().  One
+ * example of metadata is style attributes; another is an edit
+ * history, marking each character with an author and revision number.
+ *
+ * <p>An implicit aspect of the <code>Replaceable</code> API is that
+ * during a replace operation, new characters take on the metadata of
+ * the old characters.  For example, if the string "the <b>bold</b>
+ * font" has range (4, 8) replaced with "strong", then it becomes "the
+ * <b>strong</b> font".
+ *
+ * <p><code>Replaceable</code> specifies ranges using a start
+ * offset and a limit offset.  The range of characters thus specified
+ * includes the characters at offset start..limit-1.  That is, the
+ * start offset is inclusive, and the limit offset is exclusive.
+ *
+ * <p><code>Replaceable</code> also includes API to access characters
+ * in the string: <code>length()</code>, <code>charAt()</code>,
+ * <code>char32At()</code>, and <code>extractBetween()</code>.
+ *
+ * <p>For a subclass to support metadata, typical behavior of
+ * <code>replace()</code> is the following:
+ * <ul>
+ *   <li>Set the metadata of the new text to the metadata of the first
+ *   character replaced</li>
+ *   <li>If no characters are replaced, use the metadata of the
+ *   previous character</li>
+ *   <li>If there is no previous character (i.e. start == 0), use the
+ *   following character</li>
+ *   <li>If there is no following character (i.e. the replaceable was
+ *   empty), use default metadata<br>
+ *   <li>If the code point U+FFFF is seen, it should be interpreted as
+ *   a special marker having no metadata<li>
+ *   </li>
+ * </ul>
+ * If this is not the behavior, the subclass should document any differences.
+ *
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface Replaceable {
+
+/**
+ * Returns the number of 16-bit code units in the text.
+ * @return number of 16-bit code units in text
+ */
+
+public int length();
+
+/**
+ * Returns the 16-bit code unit at the given offset into the text.
+ * @param offset an integer between 0 and <code>length()</code>-1
+ * inclusive
+ * @return 16-bit code unit of text at given offset
+ */
+
+public char charAt(int offset);
+
+/**
+ * Returns the 32-bit code point at the given 16-bit offset into
+ * the text.  This assumes the text is stored as 16-bit code units
+ * with surrogate pairs intermixed.  If the offset of a leading or
+ * trailing code unit of a surrogate pair is given, return the
+ * code point of the surrogate pair.
+ *
+ * <p>Most subclasses can return
+ * <code>android.icu.text.UTF16.charAt(this, offset)</code>.
+ * @param offset an integer between 0 and <code>length()</code>-1
+ * inclusive
+ * @return 32-bit code point of text at given offset
+ */
+
+public int char32At(int offset);
+
+/**
+ * Copies characters from this object into the destination
+ * character array.  The first character to be copied is at index
+ * <code>srcStart</code>; the last character to be copied is at
+ * index <code>srcLimit-1</code> (thus the total number of
+ * characters to be copied is <code>srcLimit-srcStart</code>). The
+ * characters are copied into the subarray of <code>dst</code>
+ * starting at index <code>dstStart</code> and ending at index
+ * <code>dstStart + (srcLimit-srcStart) - 1</code>.
+ *
+ * @param srcStart the beginning index to copy, inclusive; <code>0
+ * &lt;= start &lt;= limit</code>.
+ * @param srcLimit the ending index to copy, exclusive;
+ * <code>start &lt;= limit &lt;= length()</code>.
+ * @param dst the destination array.
+ * @param dstStart the start offset in the destination array.
+ */
+
+public void getChars(int srcStart, int srcLimit, char[] dst, int dstStart);
+
+/**
+ * Replaces a substring of this object with the given text.
+ *
+ * <p>Subclasses must ensure that if the text between start and
+ * limit is equal to the replacement text, that replace has no
+ * effect. That is, any metadata
+ * should be unaffected. In addition, subclasses are encouraged to
+ * check for initial and trailing identical characters, and make a
+ * smaller replacement if possible. This will preserve as much
+ * metadata as possible.
+ * @param start the beginning index, inclusive; <code>0 &lt;= start
+ * &lt;= limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit
+ * &lt;= length()</code>.
+ * @param text the text to replace characters <code>start</code>
+ * to <code>limit - 1</code>
+ */
+
+public void replace(int start, int limit, java.lang.String text);
+
+/**
+ * Replaces a substring of this object with the given text.
+ *
+ * <p>Subclasses must ensure that if the text between start and
+ * limit is equal to the replacement text, that replace has no
+ * effect. That is, any metadata
+ * should be unaffected. In addition, subclasses are encouraged to
+ * check for initial and trailing identical characters, and make a
+ * smaller replacement if possible. This will preserve as much
+ * metadata as possible.
+ * @param start the beginning index, inclusive; <code>0 &lt;= start
+ * &lt;= limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit
+ * &lt;= length()</code>.
+ * @param chars the text to replace characters <code>start</code>
+ * to <code>limit - 1</code>
+ * @param charsStart the beginning index into <code>chars</code>,
+ * inclusive; <code>0 &lt;= start &lt;= limit</code>.
+ * @param charsLen the number of characters of <code>chars</code>.
+ */
+
+public void replace(int start, int limit, char[] chars, int charsStart, int charsLen);
+
+/**
+ * Copies a substring of this object, retaining metadata.
+ * This method is used to duplicate or reorder substrings.
+ * The destination index must not overlap the source range.
+ * If <code>hasMetaData()</code> returns false, subclasses
+ * may use the naive implementation:
+ *
+ * <pre> char[] text = new char[limit - start];
+ * getChars(start, limit, text, 0);
+ * replace(dest, dest, text, 0, limit - start);</pre>
+ *
+ * @param start the beginning index, inclusive; <code>0 &lt;= start &lt;=
+ * limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit &lt;=
+ * length()</code>.
+ * @param dest the destination index.  The characters from
+ * <code>start..limit-1</code> will be copied to <code>dest</code>.
+ * Implementations of this method may assume that <code>dest &lt;= start ||
+ * dest &gt;= limit</code>.
+ */
+
+public void copy(int start, int limit, int dest);
+
+/**R
+ * Returns true if this object contains metadata.  If a
+ * Replaceable object has metadata, calls to the Replaceable API
+ * must be made so as to preserve metadata.  If it does not, calls
+ * to the Replaceable API may be optimized to improve performance.
+ * @return true if this object contains metadata
+ */
+
+public boolean hasMetaData();
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/RuleBasedCollator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/RuleBasedCollator.java
new file mode 100644
index 0000000..6c4d041
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/RuleBasedCollator.java
@@ -0,0 +1,767 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.ParseException;
+import java.text.CharacterIterator;
+import android.icu.lang.UScript;
+
+/**
+ * <p>
+ * RuleBasedCollator is a concrete subclass of Collator. It allows customization of the Collator via user-specified rule
+ * sets. RuleBasedCollator is designed to be fully compliant to the <a
+ * href="http://www.unicode.org/unicode/reports/tr10/">Unicode Collation Algorithm (UCA)</a> and conforms to ISO 14651.
+ *
+ * <p>A Collator is thread-safe only when frozen. See {{@link #isFrozen()} and {@link android.icu.util.Freezable}.
+ *
+ * <p>
+ * Users are strongly encouraged to read the <a href="https://unicode-org.github.io/icu/userguide/collation">User
+ * Guide</a> for more information about the collation service before using this class.
+ *
+ * <p>
+ * Create a RuleBasedCollator from a locale by calling the getInstance(Locale) factory method in the base class
+ * Collator. Collator.getInstance(Locale) creates a RuleBasedCollator object based on the collation rules defined by the
+ * argument locale. If a customized collation ordering or attributes is required, use the RuleBasedCollator(String)
+ * constructor with the appropriate rules. The customized RuleBasedCollator will base its ordering on the CLDR root collation, while
+ * re-adjusting the attributes and orders of the characters in the specified rule accordingly.
+ *
+ * <p>
+ * RuleBasedCollator provides correct collation orders for most locales supported in ICU. If specific data for a locale
+ * is not available, the orders eventually falls back to the
+ * <a href="http://www.unicode.org/reports/tr35/tr35-collation.html#Root_Collation">CLDR root sort order</a>.
+ *
+ * <p>
+ * For information about the collation rule syntax and details about customization, please refer to the <a
+ * href="https://unicode-org.github.io/icu/userguide/collation/customization">Collation customization</a>
+ * section of the User Guide.
+ *
+ * <p>
+ * <strong>Note</strong> that there are some differences between the Collation rule syntax used in Java and ICU4J:
+ *
+ * <ul>
+ * <li>According to the JDK documentation: <br>
+ * <i>Modifier '!' : Turns on Thai/Lao vowel-consonant swapping. If this rule is in force when a Thai vowel of the range
+ * &#92;U0E40-&#92;U0E44 precedes a Thai consonant of the range &#92;U0E01-&#92;U0E2E OR a Lao vowel of the range
+ * &#92;U0EC0-&#92;U0EC4 precedes a Lao consonant of the range &#92;U0E81-&#92;U0EAE then the vowel is placed after the
+ * consonant for collation purposes.
+ * <br>
+ * If a rule is without the modifier '!', the Thai/Lao vowel-consonant swapping is not turned on.
+ * </i>
+ * <br>
+ * ICU4J's RuleBasedCollator does not support turning off the Thai/Lao vowel-consonant swapping, since the UCA clearly
+ * states that it has to be supported to ensure a correct sorting order. If a '!' is encountered, it is ignored.</li>
+ * <li>As mentioned in the documentation of the base class Collator, compatibility decomposition mode is not supported.</li>
+ * </ul>
+ * <p>
+ * <strong>Examples</strong>
+ * <p>
+ * Creating Customized RuleBasedCollators: <blockquote>
+ *
+ * <pre>
+ * String simple = "&amp; a &lt; b &lt; c &lt; d";
+ * RuleBasedCollator simpleCollator = new RuleBasedCollator(simple);
+ *
+ * String norwegian = "&amp; a , A &lt; b , B &lt; c , C &lt; d , D &lt; e , E "
+ *                    + "&lt; f , F &lt; g , G &lt; h , H &lt; i , I &lt; j , "
+ *                    + "J &lt; k , K &lt; l , L &lt; m , M &lt; n , N &lt; "
+ *                    + "o , O &lt; p , P &lt; q , Q &lt;r , R &lt;s , S &lt; "
+ *                    + "t , T &lt; u , U &lt; v , V &lt; w , W &lt; x , X "
+ *                    + "&lt; y , Y &lt; z , Z &lt; &#92;u00E5 = a&#92;u030A "
+ *                    + ", &#92;u00C5 = A&#92;u030A ; aa , AA &lt; &#92;u00E6 "
+ *                    + ", &#92;u00C6 &lt; &#92;u00F8 , &#92;u00D8";
+ * RuleBasedCollator norwegianCollator = new RuleBasedCollator(norwegian);
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * Concatenating rules to combine <code>Collator</code>s: <blockquote>
+ *
+ * <pre>
+ * // Create an en_US Collator object
+ * RuleBasedCollator en_USCollator = (RuleBasedCollator)
+ *     Collator.getInstance(new Locale("en", "US", ""));
+ * // Create a da_DK Collator object
+ * RuleBasedCollator da_DKCollator = (RuleBasedCollator)
+ *     Collator.getInstance(new Locale("da", "DK", ""));
+ * // Combine the two
+ * // First, get the collation rules from en_USCollator
+ * String en_USRules = en_USCollator.getRules();
+ * // Second, get the collation rules from da_DKCollator
+ * String da_DKRules = da_DKCollator.getRules();
+ * RuleBasedCollator newCollator =
+ *                             new RuleBasedCollator(en_USRules + da_DKRules);
+ * // newCollator has the combined rules
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * Making changes to an existing RuleBasedCollator to create a new <code>Collator</code> object, by appending changes to
+ * the existing rule: <blockquote>
+ *
+ * <pre>
+ * // Create a new Collator object with additional rules
+ * String addRules = "&amp; C &lt; ch, cH, Ch, CH";
+ * RuleBasedCollator myCollator =
+ *     new RuleBasedCollator(en_USCollator.getRules() + addRules);
+ * // myCollator contains the new rules
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * How to change the order of non-spacing accents: <blockquote>
+ *
+ * <pre>
+ * // old rule with main accents
+ * String oldRules = "= &#92;u0301 ; &#92;u0300 ; &#92;u0302 ; &#92;u0308 "
+ *                 + "; &#92;u0327 ; &#92;u0303 ; &#92;u0304 ; &#92;u0305 "
+ *                 + "; &#92;u0306 ; &#92;u0307 ; &#92;u0309 ; &#92;u030A "
+ *                 + "; &#92;u030B ; &#92;u030C ; &#92;u030D ; &#92;u030E "
+ *                 + "; &#92;u030F ; &#92;u0310 ; &#92;u0311 ; &#92;u0312 "
+ *                 + "&lt; a , A ; ae, AE ; &#92;u00e6 , &#92;u00c6 "
+ *                 + "&lt; b , B &lt; c, C &lt; e, E &amp; C &lt; d , D";
+ * // change the order of accent characters
+ * String addOn = "&amp; &#92;u0300 ; &#92;u0308 ; &#92;u0302";
+ * RuleBasedCollator myCollator = new RuleBasedCollator(oldRules + addOn);
+ * </pre>
+ *
+ * </blockquote>
+ *
+ * Putting in a new primary ordering before the default setting, e.g. sort English characters before or after Japanese
+ * characters in the Japanese <code>Collator</code>: <blockquote>
+ *
+ * <pre>
+ * // get en_US Collator rules
+ * RuleBasedCollator en_USCollator
+ *                        = (RuleBasedCollator)Collator.getInstance(Locale.US);
+ * // add a few Japanese characters to sort before English characters
+ * // suppose the last character before the first base letter 'a' in
+ * // the English collation rule is &#92;u2212
+ * String jaString = "&amp; &#92;u2212 &lt;&#92;u3041, &#92;u3042 &lt;&#92;u3043, "
+ *                   + "&#92;u3044";
+ * RuleBasedCollator myJapaneseCollator
+ *              = new RuleBasedCollator(en_USCollator.getRules() + jaString);
+ * </pre>
+ *
+ * </blockquote>
+ * <p>
+ * This class is not subclassable
+ *
+ * @author Syn Wee Quek
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class RuleBasedCollator extends android.icu.text.Collator {
+
+/**
+ * <p>
+ * Constructor that takes the argument rules for customization.
+ * The collator will be based on the CLDR root collation, with the
+ * attributes and re-ordering of the characters specified in the argument rules.
+ * <p>
+ * See the User Guide's section on <a href="https://unicode-org.github.io/icu/userguide/collation/customization">
+ * Collation Customization</a> for details on the rule syntax.
+ *
+ * @param rules
+ *            the collation rules to build the collation table from.
+ * @exception java.text.ParseException
+ *                and IOException thrown. ParseException thrown when argument rules have an invalid syntax.
+ *                IOException thrown when an error occurred while reading internal data.
+ */
+
+public RuleBasedCollator(java.lang.String rules) throws java.lang.Exception { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clones the RuleBasedCollator
+ *
+ * @return a new instance of this RuleBasedCollator object
+ */
+
+public java.lang.Object clone() throws java.lang.CloneNotSupportedException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a CollationElementIterator for the given String.
+ *
+ * @see android.icu.text.CollationElementIterator
+ */
+
+public android.icu.text.CollationElementIterator getCollationElementIterator(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a CollationElementIterator for the given CharacterIterator. The source iterator's integrity will be
+ * preserved since a new copy will be created for use.
+ *
+ * @see android.icu.text.CollationElementIterator
+ */
+
+public android.icu.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a CollationElementIterator for the given UCharacterIterator. The source iterator's integrity will be
+ * preserved since a new copy will be created for use.
+ *
+ * @see android.icu.text.CollationElementIterator
+ */
+
+public android.icu.text.CollationElementIterator getCollationElementIterator(android.icu.text.UCharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether the object has been frozen or not.
+ *
+ * <p>An unfrozen Collator is mutable and not thread-safe.
+ * A frozen Collator is immutable and thread-safe.
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freezes the collator.
+ * @return the collator itself.
+ */
+
+public android.icu.text.Collator freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provides for the clone operation. Any clone is initially unfrozen.
+ */
+
+public android.icu.text.RuleBasedCollator cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets whether uppercase characters sort before lowercase characters or vice versa, in strength TERTIARY. The
+ * default mode is false, and so lowercase characters sort before uppercase characters. If true, sort upper case
+ * characters first.
+ *
+ * @param upperfirst
+ *            true to sort uppercase characters before lowercase characters, false to sort lowercase characters
+ *            before uppercase characters
+ * @see #isLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setLowerCaseFirst
+ * @see #setCaseFirstDefault
+ */
+
+public void setUpperCaseFirst(boolean upperfirst) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the orders of lower cased characters to sort before upper cased characters, in strength TERTIARY. The
+ * default mode is false. If true is set, the RuleBasedCollator will sort lower cased characters before the upper
+ * cased ones. Otherwise, if false is set, the RuleBasedCollator will ignore case preferences.
+ *
+ * @param lowerfirst
+ *            true for sorting lower cased characters before upper cased characters, false to ignore case
+ *            preferences.
+ * @see #isLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setUpperCaseFirst
+ * @see #setCaseFirstDefault
+ */
+
+public void setLowerCaseFirst(boolean lowerfirst) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the case first mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setUpperCaseFirst(boolean) and setLowerCaseFirst(boolean) for more details.
+ *
+ * @see #isLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setLowerCaseFirst(boolean)
+ * @see #setUpperCaseFirst(boolean)
+ */
+
+public void setCaseFirstDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the alternate handling mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setAlternateHandling(boolean) for more details.
+ *
+ * @see #setAlternateHandlingShifted(boolean)
+ * @see #isAlternateHandlingShifted()
+ */
+
+public void setAlternateHandlingDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the case level mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setCaseLevel(boolean) for more details.
+ *
+ * @see #setCaseLevel(boolean)
+ * @see #isCaseLevel
+ */
+
+public void setCaseLevelDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decomposition mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setDecomposition(int) for more details.
+ *
+ * @see #getDecomposition
+ * @see #setDecomposition(int)
+ */
+
+public void setDecompositionDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the French collation mode to the initial mode set during construction of the RuleBasedCollator. See
+ * setFrenchCollation(boolean) for more details.
+ *
+ * @see #isFrenchCollation
+ * @see #setFrenchCollation(boolean)
+ */
+
+public void setFrenchCollationDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the collation strength to the initial mode set during the construction of the RuleBasedCollator. See
+ * setStrength(int) for more details.
+ *
+ * @see #setStrength(int)
+ * @see #getStrength
+ */
+
+public void setStrengthDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Method to set numeric collation to its default value.
+ *
+ * @see #getNumericCollation
+ * @see #setNumericCollation
+ */
+
+public void setNumericCollationDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the mode for the direction of SECONDARY weights to be used in French collation. The default value is false,
+ * which treats SECONDARY weights in the order they appear. If set to true, the SECONDARY weights will be sorted
+ * backwards. See the section on <a href="https://unicode-org.github.io/icu/userguide/collation/architecture">
+ * French collation</a> for more information.
+ *
+ * @param flag
+ *            true to set the French collation on, false to set it off
+ * @see #isFrenchCollation
+ * @see #setFrenchCollationDefault
+ */
+
+public void setFrenchCollation(boolean flag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the alternate handling for QUATERNARY strength to be either shifted or non-ignorable. See the UCA definition
+ * on <a href="http://www.unicode.org/unicode/reports/tr10/#Variable_Weighting">Variable Weighting</a>. This
+ * attribute will only be effective when QUATERNARY strength is set. The default value for this mode is false,
+ * corresponding to the NON_IGNORABLE mode in UCA. In the NON_IGNORABLE mode, the RuleBasedCollator treats all
+ * the code points with non-ignorable primary weights in the same way. If the mode is set to true, the behavior
+ * corresponds to SHIFTED defined in UCA, this causes code points with PRIMARY orders that are equal or below the
+ * variable top value to be ignored in PRIMARY order and moved to the QUATERNARY order.
+ *
+ * @param shifted
+ *            true if SHIFTED behavior for alternate handling is desired, false for the NON_IGNORABLE behavior.
+ * @see #isAlternateHandlingShifted
+ * @see #setAlternateHandlingDefault
+ */
+
+public void setAlternateHandlingShifted(boolean shifted) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * When case level is set to true, an additional weight is formed between the SECONDARY and TERTIARY weight, known
+ * as the case level. The case level is used to distinguish large and small Japanese Kana characters. Case level
+ * could also be used in other situations. For example to distinguish certain Pinyin characters. The default value
+ * is false, which means the case level is not generated. The contents of the case level are affected by the case
+ * first mode. A simple way to ignore accent differences in a string is to set the strength to PRIMARY and enable
+ * case level.
+ * <p>
+ * See the section on <a href="https://unicode-org.github.io/icu/userguide/collation/architecture">case
+ * level</a> for more information.
+ *
+ * @param flag
+ *            true if case level sorting is required, false otherwise
+ * @see #setCaseLevelDefault
+ * @see #isCaseLevel
+ */
+
+public void setCaseLevel(boolean flag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decomposition mode of this Collator.  Setting this
+ * decomposition attribute with CANONICAL_DECOMPOSITION allows the
+ * Collator to handle un-normalized text properly, producing the
+ * same results as if the text were normalized. If
+ * NO_DECOMPOSITION is set, it is the user's responsibility to
+ * insure that all text is already in the appropriate form before
+ * a comparison or before getting a CollationKey. Adjusting
+ * decomposition mode allows the user to select between faster and
+ * more complete collation behavior.
+ *
+ * <p>Since a great many of the world's languages do not require
+ * text normalization, most locales set NO_DECOMPOSITION as the
+ * default decomposition mode.
+ *
+ * The default decompositon mode for the Collator is
+ * NO_DECOMPOSITON, unless specified otherwise by the locale used
+ * to create the Collator.
+ *
+ * <p>See getDecomposition for a description of decomposition
+ * mode.
+ *
+ * @param decomposition the new decomposition mode
+ * @see #getDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ * @throws java.lang.IllegalArgumentException If the given value is not a valid
+ *            decomposition mode.
+ */
+
+public void setDecomposition(int decomposition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Collator's strength attribute. The strength attribute determines the minimum level of difference
+ * considered significant during comparison.
+ *
+ * <p>See the Collator class description for an example of use.
+ *
+ * @param newStrength
+ *            the new strength value.
+ * @see #getStrength
+ * @see #setStrengthDefault
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ * @exception java.lang.IllegalArgumentException
+ *                If the new strength value is not one of PRIMARY, SECONDARY, TERTIARY, QUATERNARY or IDENTICAL.
+ */
+
+public void setStrength(int newStrength) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Sets the variable top to the top of the specified reordering group.
+ * The variable top determines the highest-sorting character
+ * which is affected by the alternate handling behavior.
+ * If that attribute is set to NON_IGNORABLE, then the variable top has no effect.
+ * @param group one of Collator.ReorderCodes.SPACE, Collator.ReorderCodes.PUNCTUATION,
+ *              Collator.ReorderCodes.SYMBOL, Collator.ReorderCodes.CURRENCY;
+ *              or Collator.ReorderCodes.DEFAULT to restore the default max variable group
+ * @return this
+ * @see #getMaxVariable
+ */
+
+public android.icu.text.RuleBasedCollator setMaxVariable(int group) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the maximum reordering group whose characters are affected by
+ * the alternate handling behavior.
+ * @return the maximum variable reordering group.
+ * @see #setMaxVariable
+ */
+
+public int getMaxVariable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> When numeric collation is turned on, this Collator makes
+ * substrings of digits sort according to their numeric values.
+ *
+ * <p>This is a way to get '100' to sort AFTER '2'. Note that the longest
+ * digit substring that can be treated as a single unit is
+ * 254 digits (not counting leading zeros). If a digit substring is
+ * longer than that, the digits beyond the limit will be treated as a
+ * separate digit substring.
+ *
+ * <p>A "digit" in this sense is a code point with General_Category=Nd,
+ * which does not include circled numbers, roman numerals, etc.
+ * Only a contiguous digit substring is considered, that is,
+ * non-negative integers without separators.
+ * There is no support for plus/minus signs, decimals, exponents, etc.
+ *
+ * @param flag
+ *            true to turn numeric collation on and false to turn it off
+ * @see #getNumericCollation
+ * @see #setNumericCollationDefault
+ */
+
+public void setNumericCollation(boolean flag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ *
+ * @param order the reordering codes to apply to this collator; if this is null or an empty array
+ * then this clears any existing reordering
+ * @throws java.lang.IllegalArgumentException if the reordering codes are malformed in any way (e.g. duplicates, multiple reset codes, overlapping equivalent scripts)
+ * @see #getReorderCodes
+ * @see android.icu.text.Collator#getEquivalentReorderCodes
+ * @see android.icu.text.Collator.ReorderCodes
+ * @see android.icu.lang.UScript
+ */
+
+public void setReorderCodes(int... order) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the collation tailoring rules for this RuleBasedCollator.
+ * Equivalent to String getRules(false).
+ *
+ * <p>On Android, the returned string will be empty unless this instance was
+ * constructed using {@link #RuleBasedCollator(java.lang.String)}.
+ *
+ * @return the collation tailoring rules
+ * @see #getRules(boolean)
+ */
+
+public java.lang.String getRules() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns current rules.
+ * The argument defines whether full rules (root collation + tailored) rules are returned
+ * or just the tailoring.
+ *
+ * <p>The root collation rules are an <i>approximation</i> of the root collator's sort order.
+ * They are almost never used or useful at runtime and can be removed from the data.
+ * See <a href="https://unicode-org.github.io/icu/userguide/collation/customization#building-on-existing-locales">User Guide:
+ * Collation Customization, Building on Existing Locales</a>
+ *
+ * <p>{@link #getRules()} should normally be used instead.
+ * @param fullrules
+ *            true if the rules that defines the full set of collation order is required, otherwise false for
+ *            returning only the tailored rules
+ * @return the current rules that defines this Collator.
+ * @see #getRules()
+ */
+
+public java.lang.String getRules(boolean fullrules) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a UnicodeSet that contains all the characters and sequences tailored in this collator.
+ *
+ * @return a pointer to a UnicodeSet object containing all the code points and sequences that may sort differently
+ *         than in the root collator.
+ */
+
+public android.icu.text.UnicodeSet getTailoredSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets unicode sets containing contractions and/or expansions of a collator
+ *
+ * @param contractions
+ *            if not null, set to contain contractions
+ * @param expansions
+ *            if not null, set to contain expansions
+ * @param addPrefixes
+ *            add the prefix contextual elements to contractions
+ * @throws java.lang.Exception
+ *             Throws an exception if any errors occurs.
+ */
+
+public void getContractionsAndExpansions(android.icu.text.UnicodeSet contractions, android.icu.text.UnicodeSet expansions, boolean addPrefixes) throws java.lang.Exception { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * Get a Collation key for the argument String source from this RuleBasedCollator.
+ * <p>
+ * General recommendation: <br>
+ * If comparison are to be done to the same String multiple times, it would be more efficient to generate
+ * CollationKeys for the Strings and use CollationKey.compareTo(CollationKey) for the comparisons. If the each
+ * Strings are compared to only once, using the method RuleBasedCollator.compare(String, String) will have a better
+ * performance.
+ * <p>
+ * See the class documentation for an explanation about CollationKeys.
+ *
+ * @param source
+ *            the text String to be transformed into a collation key.
+ * @return the CollationKey for the given String based on this RuleBasedCollator's collation rules. If the source
+ *         String is null, a null CollationKey is returned.
+ * @see android.icu.text.CollationKey
+ * @see #compare(String, String)
+ */
+
+public android.icu.text.CollationKey getCollationKey(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Collator's strength attribute. The strength attribute
+ * determines the minimum level of difference considered significant.
+ *
+ * <p><strong>[icu] Note:</strong> This can return QUATERNARY strength, which is not supported by the
+ * JDK version.
+ *
+ * <p>See the Collator class description for more details.
+ *
+ * @return this Collator's current strength attribute.
+ * @see #setStrength
+ * @see #PRIMARY
+ * @see #SECONDARY
+ * @see #TERTIARY
+ * @see #QUATERNARY
+ * @see #IDENTICAL
+ */
+
+public int getStrength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the decomposition mode of this Collator. The decomposition mode
+ * determines how Unicode composed characters are handled.
+ *
+ * <p>See the Collator class description for more details.
+ *
+ * @return the decomposition mode
+ * @see #setDecomposition
+ * @see #NO_DECOMPOSITION
+ * @see #CANONICAL_DECOMPOSITION
+ */
+
+public int getDecomposition() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if an uppercase character is sorted before the corresponding lowercase character. See
+ * setCaseFirst(boolean) for details.
+ *
+ * @see #setUpperCaseFirst
+ * @see #setLowerCaseFirst
+ * @see #isLowerCaseFirst
+ * @see #setCaseFirstDefault
+ * @return true if upper cased characters are sorted before lower cased characters, false otherwise
+ */
+
+public boolean isUpperCaseFirst() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if a lowercase character is sorted before the corresponding uppercase character. See
+ * setCaseFirst(boolean) for details.
+ *
+ * @see #setUpperCaseFirst
+ * @see #setLowerCaseFirst
+ * @see #isUpperCaseFirst
+ * @see #setCaseFirstDefault
+ * @return true lower cased characters are sorted before upper cased characters, false otherwise
+ */
+
+public boolean isLowerCaseFirst() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if the alternate handling behavior is the UCA defined SHIFTED or NON_IGNORABLE. If return value is true,
+ * then the alternate handling attribute for the Collator is SHIFTED. Otherwise if return value is false, then the
+ * alternate handling attribute for the Collator is NON_IGNORABLE See setAlternateHandlingShifted(boolean) for more
+ * details.
+ *
+ * @return true or false
+ * @see #setAlternateHandlingShifted(boolean)
+ * @see #setAlternateHandlingDefault
+ */
+
+public boolean isAlternateHandlingShifted() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if case level is set to true. See setCaseLevel(boolean) for details.
+ *
+ * @return the case level mode
+ * @see #setCaseLevelDefault
+ * @see #isCaseLevel
+ * @see #setCaseLevel(boolean)
+ */
+
+public boolean isCaseLevel() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if French Collation is set to true. See setFrenchCollation(boolean) for details.
+ *
+ * @return true if French Collation is set to true, false otherwise
+ * @see #setFrenchCollation(boolean)
+ * @see #setFrenchCollationDefault
+ */
+
+public boolean isFrenchCollation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Gets the variable top value of a Collator.
+ *
+ * @return the variable top primary weight
+ * @see #getMaxVariable
+ */
+
+public int getVariableTop() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Method to retrieve the numeric collation value. When numeric collation is turned on, this Collator generates a
+ * collation key for the numeric value of substrings of digits. This is a way to get '100' to sort AFTER '2'
+ *
+ * @see #setNumericCollation
+ * @see #setNumericCollationDefault
+ * @return true if numeric collation is turned on, false otherwise
+ */
+
+public boolean getNumericCollation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves the reordering codes for this collator.
+ * These reordering codes are a combination of UScript codes and ReorderCodes.
+ * @return a copy of the reordering codes for this collator;
+ * if none are set then returns an empty array
+ * @see #setReorderCodes
+ * @see android.icu.text.Collator#getEquivalentReorderCodes
+ */
+
+public int[] getReorderCodes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generates a unique hash code for this RuleBasedCollator.
+ *
+ * @return the unique hash code for this Collator
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the source text String to the target text String according to the collation rules, strength and
+ * decomposition mode for this RuleBasedCollator. Returns an integer less than, equal to or greater than zero
+ * depending on whether the source String is less than, equal to or greater than the target String. See the Collator
+ * class description for an example of use.
+ * <p>
+ * General recommendation: <br>
+ * If comparison are to be done to the same String multiple times, it would be more efficient to generate
+ * CollationKeys for the Strings and use CollationKey.compareTo(CollationKey) for the comparisons. If speed
+ * performance is critical and object instantiation is to be reduced, further optimization may be achieved by
+ * generating a simpler key of the form RawCollationKey and reusing this RawCollationKey object with the method
+ * RuleBasedCollator.getRawCollationKey. Internal byte representation can be directly accessed via RawCollationKey
+ * and stored for future use. Like CollationKey, RawCollationKey provides a method RawCollationKey.compareTo for key
+ * comparisons. If the each Strings are compared to only once, using the method RuleBasedCollator.compare(String,
+ * String) will have a better performance.
+ *
+ * @param source
+ *            the source text String.
+ * @param target
+ *            the target text String.
+ * @return Returns an integer value. Value is less than zero if source is less than target, value is zero if source
+ *         and target are equal, value is greater than zero if source is greater than target.
+ * @see android.icu.text.CollationKey
+ * @see #getCollationKey
+ */
+
+public int compare(java.lang.String source, java.lang.String target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the version of this collator object.
+ *
+ * @return the version object associated with this collator
+ */
+
+public android.icu.util.VersionInfo getVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the UCA version of this collator object.
+ *
+ * @return the version object associated with this collator
+ */
+
+public android.icu.util.VersionInfo getUCAVersion() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ScientificNumberFormatter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ScientificNumberFormatter.java
new file mode 100644
index 0000000..ce6ac4c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/ScientificNumberFormatter.java
@@ -0,0 +1,91 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2014-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.util.ULocale;
+
+/**
+ *A formatter that formats numbers in user-friendly scientific notation.
+ *
+ * ScientificNumberFormatter instances are immutable and thread-safe.
+ *
+ * Sample code:
+ * <pre>
+ * ULocale en = new ULocale("en");
+ * ScientificNumberFormatter fmt = ScientificNumberFormatter.getMarkupInstance(
+ *         en, "&lt;sup&gt;", "&lt;/sup&gt;");
+ * </pre>
+ * <pre>
+ * // Output: "1.23456?10&lt;sup&gt;-78&lt;/sup&gt;"
+ * System.out.println(fmt.format(1.23456e-78));
+ * </pre>
+ *
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class ScientificNumberFormatter {
+
+private ScientificNumberFormatter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * superscript characters for exponents for this locale.
+ * @param locale The locale
+ * @return The ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * superscript characters for exponents.
+ * @param df The DecimalFormat must be configured for scientific
+ *   notation. Caller may safely change df after this call as this method
+ *   clones it when creating the ScientificNumberFormatter.
+ * @return the ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getSuperscriptInstance(android.icu.text.DecimalFormat df) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * markup for exponents for this locale.
+ * @param locale The locale
+ * @param beginMarkup the markup to start superscript e.g {@code <sup>}
+ * @param endMarkup the markup to end superscript e.g {@code </sup>}
+ * @return The ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.util.ULocale locale, java.lang.String beginMarkup, java.lang.String endMarkup) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets a ScientificNumberFormatter instance that uses
+ * markup for exponents.
+ * @param df The DecimalFormat must be configured for scientific
+ *   notation. Caller may safely change df after this call as this method
+ *   clones it when creating the ScientificNumberFormatter.
+ * @param beginMarkup the markup to start superscript e.g {@code <sup>}
+ * @param endMarkup the markup to end superscript e.g {@code </sup>}
+ * @return The ScientificNumberFormatter instance.
+ */
+
+public static android.icu.text.ScientificNumberFormatter getMarkupInstance(android.icu.text.DecimalFormat df, java.lang.String beginMarkup, java.lang.String endMarkup) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a number
+ * @param number Can be a double, int, Number or
+ *  anything that DecimalFormat#format(Object) accepts.
+ * @return the formatted string.
+ */
+
+public java.lang.String format(java.lang.Object number) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SearchIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SearchIterator.java
new file mode 100644
index 0000000..481da3f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SearchIterator.java
@@ -0,0 +1,499 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2015, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.text.CharacterIterator;
+
+/**
+ * <tt>SearchIterator</tt> is an abstract base class that provides
+ * methods to search for a pattern within a text string. Instances of
+ * <tt>SearchIterator</tt> maintain a current position and scan over the
+ * target text, returning the indices the pattern is matched and the length
+ * of each match.
+ * <p>
+ * <tt>SearchIterator</tt> defines a protocol for text searching.
+ * Subclasses provide concrete implementations of various search algorithms.
+ * For example, <tt>StringSearch</tt> implements language-sensitive pattern
+ * matching based on the comparison rules defined in a
+ * <tt>RuleBasedCollator</tt> object.
+ * <p>
+ * Other options for searching include using a BreakIterator to restrict
+ * the points at which matches are detected.
+ * <p>
+ * <tt>SearchIterator</tt> provides an API that is similar to that of
+ * other text iteration classes such as <tt>BreakIterator</tt>. Using
+ * this class, it is easy to scan through text looking for all occurrences of
+ * a given pattern. The following example uses a <tt>StringSearch</tt>
+ * object to find all instances of "fox" in the target string. Any other
+ * subclass of <tt>SearchIterator</tt> can be used in an identical
+ * manner.
+ * <pre><code>
+ * String target = "The quick brown fox jumped over the lazy fox";
+ * String pattern = "fox";
+ * SearchIterator iter = new StringSearch(pattern, target);
+ * for (int pos = iter.first(); pos != SearchIterator.DONE;
+ *         pos = iter.next()) {
+ *     System.out.println("Found match at " + pos +
+ *             ", length is " + iter.getMatchLength());
+ * }
+ * </code></pre>
+ *
+ * @author Laura Werner, synwee
+ * @see android.icu.text.BreakIterator
+ * @see android.icu.text.RuleBasedCollator
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class SearchIterator {
+
+/**
+ * Protected constructor for use by subclasses.
+ * Initializes the iterator with the argument target text for searching
+ * and sets the BreakIterator.
+ * See class documentation for more details on the use of the target text
+ * and {@link android.icu.text.BreakIterator BreakIterator}.
+ *
+ * @param target The target text to be searched.
+ * @param breaker A {@link android.icu.text.BreakIterator BreakIterator} that is used to determine the
+ *                boundaries of a logical match. This argument can be null.
+ * @exception java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0
+ * @see android.icu.text.BreakIterator
+ */
+
+protected SearchIterator(java.text.CharacterIterator target, android.icu.text.BreakIterator breaker) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <p>
+ * Sets the position in the target text at which the next search will start.
+ * This method clears any previous match.
+ * </p>
+ * @param position position from which to start the next search
+ * @exception java.lang.IndexOutOfBoundsException thrown if argument position is out
+ *            of the target text range.
+ * @see #getIndex
+ */
+
+public void setIndex(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether overlapping matches are returned. See the class
+ * documentation for more information about overlapping matches.
+ * <p>
+ * The default setting of this property is false
+ *
+ * @param allowOverlap flag indicator if overlapping matches are allowed
+ * @see #isOverlapping
+ */
+
+public void setOverlapping(boolean allowOverlap) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the BreakIterator that will be used to restrict the points
+ * at which matches are detected.
+ *
+ * @param breakiter A BreakIterator that will be used to restrict the
+ *                points at which matches are detected. If a match is
+ *                found, but the match's start or end index is not a
+ *                boundary as determined by the {@link android.icu.text.BreakIterator BreakIterator},
+ *                the match will be rejected and another will be searched
+ *                for. If this parameter is <tt>null</tt>, no break
+ *                detection is attempted.
+ * @see android.icu.text.BreakIterator
+ */
+
+public void setBreakIterator(android.icu.text.BreakIterator breakiter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the target text to be searched. Text iteration will then begin at
+ * the start of the text string. This method is useful if you want to
+ * reuse an iterator to search within a different body of text.
+ *
+ * @param text new text iterator to look for match,
+ * @exception java.lang.IllegalArgumentException thrown when text is null or has
+ *               0 length
+ * @see #getTarget
+ */
+
+public void setTarget(java.text.CharacterIterator text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index to the match in the text string that was searched.
+ * This call returns a valid result only after a successful call to
+ * {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+ * Just after construction, or after a searching method returns
+ * {@link #DONE}, this method will return {@link #DONE}.
+ * <p>
+ * Use {@link #getMatchLength} to get the matched string length.
+ *
+ * @return index of a substring within the text string that is being
+ *         searched.
+ * @see #first
+ * @see #next
+ * @see #previous
+ * @see #last
+ */
+
+public int getMatchStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the current index in the text being searched.
+ * If the iteration has gone past the end of the text
+ * (or past the beginning for a backwards search), {@link #DONE}
+ * is returned.
+ *
+ * @return current index in the text being searched.
+ */
+
+public abstract int getIndex();
+
+/**
+ * Returns the length of text in the string which matches the search
+ * pattern. This call returns a valid result only after a successful call
+ * to {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+ * Just after construction, or after a searching method returns
+ * {@link #DONE}, this method will return 0.
+ *
+ * @return The length of the match in the target text, or 0 if there
+ *         is no match currently.
+ * @see #first
+ * @see #next
+ * @see #previous
+ * @see #last
+ */
+
+public int getMatchLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the BreakIterator that is used to restrict the indexes at which
+ * matches are detected. This will be the same object that was passed to
+ * the constructor or to {@link #setBreakIterator}.
+ * If the {@link android.icu.text.BreakIterator BreakIterator} has not been set, <tt>null</tt> will be returned.
+ * See {@link #setBreakIterator} for more information.
+ *
+ * @return the BreakIterator set to restrict logic matches
+ * @see #setBreakIterator
+ * @see android.icu.text.BreakIterator
+ */
+
+public android.icu.text.BreakIterator getBreakIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the string text to be searched.
+ * @return text string to be searched.
+ */
+
+public java.text.CharacterIterator getTarget() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the text that was matched by the most recent call to
+ * {@link #first}, {@link #next}, {@link #previous}, or {@link #last}.
+ * If the iterator is not pointing at a valid match (e.g. just after
+ * construction or after {@link #DONE} has been returned,
+ * returns an empty string.
+ *
+ * @return  the substring in the target test of the most recent match,
+ *          or null if there is no match currently.
+ * @see #first
+ * @see #next
+ * @see #previous
+ * @see #last
+ */
+
+public java.lang.String getMatchedText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the next point at which the text matches the
+ * search pattern, starting from the current position
+ * The iterator is adjusted so that its current index (as returned by
+ * {@link #getIndex}) is the match position if one was found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to a position after the end of the text
+ * string.
+ *
+ * @return The index of the next match after the current position,
+ *          or {@link #DONE} if there are no more matches.
+ * @see #getIndex
+ */
+
+public int next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the previous point at which the string text
+ * matches the search pattern, starting at the current position.
+ * The iterator is adjusted so that its current index (as returned by
+ * {@link #getIndex}) is the match position if one was found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to the index {@link #DONE}.
+ *
+ * @return The index of the previous match before the current position,
+ *          or {@link #DONE} if there are no more matches.
+ * @see #getIndex
+ */
+
+public int previous() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if the overlapping property has been set.
+ * See {@link #setOverlapping(boolean)} for more information.
+ *
+ * @see #setOverlapping
+ * @return true if the overlapping property has been set, false otherwise
+ */
+
+public boolean isOverlapping() { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Resets the iteration.
+ * Search will begin at the start of the text string if a forward
+ * iteration is initiated before a backwards iteration. Otherwise if a
+ * backwards iteration is initiated before a forwards iteration, the
+ * search will begin at the end of the text string.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first index at which the string text matches the search
+ * pattern. The iterator is adjusted so that its current index (as
+ * returned by {@link #getIndex()}) is the match position if one
+ *
+ * was found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to the index {@link #DONE}.
+ * @return The character index of the first match, or
+ *         {@link #DONE} if there are no matches.
+ *
+ * @see #getIndex
+ */
+
+public final int first() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first index equal or greater than <tt>position</tt> at which the
+ * string text matches the search pattern. The iterator is adjusted so
+ * that its current index (as returned by {@link #getIndex()}) is the
+ * match position if one was found.
+ * If a match is not found, {@link #DONE} will be returned and the
+ * iterator will be adjusted to the index {@link #DONE}.
+ *
+ * @param  position where search if to start from.
+ * @return The character index of the first match following
+ *         <tt>position</tt>, or {@link #DONE} if there are no matches.
+ * @throws java.lang.IndexOutOfBoundsException    If position is less than or greater
+ *      than the text range for searching.
+ * @see #getIndex
+ */
+
+public final int following(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the last index in the target text at which it matches the
+ * search pattern. The iterator is adjusted so that its current index
+ * (as returned by {@link #getIndex}) is the match position if one was
+ * found.
+ * If a match is not found, {@link #DONE} will be returned and
+ * the iterator will be adjusted to the index {@link #DONE}.
+ *
+ * @return The index of the first match, or {@link #DONE} if
+ *         there are no matches.
+ * @see #getIndex
+ */
+
+public final int last() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the first index less than <tt>position</tt> at which the string
+ * text matches the search pattern. The iterator is adjusted so that its
+ * current index (as returned by {@link #getIndex}) is the match
+ * position if one was found. If a match is not found,
+ * {@link #DONE} will be returned and the iterator will be
+ * adjusted to the index {@link #DONE}
+ * <p>
+ * When the overlapping option ({@link #isOverlapping}) is off, the last index of the
+ * result match is always less than <tt>position</tt>.
+ * When the overlapping option is on, the result match may span across
+ * <tt>position</tt>.
+ *
+ * @param  position where search is to start from.
+ * @return The character index of the first match preceding
+ *         <tt>position</tt>, or {@link #DONE} if there are
+ *         no matches.
+ * @throws java.lang.IndexOutOfBoundsException If position is less than or greater than
+ *                                   the text range for searching
+ * @see #getIndex
+ */
+
+public final int preceding(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the length of the most recent match in the target text.
+ * Subclasses' handleNext() and handlePrevious() methods should call this
+ * after they find a match in the target text.
+ *
+ * @param length new length to set
+ * @see #handleNext
+ * @see #handlePrevious
+ */
+
+protected void setMatchLength(int length) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Abstract method which subclasses override to provide the mechanism
+ * for finding the next match in the target text. This allows different
+ * subclasses to provide different search algorithms.
+ * <p>
+ * If a match is found, the implementation should return the index at
+ * which the match starts and should call
+ * {@link #setMatchLength} with the number of characters
+ * in the target text that make up the match. If no match is found, the
+ * method should return {@link #DONE}.
+ *
+ * @param start The index in the target text at which the search
+ *              should start.
+ * @return index at which the match starts, else if match is not found
+ *         {@link #DONE} is returned
+ * @see #setMatchLength
+ */
+
+protected abstract int handleNext(int start);
+
+/**
+ * Abstract method which subclasses override to provide the mechanism for
+ * finding the previous match in the target text. This allows different
+ * subclasses to provide different search algorithms.
+ * <p>
+ * If a match is found, the implementation should return the index at
+ * which the match starts and should call
+ * {@link #setMatchLength} with the number of characters
+ * in the target text that make up the match. If no match is found, the
+ * method should return {@link #DONE}.
+ *
+ * @param startAt   The index in the target text at which the search
+ *                  should start.
+ * @return index at which the match starts, else if match is not found
+ *         {@link #DONE} is returned
+ * @see #setMatchLength
+ */
+
+protected abstract int handlePrevious(int startAt);
+
+/**
+ * Sets the collation element comparison type.
+ * <p>
+ * The default comparison type is {@link android.icu.text.SearchIterator.ElementComparisonType#STANDARD_ELEMENT_COMPARISON ElementComparisonType#STANDARD_ELEMENT_COMPARISON}.
+ *
+ * @see android.icu.text.SearchIterator.ElementComparisonType
+ * @see #getElementComparisonType()
+ */
+
+public void setElementComparisonType(android.icu.text.SearchIterator.ElementComparisonType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the collation element comparison type.
+ *
+ * @see android.icu.text.SearchIterator.ElementComparisonType
+ * @see #setElementComparisonType(ElementComparisonType)
+ */
+
+public android.icu.text.SearchIterator.ElementComparisonType getElementComparisonType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * DONE is returned by previous() and next() after all valid matches have
+ * been returned, and by first() and last() if there are no matches at all.
+ * @see #previous
+ * @see #next
+ */
+
+public static final int DONE = -1; // 0xffffffff
+
+/**
+ * The BreakIterator to define the boundaries of a logical match.
+ * This value can be a null.
+ * See class documentation for more information.
+ * @see #setBreakIterator(BreakIterator)
+ * @see #getBreakIterator
+ * @see android.icu.text.BreakIterator
+ */
+
+protected android.icu.text.BreakIterator breakIterator;
+
+/**
+ * Length of the most current match in target text.
+ * Value 0 is the default value.
+ * @see #setMatchLength
+ * @see #getMatchLength
+ */
+
+protected int matchLength;
+
+/**
+ * Target text for searching.
+ * @see #setTarget(CharacterIterator)
+ * @see #getTarget
+ */
+
+protected java.text.CharacterIterator targetText;
+/**
+ * Option to control how collation elements are compared.
+ * The default value will be {@link #STANDARD_ELEMENT_COMPARISON}.
+ * <p>
+ * PATTERN_BASE_WEIGHT_IS_WILDCARD supports "asymmetric search" as described in
+ * <a href="http://www.unicode.org/reports/tr10/#Asymmetric_Search">
+ * UTS #10 Unicode Collation Algorithm</a>, while ANY_BASE_WEIGHT_IS_WILDCARD
+ * supports a related option in which "unmarked" characters in either the
+ * pattern or the searched text are treated as wildcards that match marked or
+ * unmarked versions of the same character.
+ *
+ * @see #setElementComparisonType(ElementComparisonType)
+ * @see #getElementComparisonType()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ElementComparisonType {
+/**
+ * Standard collation element comparison at the specified collator strength.
+ */
+
+STANDARD_ELEMENT_COMPARISON,
+/**
+ * Collation element comparison is modified to effectively provide behavior
+ * between the specified strength and strength - 1.
+ * <p>
+ * Collation elements in the pattern that have the base weight for the specified
+ * strength are treated as "wildcards" that match an element with any other
+ * weight at that collation level in the searched text. For example, with a
+ * secondary-strength English collator, a plain 'e' in the pattern will match
+ * a plain e or an e with any diacritic in the searched text, but an e with
+ * diacritic in the pattern will only match an e with the same diacritic in
+ * the searched text.
+ */
+
+PATTERN_BASE_WEIGHT_IS_WILDCARD,
+/**
+ * Collation element comparison is modified to effectively provide behavior
+ * between the specified strength and strength - 1.
+ * <p>
+ * Collation elements in either the pattern or the searched text that have the
+ * base weight for the specified strength are treated as "wildcards" that match
+ * an element with any other weight at that collation level. For example, with
+ * a secondary-strength English collator, a plain 'e' in the pattern will match
+ * a plain e or an e with any diacritic in the searched text, but an e with
+ * diacritic in the pattern will only match an e with the same diacritic or a
+ * plain e in the searched text.
+ */
+
+ANY_BASE_WEIGHT_IS_WILDCARD;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SelectFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SelectFormat.java
new file mode 100644
index 0000000..dae53f3
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SelectFormat.java
@@ -0,0 +1,228 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2004-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ * Copyright (C) 2009 , Yahoo! Inc.                                            *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <p><code>SelectFormat</code> supports the creation of  internationalized
+ * messages by selecting phrases based on keywords. The pattern  specifies
+ * how to map keywords to phrases and provides a default phrase. The
+ * object provided to the format method is a string that's matched
+ * against the keywords. If there is a match, the corresponding phrase
+ * is selected; otherwise, the default phrase is used.
+ *
+ * <h3>Using <code>SelectFormat</code> for Gender Agreement</h3>
+ *
+ * <p>Note: Typically, select formatting is done via <code>MessageFormat</code>
+ * with a <code>select</code> argument type,
+ * rather than using a stand-alone <code>SelectFormat</code>.
+ *
+ * <p>The main use case for the select format is gender based  inflection.
+ * When names or nouns are inserted into sentences, their gender can  affect pronouns,
+ * verb forms, articles, and adjectives. Special care needs to be
+ * taken for the case where the gender cannot be determined.
+ * The impact varies between languages:
+ *
+ * <ul>
+ * <li>English has three genders, and unknown gender is handled as a  special
+ * case. Names use the gender of the named person (if known), nouns  referring
+ * to people use natural gender, and inanimate objects are usually  neutral.
+ * The gender only affects pronouns: "he", "she", "it", "they".
+ *
+ * <li>German differs from English in that the gender of nouns is  rather
+ * arbitrary, even for nouns referring to people ("M&#xE4;dchen", girl, is  neutral).
+ * The gender affects pronouns ("er", "sie", "es"), articles ("der",  "die",
+ * "das"), and adjective forms ("guter Mann", "gute Frau", "gutes  M&#xE4;dchen").
+ *
+ * <li>French has only two genders; as in German the gender of nouns
+ * is rather arbitrary - for sun and moon, the genders
+ * are the opposite of those in German. The gender affects
+ * pronouns ("il", "elle"), articles ("le", "la"),
+ * adjective forms ("bon", "bonne"), and sometimes
+ * verb forms ("all&#xE9;", "all&#xE9;e").
+ *
+ * <li>Polish distinguishes five genders (or noun classes),
+ * human masculine, animate non-human masculine, inanimate masculine,
+ * feminine, and neuter.
+ * </ul>
+ *
+ * <p>Some other languages have noun classes that are not related to  gender,
+ * but similar in grammatical use.
+ * Some African languages have around 20 noun classes.
+ *
+ * <p><b>Note:</b>For the gender of a <i>person</i> in a given sentence,
+ * we usually need to distinguish only between female, male and other/unknown.
+ *
+ * <p>To enable localizers to create sentence patterns that take their
+ * language's gender dependencies into consideration, software has to  provide
+ * information about the gender associated with a noun or name to
+ * <code>MessageFormat</code>.
+ * Two main cases can be distinguished:
+ *
+ * <ul>
+ * <li>For people, natural gender information should be maintained  for each person.
+ * Keywords like "male", "female", "mixed" (for groups of people)
+ * and "unknown" could be used.
+ *
+ * <li>For nouns, grammatical gender information should be maintained  for
+ * each noun and per language, e.g., in resource bundles.
+ * The keywords "masculine", "feminine", and "neuter" are commonly  used,
+ * but some languages may require other keywords.
+ * </ul>
+ *
+ * <p>The resulting keyword is provided to <code>MessageFormat</code>  as a
+ * parameter separate from the name or noun it's associated with. For  example,
+ * to generate a message such as "Jean went to Paris", three separate  arguments
+ * would be provided: The name of the person as argument 0, the  gender of
+ * the person as argument 1, and the name of the city as argument 2.
+ * The sentence pattern for English, where the gender of the person has
+ * no impact on this simple sentence, would not refer to argument 1  at all:
+ *
+ * <pre>{0} went to {2}.</pre>
+ *
+ * <p><b>Note:</b> The entire sentence should be included (and partially repeated)
+ * inside each phrase. Otherwise translators would have to be trained on how to
+ * move bits of the sentence in and out of the select argument of a message.
+ * (The examples below do not follow this recommendation!)
+ *
+ * <p>The sentence pattern for French, where the gender of the person affects
+ * the form of the participle, uses a select format based on argument 1:
+ *
+ * <pre>{0} est {1, select, female {all&#xE9;e} other {all&#xE9;}} &#xE0; {2}.</pre>
+ *
+ * <p>Patterns can be nested, so that it's possible to handle  interactions of
+ * number and gender where necessary. For example, if the above  sentence should
+ * allow for the names of several people to be inserted, the  following sentence
+ * pattern can be used (with argument 0 the list of people's names,
+ * argument 1 the number of people, argument 2 their combined gender, and
+ * argument 3 the city name):
+ *
+ * <pre>{0} {1, plural,
+ * one {est {2, select, female {all&#xE9;e} other  {all&#xE9;}}}
+ * other {sont {2, select, female {all&#xE9;es} other {all&#xE9;s}}}
+ * }&#xE0; {3}.</pre>
+ *
+ * <h4>Patterns and Their Interpretation</h4>
+ *
+ * <p>The <code>SelectFormat</code> pattern string defines the phrase  output
+ * for each user-defined keyword.
+ * The pattern is a sequence of (keyword, message) pairs.
+ * A keyword is a "pattern identifier": [^[[:Pattern_Syntax:][:Pattern_White_Space:]]]+
+ *
+ * <p>Each message is a MessageFormat pattern string enclosed in {curly braces}.
+ *
+ * <p>You always have to define a phrase for the default keyword
+ * <code>other</code>; this phrase is returned when the keyword
+ * provided to
+ * the <code>format</code> method matches no other keyword.
+ * If a pattern does not provide a phrase for <code>other</code>, the  method
+ * it's provided to returns the error  <code>U_DEFAULT_KEYWORD_MISSING</code>.
+ * <br>
+ * Pattern_White_Space between keywords and messages is ignored.
+ * Pattern_White_Space within a message is preserved and output.
+ *
+ * <pre>Example:
+ * MessageFormat msgFmt = new MessageFormat("{0} est " +
+ *     "{1, select, female {all&#xE9;e} other {all&#xE9;}} &#xE0; Paris.",
+ *     new ULocale("fr"));
+ * Object args[] = {"Kirti","female"};
+ * System.out.println(msgFmt.format(args));
+ * </pre>
+ * <p>
+ * Produces the output:<br>
+ * <code>Kirti est all&#xE9;e &#xE0; Paris.</code>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class SelectFormat extends java.text.Format {
+
+/**
+ * Creates a new <code>SelectFormat</code> for a given pattern string.
+ * @param  pattern the pattern for this <code>SelectFormat</code>.
+ */
+
+public SelectFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the pattern used by this select format.
+ * Patterns and their interpretation are specified in the class description.
+ *
+ * @param pattern the pattern for this select format.
+ * @throws java.lang.IllegalArgumentException when the pattern is not a valid select format pattern.
+ */
+
+public void applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for this <code>SelectFormat</code>
+ *
+ * @return the pattern string
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Selects the phrase for the given keyword.
+ *
+ * @param keyword a phrase selection keyword.
+ * @return the string containing the formatted select message.
+ * @throws java.lang.IllegalArgumentException when the given keyword is not a "pattern identifier"
+ */
+
+public final java.lang.String format(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Selects the phrase for the given keyword.
+ * and appends the formatted message to the given <code>StringBuffer</code>.
+ * @param keyword a phrase selection keyword.
+ * @param toAppendTo the selected phrase will be appended to this
+ *        <code>StringBuffer</code>.
+ * @param pos will be ignored by this method.
+ * @throws java.lang.IllegalArgumentException when the given keyword is not a String
+ *         or not a "pattern identifier"
+ * @return the string buffer passed in as toAppendTo, with formatted text
+ *         appended.
+ */
+
+public java.lang.StringBuffer format(java.lang.Object keyword, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method is not supported by <code>SelectFormat</code>.
+ * @param source the string to be parsed.
+ * @param pos defines the position where parsing is to begin,
+ * and upon return, the position where parsing left off.  If the position
+ * has not changed upon return, then parsing failed.
+ * @return nothing because this method is not supported.
+ * @throws java.lang.UnsupportedOperationException thrown always.
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SimpleDateFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SimpleDateFormat.java
new file mode 100644
index 0000000..36d964c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SimpleDateFormat.java
@@ -0,0 +1,1028 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.lang.UCharacter;
+import android.icu.util.Calendar;
+import java.util.Date;
+import android.icu.util.TimeZone;
+import java.text.Format;
+import java.text.ParsePosition;
+import android.icu.util.ULocale.Category;
+import java.text.AttributedCharacterIterator;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.text.SimpleDateFormat}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>SimpleDateFormat</code> is a concrete class for formatting and
+ * parsing dates in a locale-sensitive manner. It allows for formatting
+ * (date -&gt; text), parsing (text -&gt; date), and normalization.
+ *
+ * <p>
+ * <code>SimpleDateFormat</code> allows you to start by choosing
+ * any user-defined patterns for date-time formatting. However, you
+ * are encouraged to create a date-time formatter with either
+ * <code>getTimeInstance</code>, <code>getDateInstance</code>, or
+ * <code>getDateTimeInstance</code> in <code>DateFormat</code>. Each
+ * of these class methods can return a date/time formatter initialized
+ * with a default format pattern. You may modify the format pattern
+ * using the <code>applyPattern</code> methods as desired.
+ * For more information on using these methods, see
+ * {@link android.icu.text.DateFormat DateFormat}.
+ *
+ * <p><strong>Date and Time Patterns:</strong></p>
+ *
+ * <p>Date and time formats are specified by <em>date and time pattern</em> strings.
+ * Within date and time pattern strings, all unquoted ASCII letters [A-Za-z] are reserved
+ * as pattern letters representing calendar fields. <code>SimpleDateFormat</code> supports
+ * the date and time formatting algorithm and pattern letters defined by <a href="http://www.unicode.org/reports/tr35/">UTS#35
+ * Unicode Locale Data Markup Language (LDML)</a>. The following pattern letters are
+ * currently available (note that the actual values depend on CLDR and may change from the
+ * examples shown here):</p>
+ * <blockquote>
+ * <table border="1">
+ *     <tr>
+ *         <th>Field</th>
+ *         <th style="text-align: center">Sym.</th>
+ *         <th style="text-align: center">No.</th>
+ *         <th>Example</th>
+ *         <th>Description</th>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="3">era</th>
+ *         <td style="text-align: center" rowspan="3">G</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>AD</td>
+ *         <td rowspan="3">Era - Replaced with the Era string for the current date. One to three letters for the
+ *         abbreviated form, four letters for the long (wide) form, five for the narrow form.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Anno Domini</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>A</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="6">year</th>
+ *         <td style="text-align: center">y</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>1996</td>
+ *         <td>Year. Normally the length specifies the padding, but for two letters it also specifies the maximum
+ *         length. Example:<div style="text-align: center">
+ *             <center>
+ *             <table border="1" cellpadding="2" cellspacing="0">
+ *                 <tr>
+ *                     <th>Year</th>
+ *                     <th style="text-align: right">y</th>
+ *                     <th style="text-align: right">yy</th>
+ *                     <th style="text-align: right">yyy</th>
+ *                     <th style="text-align: right">yyyy</th>
+ *                     <th style="text-align: right">yyyyy</th>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 1</td>
+ *                     <td style="text-align: right">1</td>
+ *                     <td style="text-align: right">01</td>
+ *                     <td style="text-align: right">001</td>
+ *                     <td style="text-align: right">0001</td>
+ *                     <td style="text-align: right">00001</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 12</td>
+ *                     <td style="text-align: right">12</td>
+ *                     <td style="text-align: right">12</td>
+ *                     <td style="text-align: right">012</td>
+ *                     <td style="text-align: right">0012</td>
+ *                     <td style="text-align: right">00012</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 123</td>
+ *                     <td style="text-align: right">123</td>
+ *                     <td style="text-align: right">23</td>
+ *                     <td style="text-align: right">123</td>
+ *                     <td style="text-align: right">0123</td>
+ *                     <td style="text-align: right">00123</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 1234</td>
+ *                     <td style="text-align: right">1234</td>
+ *                     <td style="text-align: right">34</td>
+ *                     <td style="text-align: right">1234</td>
+ *                     <td style="text-align: right">1234</td>
+ *                     <td style="text-align: right">01234</td>
+ *                 </tr>
+ *                 <tr>
+ *                     <td>AD 12345</td>
+ *                     <td style="text-align: right">12345</td>
+ *                     <td style="text-align: right">45</td>
+ *                     <td style="text-align: right">12345</td>
+ *                     <td style="text-align: right">12345</td>
+ *                     <td style="text-align: right">12345</td>
+ *                 </tr>
+ *             </table>
+ *             </center></div>
+ *         </td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">Y</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>1997</td>
+ *         <td>Year (in "Week of Year" based calendars). Normally the length specifies the padding,
+ *         but for two letters it also specifies the maximum length. This year designation is used in ISO
+ *         year-week calendar as defined by ISO 8601, but can be used in non-Gregorian based calendar systems
+ *         where week date processing is desired. May not always be the same value as calendar year.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">u</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>4601</td>
+ *         <td>Extended year. This is a single number designating the year of this calendar system, encompassing
+ *         all supra-year fields. For example, for the Julian calendar system, year numbers are positive, with an
+ *         era of BCE or CE. An extended year value for the Julian calendar system assigns positive values to CE
+ *         years and negative values to BCE years, with 1 BCE being year 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center" rowspan="3">U</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>??</td>
+ *         <td rowspan="3">Cyclic year name. Calendars such as the Chinese lunar calendar (and related calendars)
+ *         and the Hindu calendars use 60-year cycles of year names. Use one through three letters for the abbreviated
+ *         name, four for the full (wide) name, or five for the narrow name (currently the data only provides abbreviated names,
+ *         which will be used for all requested name widths). If the calendar does not provide cyclic year name data,
+ *         or if the year value to be formatted is out of the range of years for which cyclic name data is provided,
+ *         then numeric formatting is used (behaves like 'y').</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>(currently also ??)</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>(currently also ??)</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="6">quarter</th>
+ *         <td rowspan="3" style="text-align: center">Q</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>02</td>
+ *         <td rowspan="3">Quarter - Use one or two for the numerical quarter, three for the abbreviation, or four
+ *         for the full (wide) name (five for the narrow name is not yet supported).</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Q2</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>2nd quarter</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="3" style="text-align: center">q</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>02</td>
+ *         <td rowspan="3"><b>Stand-Alone</b> Quarter - Use one or two for the numerical quarter, three for the abbreviation,
+ *         or four for the full name (five for the narrow name is not yet supported).</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Q2</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>2nd quarter</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="8">month</th>
+ *         <td rowspan="4" style="text-align: center">M</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>09</td>
+ *         <td rowspan="4">Month - Use one or two for the numerical month, three for the abbreviation, four for
+ *         the full (wide) name, or five for the narrow name. With two ("MM"), the month number is zero-padded
+ *         if necessary (e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Sep</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>September</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>S</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="4" style="text-align: center">L</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>09</td>
+ *         <td rowspan="4"><b>Stand-Alone</b> Month - Use one or two for the numerical month, three for the abbreviation,
+ *         four for the full (wide) name, or 5 for the narrow name. With two ("LL"), the month number is zero-padded if
+ *         necessary (e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Sep</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>September</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>S</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="2">week</th>
+ *         <td style="text-align: center">w</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>27</td>
+ *         <td>Week of Year. Use "w" to show the minimum number of digits, or "ww" to always show two digits
+ *         (zero-padding if necessary, e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">W</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>3</td>
+ *         <td>Week of Month</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="4">day</th>
+ *         <td style="text-align: center">d</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>1</td>
+ *         <td>Date - Day of the month. Use "d" to show the minimum number of digits, or "dd" to always show
+ *         two digits (zero-padding if necessary, e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">D</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>345</td>
+ *         <td>Day of year</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">F</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>2</td>
+ *         <td>Day of Week in Month. The example is for the 2nd Wed in July</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">g</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>2451334</td>
+ *         <td>Modified Julian day. This is different from the conventional Julian day number in two regards.
+ *         First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number;
+ *         that is, it depends on the local time zone. It can be thought of as a single number that encompasses
+ *         all the date-related fields.</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="14">week<br>
+ *         day</th>
+ *         <td rowspan="4" style="text-align: center">E</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>Tue</td>
+ *         <td rowspan="4">Day of week - Use one through three letters for the short day, four for the full (wide) name,
+ *         five for the narrow name, or six for the short name.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Tuesday</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>T</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">6</td>
+ *         <td>Tu</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">e</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>2</td>
+ *         <td rowspan="5">Local day of week. Same as E except adds a numeric value that will depend on the local
+ *         starting day of the week, using one or two letters. For this example, Monday is the first day of the week.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Tue</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Tuesday</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>T</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">6</td>
+ *         <td>Tu</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">c</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>2</td>
+ *         <td rowspan="5"><b>Stand-Alone</b> local day of week - Use one letter for the local numeric value (same
+ *         as 'e'), three for the short day, four for the full (wide) name, five for the narrow name, or six for
+ *         the short name.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Tue</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Tuesday</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>T</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">6</td>
+ *         <td>Tu</td>
+ *     </tr>
+ *     <tr>
+ *         <th>period</th>
+ *         <td style="text-align: center">a</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>AM</td>
+ *         <td>AM or PM</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="4">hour</th>
+ *         <td style="text-align: center">h</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>11</td>
+ *         <td>Hour [1-12]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern
+ *         generation, it should match the 12-hour-cycle format preferred by the locale (h or K); it should not match
+ *         a 24-hour-cycle format (H or k). Use hh for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">H</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>13</td>
+ *         <td>Hour [0-23]. When used in skeleton data or in a skeleton passed in an API for flexible data pattern
+ *         generation, it should match the 24-hour-cycle format preferred by the locale (H or k); it should not match a
+ *         12-hour-cycle format (h or K). Use HH for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">K</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>0</td>
+ *         <td>Hour [0-11]. When used in a skeleton, only matches K or h, see above. Use KK for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">k</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>24</td>
+ *         <td>Hour [1-24]. When used in a skeleton, only matches k or H, see above. Use kk for zero padding.</td>
+ *     </tr>
+ *     <tr>
+ *         <th>minute</th>
+ *         <td style="text-align: center">m</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>59</td>
+ *         <td>Minute. Use "m" to show the minimum number of digits, or "mm" to always show two digits
+ *         (zero-padding if necessary, e.g. "08")..</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="3">second</th>
+ *         <td style="text-align: center">s</td>
+ *         <td style="text-align: center">1..2</td>
+ *         <td>12</td>
+ *         <td>Second. Use "s" to show the minimum number of digits, or "ss" to always show two digits
+ *         (zero-padding if necessary, e.g. "08").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">S</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>3450</td>
+ *         <td>Fractional Second - truncates (like other time fields) to the count of letters when formatting. Appends zeros if more than 3 letters specified. Truncates at three significant digits when parsing.
+ *         (example shows display using pattern SSSS for seconds value 12.34567)</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">A</td>
+ *         <td style="text-align: center">1..n</td>
+ *         <td>69540000</td>
+ *         <td>Milliseconds in day. This field behaves <i>exactly</i> like a composite of all time-related fields,
+ *         not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition
+ *         days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This
+ *         reflects the fact that is must be combined with the offset field to obtain a unique local time value.</td>
+ *     </tr>
+ *     <tr>
+ *         <th rowspan="23">zone</th>
+ *         <td rowspan="2" style="text-align: center">z</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>PDT</td>
+ *         <td>The <i>short specific non-location format</i>.
+ *         Where that is unavailable, falls back to the <i>short localized GMT format</i> ("O").</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Pacific Daylight Time</td>
+ *         <td>The <i>long specific non-location format</i>.
+ *         Where that is unavailable, falls back to the <i>long localized GMT format</i> ("OOOO").</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="3" style="text-align: center">Z</td>
+ *         <td style="text-align: center">1..3</td>
+ *         <td>-0800</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
+ *         The format is equivalent to RFC 822 zone format (when optional seconds field is absent).
+ *         This is equivalent to the "xxxx" specifier.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>GMT-8:00</td>
+ *         <td>The <i>long localized GMT format</i>.
+ *         This is equivalent to the "OOOO" specifier.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>-08:00<br>
+ *         -07:52:58</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.
+ *         This is equivalent to the "XXXXX" specifier.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="2" style="text-align: center">O</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>GMT-8</td>
+ *         <td>The <i>short localized GMT format</i>.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>GMT-08:00</td>
+ *         <td>The <i>long localized GMT format</i>.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="2" style="text-align: center">v</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>PT</td>
+ *         <td>The <i>short generic non-location format</i>.
+ *         Where that is unavailable, falls back to the <i>generic location format</i> ("VVVV"),
+ *         then the <i>short localized GMT format</i> as the final fallback.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Pacific Time</td>
+ *         <td>The <i>long generic non-location format</i>.
+ *         Where that is unavailable, falls back to <i>generic location format</i> ("VVVV").
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="4" style="text-align: center">V</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>uslax</td>
+ *         <td>The short time zone ID.
+ *         Where that is unavailable, the special short time zone ID <i>unk</i> (Unknown Zone) is used.<br>
+ *         <i><b>Note</b>: This specifier was originally used for a variant of the short specific non-location format,
+ *         but it was deprecated in the later version of the LDML specification. In CLDR 23/ICU 51, the definition of
+ *         the specifier was changed to designate a short time zone ID.</i></td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">2</td>
+ *         <td>America/Los_Angeles</td>
+ *         <td>The long time zone ID.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>Los Angeles</td>
+ *         <td>The exemplar city (location) for the time zone.
+ *         Where that is unavailable, the localized exemplar city name for the special zone <i>Etc/Unknown</i> is used
+ *         as the fallback (for example, "Unknown City"). </td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>Los Angeles Time</td>
+ *         <td>The <i>generic location format</i>.
+ *         Where that is unavailable, falls back to the <i>long localized GMT format</i> ("OOOO";
+ *         Note: Fallback is only necessary with a GMT-style Time Zone ID, like Etc/GMT-830.)<br>
+ *         This is especially useful when presenting possible timezone choices for user selection,
+ *         since the naming is more uniform than the "v" format.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">X</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>-08<br>
+ *         +0530<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours field and optional minutes field.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">2</td>
+ *         <td>-0800<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours and minutes fields.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>-08:00<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours and minutes fields.
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>-0800<br>
+ *         -075258<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>-08:00<br>
+ *         -07:52:58<br>
+ *         Z</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)
+ *         The ISO8601 UTC indicator "Z" is used when local time offset is 0.</td>
+ *     </tr>
+ *     <tr>
+ *         <td rowspan="5" style="text-align: center">x</td>
+ *         <td style="text-align: center">1</td>
+ *         <td>-08<br>
+ *         +0530</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours field and optional minutes field.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">2</td>
+ *         <td>-0800</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours and minutes fields.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">3</td>
+ *         <td>-08:00</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours and minutes fields.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">4</td>
+ *         <td>-0800<br>
+ *         -075258</td>
+ *         <td>The <i>ISO8601 basic format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="text-align: center">5</td>
+ *         <td>-08:00<br>
+ *         -07:52:58</td>
+ *         <td>The <i>ISO8601 extended format</i> with hours, minutes and optional seconds fields.
+ *         (Note: The seconds field is not supported by the ISO8601 specification.)</td>
+ *     </tr>
+ * </table>
+ *
+ * </blockquote>
+ * <p>
+ * Any characters in the pattern that are not in the ranges of ['a'..'z']
+ * and ['A'..'Z'] will be treated as quoted text. For instance, characters
+ * like ':', '.', ' ', '#' and '@' will appear in the resulting time text
+ * even they are not embraced within single quotes.
+ * <p>
+ * A pattern containing any invalid pattern letter will result in a thrown
+ * exception during formatting or parsing.
+ *
+ * <p>
+ * <strong>Examples Using the US Locale:</strong>
+ * <blockquote>
+ * <pre>
+ * Format Pattern                         Result
+ * --------------                         -------
+ * "yyyy.MM.dd G 'at' HH:mm:ss vvvv" -&gt;&gt;  1996.07.10 AD at 15:08:56 Pacific Time
+ * "EEE, MMM d, ''yy"                -&gt;&gt;  Wed, July 10, '96
+ * "h:mm a"                          -&gt;&gt;  12:08 PM
+ * "hh 'o''clock' a, zzzz"           -&gt;&gt;  12 o'clock PM, Pacific Daylight Time
+ * "K:mm a, vvv"                     -&gt;&gt;  0:00 PM, PT
+ * "yyyyy.MMMMM.dd GGG hh:mm aaa"    -&gt;&gt;  01996.July.10 AD 12:08 PM
+ * </pre>
+ * </blockquote>
+ * <strong>Code Sample:</strong>
+ * <blockquote>
+ * <pre>
+ * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST");
+ * pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2*60*60*1000);
+ * pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2*60*60*1000);
+ * <br>
+ * // Format the current time.
+ * SimpleDateFormat formatter
+ *     = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz");
+ * Date currentTime_1 = new Date();
+ * String dateString = formatter.format(currentTime_1);
+ * <br>
+ * // Parse the previous string back into a Date.
+ * ParsePosition pos = new ParsePosition(0);
+ * Date currentTime_2 = formatter.parse(dateString, pos);
+ * </pre>
+ * </blockquote>
+ * In the example, the time value <code>currentTime_2</code> obtained from
+ * parsing will be equal to <code>currentTime_1</code>. However, they may not be
+ * equal if the am/pm marker 'a' is left out from the format pattern while
+ * the "hour in am/pm" pattern symbol is used. This information loss can
+ * happen when formatting the time in PM.
+ *
+ * <p>When parsing a date string using the abbreviated year pattern ("yy"),
+ * SimpleDateFormat must interpret the abbreviated year
+ * relative to some century.  It does this by adjusting dates to be
+ * within 80 years before and 20 years after the time the SimpleDateFormat
+ * instance is created. For example, using a pattern of "MM/dd/yy" and a
+ * SimpleDateFormat instance created on Jan 1, 1997,  the string
+ * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64"
+ * would be interpreted as May 4, 1964.
+ * During parsing, only strings consisting of exactly two digits, as defined by
+ * {@link android.icu.lang.UCharacter#isDigit(int)}, will be parsed into the default
+ * century.
+ * Any other numeric string, such as a one digit string, a three or more digit
+ * string, or a two digit string that isn't all digits (for example, "-1"), is
+ * interpreted literally.  So "01/02/3" or "01/02/003" are parsed, using the
+ * same pattern, as Jan 2, 3 AD.  Likewise, "01/02/-3" is parsed as Jan 2, 4 BC.
+ *
+ * <p>If the year pattern does not have exactly two 'y' characters, the year is
+ * interpreted literally, regardless of the number of digits.  So using the
+ * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D.
+ *
+ * <p>When numeric fields abut one another directly, with no intervening delimiter
+ * characters, they constitute a run of abutting numeric fields.  Such runs are
+ * parsed specially.  For example, the format "HHmmss" parses the input text
+ * "123456" to 12:34:56, parses the input text "12345" to 1:23:45, and fails to
+ * parse "1234".  In other words, the leftmost field of the run is flexible,
+ * while the others keep a fixed width.  If the parse fails anywhere in the run,
+ * then the leftmost field is shortened by one character, and the entire run is
+ * parsed again. This is repeated until either the parse succeeds or the
+ * leftmost field is one character in length.  If the parse still fails at that
+ * point, the parse of the run fails.
+ *
+ * <p>For time zones that have no names, use strings GMT+hours:minutes or
+ * GMT-hours:minutes.
+ *
+ * <p>The calendar defines what is the first day of the week, the first week
+ * of the year, whether hours are zero based or not (0 vs 12 or 24), and the
+ * time zone. There is one common decimal format to handle all the numbers;
+ * the digit count is handled programmatically according to the pattern.
+ *
+ * <h3>Synchronization</h3>
+ *
+ * Date formats are not synchronized. It is recommended to create separate
+ * format instances for each thread. If multiple threads access a format
+ * concurrently, it must be synchronized externally.
+ *
+ * @see          android.icu.util.Calendar
+ * @see          android.icu.util.GregorianCalendar
+ * @see          android.icu.util.TimeZone
+ * @see          android.icu.text.DateFormat
+ * @see          android.icu.text.DateFormatSymbols
+ * @see          android.icu.text.DecimalFormat
+ * @see          android.icu.text.TimeZoneFormat
+ * @author       Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class SimpleDateFormat extends android.icu.text.DateFormat {
+
+/**
+ * Constructs a SimpleDateFormat using the default pattern for the default <code>FORMAT</code>
+ * locale.  <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ *
+ * @see android.icu.text.DateFormat
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public SimpleDateFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern in the default <code>FORMAT</code>
+ * locale.  <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public SimpleDateFormat(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern and locale.
+ * <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ */
+
+public SimpleDateFormat(java.lang.String pattern, java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern and locale.
+ * <b>Note:</b> Not all locales support SimpleDateFormat; for full
+ * generality, use the factory methods in the DateFormat class.
+ */
+
+public SimpleDateFormat(java.lang.String pattern, android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern , override and locale.
+ * @param pattern The pattern to be used
+ * @param override The override string.  A numbering system override string can take one of the following forms:
+ *     1). If just a numbering system name is specified, it applies to all numeric fields in the date format pattern.
+ *     2). To specify an alternate numbering system on a field by field basis, use the field letters from the pattern
+ *         followed by an = sign, followed by the numbering system name.  For example, to specify that just the year
+ *         be formatted using Hebrew digits, use the override "y=hebr".  Multiple overrides can be specified in a single
+ *         string by separating them with a semi-colon. For example, the override string "m=thai;y=deva" would format using
+ *         Thai digits for the month and Devanagari digits for the year.
+ * @param loc The locale to be used
+ */
+
+public SimpleDateFormat(java.lang.String pattern, java.lang.String override, android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a SimpleDateFormat using the given pattern and
+ * locale-specific symbol data.
+ * Warning: uses default <code>FORMAT</code> locale for digits!
+ */
+
+public SimpleDateFormat(java.lang.String pattern, android.icu.text.DateFormatSymbols formatData) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the 100-year period 2-digit years will be interpreted as being in
+ * to begin on the date the user specifies.
+ * @param startDate During parsing, two digit years will be placed in the range
+ * <code>startDate</code> to <code>startDate + 100 years</code>.
+ */
+
+public void set2DigitYearStart(java.util.Date startDate) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the beginning date of the 100-year period 2-digit years are interpreted
+ * as being within.
+ * @return the start of the 100-year period into which two digit years are
+ * parsed
+ */
+
+public java.util.Date get2DigitYearStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set a particular DisplayContext value in the formatter,
+ * such as CAPITALIZATION_FOR_STANDALONE. Note: For getContext, see
+ * DateFormat.
+ *
+ * @param context The DisplayContext value to set.
+ */
+
+public void setContext(android.icu.text.DisplayContext context) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a date or time, which is the standard millis
+ * since January 1, 1970, 00:00:00 GMT.
+ * <p>Example: using the US locale:
+ * "yyyy.MM.dd G 'at' HH:mm:ss zzz" -&gt;&gt; 1996.07.10 AD at 15:08:56 PDT
+ * @param cal the calendar whose date-time value is to be formatted into a date-time string
+ * @param toAppendTo where the new date-time text is to be appended
+ * @param pos the formatting position. On input: an alignment field,
+ * if desired. On output: the offsets of the alignment field.
+ * @return the formatted date-time string.
+ * @see android.icu.text.DateFormat
+ */
+
+public java.lang.StringBuffer format(android.icu.util.Calendar cal, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a DateFormat.Field constant associated with the specified format pattern
+ * character.
+ *
+ * @param ch The pattern character
+ * @return DateFormat.Field associated with the pattern character
+ */
+
+protected android.icu.text.DateFormat.Field patternCharToDateFormatField(char ch) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a single field, given its pattern character.  Subclasses may
+ * override this method in order to modify or add formatting
+ * capabilities.
+ * @param ch the pattern character
+ * @param count the number of times ch is repeated in the pattern
+ * @param beginOffset the offset of the output string at the start of
+ * this field; used to set pos when appropriate
+ * @param pos receives the position of a field, when appropriate
+ * @param fmtData the symbols for this formatter
+ */
+
+protected java.lang.String subFormat(char ch, int count, int beginOffset, java.text.FieldPosition pos, android.icu.text.DateFormatSymbols fmtData, android.icu.util.Calendar cal) throws java.lang.IllegalArgumentException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides superclass method and
+ * This method also clears per field NumberFormat instances
+ * previously set by {@link #setNumberFormat(java.lang.String,android.icu.text.NumberFormat)}
+ */
+
+public void setNumberFormat(android.icu.text.NumberFormat newNumberFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Formats a number with the specified minimum and maximum number of digits.
+ */
+
+protected java.lang.String zeroPaddingNumber(long value, int minDigits, int maxDigits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides DateFormat
+ * @see android.icu.text.DateFormat
+ */
+
+public void parse(java.lang.String text, android.icu.util.Calendar cal, java.text.ParsePosition parsePos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Attempt to match the text at a given position against an array of
+ * strings.  Since multiple strings in the array may match (for
+ * example, if the array contains "a", "ab", and "abc", all will match
+ * the input string "abcd") the longest match is returned.  As a side
+ * effect, the given field of <code>cal</code> is set to the index
+ * of the best match, if there is one.
+ * @param text the time text being parsed.
+ * @param start where to start parsing.
+ * @param field the date field being parsed.
+ * @param data the string array to parsed.
+ * @param cal
+ * @return the new start position if matching succeeded; a negative
+ * number indicating matching failure, otherwise.  As a side effect,
+ * sets the <code>cal</code> field <code>field</code> to the index
+ * of the best match, if matching succeeded.
+ */
+
+protected int matchString(java.lang.String text, int start, int field, java.lang.String[] data, android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Attempt to match the text at a given position against an array of quarter
+ * strings.  Since multiple strings in the array may match (for
+ * example, if the array contains "a", "ab", and "abc", all will match
+ * the input string "abcd") the longest match is returned.  As a side
+ * effect, the given field of <code>cal</code> is set to the index
+ * of the best match, if there is one.
+ * @param text the time text being parsed.
+ * @param start where to start parsing.
+ * @param field the date field being parsed.
+ * @param data the string array to parsed.
+ * @return the new start position if matching succeeded; a negative
+ * number indicating matching failure, otherwise.  As a side effect,
+ * sets the <code>cal</code> field <code>field</code> to the index
+ * of the best match, if matching succeeded.
+ */
+
+protected int matchQuarterString(java.lang.String text, int start, int field, java.lang.String[] data, android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Protected method that converts one field of the input string into a
+ * numeric field value in <code>cal</code>.  Returns -start (for
+ * ParsePosition) if failed.  Subclasses may override this method to
+ * modify or add parsing capabilities.
+ * @param text the time text to be parsed.
+ * @param start where to start parsing.
+ * @param ch the pattern character for the date field text to be parsed.
+ * @param count the count of a pattern character.
+ * @param obeyCount if true, then the next field directly abuts this one,
+ * and we should use the count to know when to stop parsing.
+ * @param ambiguousYear return parameter; upon return, if ambiguousYear[0]
+ * is true, then a two-digit year was parsed and may need to be readjusted.
+ * @param cal
+ * @return the new start position if matching succeeded; a negative
+ * number indicating matching failure, otherwise.  As a side effect,
+ * set the appropriate field of <code>cal</code> with the parsed
+ * value.
+ */
+
+protected int subParse(java.lang.String text, int start, char ch, int count, boolean obeyCount, boolean allowNegative, boolean[] ambiguousYear, android.icu.util.Calendar cal) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a pattern string describing this date format.
+ */
+
+public java.lang.String toPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a localized pattern string describing this date format.
+ * <p>
+ * <b>Note:</b> This implementation depends on {@link android.icu.text.DateFormatSymbols#getLocalPatternChars() DateFormatSymbols#getLocalPatternChars()}
+ * to get localized format pattern characters. ICU does not include
+ * localized pattern character data, therefore, unless user sets localized
+ * pattern characters manually, this method returns the same result as
+ * {@link #toPattern()}.
+ */
+
+public java.lang.String toLocalizedPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Apply the given unlocalized pattern string to this date format.
+ */
+
+public void applyPattern(java.lang.String pat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Apply the given localized pattern string to this date format.
+ */
+
+public void applyLocalizedPattern(java.lang.String pat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the date/time formatting data.
+ * @return a copy of the date-time formatting data associated
+ * with this date-time formatter.
+ */
+
+public android.icu.text.DateFormatSymbols getDateFormatSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Allows you to set the date/time formatting data.
+ * @param newFormatSymbols the new symbols
+ */
+
+public void setDateFormatSymbols(android.icu.text.DateFormatSymbols newFormatSymbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Method for subclasses to access the DateFormatSymbols.
+ */
+
+protected android.icu.text.DateFormatSymbols getSymbols() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Gets the time zone formatter which this date/time
+ * formatter uses to format and parse a time zone.
+ *
+ * @return the time zone formatter which this date/time
+ * formatter uses.
+ */
+
+public android.icu.text.TimeZoneFormat getTimeZoneFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Allows you to set the time zone formatter.
+ *
+ * @param tzfmt the new time zone formatter
+ */
+
+public void setTimeZoneFormat(android.icu.text.TimeZoneFormat tzfmt) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides Cloneable
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode.
+ * Generates the hash code for the SimpleDateFormat object
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Format the object to an attributed string, and return the corresponding iterator
+ * Overrides superclass method.
+ *
+ * @param obj The object to format
+ * @return <code>AttributedCharacterIterator</code> describing the formatted value.
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * allow the user to set the NumberFormat for several fields
+ * It can be a single field like: "y"(year) or "M"(month)
+ * It can be several field combined together: "yMd"(year, month and date)
+ * Note:
+ * 1 symbol field is enough for multiple symbol fields (so "y" will override "yy", "yyy")
+ * If the field is not numeric, then override has no effect (like "MMM" will use abbreviation, not numerical field)
+ *
+ * @param fields the fields to override
+ * @param overrideNF the NumbeferFormat used
+ * @exception java.lang.IllegalArgumentException when the fields contain invalid field
+ */
+
+public void setNumberFormat(java.lang.String fields, android.icu.text.NumberFormat overrideNF) { throw new RuntimeException("Stub!"); }
+
+/**
+ * give the NumberFormat used for the field like 'y'(year) and 'M'(year)
+ *
+ * @param field the field the user wants
+ * @return override NumberFormat used for the field
+ */
+
+public android.icu.text.NumberFormat getNumberFormat(char field) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/StringPrepParseException.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/StringPrepParseException.java
new file mode 100644
index 0000000..5aedccc
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/StringPrepParseException.java
@@ -0,0 +1,159 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2003-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.ParseException;
+
+/**
+ * Exception that signals an error has occurred while parsing the
+ * input to StringPrep or IDNA.
+ *
+ * @author Ram Viswanadha
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class StringPrepParseException extends java.text.ParseException {
+
+/**
+ * Construct a ParseException object with the given message
+ * and error code
+ *
+ * @param message A string describing the type of error that occurred
+ * @param error   The error that has occurred
+ */
+
+public StringPrepParseException(java.lang.String message, int error) { super(null, 0); throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a ParseException object with the given message and
+ * error code
+ *
+ * @param message A string describing the type of error that occurred
+ * @param error   The error that has occurred
+ * @param rules   The input rules string
+ * @param pos     The position of error in the rules string
+ */
+
+public StringPrepParseException(java.lang.String message, int error, java.lang.String rules, int pos) { super(null, 0); throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct  a ParseException object with the given message and error code
+ *
+ * @param message    A string describing the type of error that occurred
+ * @param error      The error that has occurred
+ * @param rules      The input rules string
+ * @param pos        The position of error in the rules string
+ * @param lineNumber The line number at which the error has occurred.
+ *                   If the parse engine is not using this field, it should set it to zero.  Otherwise
+ *                   it should be a positive integer. The default value of this field
+ *                   is -1. It will be set to 0 if the code populating this struct is not
+ *                   using line numbers.
+ */
+
+public StringPrepParseException(java.lang.String message, int error, java.lang.String rules, int pos, int lineNumber) { super(null, 0); throw new RuntimeException("Stub!"); }
+
+/**
+ * Compare this ParseException to another and evaluate if they are equal.
+ * The comparison works only on the type of error and does not compare
+ * the rules strings, if any, for equality.
+ *
+ * @param other The exception that this object should be compared to
+ * @return true if the objects are equal, false if unequal
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Mock implementation of hashCode(). This implementation always returns a constant
+ * value. When Java assertion is enabled, this method triggers an assertion failure.
+ * @return a hash code value for this object.
+ * @hide original deprecated declaration
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the position of error in the rules string
+ *
+ * @return String
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the error code of this exception.
+ * This method is only used for testing to verify the error.
+ * @return The error code
+ */
+
+public int getError() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public static final int ACE_PREFIX_ERROR = 6; // 0x6
+
+/**
+ */
+
+public static final int BUFFER_OVERFLOW_ERROR = 9; // 0x9
+
+/**
+ */
+
+public static final int CHECK_BIDI_ERROR = 4; // 0x4
+
+/**
+ */
+
+public static final int DOMAIN_NAME_TOO_LONG_ERROR = 11; // 0xb
+
+/**
+ */
+
+public static final int ILLEGAL_CHAR_FOUND = 1; // 0x1
+
+/**
+ */
+
+public static final int INVALID_CHAR_FOUND = 0; // 0x0
+
+/**
+ */
+
+public static final int LABEL_TOO_LONG_ERROR = 8; // 0x8
+
+/**
+ */
+
+public static final int PROHIBITED_ERROR = 2; // 0x2
+
+/**
+ */
+
+public static final int STD3_ASCII_RULES_ERROR = 5; // 0x5
+
+/**
+ */
+
+public static final int UNASSIGNED_ERROR = 3; // 0x3
+
+/**
+ */
+
+public static final int VERIFICATION_ERROR = 7; // 0x7
+
+/**
+ */
+
+public static final int ZERO_LENGTH_LABEL = 10; // 0xa
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/StringSearch.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/StringSearch.java
new file mode 100644
index 0000000..13233a1
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/StringSearch.java
@@ -0,0 +1,290 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ *
+ * <tt>StringSearch</tt> is a {@link android.icu.text.SearchIterator SearchIterator} that provides
+ * language-sensitive text searching based on the comparison rules defined
+ * in a {@link android.icu.text.RuleBasedCollator RuleBasedCollator} object.
+ * StringSearch ensures that language eccentricity can be
+ * handled, e.g. for the German collator, characters &szlig; and SS will be matched
+ * if case is chosen to be ignored.
+ * See the <a href="http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm">
+ * "ICU Collation Design Document"</a> for more information.
+ * <p>
+ * There are 2 match options for selection:<br>
+ * Let S' be the sub-string of a text string S between the offsets start and
+ * end [start, end].
+ * <br>
+ * A pattern string P matches a text string S at the offsets [start, end]
+ * if
+ * <pre>
+ * option 1. Some canonical equivalent of P matches some canonical equivalent
+ *           of S'
+ * option 2. P matches S' and if P starts or ends with a combining mark,
+ *           there exists no non-ignorable combining mark before or after S?
+ *           in S respectively.
+ * </pre>
+ * Option 2. is the default.
+ * <p>
+ * This search has APIs similar to that of other text iteration mechanisms
+ * such as the break iterators in {@link android.icu.text.BreakIterator BreakIterator}. Using these
+ * APIs, it is easy to scan through text looking for all occurrences of
+ * a given pattern. This search iterator allows changing of direction by
+ * calling a {@link #reset} followed by a {@link #next} or {@link #previous}.
+ * Though a direction change can occur without calling {@link #reset} first,
+ * this operation comes with some speed penalty.
+ * Match results in the forward direction will match the result matches in
+ * the backwards direction in the reverse order
+ * <p>
+ * {@link android.icu.text.SearchIterator SearchIterator} provides APIs to specify the starting position
+ * within the text string to be searched, e.g. {@link android.icu.text.SearchIterator#setIndex setIndex},
+ * {@link android.icu.text.SearchIterator#preceding preceding} and {@link android.icu.text.SearchIterator#following following}.
+ * Since the starting position will be set as it is specified, please take note that
+ * there are some danger points at which the search may render incorrect
+ * results:
+ * <ul>
+ * <li> In the midst of a substring that requires normalization.
+ * <li> If the following match is to be found, the position should not be the
+ *      second character which requires swapping with the preceding
+ *      character. Vice versa, if the preceding match is to be found, the
+ *      position to search from should not be the first character which
+ *      requires swapping with the next character. E.g certain Thai and
+ *      Lao characters require swapping.
+ * <li> If a following pattern match is to be found, any position within a
+ *      contracting sequence except the first will fail. Vice versa if a
+ *      preceding pattern match is to be found, an invalid starting point
+ *      would be any character within a contracting sequence except the last.
+ * </ul>
+ * <p>
+ * A {@link android.icu.text.BreakIterator BreakIterator} can be used if only matches at logical breaks are desired.
+ * Using a {@link android.icu.text.BreakIterator BreakIterator} will only give you results that exactly matches the
+ * boundaries given by the {@link android.icu.text.BreakIterator BreakIterator}. For instance the pattern "e" will
+ * not be found in the string "\u00e9" if a character break iterator is used.
+ * <p>
+ * Options are provided to handle overlapping matches.
+ * E.g. In English, overlapping matches produces the result 0 and 2
+ * for the pattern "abab" in the text "ababab", where mutually
+ * exclusive matches only produces the result of 0.
+ * <p>
+ * Options are also provided to implement "asymmetric search" as described in
+ * <a href="http://www.unicode.org/reports/tr10/#Asymmetric_Search">
+ * UTS #10 Unicode Collation Algorithm</a>, specifically the ElementComparisonType
+ * values.
+ * <p>
+ * Though collator attributes will be taken into consideration while
+ * performing matches, there are no APIs here for setting and getting the
+ * attributes. These attributes can be set by getting the collator
+ * from {@link #getCollator} and using the APIs in {@link android.icu.text.RuleBasedCollator RuleBasedCollator}.
+ * Lastly to update <tt>StringSearch</tt> to the new collator attributes,
+ * {@link #reset} has to be called.
+ * <p>
+ * Restriction: <br>
+ * Currently there are no composite characters that consists of a
+ * character with combining class &gt; 0 before a character with combining
+ * class == 0. However, if such a character exists in the future,
+ * <tt>StringSearch</tt> does not guarantee the results for option 1.
+ * <p>
+ * Consult the {@link android.icu.text.SearchIterator SearchIterator} documentation for information on
+ * and examples of how to use instances of this class to implement text
+ * searching.
+ * <p>
+ * Note, <tt>StringSearch</tt> is not to be subclassed.
+ * </p>
+ * @see android.icu.text.SearchIterator
+ * @see android.icu.text.RuleBasedCollator
+ * @author Laura Werner, synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class StringSearch extends android.icu.text.SearchIterator {
+
+/**
+ * Initializes the iterator to use the language-specific rules defined in
+ * the argument collator to search for argument pattern in the argument
+ * target text. The argument <code>breakiter</code> is used to define logical matches.
+ * See super class documentation for more details on the use of the target
+ * text and {@link android.icu.text.BreakIterator BreakIterator}.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param collator {@link android.icu.text.RuleBasedCollator RuleBasedCollator} that defines the language rules
+ * @param breakiter A {@link android.icu.text.BreakIterator BreakIterator} that is used to determine the
+ *                boundaries of a logical match. This argument can be null.
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0
+ * @see android.icu.text.BreakIterator
+ * @see android.icu.text.RuleBasedCollator
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, android.icu.text.RuleBasedCollator collator, android.icu.text.BreakIterator breakiter) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules defined in
+ * the argument collator to search for argument pattern in the argument
+ * target text. No {@link android.icu.text.BreakIterator BreakIterator}s are set to test for logical matches.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param collator {@link android.icu.text.RuleBasedCollator RuleBasedCollator} that defines the language rules
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0
+ * @see android.icu.text.RuleBasedCollator
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, android.icu.text.RuleBasedCollator collator) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules and
+ * break iterator rules defined in the argument locale to search for
+ * argument pattern in the argument target text.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param locale locale to use for language and break iterator rules
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0. ClassCastException thrown if the collator for
+ *            the specified locale is not a RuleBasedCollator.
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, java.util.Locale locale) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules and
+ * break iterator rules defined in the argument locale to search for
+ * argument pattern in the argument target text.
+ * See super class documentation for more details on the use of the target
+ * text and {@link android.icu.text.BreakIterator BreakIterator}.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @param locale locale to use for language and break iterator rules
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0. ClassCastException thrown if the collator for
+ *            the specified locale is not a RuleBasedCollator.
+ * @see android.icu.text.BreakIterator
+ * @see android.icu.text.RuleBasedCollator
+ * @see android.icu.text.SearchIterator
+ */
+
+public StringSearch(java.lang.String pattern, java.text.CharacterIterator target, android.icu.util.ULocale locale) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Initializes the iterator to use the language-specific rules and
+ * break iterator rules defined in the default locale to search for
+ * argument pattern in the argument target text.
+ * @param pattern text to look for.
+ * @param target target text to search for pattern.
+ * @throws java.lang.IllegalArgumentException thrown when argument target is null,
+ *            or of length 0. ClassCastException thrown if the collator for
+ *            the default locale is not a RuleBasedCollator.
+ */
+
+public StringSearch(java.lang.String pattern, java.lang.String target) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the {@link android.icu.text.RuleBasedCollator RuleBasedCollator} used for the language rules.
+ * <p>
+ * Since <tt>StringSearch</tt> depends on the returned {@link android.icu.text.RuleBasedCollator RuleBasedCollator}, any
+ * changes to the {@link android.icu.text.RuleBasedCollator RuleBasedCollator} result should follow with a call to
+ * either {@link #reset()} or {@link #setCollator(android.icu.text.RuleBasedCollator)} to ensure the correct
+ * search behavior.
+ * </p>
+ * @return {@link android.icu.text.RuleBasedCollator RuleBasedCollator} used by this <tt>StringSearch</tt>
+ * @see android.icu.text.RuleBasedCollator
+ * @see #setCollator
+ */
+
+public android.icu.text.RuleBasedCollator getCollator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the {@link android.icu.text.RuleBasedCollator RuleBasedCollator} to be used for language-specific searching.
+ * <p>
+ * The iterator's position will not be changed by this method.
+ * @param collator to use for this <tt>StringSearch</tt>
+ * @throws java.lang.IllegalArgumentException thrown when collator is null
+ * @see #getCollator
+ */
+
+public void setCollator(android.icu.text.RuleBasedCollator collator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the pattern for which <tt>StringSearch</tt> is searching for.
+ * @return the pattern searched for
+ */
+
+public java.lang.String getPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the pattern to search for.
+ * The iterator's position will not be changed by this method.
+ * @param pattern for searching
+ * @see #getPattern
+ * @exception java.lang.IllegalArgumentException thrown if pattern is null or of
+ *               length 0
+ */
+
+public void setPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines whether canonical matches (option 1, as described in the
+ * class documentation) is set.
+ * See setCanonical(boolean) for more information.
+ * @see #setCanonical
+ * @return true if canonical matches is set, false otherwise
+ */
+
+public boolean isCanonical() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set the canonical match mode. See class documentation for details.
+ * The default setting for this property is false.
+ * @param allowCanonical flag indicator if canonical matches are allowed
+ * @see #isCanonical
+ */
+
+public void setCanonical(boolean allowCanonical) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public void setTarget(java.text.CharacterIterator text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int getIndex() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public void setIndex(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleNext(int position) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handlePrevious(int position) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SymbolTable.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SymbolTable.java
new file mode 100644
index 0000000..fabbf95
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/SymbolTable.java
@@ -0,0 +1,91 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2005, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * An interface that defines both lookup protocol and parsing of
+ * symbolic names.
+ *
+ * <p>This interface is used by UnicodeSet to resolve $Variable style
+ * references that appear in set patterns.  RBBI and Transliteration
+ * both independently implement this interface.
+ *
+ * <p>A symbol table maintains two kinds of mappings.  The first is
+ * between symbolic names and their values.  For example, if the
+ * variable with the name "start" is set to the value "alpha"
+ * (perhaps, though not necessarily, through an expression such as
+ * "$start=alpha"), then the call lookup("start") will return the
+ * char[] array ['a', 'l', 'p', 'h', 'a'].
+ *
+ * <p>The second kind of mapping is between character values and
+ * UnicodeMatcher objects.  This is used by RuleBasedTransliterator,
+ * which uses characters in the private use area to represent objects
+ * such as UnicodeSets.  If U+E015 is mapped to the UnicodeSet [a-z],
+ * then lookupMatcher(0xE015) will return the UnicodeSet [a-z].
+ *
+ * <p>Finally, a symbol table defines parsing behavior for symbolic
+ * names.  All symbolic names start with the SYMBOL_REF character.
+ * When a parser encounters this character, it calls parseReference()
+ * with the position immediately following the SYMBOL_REF.  The symbol
+ * table parses the name, if there is one, and returns it.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface SymbolTable {
+
+/**
+ * Lookup the characters associated with this string and return it.
+ * Return <tt>null</tt> if no such name exists.  The resultant
+ * array may have length zero.
+ * @param s the symbolic name to lookup
+ * @return a char array containing the name's value, or null if
+ * there is no mapping for s.
+ */
+
+public char[] lookup(java.lang.String s);
+
+/**
+ * Lookup the UnicodeMatcher associated with the given character, and
+ * return it.  Return <tt>null</tt> if not found.
+ * @param ch a 32-bit code point from 0 to 0x10FFFF inclusive.
+ * @return the UnicodeMatcher object represented by the given
+ * character, or null if there is no mapping for ch.
+ */
+
+public android.icu.text.UnicodeMatcher lookupMatcher(int ch);
+
+/**
+ * Parse a symbol reference name from the given string, starting
+ * at the given position.  If no valid symbol reference name is
+ * found, return null and leave pos unchanged.  That is, if the
+ * character at pos cannot start a name, or if pos is at or after
+ * text.length(), then return null.  This indicates an isolated
+ * SYMBOL_REF character.
+ * @param text the text to parse for the name
+ * @param pos on entry, the index of the first character to parse.
+ * This is the character following the SYMBOL_REF character.  On
+ * exit, the index after the last parsed character.  If the parse
+ * failed, pos is unchanged on exit.
+ * @param limit the index after the last character to be parsed.
+ * @return the parsed name, or null if there is no valid symbolic
+ * name at the given position.
+ */
+
+public java.lang.String parseReference(java.lang.String text, java.text.ParsePosition pos, int limit);
+
+/**
+ * The character preceding a symbol reference name.
+ */
+
+public static final char SYMBOL_REF = 36; // 0x0024 '$'
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneFormat.java
new file mode 100644
index 0000000..a43cae8
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneFormat.java
@@ -0,0 +1,690 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2011-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import java.text.ParsePosition;
+import android.icu.util.TimeZone;
+import android.icu.util.Output;
+import java.util.EnumSet;
+import java.text.ParseException;
+
+/**
+ * <code>TimeZoneFormat</code> supports time zone display name formatting and parsing.
+ * An instance of TimeZoneFormat works as a subformatter of {@link android.icu.text.SimpleDateFormat SimpleDateFormat},
+ * but you can also directly get a new instance of <code>TimeZoneFormat</code> and
+ * formatting/parsing time zone display names.
+ * <p>
+ * ICU implements the time zone display names defined by <a href="http://www.unicode.org/reports/tr35/">UTS#35
+ * Unicode Locale Data Markup Language (LDML)</a>. {@link android.icu.text.TimeZoneNames TimeZoneNames} represents the
+ * time zone display name data model and this class implements the algorithm for actual
+ * formatting and parsing.
+ *
+ * @see android.icu.text.SimpleDateFormat
+ * @see android.icu.text.TimeZoneNames
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class TimeZoneFormat extends android.icu.text.UFormat implements android.icu.util.Freezable<android.icu.text.TimeZoneFormat>, java.io.Serializable {
+
+/**
+ * The protected constructor for subclassing.
+ * @param locale the locale
+ */
+
+protected TimeZoneFormat(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a frozen instance of <code>TimeZoneFormat</code> for the given locale.
+ * <p><b>Note</b>: The instance returned by this method is frozen. If you want to
+ * customize a TimeZoneFormat, you must use {@link #cloneAsThawed()} to get a
+ * thawed copy first.
+ *
+ * @param locale the locale.
+ * @return a frozen instance of <code>TimeZoneFormat</code> for the given locale.
+ */
+
+public static android.icu.text.TimeZoneFormat getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a frozen instance of <code>TimeZoneFormat</code> for the given
+ * {@link java.util.Locale}.
+ * <p><b>Note</b>: The instance returned by this method is frozen. If you want to
+ * customize a TimeZoneFormat, you must use {@link #cloneAsThawed()} to get a
+ * thawed copy first.
+ *
+ * @param locale the {@link java.util.Locale Locale}.
+ * @return a frozen instance of <code>TimeZoneFormat</code> for the given locale.
+ */
+
+public static android.icu.text.TimeZoneFormat getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone display name data used by this instance.
+ *
+ * @return the time zone display name data.
+ * @see #setTimeZoneNames(TimeZoneNames)
+ */
+
+public android.icu.text.TimeZoneNames getTimeZoneNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone display name data to this instance.
+ *
+ * @param tznames the time zone display name data.
+ * @return this object.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getTimeZoneNames()
+ */
+
+public android.icu.text.TimeZoneFormat setTimeZoneNames(android.icu.text.TimeZoneNames tznames) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the localized GMT format pattern.
+ *
+ * @return the localized GMT format pattern.
+ * @see #setGMTPattern(String)
+ */
+
+public java.lang.String getGMTPattern() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the localized GMT format pattern. The pattern must contain
+ * a single argument {0}, for example "GMT {0}".
+ *
+ * @param pattern the localized GMT format pattern string
+ * @return this object.
+ * @throws java.lang.IllegalArgumentException when the pattern string does not contain "{0}"
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTPattern()
+ */
+
+public android.icu.text.TimeZoneFormat setGMTPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the offset pattern used for localized GMT format.
+ *
+ * @param type the offset pattern enum
+ * @see #setGMTOffsetPattern(GMTOffsetPatternType, String)
+ */
+
+public java.lang.String getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the offset pattern for the given offset type.
+ *
+ * @param type the offset pattern.
+ * @param pattern the pattern string.
+ * @return this object.
+ * @throws java.lang.IllegalArgumentException when the pattern string does not have required time field letters.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTOffsetPattern(GMTOffsetPatternType)
+ */
+
+public android.icu.text.TimeZoneFormat setGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType type, java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the decimal digit characters used for localized GMT format in a single string
+ * containing from 0 to 9 in the ascending order.
+ *
+ * @return the decimal digits for localized GMT format.
+ * @see #setGMTOffsetDigits(String)
+ */
+
+public java.lang.String getGMTOffsetDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the decimal digit characters used for localized GMT format.
+ *
+ * @param digits a string contains the decimal digit characters from 0 to 9 n the ascending order.
+ * @return this object.
+ * @throws java.lang.IllegalArgumentException when the string did not contain ten characters.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTOffsetDigits()
+ */
+
+public android.icu.text.TimeZoneFormat setGMTOffsetDigits(java.lang.String digits) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the localized GMT format string for GMT(UTC) itself (GMT offset is 0).
+ *
+ * @return the localized GMT string string for GMT(UTC) itself.
+ * @see #setGMTZeroFormat(String)
+ */
+
+public java.lang.String getGMTZeroFormat() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the localized GMT format string for GMT(UTC) itself (GMT offset is 0).
+ *
+ * @param gmtZeroFormat the localized GMT format string for GMT(UTC).
+ * @return this object.
+ * @throws java.lang.UnsupportedOperationException when this object is frozen.
+ * @see #getGMTZeroFormat()
+ */
+
+public android.icu.text.TimeZoneFormat setGMTZeroFormat(java.lang.String gmtZeroFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the default parse options.
+ * <p>
+ * <b>Note:</b> By default, an instance of <code>TimeZoneFormat</code>
+ * created by {@link #getInstance(android.icu.util.ULocale)} has no parse options set.
+ *
+ * @param options the default parse options.
+ * @return this object.
+ * @see android.icu.text.TimeZoneFormat.ParseOption
+ */
+
+public android.icu.text.TimeZoneFormat setDefaultParseOptions(java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the default parse options used by this <code>TimeZoneFormat</code> instance.
+ * @return the default parse options.
+ * @see android.icu.text.TimeZoneFormat.ParseOption
+ */
+
+public java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> getDefaultParseOptions() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 8601 basic time zone string for the given offset.
+ * For example, "-08", "-0830" and "Z"
+ *
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0.
+ * @param isShort true if shortest form is used.
+ * @param ignoreSeconds true if non-zero offset seconds is appended.
+ * @return the ISO 8601 basic format.
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ * @see #formatOffsetISO8601Extended(int, boolean, boolean, boolean)
+ * @see #parseOffsetISO8601(String, ParsePosition)
+ */
+
+public final java.lang.String formatOffsetISO8601Basic(int offset, boolean useUtcIndicator, boolean isShort, boolean ignoreSeconds) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 8601 extended time zone string for the given offset.
+ * For example, "-08:00", "-08:30" and "Z"
+ *
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @param useUtcIndicator true if ISO 8601 UTC indicator "Z" is used when the offset is 0.
+ * @param isShort true if shortest form is used.
+ * @param ignoreSeconds true if non-zero offset seconds is appended.
+ * @return the ISO 8601 extended format.
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ * @see #formatOffsetISO8601Basic(int, boolean, boolean, boolean)
+ * @see #parseOffsetISO8601(String, ParsePosition)
+ */
+
+public final java.lang.String formatOffsetISO8601Extended(int offset, boolean useUtcIndicator, boolean isShort, boolean ignoreSeconds) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the localized GMT(UTC) offset format for the given offset.
+ * The localized GMT offset is defined by;
+ * <ul>
+ * <li>GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern()})
+ * <li>Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType)})
+ * <li>Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits()})
+ * <li>GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat()})
+ * </ul>
+ * This format always uses 2 digit hours and minutes. When the given offset has non-zero
+ * seconds, 2 digit seconds field will be appended. For example,
+ * GMT+05:00 and GMT+05:28:06.
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @return the localized GMT format string
+ * @see #parseOffsetLocalizedGMT(String, ParsePosition)
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ */
+
+public java.lang.String formatOffsetLocalizedGMT(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the short localized GMT(UTC) offset format for the given offset.
+ * The short localized GMT offset is defined by;
+ * <ul>
+ * <li>GMT format pattern (e.g. "GMT {0}" - see {@link #getGMTPattern()})
+ * <li>Offset time pattern (e.g. "+HH:mm" - see {@link #getGMTOffsetPattern(android.icu.text.TimeZoneFormat.GMTOffsetPatternType)})
+ * <li>Offset digits (e.g. "0123456789" - see {@link #getGMTOffsetDigits()})
+ * <li>GMT zero format (e.g. "GMT" - see {@link #getGMTZeroFormat()})
+ * </ul>
+ * This format uses the shortest representation of offset. The hours field does not
+ * have leading zero and lower fields with zero will be truncated. For example,
+ * GMT+5 and GMT+530.
+ * @param offset the offset from GMT(UTC) in milliseconds.
+ * @return the short localized GMT format string
+ * @see #parseOffsetLocalizedGMT(String, ParsePosition)
+ * @throws java.lang.IllegalArgumentException if the specified offset is out of supported range
+ * (-24 hours &lt; offset &lt; +24 hours).
+ */
+
+public java.lang.String formatOffsetShortLocalizedGMT(int offset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name of the time zone at the given date for
+ * the style.
+ *
+ * <p><b>Note</b>: A style may have fallback styles defined. For example,
+ * when <code>GENERIC_LONG</code> is requested, but there is no display name
+ * data available for <code>GENERIC_LONG</code> style, the implementation
+ * may use <code>GENERIC_LOCATION</code> or <code>LOCALIZED_GMT</code>.
+ * See UTS#35 UNICODE LOCALE DATA MARKUP LANGUAGE (LDML)
+ * <a href="http://www.unicode.org/reports/tr35/#Time_Zone_Fallback">Appendix J: Time Zone Display Name</a>
+ * for the details.
+ *
+ * @param style the style enum (e.g. <code>GENERIC_LONG</code>, <code>LOCALIZED_GMT</code>...)
+ * @param tz the time zone.
+ * @param date the date.
+ * @return the display name of the time zone.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #format(Style, TimeZone, long, Output)
+ */
+
+public final java.lang.String format(android.icu.text.TimeZoneFormat.Style style, android.icu.util.TimeZone tz, long date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name of the time zone at the given date for
+ * the style. This method takes an extra argument <code>Output&lt;TimeType&gt; timeType</code>
+ * in addition to the argument list of {@link #format(android.icu.text.TimeZoneFormat.Style,android.icu.util.TimeZone,long)}.
+ * The argument is used for receiving the time type (standard time
+ * or daylight saving time, or unknown) actually used for the display name.
+ *
+ * @param style the style enum (e.g. <code>GENERIC_LONG</code>, <code>LOCALIZED_GMT</code>...)
+ * @param tz the time zone.
+ * @param date the date.
+ * @param timeType the output argument for receiving the time type (standard/daylight/unknown)
+ * used for the display name, or specify null if the information is not necessary.
+ * @return the display name of the time zone.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #format(Style, TimeZone, long)
+ */
+
+public java.lang.String format(android.icu.text.TimeZoneFormat.Style style, android.icu.util.TimeZone tz, long date, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType> timeType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns offset from GMT(UTC) in milliseconds for the given ISO 8601
+ * basic or extended time zone string. When the given string is not an ISO 8601 time
+ * zone string, this method sets the current position as the error index
+ * to <code>ParsePosition pos</code> and returns 0.
+ *
+ * @param text the text contains ISO 8601 style time zone string (e.g. "-08", "-0800", "-08:00", and "Z")
+ * at the position.
+ * @param pos the position.
+ * @return the offset from GMT(UTC) in milliseconds for the given ISO 8601 style
+ * time zone string.
+ * @see #formatOffsetISO8601Basic(int, boolean, boolean, boolean)
+ * @see #formatOffsetISO8601Extended(int, boolean, boolean, boolean)
+ */
+
+public final int parseOffsetISO8601(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns offset from GMT(UTC) in milliseconds for the given localized GMT
+ * offset format string. When the given string cannot be parsed, this method
+ * sets the current position as the error index to <code>ParsePosition pos</code>
+ * and returns 0.
+ *
+ * @param text the text contains a localized GMT offset string at the position.
+ * @param pos the position.
+ * @return the offset from GMT(UTC) in milliseconds for the given localized GMT
+ * offset format string.
+ * @see #formatOffsetLocalizedGMT(int)
+ */
+
+public int parseOffsetLocalizedGMT(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns offset from GMT(UTC) in milliseconds for the given short localized GMT
+ * offset format string. When the given string cannot be parsed, this method
+ * sets the current position as the error index to <code>ParsePosition pos</code>
+ * and returns 0.
+ *
+ * @param text the text contains a short localized GMT offset string at the position.
+ * @param pos the position.
+ * @return the offset from GMT(UTC) in milliseconds for the given short localized GMT
+ * offset format string.
+ * @see #formatOffsetShortLocalizedGMT(int)
+ */
+
+public int parseOffsetShortLocalizedGMT(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> by parsing the time zone string according to
+ * the parse position, the style and the parse options.
+ *
+ * @param text the text contains a time zone string at the position.
+ * @param style the format style.
+ * @param pos the position.
+ * @param options the parse options.
+ * @param timeType The output argument for receiving the time type (standard/daylight/unknown),
+ * or specify null if the information is not necessary.
+ * @return A <code>TimeZone</code>, or null if the input could not be parsed.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #format(Style, TimeZone, long, Output)
+ */
+
+public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style style, java.lang.String text, java.text.ParsePosition pos, java.util.EnumSet<android.icu.text.TimeZoneFormat.ParseOption> options, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType> timeType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> by parsing the time zone string according to
+ * the parse position, the style and the default parse options.
+ * <p>
+ * <b>Note</b>: This method is equivalent to {@link #parse(android.icu.text.TimeZoneFormat.Style,java.lang.String,java.text.ParsePosition,java.util.EnumSet,android.icu.util.Output)
+ * parse(style, text, pos, null, timeType)}.
+ *
+ * @param text the text contains a time zone string at the position.
+ * @param style the format style
+ * @param pos the position.
+ * @param timeType The output argument for receiving the time type (standard/daylight/unknown),
+ * or specify null if the information is not necessary.
+ * @return A <code>TimeZone</code>, or null if the input could not be parsed.
+ * @see android.icu.text.TimeZoneFormat.Style
+ * @see #parse(Style, String, ParsePosition, EnumSet, Output)
+ * @see #format(Style, TimeZone, long, Output)
+ * @see #setDefaultParseOptions(EnumSet)
+ */
+
+public android.icu.util.TimeZone parse(android.icu.text.TimeZoneFormat.Style style, java.lang.String text, java.text.ParsePosition pos, android.icu.util.Output<android.icu.text.TimeZoneFormat.TimeType> timeType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> by parsing the time zone string according to
+ * the given parse position.
+ * <p>
+ * <b>Note</b>: This method is equivalent to {@link #parse(android.icu.text.TimeZoneFormat.Style,java.lang.String,java.text.ParsePosition,java.util.EnumSet,android.icu.util.Output)
+ * parse(Style.GENERIC_LOCATION, text, pos, EnumSet.of(ParseOption.ALL_STYLES), timeType)}.
+ *
+ * @param text the text contains a time zone string at the position.
+ * @param pos the position.
+ * @return A <code>TimeZone</code>, or null if the input could not be parsed.
+ * @see #parse(Style, String, ParsePosition, EnumSet, Output)
+ */
+
+public final android.icu.util.TimeZone parse(java.lang.String text, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>TimeZone</code> for the given text.
+ * <p>
+ * <b>Note</b>: The behavior of this method is equivalent to {@link #parse(java.lang.String,java.text.ParsePosition)}.
+ * @param text the time zone string
+ * @return A <code>TimeZone</code>.
+ * @throws java.text.ParseException when the input could not be parsed as a time zone string.
+ * @see #parse(String, ParsePosition)
+ */
+
+public final android.icu.util.TimeZone parse(java.lang.String text) throws java.text.ParseException { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.StringBuffer format(java.lang.Object obj, java.lang.StringBuffer toAppendTo, java.text.FieldPosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.Object parseObject(java.lang.String source, java.text.ParsePosition pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.TimeZoneFormat freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.text.TimeZoneFormat cloneAsThawed() { throw new RuntimeException("Stub!"); }
+/**
+ * Offset pattern type enum.
+ *
+ * @see android.icu.text.TimeZoneFormat#getGMTOffsetPattern(GMTOffsetPatternType)
+ * @see android.icu.text.TimeZoneFormat#setGMTOffsetPattern(GMTOffsetPatternType, String)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum GMTOffsetPatternType {
+/**
+ * Positive offset with hours and minutes fields
+ */
+
+POSITIVE_HM,
+/**
+ * Positive offset with hours, minutes and seconds fields
+ */
+
+POSITIVE_HMS,
+/**
+ * Negative offset with hours and minutes fields
+ */
+
+NEGATIVE_HM,
+/**
+ * Negative offset with hours, minutes and seconds fields
+ */
+
+NEGATIVE_HMS,
+/**
+ * Positive offset with hours field
+ */
+
+POSITIVE_H,
+/**
+ * Negative offset with hours field
+ */
+
+NEGATIVE_H;
+}
+
+/**
+ * Parse option enum, used for specifying optional parse behavior.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ParseOption {
+/**
+ * When a time zone display name is not found within a set of display names
+ * used for the specified style, look for the name from display names used
+ * by other styles.
+ */
+
+ALL_STYLES,
+/**
+ * When parsing a time zone display name in {@link android.icu.text.TimeZoneFormat.Style#SPECIFIC_SHORT Style#SPECIFIC_SHORT},
+ * look for the IANA tz database compatible zone abbreviations in addition
+ * to the localized names coming from the {@link android.icu.text.TimeZoneNames TimeZoneNames} currently
+ * used by the {@link android.icu.text.TimeZoneFormat TimeZoneFormat}.
+ */
+
+TZ_DATABASE_ABBREVIATIONS;
+}
+
+/**
+ * Time zone display format style enum used by format/parse APIs in <code>TimeZoneFormat</code>.
+ *
+ * @see android.icu.text.TimeZoneFormat#format(Style, TimeZone, long)
+ * @see android.icu.text.TimeZoneFormat#format(Style, TimeZone, long, Output)
+ * @see android.icu.text.TimeZoneFormat#parse(Style, String, ParsePosition, Output)
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Style {
+/**
+ * Generic location format, such as "United States Time (New York)" and "Italy Time".
+ * This style is equivalent to the LDML date format pattern "VVVV".
+ */
+
+GENERIC_LOCATION,
+/**
+ * Generic long non-location format, such as "Eastern Time".
+ * This style is equivalent to the LDML date format pattern "vvvv".
+ */
+
+GENERIC_LONG,
+/**
+ * Generic short non-location format, such as "ET".
+ * This style is equivalent to the LDML date format pattern "v".
+ */
+
+GENERIC_SHORT,
+/**
+ * Specific long format, such as "Eastern Standard Time".
+ * This style is equivalent to the LDML date format pattern "zzzz".
+ */
+
+SPECIFIC_LONG,
+/**
+ * Specific short format, such as "EST", "PDT".
+ * This style is equivalent to the LDML date format pattern "z".
+ */
+
+SPECIFIC_SHORT,
+/**
+ * Localized GMT offset format, such as "GMT-05:00", "UTC+0100"
+ * This style is equivalent to the LDML date format pattern "OOOO" and "ZZZZ"
+ */
+
+LOCALIZED_GMT,
+/**
+ * Short localized GMT offset format, such as "GMT-5", "UTC+1:30"
+ * This style is equivalent to the LDML date format pattern "O".
+ */
+
+LOCALIZED_GMT_SHORT,
+/**
+ * Short ISO 8601 local time difference (basic format) or the UTC indicator.
+ * For example, "-05", "+0530", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "X".
+ */
+
+ISO_BASIC_SHORT,
+/**
+ * Short ISO 8601 locale time difference (basic format).
+ * For example, "-05" and "+0530".
+ * This style is equivalent to the LDML date format pattern "x".
+ */
+
+ISO_BASIC_LOCAL_SHORT,
+/**
+ * Fixed width ISO 8601 local time difference (basic format) or the UTC indicator.
+ * For example, "-0500", "+0530", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XX".
+ */
+
+ISO_BASIC_FIXED,
+/**
+ * Fixed width ISO 8601 local time difference (basic format).
+ * For example, "-0500" and "+0530".
+ * This style is equivalent to the LDML date format pattern "xx".
+ */
+
+ISO_BASIC_LOCAL_FIXED,
+/**
+ * ISO 8601 local time difference (basic format) with optional seconds field, or the UTC indicator.
+ * For example, "-0500", "+052538", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XXXX".
+ */
+
+ISO_BASIC_FULL,
+/**
+ * ISO 8601 local time difference (basic format) with optional seconds field.
+ * For example, "-0500" and "+052538".
+ * This style is equivalent to the LDML date format pattern "xxxx".
+ */
+
+ISO_BASIC_LOCAL_FULL,
+/**
+ * Fixed width ISO 8601 local time difference (extended format) or the UTC indicator.
+ * For example, "-05:00", "+05:30", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XXX".
+ */
+
+ISO_EXTENDED_FIXED,
+/**
+ * Fixed width ISO 8601 local time difference (extended format).
+ * For example, "-05:00" and "+05:30".
+ * This style is equivalent to the LDML date format pattern "xxx" and "ZZZZZ".
+ */
+
+ISO_EXTENDED_LOCAL_FIXED,
+/**
+ * ISO 8601 local time difference (extended format) with optional seconds field, or the UTC indicator.
+ * For example, "-05:00", "+05:25:38", and "Z"(UTC).
+ * This style is equivalent to the LDML date format pattern "XXXXX".
+ */
+
+ISO_EXTENDED_FULL,
+/**
+ * ISO 8601 local time difference (extended format) with optional seconds field.
+ * For example, "-05:00" and "+05:25:38".
+ * This style is equivalent to the LDML date format pattern "xxxxx".
+ */
+
+ISO_EXTENDED_LOCAL_FULL,
+/**
+ * Time Zone ID, such as "America/Los_Angeles".
+ */
+
+ZONE_ID,
+/**
+ * Short Time Zone ID (BCP 47 Unicode location extension, time zone type value), such as "uslax".
+ */
+
+ZONE_ID_SHORT,
+/**
+ * Exemplar location, such as "Los Angeles" and "Paris".
+ */
+
+EXEMPLAR_LOCATION;
+}
+
+/**
+ * Time type enum used for receiving time type (standard time, daylight time or unknown)
+ * in <code>TimeZoneFormat</code> APIs.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum TimeType {
+/**
+ * Unknown
+ */
+
+UNKNOWN,
+/**
+ * Standard time
+ */
+
+STANDARD,
+/**
+ * Daylight saving time
+ */
+
+DAYLIGHT;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneNames.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneNames.java
new file mode 100644
index 0000000..296cf54
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/TimeZoneNames.java
@@ -0,0 +1,269 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2011-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.TimeZone;
+import android.icu.util.ULocale;
+
+/**
+ * <code>TimeZoneNames</code> is an abstract class representing the time zone display name data model defined
+ * by <a href="http://www.unicode.org/reports/tr35/">UTS#35 Unicode Locale Data Markup Language (LDML)</a>.
+ * The model defines meta zone, which is used for storing a set of display names. A meta zone can be shared
+ * by multiple time zones. Also a time zone may have multiple meta zone historic mappings.
+ * <p>
+ * For example, people in the United States refer the zone used by the east part of North America as "Eastern Time".
+ * The tz database contains multiple time zones "America/New_York", "America/Detroit", "America/Montreal" and some
+ * others that belong to "Eastern Time". However, assigning different display names to these time zones does not make
+ * much sense for most of people.
+ * <p>
+ * In <a href="http://cldr.unicode.org/">CLDR</a> (which uses LDML for representing locale data), the display name
+ * "Eastern Time" is stored as long generic display name of a meta zone identified by the ID "America_Eastern".
+ * Then, there is another table maintaining the historic mapping to meta zones for each time zone. The time zones in
+ * the above example ("America/New_York", "America/Detroit"...) are mapped to the meta zone "America_Eastern".
+ * <p>
+ * Sometimes, a time zone is mapped to a different time zone in the past. For example, "America/Indiana/Knox"
+ * had been moving "Eastern Time" and "Central Time" back and forth. Therefore, it is necessary that time zone
+ * to meta zones mapping data are stored by date range.
+ *
+ * <p><b>Note:</b>
+ * <p>
+ * {@link android.icu.text.TimeZoneFormat TimeZoneFormat} assumes an instance of <code>TimeZoneNames</code> is immutable. If you want to provide
+ * your own <code>TimeZoneNames</code> implementation and use it with {@link android.icu.text.TimeZoneFormat TimeZoneFormat}, you must follow
+ * the contract.
+ * <p>
+ * The methods in this class assume that time zone IDs are already canonicalized. For example, you may not get proper
+ * result returned by a method with time zone ID "America/Indiana/Indianapolis", because it's not a canonical time zone
+ * ID (the canonical time zone ID for the time zone is "America/Indianapolis". See
+ * {@link android.icu.util.TimeZone#getCanonicalID(java.lang.String) TimeZone#getCanonicalID(String)} about ICU canonical time zone IDs.
+ *
+ * <p>
+ * In CLDR, most of time zone display names except location names are provided through meta zones. But a time zone may
+ * have a specific name that is not shared with other time zones.
+ *
+ * For example, time zone "Europe/London" has English long name for standard time "Greenwich Mean Time", which is also
+ * shared with other time zones. However, the long name for daylight saving time is "British Summer Time", which is only
+ * used for "Europe/London".
+ *
+ * <p>
+ * {@link #getTimeZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)} is designed for accessing a name only used by a single time zone.
+ * But is not necessarily mean that a subclass implementation use the same model with CLDR. A subclass implementation
+ * may provide time zone names only through {@link #getTimeZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)}, or only through
+ * {@link #getMetaZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)}, or both.
+ *
+ * <p>
+ * The default <code>TimeZoneNames</code> implementation returned by {@link #getInstance(android.icu.util.ULocale)} uses the locale data
+ * imported from CLDR. In CLDR, set of meta zone IDs and mappings between zone IDs and meta zone IDs are shared by all
+ * locales. Therefore, the behavior of {@link #getAvailableMetaZoneIDs()}, {@link #getAvailableMetaZoneIDs(java.lang.String)},
+ * {@link #getMetaZoneID(java.lang.String,long)}, and {@link #getReferenceZoneID(java.lang.String,java.lang.String)} won't be changed no matter
+ * what locale is used for getting an instance of <code>TimeZoneNames</code>.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class TimeZoneNames implements java.io.Serializable {
+
+TimeZoneNames() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>TimeZoneNames</code> for the specified locale.
+ *
+ * @param locale
+ *            The locale.
+ * @return An instance of <code>TimeZoneNames</code>
+ */
+
+public static android.icu.text.TimeZoneNames getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>TimeZoneNames</code> for the specified
+ * {@link java.util.Locale}.
+ *
+ * @param locale
+ *            The {@link java.util.Locale}.
+ * @return An instance of <code>TimeZoneDisplayNames</code>
+ */
+
+public static android.icu.text.TimeZoneNames getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>TimeZoneNames</code> containing only short specific
+ * zone names ({@link android.icu.text.TimeZoneNames.NameType#SHORT_STANDARD NameType#SHORT_STANDARD} and {@link android.icu.text.TimeZoneNames.NameType#SHORT_DAYLIGHT NameType#SHORT_DAYLIGHT}),
+ * compatible with the IANA tz database's zone abbreviations (not localized).
+ * <br>
+ * Note: The input locale is used for resolving ambiguous names (e.g. "IST" is parsed
+ * as Israel Standard Time for Israel, while it is parsed as India Standard Time for
+ * all other regions). The zone names returned by this instance are not localized.
+ */
+
+public static android.icu.text.TimeZoneNames getTZDBInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an immutable set of all available meta zone IDs.
+ * @return An immutable set of all available meta zone IDs.
+ */
+
+public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs();
+
+/**
+ * Returns an immutable set of all available meta zone IDs used by the given time zone.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @return An immutable set of all available meta zone IDs used by the given time zone.
+ */
+
+public abstract java.util.Set<java.lang.String> getAvailableMetaZoneIDs(java.lang.String tzID);
+
+/**
+ * Returns the meta zone ID for the given canonical time zone ID at the given date.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @param date
+ *            The date.
+ * @return The meta zone ID for the given time zone ID at the given date. If the time zone does not have a
+ *         corresponding meta zone at the given date or the implementation does not support meta zones, null is
+ *         returned.
+ */
+
+public abstract java.lang.String getMetaZoneID(java.lang.String tzID, long date);
+
+/**
+ * Returns the reference zone ID for the given meta zone ID for the region.
+ *
+ * Note: Each meta zone must have a reference zone associated with a special region "001" (world).
+ * Some meta zones may have region specific reference zone IDs other than the special region
+ * "001". When a meta zone does not have any region specific reference zone IDs, this method
+ * return the reference zone ID for the special region "001" (world).
+ *
+ * @param mzID
+ *            The meta zone ID.
+ * @param region
+ *            The region.
+ * @return The reference zone ID ("golden zone" in the LDML specification) for the given time zone ID for the
+ *         region. If the meta zone is unknown or the implementation does not support meta zones, null is returned.
+ */
+
+public abstract java.lang.String getReferenceZoneID(java.lang.String mzID, java.lang.String region);
+
+/**
+ * Returns the display name of the meta zone.
+ *
+ * @param mzID
+ *            The meta zone ID.
+ * @param type
+ *            The display name type. See {@link android.icu.text.TimeZoneNames.NameType TimeZoneNames.NameType}.
+ * @return The display name of the meta zone. When this object does not have a localized display name for the given
+ *         meta zone with the specified type or the implementation does not provide any display names associated
+ *         with meta zones, null is returned.
+ */
+
+public abstract java.lang.String getMetaZoneDisplayName(java.lang.String mzID, android.icu.text.TimeZoneNames.NameType type);
+
+/**
+ * Returns the display name of the time zone at the given date.
+ *
+ * <p>
+ * <b>Note:</b> This method calls the subclass's {@link #getTimeZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)} first. When the
+ * result is null, this method calls {@link #getMetaZoneID(java.lang.String,long)} to get the meta zone ID mapped from the
+ * time zone, then calls {@link #getMetaZoneDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType)}.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @param type
+ *            The display name type. See {@link android.icu.text.TimeZoneNames.NameType TimeZoneNames.NameType}.
+ * @param date
+ *            The date
+ * @return The display name for the time zone at the given date. When this object does not have a localized display
+ *         name for the time zone with the specified type and date, null is returned.
+ */
+
+public final java.lang.String getDisplayName(java.lang.String tzID, android.icu.text.TimeZoneNames.NameType type, long date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name of the time zone. Unlike {@link #getDisplayName(java.lang.String,android.icu.text.TimeZoneNames.NameType,long)},
+ * this method does not get a name from a meta zone used by the time zone.
+ *
+ * @param tzID
+ *            The canonical time zone ID.
+ * @param type
+ *            The display name type. See {@link android.icu.text.TimeZoneNames.NameType TimeZoneNames.NameType}.
+ * @return The display name for the time zone. When this object does not have a localized display name for the given
+ *         time zone with the specified type, null is returned.
+ */
+
+public abstract java.lang.String getTimeZoneDisplayName(java.lang.String tzID, android.icu.text.TimeZoneNames.NameType type);
+
+/**
+ * Returns the exemplar location name for the given time zone. When this object does not have a localized location
+ * name, the default implementation may still returns a programmatically generated name with the logic described
+ * below.
+ * <ol>
+ * <li>Check if the ID contains "/". If not, return null.
+ * <li>Check if the ID does not start with "Etc/" or "SystemV/". If it does, return null.
+ * <li>Extract a substring after the last occurrence of "/".
+ * <li>Replace "_" with " ".
+ * </ol>
+ * For example, "New York" is returned for the time zone ID "America/New_York" when this object does not have the
+ * localized location name.
+ *
+ * @param tzID
+ *            The canonical time zone ID
+ * @return The exemplar location name for the given time zone, or null when a localized location name is not
+ *         available and the fallback logic described above cannot extract location from the ID.
+ */
+
+public java.lang.String getExemplarLocationName(java.lang.String tzID) { throw new RuntimeException("Stub!"); }
+/**
+ * Time zone display name types
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum NameType {
+/**
+ * Long display name, such as "Eastern Time".
+ */
+
+LONG_GENERIC,
+/**
+ * Long display name for standard time, such as "Eastern Standard Time".
+ */
+
+LONG_STANDARD,
+/**
+ * Long display name for daylight saving time, such as "Eastern Daylight Time".
+ */
+
+LONG_DAYLIGHT,
+/**
+ * Short display name, such as "ET".
+ */
+
+SHORT_GENERIC,
+/**
+ * Short display name for standard time, such as "EST".
+ */
+
+SHORT_STANDARD,
+/**
+ * Short display name for daylight saving time, such as "EDT".
+ */
+
+SHORT_DAYLIGHT,
+/**
+ * Exemplar location name, such as "Los Angeles".
+ */
+
+EXEMPLAR_LOCATION;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Transliterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Transliterator.java
new file mode 100644
index 0000000..980b130
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/Transliterator.java
@@ -0,0 +1,977 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.util.Locale;
+import android.icu.util.ULocale;
+import android.icu.util.ULocale.Category;
+import java.util.Enumeration;
+
+/**
+ * <code>Transliterator</code> is an abstract class that transliterates text from one format to another. The most common
+ * kind of transliterator is a script, or alphabet, transliterator. For example, a Russian to Latin transliterator
+ * changes Russian text written in Cyrillic characters to phonetically equivalent Latin characters. It does not
+ * <em>translate</em> Russian to English! Transliteration, unlike translation, operates on characters, without reference
+ * to the meanings of words and sentences.
+ *
+ * <p>
+ * Although script conversion is its most common use, a transliterator can actually perform a more general class of
+ * tasks. In fact, <code>Transliterator</code> defines a very general API which specifies only that a segment of the
+ * input text is replaced by new text. The particulars of this conversion are determined entirely by subclasses of
+ * <code>Transliterator</code>.
+ *
+ * <p>
+ * <b>Transliterators are stateless</b>
+ *
+ * <p>
+ * <code>Transliterator</code> objects are <em>stateless</em>; they retain no information between calls to
+ * <code>transliterate()</code>. As a result, threads may share transliterators without synchronizing them. This might
+ * seem to limit the complexity of the transliteration operation. In practice, subclasses perform complex
+ * transliterations by delaying the replacement of text until it is known that no other replacements are possible. In
+ * other words, although the <code>Transliterator</code> objects are stateless, the source text itself embodies all the
+ * needed information, and delayed operation allows arbitrary complexity.
+ *
+ * <p>
+ * <b>Batch transliteration</b>
+ *
+ * <p>
+ * The simplest way to perform transliteration is all at once, on a string of existing text. This is referred to as
+ * <em>batch</em> transliteration. For example, given a string <code>input</code> and a transliterator <code>t</code>,
+ * the call
+ *
+ * <blockquote><code>String result = t.transliterate(input);
+ * </code></blockquote>
+ *
+ * will transliterate it and return the result. Other methods allow the client to specify a substring to be
+ * transliterated and to use {@link android.icu.text.Replaceable Replaceable} objects instead of strings, in order to preserve out-of-band
+ * information (such as text styles).
+ *
+ * <p>
+ * <b>Keyboard transliteration</b>
+ *
+ * <p>
+ * Somewhat more involved is <em>keyboard</em>, or incremental transliteration. This is the transliteration of text that
+ * is arriving from some source (typically the user's keyboard) one character at a time, or in some other piecemeal
+ * fashion.
+ *
+ * <p>
+ * In keyboard transliteration, a <code>Replaceable</code> buffer stores the text. As text is inserted, as much as
+ * possible is transliterated on the fly. This means a GUI that displays the contents of the buffer may show text being
+ * modified as each new character arrives.
+ *
+ * <p>
+ * Consider the simple rule-based Transliterator:
+ *
+ * <blockquote><code>
+ * th&gt;{theta}<br>
+ * t&gt;{tau}
+ * </code></blockquote>
+ *
+ * When the user types 't', nothing will happen, since the transliterator is waiting to see if the next character is
+ * 'h'. To remedy this, we introduce the notion of a cursor, marked by a '|' in the output string:
+ *
+ * <blockquote><code>
+ * t&gt;|{tau}<br>
+ * {tau}h&gt;{theta}
+ * </code></blockquote>
+ *
+ * Now when the user types 't', tau appears, and if the next character is 'h', the tau changes to a theta. This is
+ * accomplished by maintaining a cursor position (independent of the insertion point, and invisible in the GUI) across
+ * calls to <code>transliterate()</code>. Typically, the cursor will be coincident with the insertion point, but in a
+ * case like the one above, it will precede the insertion point.
+ *
+ * <p>
+ * Keyboard transliteration methods maintain a set of three indices that are updated with each call to
+ * <code>transliterate()</code>, including the cursor, start, and limit. These indices are changed by the method, and
+ * they are passed in and out via a Position object. The <code>start</code> index marks the beginning of the substring
+ * that the transliterator will look at. It is advanced as text becomes committed (but it is not the committed index;
+ * that's the <code>cursor</code>). The <code>cursor</code> index, described above, marks the point at which the
+ * transliterator last stopped, either because it reached the end, or because it required more characters to
+ * disambiguate between possible inputs. The <code>cursor</code> can also be explicitly set by rules.
+ * Any characters before the <code>cursor</code> index are frozen; future keyboard
+ * transliteration calls within this input sequence will not change them. New text is inserted at the <code>limit</code>
+ * index, which marks the end of the substring that the transliterator looks at.
+ *
+ * <p>
+ * Because keyboard transliteration assumes that more characters are to arrive, it is conservative in its operation. It
+ * only transliterates when it can do so unambiguously. Otherwise it waits for more characters to arrive. When the
+ * client code knows that no more characters are forthcoming, perhaps because the user has performed some input
+ * termination operation, then it should call <code>finishTransliteration()</code> to complete any pending
+ * transliterations.
+ *
+ * <p>
+ * <b>Inverses</b>
+ *
+ * <p>
+ * Pairs of transliterators may be inverses of one another. For example, if transliterator <b>A</b> transliterates
+ * characters by incrementing their Unicode value (so "abc" -&gt; "def"), and transliterator <b>B</b> decrements character
+ * values, then <b>A</b> is an inverse of <b>B</b> and vice versa. If we compose <b>A</b> with <b>B</b> in a compound
+ * transliterator, the result is the indentity transliterator, that is, a transliterator that does not change its input
+ * text.
+ *
+ * The <code>Transliterator</code> method <code>getInverse()</code> returns a transliterator's inverse, if one exists,
+ * or <code>null</code> otherwise. However, the result of <code>getInverse()</code> usually will <em>not</em> be a true
+ * mathematical inverse. This is because true inverse transliterators are difficult to formulate. For example, consider
+ * two transliterators: <b>AB</b>, which transliterates the character 'A' to 'B', and <b>BA</b>, which transliterates
+ * 'B' to 'A'. It might seem that these are exact inverses, since
+ *
+ * <blockquote>"A" x <b>AB</b> -&gt; "B"<br>
+ * "B" x <b>BA</b> -&gt; "A"</blockquote>
+ *
+ * where 'x' represents transliteration. However,
+ *
+ * <blockquote>"ABCD" x <b>AB</b> -&gt; "BBCD"<br>
+ * "BBCD" x <b>BA</b> -&gt; "AACD"</blockquote>
+ *
+ * so <b>AB</b> composed with <b>BA</b> is not the identity. Nonetheless, <b>BA</b> may be usefully considered to be
+ * <b>AB</b>'s inverse, and it is on this basis that <b>AB</b><code>.getInverse()</code> could legitimately return
+ * <b>BA</b>.
+ *
+ * <p>
+ * <b>Filtering</b>
+ * <p>Each transliterator has a filter, which restricts changes to those characters selected by the filter. The
+ * filter affects just the characters that are changed -- the characters outside of the filter are still part of the
+ * context for the filter. For example, in the following even though 'x' is filtered out, and doesn't convert to y, it does affect the conversion of 'a'.
+ *
+ * <pre>
+ * String rules = &quot;x &gt; y; x{a} &gt; b; &quot;;
+ * Transliterator tempTrans = Transliterator.createFromRules(&quot;temp&quot;, rules, Transliterator.FORWARD);
+ * tempTrans.setFilter(new UnicodeSet(&quot;[a]&quot;));
+ * String tempResult = tempTrans.transform(&quot;xa&quot;);
+ * // results in &quot;xb&quot;
+ *</pre>
+ * <p>
+ * <b>IDs and display names</b>
+ *
+ * <p>
+ * A transliterator is designated by a short identifier string or <em>ID</em>. IDs follow the format
+ * <em>source-destination</em>, where <em>source</em> describes the entity being replaced, and <em>destination</em>
+ * describes the entity replacing <em>source</em>. The entities may be the names of scripts, particular sequences of
+ * characters, or whatever else it is that the transliterator converts to or from. For example, a transliterator from
+ * Russian to Latin might be named "Russian-Latin". A transliterator from keyboard escape sequences to Latin-1
+ * characters might be named "KeyboardEscape-Latin1". By convention, system entity names are in English, with the
+ * initial letters of words capitalized; user entity names may follow any format so long as they do not contain dashes.
+ *
+ * <p>
+ * In addition to programmatic IDs, transliterator objects have display names for presentation in user interfaces,
+ * returned by {@link #getDisplayName}.
+ *
+ * <p>
+ * <b>Composed transliterators</b>
+ *
+ * <p>
+ * In addition to built-in system transliterators like "Latin-Greek", there are also built-in <em>composed</em>
+ * transliterators. These are implemented by composing two or more component transliterators. For example, if we have
+ * scripts "A", "B", "C", and "D", and we want to transliterate between all pairs of them, then we need to write 12
+ * transliterators: "A-B", "A-C", "A-D", "B-A",..., "D-A", "D-B", "D-C". If it is possible to convert all scripts to an
+ * intermediate script "M", then instead of writing 12 rule sets, we only need to write 8: "A~M", "B~M", "C~M", "D~M",
+ * "M~A", "M~B", "M~C", "M~D". (This might not seem like a big win, but it's really 2<em>n</em> vs. <em>n</em>
+ * <sup>2</sup> - <em>n</em>, so as <em>n</em> gets larger the gain becomes significant. With 9 scripts, it's 18 vs. 72
+ * rule sets, a big difference.) Note the use of "~" rather than "-" for the script separator here; this indicates that
+ * the given transliterator is intended to be composed with others, rather than be used as is.
+ *
+ * <p>
+ * Composed transliterators can be instantiated as usual. For example, the system transliterator "Devanagari-Gujarati"
+ * is a composed transliterator built internally as "Devanagari~InterIndic;InterIndic~Gujarati". When this
+ * transliterator is instantiated, it appears externally to be a standard transliterator (e.g., getID() returns
+ * "Devanagari-Gujarati").
+ *
+ * <p><b>Rule syntax</b>
+ *
+ * <p>A set of rules determines how to perform translations.
+ * Rules within a rule set are separated by semicolons (';').
+ * To include a literal semicolon, prefix it with a backslash ('\').
+ * Unicode Pattern_White_Space is ignored.
+ * If the first non-blank character on a line is '#',
+ * the entire line is ignored as a comment.
+ *
+ * <p>Each set of rules consists of two groups, one forward, and one
+ * reverse. This is a convention that is not enforced; rules for one
+ * direction may be omitted, with the result that translations in
+ * that direction will not modify the source text. In addition,
+ * bidirectional forward-reverse rules may be specified for
+ * symmetrical transformations.
+ *
+ * <p>Note: Another description of the Transliterator rule syntax is available in
+ * <a href="https://www.unicode.org/reports/tr35/tr35-general.html#Transform_Rules_Syntax">section
+ * Transform Rules Syntax of UTS #35: Unicode LDML</a>.
+ * The rules are shown there using arrow symbols ? and ? and ?.
+ * ICU supports both those and the equivalent ASCII symbols &lt; and &gt; and &lt;&gt;.
+ *
+ * <p>Rule statements take one of the following forms:
+ *
+ * <dl>
+ *     <dt><code>$alefmadda=\\u0622;</code></dt>
+ *     <dd><strong>Variable definition.</strong> The name on the
+ *         left is assigned the text on the right. In this example,
+ *         after this statement, instances of the left hand name,
+ *         &quot;<code>$alefmadda</code>&quot;, will be replaced by
+ *         the Unicode character U+0622. Variable names must begin
+ *         with a letter and consist only of letters, digits, and
+ *         underscores. Case is significant. Duplicate names cause
+ *         an exception to be thrown, that is, variables cannot be
+ *         redefined. The right hand side may contain well-formed
+ *         text of any length, including no text at all (&quot;<code>$empty=;</code>&quot;).
+ *         The right hand side may contain embedded <code>UnicodeSet</code>
+ *         patterns, for example, &quot;<code>$softvowel=[eiyEIY]</code>&quot;.</dd>
+ *     <dt><code>ai&gt;$alefmadda;</code></dt>
+ *     <dd><strong>Forward translation rule.</strong> This rule
+ *         states that the string on the left will be changed to the
+ *         string on the right when performing forward
+ *         transliteration.</dd>
+ *     <dt><code>ai&lt;$alefmadda;</code></dt>
+ *     <dd><strong>Reverse translation rule.</strong> This rule
+ *         states that the string on the right will be changed to
+ *         the string on the left when performing reverse
+ *         transliteration.</dd>
+ * </dl>
+ *
+ * <dl>
+ *     <dt><code>ai&lt;&gt;$alefmadda;</code></dt>
+ *     <dd><strong>Bidirectional translation rule.</strong> This
+ *         rule states that the string on the right will be changed
+ *         to the string on the left when performing forward
+ *         transliteration, and vice versa when performing reverse
+ *         transliteration.</dd>
+ * </dl>
+ *
+ * <p>Translation rules consist of a <em>match pattern</em> and an <em>output
+ * string</em>. The match pattern consists of literal characters,
+ * optionally preceded by context, and optionally followed by
+ * context. Context characters, like literal pattern characters,
+ * must be matched in the text being transliterated. However, unlike
+ * literal pattern characters, they are not replaced by the output
+ * text. For example, the pattern &quot;<code>abc{def}</code>&quot;
+ * indicates the characters &quot;<code>def</code>&quot; must be
+ * preceded by &quot;<code>abc</code>&quot; for a successful match.
+ * If there is a successful match, &quot;<code>def</code>&quot; will
+ * be replaced, but not &quot;<code>abc</code>&quot;. The final '<code>}</code>'
+ * is optional, so &quot;<code>abc{def</code>&quot; is equivalent to
+ * &quot;<code>abc{def}</code>&quot;. Another example is &quot;<code>{123}456</code>&quot;
+ * (or &quot;<code>123}456</code>&quot;) in which the literal
+ * pattern &quot;<code>123</code>&quot; must be followed by &quot;<code>456</code>&quot;.
+ *
+ * <p>The output string of a forward or reverse rule consists of
+ * characters to replace the literal pattern characters. If the
+ * output string contains the character '<code>|</code>', this is
+ * taken to indicate the location of the <em>cursor</em> after
+ * replacement. The cursor is the point in the text at which the
+ * next replacement, if any, will be applied. The cursor is usually
+ * placed within the replacement text; however, it can actually be
+ * placed into the precending or following context by using the
+ * special character '@'. Examples:
+ *
+ * <pre>
+ *     a {foo} z &gt; | @ bar; # foo -&gt; bar, move cursor before a
+ *     {foo} xyz &gt; bar @@|; #&nbsp;foo -&gt; bar, cursor between y and z
+ * </pre>
+ *
+ * <p><b>UnicodeSet</b>
+ *
+ * <p><code>UnicodeSet</code> patterns may appear anywhere that
+ * makes sense. They may appear in variable definitions.
+ * Contrariwise, <code>UnicodeSet</code> patterns may themselves
+ * contain variable references, such as &quot;<code>$a=[a-z];$not_a=[^$a]</code>&quot;,
+ * or &quot;<code>$range=a-z;$ll=[$range]</code>&quot;.
+ *
+ * <p><code>UnicodeSet</code> patterns may also be embedded directly
+ * into rule strings. Thus, the following two rules are equivalent:
+ *
+ * <pre>
+ *     $vowel=[aeiou]; $vowel&gt;'*'; # One way to do this
+ *     [aeiou]&gt;'*'; # Another way
+ * </pre>
+ *
+ * <p>See {@link android.icu.text.UnicodeSet UnicodeSet} for more documentation and examples.
+ *
+ * <p><b>Segments</b>
+ *
+ * <p>Segments of the input string can be matched and copied to the
+ * output string. This makes certain sets of rules simpler and more
+ * general, and makes reordering possible. For example:
+ *
+ * <pre>
+ *     ([a-z]) &gt; $1 $1; # double lowercase letters
+ *     ([:Lu:]) ([:Ll:]) &gt; $2 $1; # reverse order of Lu-Ll pairs
+ * </pre>
+ *
+ * <p>The segment of the input string to be copied is delimited by
+ * &quot;<code>(</code>&quot; and &quot;<code>)</code>&quot;. Up to
+ * nine segments may be defined. Segments may not overlap. In the
+ * output string, &quot;<code>$1</code>&quot; through &quot;<code>$9</code>&quot;
+ * represent the input string segments, in left-to-right order of
+ * definition.
+ *
+ * <p><b>Anchors</b>
+ *
+ * <p>Patterns can be anchored to the beginning or the end of the text. This is done with the
+ * special characters '<code>^</code>' and '<code>$</code>'. For example:
+ *
+ * <pre>
+ *   ^ a&nbsp;&nbsp; &gt; 'BEG_A'; &nbsp;&nbsp;# match 'a' at start of text
+ *   &nbsp; a&nbsp;&nbsp; &gt; 'A'; # match other instances of 'a'
+ *   &nbsp; z $ &gt; 'END_Z'; &nbsp;&nbsp;# match 'z' at end of text
+ *   &nbsp; z&nbsp;&nbsp; &gt; 'Z';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # match other instances of 'z'
+ * </pre>
+ *
+ * <p>It is also possible to match the beginning or the end of the text using a <code>UnicodeSet</code>.
+ * This is done by including a virtual anchor character '<code>$</code>' at the end of the
+ * set pattern. Although this is usually the match chafacter for the end anchor, the set will
+ * match either the beginning or the end of the text, depending on its placement. For
+ * example:
+ *
+ * <pre>
+ *   $x = [a-z$]; &nbsp;&nbsp;# match 'a' through 'z' OR anchor
+ *   $x 1&nbsp;&nbsp;&nbsp; &gt; 2;&nbsp;&nbsp; # match '1' after a-z or at the start
+ *   &nbsp;&nbsp; 3 $x &gt; 4; &nbsp;&nbsp;# match '3' before a-z or at the end
+ * </pre>
+ *
+ * <p><b>Example</b>
+ *
+ * <p>The following example rules illustrate many of the features of
+ * the rule language.
+ *
+ * <table border="0" cellpadding="4">
+ *     <tr>
+ *         <td style="vertical-align: top;">Rule 1.</td>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>abc{def}&gt;x|y</code></td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top;">Rule 2.</td>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>xyz&gt;r</code></td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top;">Rule 3.</td>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>yz&gt;q</code></td>
+ *     </tr>
+ * </table>
+ *
+ * <p>Applying these rules to the string &quot;<code>adefabcdefz</code>&quot;
+ * yields the following results:
+ *
+ * <table border="0" cellpadding="4">
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>|adefabcdefz</code></td>
+ *         <td style="vertical-align: top;">Initial state, no rules match. Advance
+ *         cursor.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>a|defabcdefz</code></td>
+ *         <td style="vertical-align: top;">Still no match. Rule 1 does not match
+ *         because the preceding context is not present.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>ad|efabcdefz</code></td>
+ *         <td style="vertical-align: top;">Still no match. Keep advancing until
+ *         there is a match...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>ade|fabcdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adef|abcdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefa|bcdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefab|cdefz</code></td>
+ *         <td style="vertical-align: top;">...</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefabc|defz</code></td>
+ *         <td style="vertical-align: top;">Rule 1 matches; replace &quot;<code>def</code>&quot;
+ *         with &quot;<code>xy</code>&quot; and back up the cursor
+ *         to before the '<code>y</code>'.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefabcx|yz</code></td>
+ *         <td style="vertical-align: top;">Although &quot;<code>xyz</code>&quot; is
+ *         present, rule 2 does not match because the cursor is
+ *         before the '<code>y</code>', not before the '<code>x</code>'.
+ *         Rule 3 does match. Replace &quot;<code>yz</code>&quot;
+ *         with &quot;<code>q</code>&quot;.</td>
+ *     </tr>
+ *     <tr>
+ *         <td style="vertical-align: top; write-space: nowrap;"><code>adefabcxq|</code></td>
+ *         <td style="vertical-align: top;">The cursor is at the end;
+ *         transliteration is complete.</td>
+ *     </tr>
+ * </table>
+ *
+ * <p>The order of rules is significant. If multiple rules may match
+ * at some point, the first matching rule is applied.
+ *
+ * <p>Forward and reverse rules may have an empty output string.
+ * Otherwise, an empty left or right hand side of any statement is a
+ * syntax error.
+ *
+ * <p>Single quotes are used to quote any character other than a
+ * digit or letter. To specify a single quote itself, inside or
+ * outside of quotes, use two single quotes in a row. For example,
+ * the rule &quot;<code>'&gt;'&gt;o''clock</code>&quot; changes the
+ * string &quot;<code>&gt;</code>&quot; to the string &quot;<code>o'clock</code>&quot;.
+ *
+ * <p><b>Notes</b>
+ *
+ * <p>While a Transliterator is being built from rules, it checks that
+ * the rules are added in proper order. For example, if the rule
+ * &quot;a&gt;x&quot; is followed by the rule &quot;ab&gt;y&quot;,
+ * then the second rule will throw an exception. The reason is that
+ * the second rule can never be triggered, since the first rule
+ * always matches anything it matches. In other words, the first
+ * rule <em>masks</em> the second rule.
+ *
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Transliterator {
+
+Transliterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates a segment of a string, with optional filtering.
+ *
+ * @param text the string to be transliterated
+ * @param start the beginning index, inclusive; <code>0 &lt;= start
+ * &lt;= limit</code>.
+ * @param limit the ending index, exclusive; <code>start &lt;= limit
+ * &lt;= text.length()</code>.
+ * @return The new limit index.  The text previously occupying <code>[start,
+ * limit)</code> has been transliterated, possibly to a string of a different
+ * length, at <code>[start, </code><em>new-limit</em><code>)</code>, where
+ * <em>new-limit</em> is the return value. If the input offsets are out of bounds,
+ * the returned value is -1 and the input string remains unchanged.
+ */
+
+public final int transliterate(android.icu.text.Replaceable text, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates an entire string in place. Convenience method.
+ * @param text the string to be transliterated
+ */
+
+public final void transliterate(android.icu.text.Replaceable text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterate an entire string and returns the result. Convenience method.
+ *
+ * @param text the string to be transliterated
+ * @return The transliterated text
+ */
+
+public final java.lang.String transliterate(java.lang.String text) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates the portion of the text buffer that can be
+ * transliterated unambiguosly after new text has been inserted,
+ * typically as a result of a keyboard event.  The new text in
+ * <code>insertion</code> will be inserted into <code>text</code>
+ * at <code>index.contextLimit</code>, advancing
+ * <code>index.contextLimit</code> by <code>insertion.length()</code>.
+ * Then the transliterator will try to transliterate characters of
+ * <code>text</code> between <code>index.start</code> and
+ * <code>index.contextLimit</code>.  Characters before
+ * <code>index.start</code> will not be changed.
+ *
+ * <p>Upon return, values in <code>index</code> will be updated.
+ * <code>index.contextStart</code> will be advanced to the first
+ * character that future calls to this method will read.
+ * <code>index.start</code> and <code>index.contextLimit</code> will
+ * be adjusted to delimit the range of text that future calls to
+ * this method may change.
+ *
+ * <p>Typical usage of this method begins with an initial call
+ * with <code>index.contextStart</code> and <code>index.contextLimit</code>
+ * set to indicate the portion of <code>text</code> to be
+ * transliterated, and <code>index.start == index.contextStart</code>.
+ * Thereafter, <code>index</code> can be used without
+ * modification in future calls, provided that all changes to
+ * <code>text</code> are made via this method.
+ *
+ * <p>This method assumes that future calls may be made that will
+ * insert new text into the buffer.  As a result, it only performs
+ * unambiguous transliterations.  After the last call to this
+ * method, there may be untransliterated text that is waiting for
+ * more input to resolve an ambiguity.  In order to perform these
+ * pending transliterations, clients should call {@link
+ * #finishTransliteration} after the last call to this
+ * method has been made.
+ *
+ * @param text the buffer holding transliterated and untransliterated text
+ * @param index the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @param insertion text to be inserted and possibly
+ * transliterated into the translation buffer at
+ * <code>index.contextLimit</code>.  If <code>null</code> then no text
+ * is inserted.
+ * @exception java.lang.IllegalArgumentException if <code>index</code>
+ * is invalid
+ */
+
+public final void transliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index, java.lang.String insertion) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates the portion of the text buffer that can be
+ * transliterated unambiguosly after a new character has been
+ * inserted, typically as a result of a keyboard event.  This is a
+ * convenience method; see {@link #transliterate(android.icu.text.Replaceable,android.icu.text.Transliterator.Position,java.lang.String)} for details.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @param insertion text to be inserted and possibly
+ * transliterated into the translation buffer at
+ * <code>index.contextLimit</code>.
+ * @see #transliterate(Replaceable, Transliterator.Position, String)
+ */
+
+public final void transliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index, int insertion) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterates the portion of the text buffer that can be
+ * transliterated unambiguosly.  This is a convenience method; see
+ * {@link #transliterate(android.icu.text.Replaceable,android.icu.text.Transliterator.Position,java.lang.String)} for details.
+ * @param text the buffer holding transliterated and
+ * untransliterated text
+ * @param index the start and limit of the text, the position
+ * of the cursor, and the start and limit of transliteration.
+ * @see #transliterate(Replaceable, Transliterator.Position, String)
+ */
+
+public final void transliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Finishes any pending transliterations that were waiting for
+ * more characters.  Clients should call this method as the last
+ * call after a sequence of one or more calls to
+ * <code>transliterate()</code>.
+ * @param text the buffer holding transliterated and
+ * untransliterated text.
+ * @param index the array of indices previously passed to {@link
+ * #transliterate}
+ */
+
+public final void finishTransliteration(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Transliterate a substring of text, as specified by index, taking filters
+ * into account.  This method is for subclasses that need to delegate to
+ * another transliterator.
+ * @param text the text to be transliterated
+ * @param index the position indices
+ * @param incremental if TRUE, then assume more characters may be inserted
+ * at index.limit, and postpone processing to accomodate future incoming
+ * characters
+ */
+
+public void filteredTransliterate(android.icu.text.Replaceable text, android.icu.text.Transliterator.Position index, boolean incremental) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the longest context required by this transliterator.
+ * This is <em>preceding</em> context.  The default value is zero, but
+ * subclasses can change this by calling <code>setMaximumContextLength()</code>.
+ * For example, if a transliterator translates "ddd" (where
+ * d is any digit) to "555" when preceded by "(ddd)", then the preceding
+ * context length is 5, the length of "(ddd)".
+ *
+ * @return The maximum number of preceding context characters this
+ * transliterator needs to examine
+ */
+
+public final int getMaximumContextLength() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a programmatic identifier for this transliterator.
+ * If this identifier is passed to <code>getInstance()</code>, it
+ * will return this object, if it has been registered.
+ * @see #getAvailableIDs
+ */
+
+public final java.lang.String getID() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name for this transliterator that is appropriate for
+ * display to the user in the default <code>DISPLAY</code> locale.  See {@link
+ * #getDisplayName(java.lang.String,java.util.Locale)} for details.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static final java.lang.String getDisplayName(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name for this transliterator that is appropriate for
+ * display to the user in the given locale.  This name is taken
+ * from the locale resource data in the standard manner of the
+ * <code>java.text</code> package.
+ *
+ * <p>If no localized names exist in the system resource bundles,
+ * a name is synthesized using a localized
+ * <code>MessageFormat</code> pattern from the resource data.  The
+ * arguments to this pattern are an integer followed by one or two
+ * strings.  The integer is the number of strings, either 1 or 2.
+ * The strings are formed by splitting the ID for this
+ * transliterator at the first '-'.  If there is no '-', then the
+ * entire ID forms the only string.
+ * @param inLocale the Locale in which the display name should be
+ * localized.
+ * @see java.text.MessageFormat
+ */
+
+public static java.lang.String getDisplayName(java.lang.String id, java.util.Locale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name for this transliterator that is appropriate for
+ * display to the user in the given locale.  This name is taken
+ * from the locale resource data in the standard manner of the
+ * <code>java.text</code> package.
+ *
+ * <p>If no localized names exist in the system resource bundles,
+ * a name is synthesized using a localized
+ * <code>MessageFormat</code> pattern from the resource data.  The
+ * arguments to this pattern are an integer followed by one or two
+ * strings.  The integer is the number of strings, either 1 or 2.
+ * The strings are formed by splitting the ID for this
+ * transliterator at the first '-'.  If there is no '-', then the
+ * entire ID forms the only string.
+ * @param inLocale the ULocale in which the display name should be
+ * localized.
+ * @see java.text.MessageFormat
+ */
+
+public static java.lang.String getDisplayName(java.lang.String id, android.icu.util.ULocale inLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the filter used by this transliterator, or <tt>null</tt>
+ * if this transliterator uses no filter.
+ */
+
+public final android.icu.text.UnicodeFilter getFilter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Changes the filter used by this transliterator.  If the filter
+ * is set to <tt>null</tt> then no filtering will occur.
+ *
+ * <p>Callers must take care if a transliterator is in use by
+ * multiple threads.  The filter should not be changed by one
+ * thread while another thread may be transliterating.
+ */
+
+public void setFilter(android.icu.text.UnicodeFilter filter) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>Transliterator</code> object given its ID.
+ * The ID must be a system transliterator ID.
+ *
+ * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
+ * @return A <code>Transliterator</code> object with the given ID
+ * @exception java.lang.IllegalArgumentException if the given ID is invalid.
+ */
+
+public static final android.icu.text.Transliterator getInstance(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>Transliterator</code> object given its ID.
+ * The ID must be a system transliterator ID.
+ *
+ * @param ID a valid ID, as enumerated by <code>getAvailableIDs()</code>
+ * @param dir either FORWARD or REVERSE.  If REVERSE then the
+ * inverse of the given ID is instantiated.
+ * @return A <code>Transliterator</code> object with the given ID
+ * @exception java.lang.IllegalArgumentException if the given ID is invalid.
+ * @see #getAvailableIDs
+ * @see #getID
+ */
+
+public static android.icu.text.Transliterator getInstance(java.lang.String ID, int dir) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>Transliterator</code> object constructed from
+ * the given rule string.  This will be a rule-based Transliterator,
+ * if the rule string contains only rules, or a
+ * compound Transliterator, if it contains ID blocks, or a
+ * null Transliterator, if it contains ID blocks which parse as
+ * empty for the given direction.
+ *
+ * @param ID the id for the transliterator.
+ * @param rules rules, separated by ';'
+ * @param dir either FORWARD or REVERSE.
+ * @return a newly created Transliterator
+ * @throws java.lang.IllegalArgumentException if there is a problem with the ID or the rules
+ */
+
+public static final android.icu.text.Transliterator createFromRules(java.lang.String ID, java.lang.String rules, int dir) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a rule string for this transliterator.
+ * @param escapeUnprintable if true, then unprintable characters
+ * will be converted to escape form backslash-'u' or
+ * backslash-'U'.
+ */
+
+public java.lang.String toRules(boolean escapeUnprintable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the elements that make up this transliterator.  For
+ * example, if the transliterator "NFD;Jamo-Latin;Latin-Greek"
+ * were created, the return value of this method would be an array
+ * of the three transliterator objects that make up that
+ * transliterator: [NFD, Jamo-Latin, Latin-Greek].
+ *
+ * <p>If this transliterator is not composed of other
+ * transliterators, then this method will return an array of
+ * length one containing a reference to this transliterator.
+ * @return an array of one or more transliterators that make up
+ * this transliterator
+ */
+
+public android.icu.text.Transliterator[] getElements() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of all characters that may be modified in the
+ * input text by this Transliterator.  This incorporates this
+ * object's current filter; if the filter is changed, the return
+ * value of this function will change.  The default implementation
+ * returns an empty set. The return result is approximate in any case
+ * and is intended for use by tests, tools, or utilities.
+ * @see #getTargetSet
+ */
+
+public final android.icu.text.UnicodeSet getSourceSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of all characters that may be generated as
+ * replacement text by this transliterator.  The default
+ * implementation returns the empty set.  Some subclasses may
+ * override this method to return a more precise result.  The
+ * return result is approximate in any case and is intended for
+ * use by tests, tools, or utilities requiring such
+ * meta-information.
+ * <p>Warning. You might expect an empty filter to always produce an empty target.
+ * However, consider the following:
+ * <pre>
+ * [Pp]{}[\u03A3\u03C2\u03C3\u03F7\u03F8\u03FA\u03FB] &gt; \';
+ * </pre>
+ * With a filter of [], you still get some elements in the target set, because this rule will still match. It could
+ * be recast to the following if it were important.
+ * <pre>
+ * [Pp]{([\u03A3\u03C2\u03C3\u03F7\u03F8\u03FA\u03FB])} &gt; \' | $1;
+ * </pre>
+ * @see #getTargetSet
+ */
+
+public android.icu.text.UnicodeSet getTargetSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this transliterator's inverse.  See the class
+ * documentation for details.  This implementation simply inverts
+ * the two entities in the ID and attempts to retrieve the
+ * resulting transliterator.  That is, if <code>getID()</code>
+ * returns "A-B", then this method will return the result of
+ * <code>getInstance("B-A")</code>, or <code>null</code> if that
+ * call fails.
+ *
+ * <p>Subclasses with knowledge of their inverse may wish to
+ * override this method.
+ *
+ * @return a transliterator that is an inverse, not necessarily
+ * exact, of this transliterator, or <code>null</code> if no such
+ * transliterator is registered.
+ */
+
+public final android.icu.text.Transliterator getInverse() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the programmatic names of registered
+ * <code>Transliterator</code> objects.  This includes both system
+ * transliterators and user transliterators registered using
+ * <code>registerClass()</code>.  The enumerated names may be
+ * passed to <code>getInstance()</code>.
+ *
+ * @return An <code>Enumeration</code> over <code>String</code> objects
+ * @see #getInstance
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableIDs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the source names of registered
+ * transliterators.  Source names may be passed to
+ * getAvailableTargets() to obtain available targets for each
+ * source.
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableSources() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the target names of registered
+ * transliterators having a given source name.  Target names may
+ * be passed to getAvailableVariants() to obtain available
+ * variants for each source and target pair.
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableTargets(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an enumeration over the variant names of registered
+ * transliterators having a given source name and target name.
+ */
+
+public static final java.util.Enumeration<java.lang.String> getAvailableVariants(java.lang.String source, java.lang.String target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Direction constant indicating the forward direction in a transliterator,
+ * e.g., the forward rules of a rule-based Transliterator.  An "A-B"
+ * transliterator transliterates A to B when operating in the forward
+ * direction, and B to A when operating in the reverse direction.
+ */
+
+public static final int FORWARD = 0; // 0x0
+
+/**
+ * Direction constant indicating the reverse direction in a transliterator,
+ * e.g., the reverse rules of a rule-based Transliterator.  An "A-B"
+ * transliterator transliterates A to B when operating in the forward
+ * direction, and B to A when operating in the reverse direction.
+ */
+
+public static final int REVERSE = 1; // 0x1
+/**
+ * Position structure for incremental transliteration.  This data
+ * structure defines two substrings of the text being
+ * transliterated.  The first region, [contextStart,
+ * contextLimit), defines what characters the transliterator will
+ * read as context.  The second region, [start, limit), defines
+ * what characters will actually be transliterated.  The second
+ * region should be a subset of the first.
+ *
+ * <p>After a transliteration operation, some of the indices in this
+ * structure will be modified.  See the field descriptions for
+ * details.
+ *
+ * <p>contextStart &lt;= start &lt;= limit &lt;= contextLimit
+ *
+ * <p>Note: All index values in this structure must be at code point
+ * boundaries.  That is, none of them may occur between two code units
+ * of a surrogate pair.  If any index does split a surrogate pair,
+ * results are unspecified.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Position {
+
+/**
+ * Constructs a Position object with start, limit,
+ * contextStart, and contextLimit all equal to zero.
+ */
+
+public Position() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a Position object with the given start,
+ * contextStart, and contextLimit.  The limit is set to the
+ * contextLimit.
+ */
+
+public Position(int contextStart, int contextLimit, int start) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a Position object with the given start, limit,
+ * contextStart, and contextLimit.
+ */
+
+public Position(int contextStart, int contextLimit, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a Position object that is a copy of another.
+ */
+
+public Position(android.icu.text.Transliterator.Position pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Copies the indices of this position from another.
+ */
+
+public void set(android.icu.text.Transliterator.Position pos) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this Position is equal to the given object.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this Position.
+ * @return a string representation of the object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Check all bounds.  If they are invalid, throw an exception.
+ * @param length the length of the string this object applies to
+ * @exception java.lang.IllegalArgumentException if any indices are out
+ * of bounds
+ */
+
+public final void validate(int length) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ending index, exclusive, of the context to be considered for a
+ * transliteration operation.  The transliterator will ignore
+ * anything at or after this index.  INPUT/OUTPUT parameter: This
+ * parameter is updated to reflect changes in the length of the
+ * text, but points to the same logical position in the text.
+ */
+
+public int contextLimit;
+
+/**
+ * Beginning index, inclusive, of the context to be considered for
+ * a transliteration operation.  The transliterator will ignore
+ * anything before this index.  INPUT/OUTPUT parameter: This parameter
+ * is updated by a transliteration operation to reflect the maximum
+ * amount of antecontext needed by a transliterator.
+ */
+
+public int contextStart;
+
+/**
+ * Ending index, exclusive, of the text to be transliteratd.
+ * INPUT/OUTPUT parameter: This parameter is updated to reflect
+ * changes in the length of the text, but points to the same
+ * logical position in the text.
+ */
+
+public int limit;
+
+/**
+ * Beginning index, inclusive, of the text to be transliteratd.
+ * INPUT/OUTPUT parameter: This parameter is advanced past
+ * characters that have already been transliterated by a
+ * transliteration operation.
+ */
+
+public int start;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UCharacterIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UCharacterIterator.java
new file mode 100644
index 0000000..7065175
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UCharacterIterator.java
@@ -0,0 +1,313 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.CharacterIterator;
+
+/**
+ * Abstract class that defines an API for iteration on text objects.This is an interface for forward and backward
+ * iteration and random access into a text object. Forward iteration is done with post-increment and backward iteration
+ * is done with pre-decrement semantics, while the <code>java.text.CharacterIterator</code> interface methods provided
+ * forward iteration with "pre-increment" and backward iteration with pre-decrement semantics. This API is more
+ * efficient for forward iteration over code points. The other major difference is that this API can do both code unit
+ * and code point iteration, <code>java.text.CharacterIterator</code> can only iterate over code units and is limited to
+ * BMP (0 - 0xFFFF)
+ *
+ * @author Ram
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class UCharacterIterator implements java.lang.Cloneable {
+
+/**
+ * Protected default constructor for the subclasses
+ */
+
+protected UCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a <code>Replaceable</code> object.
+ *
+ * @param source
+ *            a valid source as a <code>Replaceable</code> object
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(android.icu.text.Replaceable source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source string.
+ *
+ * @param source
+ *            a string
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(java.lang.String source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source character array.
+ *
+ * @param source
+ *            an array of UTF-16 code units
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(char[] source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source character array.
+ *
+ * @param source
+ *            an array of UTF-16 code units
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(char[] source, int start, int limit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a source StringBuffer.
+ *
+ * @param source
+ *            an string buffer of UTF-16 code units
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(java.lang.StringBuffer source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>UCharacterIterator</code> object given a CharacterIterator.
+ *
+ * @param source
+ *            a valid CharacterIterator object.
+ * @return UCharacterIterator object
+ * @exception java.lang.IllegalArgumentException
+ *                if the argument is null
+ */
+
+public static final android.icu.text.UCharacterIterator getInstance(java.text.CharacterIterator source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a <code>java.text.CharacterIterator</code> object for the underlying text of this iterator. The returned
+ * iterator is independent of this iterator.
+ *
+ * @return java.text.CharacterIterator object
+ */
+
+public java.text.CharacterIterator getCharacterIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the code unit at the current index. If index is out of range, returns DONE. Index is not changed.
+ *
+ * @return current code unit
+ */
+
+public abstract int current();
+
+/**
+ * Returns the codepoint at the current index. If the current index is invalid, DONE is returned. If the current
+ * index points to a lead surrogate, and there is a following trail surrogate, then the code point is returned.
+ * Otherwise, the code unit at index is returned. Index is not changed.
+ *
+ * @return current codepoint
+ */
+
+public int currentCodePoint() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the text
+ *
+ * @return length of the text
+ */
+
+public abstract int getLength();
+
+/**
+ * Gets the current index in text.
+ *
+ * @return current index in text.
+ */
+
+public abstract int getIndex();
+
+/**
+ * Returns the UTF16 code unit at index, and increments to the next code unit (post-increment semantics). If index
+ * is out of range, DONE is returned, and the iterator is reset to the limit of the text.
+ *
+ * @return the next UTF16 code unit, or DONE if the index is at the limit of the text.
+ */
+
+public abstract int next();
+
+/**
+ * Returns the code point at index, and increments to the next code point (post-increment semantics). If index does
+ * not point to a valid surrogate pair, the behavior is the same as <code>next()</code>. Otherwise the iterator is
+ * incremented past the surrogate pair, and the code point represented by the pair is returned.
+ *
+ * @return the next codepoint in text, or DONE if the index is at the limit of the text.
+ */
+
+public int nextCodePoint() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Decrement to the position of the previous code unit in the text, and return it (pre-decrement semantics). If the
+ * resulting index is less than 0, the index is reset to 0 and DONE is returned.
+ *
+ * @return the previous code unit in the text, or DONE if the new index is before the start of the text.
+ */
+
+public abstract int previous();
+
+/**
+ * Retreat to the start of the previous code point in the text, and return it (pre-decrement semantics). If the
+ * index is not preceeded by a valid surrogate pair, the behavior is the same as <code>previous()</code>. Otherwise
+ * the iterator is decremented to the start of the surrogate pair, and the code point represented by the pair is
+ * returned.
+ *
+ * @return the previous code point in the text, or DONE if the new index is before the start of the text.
+ */
+
+public int previousCodePoint() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the index to the specified index in the text.
+ *
+ * @param index
+ *            the index within the text.
+ * @exception java.lang.IndexOutOfBoundsException
+ *                is thrown if an invalid index is supplied
+ */
+
+public abstract void setIndex(int index);
+
+/**
+ * Sets the current index to the limit.
+ */
+
+public void setToLimit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the current index to the start.
+ */
+
+public void setToStart() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fills the buffer with the underlying text storage of the iterator If the buffer capacity is not enough a
+ * exception is thrown. The capacity of the fill in buffer should at least be equal to length of text in the
+ * iterator obtained by calling <code>getLength()</code>). <b>Usage:</b>
+ *
+ * <pre>
+ *         UChacterIterator iter = new UCharacterIterator.getInstance(text);
+ *         char[] buf = new char[iter.getLength()];
+ *         iter.getText(buf);
+ *
+ *         OR
+ *         char[] buf= new char[1];
+ *         int len = 0;
+ *         for(;;){
+ *             try{
+ *                 len = iter.getText(buf);
+ *                 break;
+ *             }catch(IndexOutOfBoundsException e){
+ *                 buf = new char[iter.getLength()];
+ *             }
+ *         }
+ * </pre>
+ *
+ * @param fillIn
+ *            an array of chars to fill with the underlying UTF-16 code units.
+ * @param offset
+ *            the position within the array to start putting the data.
+ * @return the number of code units added to fillIn, as a convenience
+ * @exception java.lang.IndexOutOfBoundsException
+ *                exception if there is not enough room after offset in the array, or if offset &lt; 0.
+ */
+
+public abstract int getText(char[] fillIn, int offset);
+
+/**
+ * Convenience override for <code>getText(char[], int)</code> that provides an offset of 0.
+ *
+ * @param fillIn
+ *            an array of chars to fill with the underlying UTF-16 code units.
+ * @return the number of code units added to fillIn, as a convenience
+ * @exception java.lang.IndexOutOfBoundsException
+ *                exception if there is not enough room in the array.
+ */
+
+public final int getText(char[] fillIn) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience method for returning the underlying text storage as as string
+ *
+ * @return the underlying text storage in the iterator as a string
+ */
+
+public java.lang.String getText() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the current position by the number of code units specified, either forward or backward depending on the
+ * sign of delta (positive or negative respectively). If the resulting index would be less than zero, the index is
+ * set to zero, and if the resulting index would be greater than limit, the index is set to limit.
+ *
+ * @param delta
+ *            the number of code units to move the current index.
+ * @return the new index.
+ * @exception java.lang.IndexOutOfBoundsException
+ *                is thrown if an invalid index is supplied
+ *
+ */
+
+public int moveIndex(int delta) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Moves the current position by the number of code points specified, either forward or backward depending on the
+ * sign of delta (positive or negative respectively). If the current index is at a trail surrogate then the first
+ * adjustment is by code unit, and the remaining adjustments are by code points. If the resulting index would be
+ * less than zero, the index is set to zero, and if the resulting index would be greater than limit, the index is
+ * set to limit.
+ *
+ * @param delta
+ *            the number of code units to move the current index.
+ * @return the new index
+ * @exception java.lang.IndexOutOfBoundsException
+ *                is thrown if an invalid delta is supplied
+ */
+
+public int moveCodePointIndex(int delta) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a copy of this iterator, independent from other iterators. If it is not possible to clone the iterator,
+ * returns null.
+ *
+ * @return copy of this iterator
+ */
+
+public java.lang.Object clone() throws java.lang.CloneNotSupportedException { throw new RuntimeException("Stub!"); }
+
+/**
+ * Indicator that we have reached the ends of the UTF16 text.
+ */
+
+public static final int DONE = -1; // 0xffffffff
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UFormat.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UFormat.java
new file mode 100644
index 0000000..5473801
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UFormat.java
@@ -0,0 +1,35 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2003-2015, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import java.text.Format;
+import android.icu.util.ULocale;
+
+/**
+ * An abstract class that extends {@link java.text.Format} to provide
+ * additional ICU protocol, specifically, the <tt>getLocale()</tt>
+ * API.  All ICU format classes are subclasses of this class.
+ *
+ * @see android.icu.util.ULocale
+ * @author weiv
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class UFormat extends java.text.Format {
+
+/**
+ * Default constructor.
+ */
+
+public UFormat() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeFilter.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeFilter.java
new file mode 100644
index 0000000..33fc9f4
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeFilter.java
@@ -0,0 +1,40 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <code>UnicodeFilter</code> defines a protocol for selecting a
+ * subset of the full range (U+0000 to U+FFFF) of Unicode characters.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class UnicodeFilter implements android.icu.text.UnicodeMatcher {
+
+UnicodeFilter() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns <tt>true</tt> for characters that are in the selected
+ * subset.  In other words, if a character is <b>to be
+ * filtered</b>, then <tt>contains()</tt> returns
+ * <b><tt>false</tt></b>.
+ */
+
+public abstract boolean contains(int c);
+
+/**
+ * Default implementation of UnicodeMatcher::matches() for Unicode
+ * filters.  Matches a single 16-bit code unit at offset.
+ */
+
+public int matches(android.icu.text.Replaceable text, int[] offset, int limit, boolean incremental) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeMatcher.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeMatcher.java
new file mode 100644
index 0000000..5d86b32
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeMatcher.java
@@ -0,0 +1,140 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2001-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * <code>UnicodeMatcher</code> defines a protocol for objects that can
+ * match a range of characters in a Replaceable string.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface UnicodeMatcher {
+
+/**
+ * Return a UMatchDegree value indicating the degree of match for
+ * the given text at the given offset.  Zero, one, or more
+ * characters may be matched.
+ *
+ * Matching in the forward direction is indicated by limit &gt;
+ * offset.  Characters from offset forwards to limit-1 will be
+ * considered for matching.
+ *
+ * Matching in the reverse direction is indicated by limit &lt;
+ * offset.  Characters from offset backwards to limit+1 will be
+ * considered for matching.
+ *
+ * If limit == offset then the only match possible is a zero
+ * character match (which subclasses may implement if desired).
+ *
+ * If U_MATCH is returned, then as a side effect, advance the
+ * offset parameter to the limit of the matched substring.  In the
+ * forward direction, this will be the index of the last matched
+ * character plus one.  In the reverse direction, this will be the
+ * index of the last matched character minus one.
+ *
+ * @param text the text to be matched
+ * @param offset on input, the index into text at which to begin
+ * matching.  On output, the limit of the matched text.  The
+ * number of matched characters is the output value of offset
+ * minus the input value.  Offset should always point to the
+ * HIGH SURROGATE (leading code unit) of a pair of surrogates,
+ * both on entry and upon return.
+ * @param limit the limit index of text to be matched.  Greater
+ * than offset for a forward direction match, less than offset for
+ * a backward direction match.  The last character to be
+ * considered for matching will be text.charAt(limit-1) in the
+ * forward direction or text.charAt(limit+1) in the backward
+ * direction.
+ * @param incremental if TRUE, then assume further characters may
+ * be inserted at limit and check for partial matching.  Otherwise
+ * assume the text as given is complete.
+ * @return a match degree value indicating a full match, a partial
+ * match, or a mismatch.  If incremental is FALSE then
+ * U_PARTIAL_MATCH should never be returned.
+ */
+
+public int matches(android.icu.text.Replaceable text, int[] offset, int limit, boolean incremental);
+
+/**
+ * Returns a string representation of this matcher.  If the result of
+ * calling this function is passed to the appropriate parser, it
+ * will produce another matcher that is equal to this one.
+ * @param escapeUnprintable if TRUE then convert unprintable
+ * character to their hex escape representations, \\uxxxx or
+ * \\Uxxxxxxxx.  Unprintable characters are those other than
+ * U+000A, U+0020..U+007E.
+ */
+
+public java.lang.String toPattern(boolean escapeUnprintable);
+
+/**
+ * Returns TRUE if this matcher will match a character c, where c
+ * &amp; 0xFF == v, at offset, in the forward direction (with limit &gt;
+ * offset).  This is used by <tt>RuleBasedTransliterator</tt> for
+ * indexing.
+ *
+ * <p>Note:  This API uses an int even though the value will be
+ * restricted to 8 bits in order to avoid complications with
+ * signedness (bytes convert to ints in the range -128..127).
+ */
+
+public boolean matchesIndexValue(int v);
+
+/**
+ * Union the set of all characters that may be matched by this object
+ * into the given set.
+ * @param toUnionTo the set into which to union the source characters
+ */
+
+public void addMatchSetTo(android.icu.text.UnicodeSet toUnionTo);
+
+/**
+ * The character at index i, where i &lt; contextStart || i &gt;= contextLimit,
+ * is ETHER.  This allows explicit matching by rules and UnicodeSets
+ * of text outside the context.  In traditional terms, this allows anchoring
+ * at the start and/or end.
+ */
+
+public static final char ETHER = 65535; // 0xffff '\uffff'
+
+/**
+ * Constant returned by <code>matches()</code> indicating a
+ * complete match between the text and this matcher.  For an
+ * incremental variable-length match, this value is returned if
+ * the given text matches, and it is known that additional
+ * characters would not alter the extent of the match.
+ */
+
+public static final int U_MATCH = 2; // 0x2
+
+/**
+ * Constant returned by <code>matches()</code> indicating a
+ * mismatch between the text and this matcher.  The text contains
+ * a character which does not match, or the text does not contain
+ * all desired characters for a non-incremental match.
+ */
+
+public static final int U_MISMATCH = 0; // 0x0
+
+/**
+ * Constant returned by <code>matches()</code> indicating a
+ * partial match between the text and this matcher.  This value is
+ * only returned for incremental match operations.  All characters
+ * of the text match, but more characters are required for a
+ * complete match.  Alternatively, for variable-length matchers,
+ * all characters of the text match, and if more characters were
+ * supplied at limit, they might also match.
+ */
+
+public static final int U_PARTIAL_MATCH = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSet.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSet.java
new file mode 100644
index 0000000..624de68
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSet.java
@@ -0,0 +1,1464 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.lang.UCharacter;
+import java.util.Collection;
+import android.icu.lang.UProperty;
+import android.icu.util.Freezable;
+import java.util.Iterator;
+
+/**
+ * A mutable set of Unicode characters and multicharacter strings.
+ * Objects of this class represent <em>character classes</em> used
+ * in regular expressions. A character specifies a subset of Unicode
+ * code points.  Legal code points are U+0000 to U+10FFFF, inclusive.
+ *
+ * Note: method freeze() will not only make the set immutable, but
+ * also makes important methods much higher performance:
+ * contains(c), containsNone(...), span(...), spanBack(...) etc.
+ * After the object is frozen, any subsequent call that wants to change
+ * the object will throw UnsupportedOperationException.
+ *
+ * <p>The UnicodeSet class is not designed to be subclassed.
+ *
+ * <p><code>UnicodeSet</code> supports two APIs. The first is the
+ * <em>operand</em> API that allows the caller to modify the value of
+ * a <code>UnicodeSet</code> object. It conforms to Java 2's
+ * <code>java.util.Set</code> interface, although
+ * <code>UnicodeSet</code> does not actually implement that
+ * interface. All methods of <code>Set</code> are supported, with the
+ * modification that they take a character range or single character
+ * instead of an <code>Object</code>, and they take a
+ * <code>UnicodeSet</code> instead of a <code>Collection</code>.  The
+ * operand API may be thought of in terms of boolean logic: a boolean
+ * OR is implemented by <code>add</code>, a boolean AND is implemented
+ * by <code>retain</code>, a boolean XOR is implemented by
+ * <code>complement</code> taking an argument, and a boolean NOT is
+ * implemented by <code>complement</code> with no argument.  In terms
+ * of traditional set theory function names, <code>add</code> is a
+ * union, <code>retain</code> is an intersection, <code>remove</code>
+ * is an asymmetric difference, and <code>complement</code> with no
+ * argument is a set complement with respect to the superset range
+ * <code>MIN_VALUE-MAX_VALUE</code>
+ *
+ * <p>The second API is the
+ * <code>applyPattern()</code>/<code>toPattern()</code> API from the
+ * <code>java.text.Format</code>-derived classes.  Unlike the
+ * methods that add characters, add categories, and control the logic
+ * of the set, the method <code>applyPattern()</code> sets all
+ * attributes of a <code>UnicodeSet</code> at once, based on a
+ * string pattern.
+ *
+ * <p><b>Pattern syntax</b></p>
+ *
+ * Patterns are accepted by the constructors and the
+ * <code>applyPattern()</code> methods and returned by the
+ * <code>toPattern()</code> method.  These patterns follow a syntax
+ * similar to that employed by version 8 regular expression character
+ * classes.  Here are some simple examples:
+ *
+ * <blockquote>
+ *   <table>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[]</code></td>
+ *       <td style="vertical-align: top;">No characters</td>
+ *     </tr><tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[a]</code></td>
+ *       <td style="vertical-align: top;">The character 'a'</td>
+ *     </tr><tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[ae]</code></td>
+ *       <td style="vertical-align: top;">The characters 'a' and 'e'</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[a-e]</code></td>
+ *       <td style="vertical-align: top;">The characters 'a' through 'e' inclusive, in Unicode code
+ *       point order</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[\\u4E01]</code></td>
+ *       <td style="vertical-align: top;">The character U+4E01</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[a{ab}{ac}]</code></td>
+ *       <td style="vertical-align: top;">The character 'a' and the multicharacter strings &quot;ab&quot; and
+ *       &quot;ac&quot;</td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top; horizontal-align: left;"><code>[\p{Lu}]</code></td>
+ *       <td style="vertical-align: top;">All characters in the general category Uppercase Letter</td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ *
+ * Any character may be preceded by a backslash in order to remove any special
+ * meaning.  White space characters, as defined by the Unicode Pattern_White_Space property, are
+ * ignored, unless they are escaped.
+ *
+ * <p>Property patterns specify a set of characters having a certain
+ * property as defined by the Unicode standard.  Both the POSIX-like
+ * "[:Lu:]" and the Perl-like syntax "\p{Lu}" are recognized.  For a
+ * complete list of supported property patterns, see the User's Guide
+ * for UnicodeSet at
+ * <a href="http://www.icu-project.org/userguide/unicodeSet.html">
+ * http://www.icu-project.org/userguide/unicodeSet.html</a>.
+ * Actual determination of property data is defined by the underlying
+ * Unicode database as implemented by UCharacter.
+ *
+ * <p>Patterns specify individual characters, ranges of characters, and
+ * Unicode property sets.  When elements are concatenated, they
+ * specify their union.  To complement a set, place a '^' immediately
+ * after the opening '['.  Property patterns are inverted by modifying
+ * their delimiters; "[:^foo]" and "\P{foo}".  In any other location,
+ * '^' has no special meaning.
+ *
+ * <p>Ranges are indicated by placing two a '-' between two
+ * characters, as in "a-z".  This specifies the range of all
+ * characters from the left to the right, in Unicode order.  If the
+ * left character is greater than or equal to the
+ * right character it is a syntax error.  If a '-' occurs as the first
+ * character after the opening '[' or '[^', or if it occurs as the
+ * last character before the closing ']', then it is taken as a
+ * literal.  Thus "[a\\-b]", "[-ab]", and "[ab-]" all indicate the same
+ * set of three characters, 'a', 'b', and '-'.
+ *
+ * <p>Sets may be intersected using the '&amp;' operator or the asymmetric
+ * set difference may be taken using the '-' operator, for example,
+ * "[[:L:]&amp;[\\u0000-\\u0FFF]]" indicates the set of all Unicode letters
+ * with values less than 4096.  Operators ('&amp;' and '|') have equal
+ * precedence and bind left-to-right.  Thus
+ * "[[:L:]-[a-z]-[\\u0100-\\u01FF]]" is equivalent to
+ * "[[[:L:]-[a-z]]-[\\u0100-\\u01FF]]".  This only really matters for
+ * difference; intersection is commutative.
+ *
+ * <table>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[a]</code><td>The set containing 'a'
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[a-z]</code><td>The set containing 'a'
+ * through 'z' and all letters in between, in Unicode order
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[^a-z]</code><td>The set containing
+ * all characters but 'a' through 'z',
+ * that is, U+0000 through 'a'-1 and 'z'+1 through U+10FFFF
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[[<em>pat1</em>][<em>pat2</em>]]</code>
+ * <td>The union of sets specified by <em>pat1</em> and <em>pat2</em>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[[<em>pat1</em>]&amp;[<em>pat2</em>]]</code>
+ * <td>The intersection of sets specified by <em>pat1</em> and <em>pat2</em>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[[<em>pat1</em>]-[<em>pat2</em>]]</code>
+ * <td>The asymmetric difference of sets specified by <em>pat1</em> and
+ * <em>pat2</em>
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[:Lu:] or \p{Lu}</code>
+ * <td>The set of characters having the specified
+ * Unicode property; in
+ * this case, Unicode uppercase letters
+ * <tr style="vertical-align: top;"><td style="white-space: nowrap;"><code>[:^Lu:] or \P{Lu}</code>
+ * <td>The set of characters <em>not</em> having the given
+ * Unicode property
+ * </table>
+ *
+ * <p><b>Warning</b>: you cannot add an empty string ("") to a UnicodeSet.</p>
+ *
+ * <p><b>Formal syntax</b></p>
+ *
+ * <blockquote>
+ *   <table>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>pattern :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>('[' '^'? item* ']') |
+ *       property</code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>item :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>char | (char '-' char) | pattern-expr<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>pattern-expr :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>pattern | pattern-expr pattern |
+ *       pattern-expr op pattern<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>op :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>'&amp;' | '-'<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>special :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><code>'[' | ']' | '-'<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>char :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><em>any character that is not</em><code> special<br>
+ *       | ('\\' </code><em>any character</em><code>)<br>
+ *       | ('&#92;u' hex hex hex hex)<br>
+ *       </code></td>
+ *     </tr>
+ *     <tr style="vertical-align: top">
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>hex :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><em>any character for which
+ *       </em><code>Character.digit(c, 16)</code><em>
+ *       returns a non-negative result</em></td>
+ *     </tr>
+ *     <tr>
+ *       <td style="white-space: nowrap; vertical-align: top;" align="right"><code>property :=&nbsp; </code></td>
+ *       <td style="vertical-align: top;"><em>a Unicode property set pattern</em></td>
+ *     </tr>
+ *   </table>
+ *   <br>
+ *   <table border="1">
+ *     <tr>
+ *       <td>Legend: <table>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a := b</code></td>
+ *           <td style="width: 20; vertical-align: top;">&nbsp; </td>
+ *           <td style="vertical-align: top;"><code>a</code> may be replaced by <code>b</code> </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a?</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">zero or one instance of <code>a</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a*</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">one or more instances of <code>a</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>a | b</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">either <code>a</code> or <code>b</code><br>
+ *           </td>
+ *         </tr>
+ *         <tr>
+ *           <td style="white-space: nowrap; vertical-align: top;"><code>'a'</code></td>
+ *           <td style="vertical-align: top;"></td>
+ *           <td style="vertical-align: top;">the literal string between the quotes </td>
+ *         </tr>
+ *       </table>
+ *       </td>
+ *     </tr>
+ *   </table>
+ * </blockquote>
+ * <p>To iterate over contents of UnicodeSet, the following are available:
+ * <ul><li>{@link #ranges()} to iterate through the ranges</li>
+ * <li>{@link #strings()} to iterate through the strings</li>
+ * <li>{@link #iterator()} to iterate through the entire contents in a single loop.
+ * That method is, however, not particularly efficient, since it "boxes" each code point into a String.
+ * </ul>
+ * All of the above can be used in <b>for</b> loops.
+ * The {@link android.icu.text.UnicodeSetIterator UnicodeSetIterator} can also be used, but not in <b>for</b> loops.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ *
+ * @author Alan Liu
+ * @see android.icu.text.UnicodeSetIterator
+ * @see android.icu.text.UnicodeSetSpanner
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnicodeSet extends android.icu.text.UnicodeFilter implements java.lang.Iterable<java.lang.String>, java.lang.Comparable<android.icu.text.UnicodeSet>, android.icu.util.Freezable<android.icu.text.UnicodeSet> {
+
+/**
+ * Constructs an empty set.
+ */
+
+public UnicodeSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a copy of an existing set.
+ */
+
+public UnicodeSet(android.icu.text.UnicodeSet other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set containing the given range. If <code>end &gt;
+ * start</code> then an empty set is created.
+ *
+ * @param start first character, inclusive, of range
+ * @param end last character, inclusive, of range
+ */
+
+public UnicodeSet(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Quickly constructs a set from a set of ranges &lt;s0, e0, s1, e1, s2, e2, ..., sn, en&gt;.
+ * There must be an even number of integers, and they must be all greater than zero,
+ * all less than or equal to Character.MAX_CODE_POINT.
+ * In each pair (..., si, ei, ...) it must be true that si &lt;= ei
+ * Between adjacent pairs (...ei, sj...), it must be true that ei+1 &lt; sj
+ * @param pairs pairs of character representing ranges
+ */
+
+public UnicodeSet(int... pairs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.  Whitespace is ignored.
+ * @param pattern a string specifying what characters are in the set
+ * @exception java.lang.IllegalArgumentException if the pattern contains
+ * a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param ignoreWhitespace if true, ignore Unicode Pattern_White_Space characters
+ * @exception java.lang.IllegalArgumentException if the pattern contains
+ * a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, boolean ignoreWhitespace) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param options a bitmask indicating which options to apply.
+ * Valid options are IGNORE_SPACE and CASE.
+ * @exception java.lang.IllegalArgumentException if the pattern contains
+ * a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param pos on input, the position in pattern at which to start parsing.
+ * On output, the position after the last character parsed.
+ * @param symbols a symbol table mapping variables to char[] arrays
+ * and chars to UnicodeSets
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, java.text.ParsePosition pos, android.icu.text.SymbolTable symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a set from the given pattern.  See the class description
+ * for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param pos on input, the position in pattern at which to start parsing.
+ * On output, the position after the last character parsed.
+ * @param symbols a symbol table mapping variables to char[] arrays
+ * and chars to UnicodeSets
+ * @param options a bitmask indicating which options to apply.
+ * Valid options are IGNORE_SPACE and CASE.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public UnicodeSet(java.lang.String pattern, java.text.ParsePosition pos, android.icu.text.SymbolTable symbols, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new set that is equivalent to this one.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Make this object represent the range <code>start - end</code>.
+ * If <code>end &gt; start</code> then this object is set to an empty range.
+ *
+ * @param start first character in the set, inclusive
+ * @param end last character in the set, inclusive
+ */
+
+public android.icu.text.UnicodeSet set(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Make this object represent the same set as <code>other</code>.
+ * @param other a <code>UnicodeSet</code> whose value will be
+ * copied to this object
+ */
+
+public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to represent the set specified by the given pattern.
+ * See the class description for the syntax of the pattern language.
+ * Whitespace is ignored.
+ * @param pattern a string specifying what characters are in the set
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public final android.icu.text.UnicodeSet applyPattern(java.lang.String pattern) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to represent the set specified by the given pattern,
+ * optionally ignoring whitespace.
+ * See the class description for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param ignoreWhitespace if true then Unicode Pattern_White_Space characters are ignored
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public android.icu.text.UnicodeSet applyPattern(java.lang.String pattern, boolean ignoreWhitespace) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to represent the set specified by the given pattern,
+ * optionally ignoring whitespace.
+ * See the class description for the syntax of the pattern language.
+ * @param pattern a string specifying what characters are in the set
+ * @param options a bitmask indicating which options to apply.
+ * Valid options are IGNORE_SPACE and CASE.
+ * @exception java.lang.IllegalArgumentException if the pattern
+ * contains a syntax error.
+ */
+
+public android.icu.text.UnicodeSet applyPattern(java.lang.String pattern, int options) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this set.  If the result of
+ * calling this function is passed to a UnicodeSet constructor, it
+ * will produce another set that is equal to this one.
+ */
+
+public java.lang.String toPattern(boolean escapeUnprintable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generate and append a string representation of this set to result.
+ * This does not use this.pat, the cleaned up copy of the string
+ * passed to applyPattern().
+ * @param result the buffer into which to generate the pattern
+ * @param escapeUnprintable escape unprintable characters if true
+ */
+
+public java.lang.StringBuffer _generatePattern(java.lang.StringBuffer result, boolean escapeUnprintable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Generate and append a string representation of this set to result.
+ * This does not use this.pat, the cleaned up copy of the string
+ * passed to applyPattern().
+ * @param includeStrings if false, doesn't include the strings.
+ */
+
+public java.lang.StringBuffer _generatePattern(java.lang.StringBuffer result, boolean escapeUnprintable, boolean includeStrings) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of elements in this set (its cardinality)
+ * Note than the elements of a set may include both individual
+ * codepoints and strings.
+ *
+ * @return the number of elements in this set (its cardinality).
+ */
+
+public int size() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns <tt>true</tt> if this set contains no elements.
+ *
+ * @return <tt>true</tt> if this set contains no elements.
+ */
+
+public boolean isEmpty() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implementation of UnicodeMatcher API.  Returns <tt>true</tt> if
+ * this set contains any character whose low byte is the given
+ * value.  This is used by <tt>RuleBasedTransliterator</tt> for
+ * indexing.
+ */
+
+public boolean matchesIndexValue(int v) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implementation of UnicodeMatcher.matches().  Always matches the
+ * longest possible multichar string.
+ */
+
+public int matches(android.icu.text.Replaceable text, int[] offset, int limit, boolean incremental) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implementation of UnicodeMatcher API.  Union the set of all
+ * characters that may be matched by this object into the given
+ * set.
+ * @param toUnionTo the set into which to union the source characters
+ */
+
+public void addMatchSetTo(android.icu.text.UnicodeSet toUnionTo) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index of the given character within this set, where
+ * the set is ordered by ascending code point.  If the character
+ * is not in this set, return -1.  The inverse of this method is
+ * <code>charAt()</code>.
+ * @return an index from 0..size()-1, or -1
+ */
+
+public int indexOf(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the character at the given index within this set, where
+ * the set is ordered by ascending code point.  If the index is
+ * out of range, return -1.  The inverse of this method is
+ * <code>indexOf()</code>.
+ * @param index an index from 0..size()-1
+ * @return the character at the given index, or -1.
+ */
+
+public int charAt(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds the specified range to this set if it is not already
+ * present.  If this set already contains the specified range,
+ * the call leaves this set unchanged.  If <code>end &gt; start</code>
+ * then an empty range is added, leaving the set unchanged.
+ *
+ * @param start first character, inclusive, of range to be added
+ * to this set.
+ * @param end last character, inclusive, of range to be added
+ * to this set.
+ */
+
+public android.icu.text.UnicodeSet add(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds all characters in range (uses preferred naming convention).
+ * @param start The index of where to start on adding all characters.
+ * @param end The index of where to end on adding all characters.
+ * @return a reference to this object
+ */
+
+public android.icu.text.UnicodeSet addAll(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds the specified character to this set if it is not already
+ * present.  If this set already contains the specified character,
+ * the call leaves this set unchanged.
+ */
+
+public final android.icu.text.UnicodeSet add(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds the specified multicharacter to this set if it is not already
+ * present.  If this set already contains the multicharacter,
+ * the call leaves this set unchanged.
+ * Thus "ch" =&gt; {"ch"}
+ * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet add(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds each of the characters in this string to the set. Thus "ch" =&gt; {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet addAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retains EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet retainAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complement EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet complementAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Remove EACH of the characters in this string. Note: "ch" == {"c", "h"}
+ * If this set already any particular character, it has no effect on that character.
+ * @param s the source string
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet removeAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Remove all strings from this UnicodeSet
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet removeAllStrings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Makes a set from a multicharacter string. Thus "ch" =&gt; {"ch"}
+ * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * @param s the source string
+ * @return a newly created set containing the given string
+ */
+
+public static android.icu.text.UnicodeSet from(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Makes a set from each of the characters in the string. Thus "ch" =&gt; {"c", "h"}
+ * @param s the source string
+ * @return a newly created set containing the given characters
+ */
+
+public static android.icu.text.UnicodeSet fromAll(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retain only the elements in this set that are contained in the
+ * specified range.  If <code>end &gt; start</code> then an empty range is
+ * retained, leaving the set empty.
+ *
+ * @param start first character, inclusive, of range to be retained
+ * to this set.
+ * @param end last character, inclusive, of range to be retained
+ * to this set.
+ */
+
+public android.icu.text.UnicodeSet retain(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retain the specified character from this set if it is present.
+ * Upon return this set will be empty if it did not contain c, or
+ * will only contain c if it did contain c.
+ * @param c the character to be retained
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet retain(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retain the specified string in this set if it is present.
+ * Upon return this set will be empty if it did not contain s, or
+ * will only contain s if it did contain s.
+ * @param cs the string to be retained
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet retain(java.lang.CharSequence cs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes the specified range from this set if it is present.
+ * The set will not contain the specified range once the call
+ * returns.  If <code>end &gt; start</code> then an empty range is
+ * removed, leaving the set unchanged.
+ *
+ * @param start first character, inclusive, of range to be removed
+ * from this set.
+ * @param end last character, inclusive, of range to be removed
+ * from this set.
+ */
+
+public android.icu.text.UnicodeSet remove(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes the specified character from this set if it is present.
+ * The set will not contain the specified character once the call
+ * returns.
+ * @param c the character to be removed
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet remove(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes the specified string from this set if it is present.
+ * The set will not contain the specified string once the call
+ * returns.
+ * @param s the string to be removed
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet remove(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complements the specified range in this set.  Any character in
+ * the range will be removed if it is in this set, or will be
+ * added if it is not in this set.  If <code>end &gt; start</code>
+ * then an empty range is complemented, leaving the set unchanged.
+ *
+ * @param start first character, inclusive, of range to be removed
+ * from this set.
+ * @param end last character, inclusive, of range to be removed
+ * from this set.
+ */
+
+public android.icu.text.UnicodeSet complement(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complements the specified character in this set.  The character
+ * will be removed if it is in this set, or will be added if it is
+ * not in this set.
+ */
+
+public final android.icu.text.UnicodeSet complement(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is equivalent to
+ * <code>complement(MIN_VALUE, MAX_VALUE)</code>.
+ */
+
+public android.icu.text.UnicodeSet complement() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complement the specified string in this set.
+ * The set will not contain the specified string once the call
+ * returns.
+ * <br><b>Warning: you cannot add an empty string ("") to a UnicodeSet.</b>
+ * @param s the string to complement
+ * @return this object, for chaining
+ */
+
+public final android.icu.text.UnicodeSet complement(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains the given character.
+ * @param c character to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean contains(int c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains every character
+ * of the given range.
+ * @param start first character, inclusive, of the range
+ * @param end last character, inclusive, of the range
+ * @return true if the test condition is met
+ */
+
+public boolean contains(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns <tt>true</tt> if this set contains the given
+ * multicharacter string.
+ * @param s string to be checked for containment
+ * @return <tt>true</tt> if this set contains the specified string
+ */
+
+public final boolean contains(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains all the characters and strings
+ * of the given set.
+ * @param b set to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsAll(android.icu.text.UnicodeSet b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if there is a partition of the string such that this set contains each of the partitioned strings.
+ * For example, for the Unicode set [a{bc}{cd}]<br>
+ * containsAll is true for each of: "a", "bc", ""cdbca"<br>
+ * containsAll is false for each of: "acb", "bcda", "bcx"<br>
+ * @param s string containing characters to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsAll(java.lang.String s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains none of the characters
+ * of the given range.
+ * @param start first character, inclusive, of the range
+ * @param end last character, inclusive, of the range
+ * @return true if the test condition is met
+ */
+
+public boolean containsNone(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if none of the characters or strings in this UnicodeSet appears in the string.
+ * For example, for the Unicode set [a{bc}{cd}]<br>
+ * containsNone is true for: "xy", "cb"<br>
+ * containsNone is false for: "a", "bc", "bcd"<br>
+ * @param b set to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsNone(android.icu.text.UnicodeSet b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains none of the characters
+ * of the given string.
+ * @param s string containing characters to be checked for containment
+ * @return true if the test condition is met
+ */
+
+public boolean containsNone(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains one or more of the characters
+ * in the given range.
+ * @param start first character, inclusive, of the range
+ * @param end last character, inclusive, of the range
+ * @return true if the condition is met
+ */
+
+public final boolean containsSome(int start, int end) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains one or more of the characters
+ * and strings of the given set.
+ * @param s set to be checked for containment
+ * @return true if the condition is met
+ */
+
+public final boolean containsSome(android.icu.text.UnicodeSet s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this set contains one or more of the characters
+ * of the given string.
+ * @param s string containing characters to be checked for containment
+ * @return true if the condition is met
+ */
+
+public final boolean containsSome(java.lang.CharSequence s) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds all of the elements in the specified set to this set if
+ * they're not already present.  This operation effectively
+ * modifies this set so that its value is the <i>union</i> of the two
+ * sets.  The behavior of this operation is unspecified if the specified
+ * collection is modified while the operation is in progress.
+ *
+ * @param c set whose elements are to be added to this set.
+ */
+
+public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retains only the elements in this set that are contained in the
+ * specified set.  In other words, removes from this set all of
+ * its elements that are not contained in the specified set.  This
+ * operation effectively modifies this set so that its value is
+ * the <i>intersection</i> of the two sets.
+ *
+ * @param c set that defines which elements this set will retain.
+ */
+
+public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes from this set all of its elements that are contained in the
+ * specified set.  This operation effectively modifies this
+ * set so that its value is the <i>asymmetric set difference</i> of
+ * the two sets.
+ *
+ * @param c set that defines which elements will be removed from
+ *          this set.
+ */
+
+public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Complements in this set all elements contained in the specified
+ * set.  Any character in the other set will be removed if it is
+ * in this set, or will be added if it is not in this set.
+ *
+ * @param c set that defines which elements will be complemented from
+ *          this set.
+ */
+
+public android.icu.text.UnicodeSet complementAll(android.icu.text.UnicodeSet c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes all of the elements from this set.  This set will be
+ * empty after this call returns.
+ */
+
+public android.icu.text.UnicodeSet clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iteration method that returns the number of ranges contained in
+ * this set.
+ * @see #getRangeStart
+ * @see #getRangeEnd
+ */
+
+public int getRangeCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iteration method that returns the first character in the
+ * specified range of this set.
+ * @exception java.lang.ArrayIndexOutOfBoundsException if index is outside
+ * the range <code>0..getRangeCount()-1</code>
+ * @see #getRangeCount
+ * @see #getRangeEnd
+ */
+
+public int getRangeStart(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Iteration method that returns the last character in the
+ * specified range of this set.
+ * @exception java.lang.ArrayIndexOutOfBoundsException if index is outside
+ * the range <code>0..getRangeCount()-1</code>
+ * @see #getRangeStart
+ * @see #getRangeEnd
+ */
+
+public int getRangeEnd(int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Reallocate this objects internal structures to take up the least
+ * possible space, without changing this object's value.
+ */
+
+public android.icu.text.UnicodeSet compact() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the specified object with this set for equality.  Returns
+ * <tt>true</tt> if the specified object is also a set, the two sets
+ * have the same size, and every member of the specified set is
+ * contained in this set (or equivalently, every member of this set is
+ * contained in the specified set).
+ *
+ * @param o Object to be compared for equality with this set.
+ * @return <tt>true</tt> if the specified Object is equal to this set.
+ */
+
+public boolean equals(java.lang.Object o) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hash code value for this set.
+ *
+ * @return the hash code value for this set.
+ * @see java.lang.Object#hashCode()
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a programmer-readable string representation of this object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add the contents of the UnicodeSet (as strings) into a collection.
+ * @param target collection to add into
+ */
+
+public <T extends java.util.Collection<java.lang.String>> T addAllTo(T target) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add the contents of the collection (as strings) into this UnicodeSet.
+ * The collection must not contain null.
+ * @param source the collection to add
+ * @return a reference to this object
+ */
+
+public android.icu.text.UnicodeSet add(java.lang.Iterable<?> source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a collection (as strings) into this UnicodeSet.
+ * Uses standard naming convention.
+ * @param source collection to add into
+ * @return a reference to this object
+ */
+
+public android.icu.text.UnicodeSet addAll(java.lang.Iterable<?> source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to contain those code points which have the
+ * given value for the given binary or enumerated property, as
+ * returned by UCharacter.getIntPropertyValue.  Prior contents of
+ * this set are lost.
+ *
+ * @param prop a property in the range
+ * UProperty.BIN_START..UProperty.BIN_LIMIT-1 or
+ * UProperty.INT_START..UProperty.INT_LIMIT-1 or.
+ * UProperty.MASK_START..UProperty.MASK_LIMIT-1.
+ *
+ * @param value a value in the range
+ * UCharacter.getIntPropertyMinValue(prop)..
+ * UCharacter.getIntPropertyMaxValue(prop), with one exception.
+ * If prop is UProperty.GENERAL_CATEGORY_MASK, then value should not be
+ * a UCharacter.getType() result, but rather a mask value produced
+ * by logically ORing (1 &lt;&lt; UCharacter.getType()) values together.
+ * This allows grouped categories such as [:L:] to be represented.
+ *
+ * @return a reference to this set
+ */
+
+public android.icu.text.UnicodeSet applyIntPropertyValue(int prop, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to contain those code points which have the
+ * given value for the given property.  Prior contents of this
+ * set are lost.
+ *
+ * @param propertyAlias a property alias, either short or long.
+ * The name is matched loosely.  See PropertyAliases.txt for names
+ * and a description of loose matching.  If the value string is
+ * empty, then this string is interpreted as either a
+ * General_Category value alias, a Script value alias, a binary
+ * property alias, or a special ID.  Special IDs are matched
+ * loosely and correspond to the following sets:
+ *
+ * "ANY" = [\\u0000-\\U0010FFFF],
+ * "ASCII" = [\\u0000-\\u007F].
+ *
+ * @param valueAlias a value alias, either short or long.  The
+ * name is matched loosely.  See PropertyValueAliases.txt for
+ * names and a description of loose matching.  In addition to
+ * aliases listed, numeric values and canonical combining classes
+ * may be expressed numerically, e.g., ("nv", "0.5") or ("ccc",
+ * "220").  The value string may also be empty.
+ *
+ * @return a reference to this set
+ */
+
+public android.icu.text.UnicodeSet applyPropertyAlias(java.lang.String propertyAlias, java.lang.String valueAlias) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Modifies this set to contain those code points which have the
+ * given value for the given property.  Prior contents of this
+ * set are lost.
+ * @param propertyAlias A string of the property alias.
+ * @param valueAlias A string of the value alias.
+ * @param symbols if not null, then symbols are first called to see if a property
+ * is available. If true, then everything else is skipped.
+ * @return this set
+ */
+
+public android.icu.text.UnicodeSet applyPropertyAlias(java.lang.String propertyAlias, java.lang.String valueAlias, android.icu.text.SymbolTable symbols) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Close this set over the given attribute.  For the attribute
+ * CASE, the result is to modify this set so that:
+ *
+ * 1. For each character or string 'a' in this set, all strings
+ * 'b' such that foldCase(a) == foldCase(b) are added to this set.
+ * (For most 'a' that are single characters, 'b' will have
+ * b.length() == 1.)
+ *
+ * 2. For each string 'e' in the resulting set, if e !=
+ * foldCase(e), 'e' will be removed.
+ *
+ * Example: [aq\u00DF{Bc}{bC}{Fi}] =&gt; [aAqQ\u00DF\uFB01{ss}{bc}{fi}]
+ *
+ * (Here foldCase(x) refers to the operation
+ * UCharacter.foldCase(x, true), and a == b actually denotes
+ * a.equals(b), not pointer comparison.)
+ *
+ * @param attribute bitmask for attributes to close over.
+ * Currently only the CASE bit is supported.  Any undefined bits
+ * are ignored.
+ * @return a reference to this set.
+ */
+
+public android.icu.text.UnicodeSet closeOver(int attribute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Is this frozen, according to the Freezable interface?
+ *
+ * @return value
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Freeze this class, according to the Freezable interface.
+ *
+ * @return this
+ */
+
+public android.icu.text.UnicodeSet freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string using this UnicodeSet.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param spanCondition The span condition
+ * @return the length of the span
+ */
+
+public int span(java.lang.CharSequence s, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string using this UnicodeSet.
+ *   If the start index is less than 0, span will start from 0.
+ *   If the start index is greater than the string length, span returns the string length.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param start The start index that the span begins
+ * @param spanCondition The span condition
+ * @return the string index which ends the span (i.e. exclusive)
+ */
+
+public int span(java.lang.CharSequence s, int start, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string backwards (from the end) using this UnicodeSet.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param spanCondition The span condition
+ * @return The string index which starts the span (i.e. inclusive).
+ */
+
+public int spanBack(java.lang.CharSequence s, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Span a string backwards (from the fromIndex) using this UnicodeSet.
+ * If the fromIndex is less than 0, spanBack will return 0.
+ * If fromIndex is greater than the string length, spanBack will start from the string length.
+ * <p>To replace, count elements, or delete spans, see {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner}.
+ * @param s The string to be spanned
+ * @param fromIndex The index of the char (exclusive) that the string should be spanned backwards
+ * @param spanCondition The span condition
+ * @return The string index which starts the span (i.e. inclusive).
+ */
+
+public int spanBack(java.lang.CharSequence s, int fromIndex, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clone a thawed version of this class, according to the Freezable interface.
+ * @return the clone, not frozen
+ */
+
+public android.icu.text.UnicodeSet cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Provide for faster iteration than by String. Returns an Iterable/Iterator over ranges of code points.
+ * The UnicodeSet must not be altered during the iteration.
+ * The EntryRange instance is the same each time; the contents are just reset.
+ *
+ * <p><b>Warning: </b>To iterate over the full contents, you have to also iterate over the strings.
+ *
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ *
+ * <pre>
+ * // Sample code
+ * for (EntryRange range : us1.ranges()) {
+ *     // do something with code points between range.codepoint and range.codepointEnd;
+ * }
+ * for (String s : us1.strings()) {
+ *     // do something with each string;
+ * }
+ * </pre>
+ */
+
+public java.lang.Iterable<android.icu.text.UnicodeSet.EntryRange> ranges() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string iterator. Uses the same order of iteration as {@link android.icu.text.UnicodeSetIterator UnicodeSetIterator}.
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ * @see java.util.Set#iterator()
+ */
+
+public java.util.Iterator<java.lang.String> iterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #containsAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> boolean containsAll(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #containsNone(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> boolean containsNone(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #containsAll(android.icu.text.UnicodeSet)
+ */
+
+public final <T extends java.lang.CharSequence> boolean containsSome(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #addAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T... collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #removeAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * @see #retainAll(android.icu.text.UnicodeSet)
+ */
+
+public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T> collection) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares UnicodeSets, where shorter come first, and otherwise lexigraphically
+ * (according to the comparison of the first characters that differ).
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+
+public int compareTo(android.icu.text.UnicodeSet o) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares UnicodeSets, in three different ways.
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
+
+public int compareTo(android.icu.text.UnicodeSet o, android.icu.text.UnicodeSet.ComparisonStyle style) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+public int compareTo(java.lang.Iterable<java.lang.String> other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * For iterating through the strings in the set. Example:
+ * <pre>
+ * for (String key : myUnicodeSet.strings()) {
+ *   doSomethingWith(key);
+ * }
+ * </pre>
+ */
+
+public java.util.Collection<java.lang.String> strings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Bitmask for constructor, applyPattern(), and closeOver()
+ * indicating letter case.  This may be ORed together with other
+ * selectors.
+ *
+ * Enable case insensitive matching.  E.g., "[ab]" with this flag
+ * will match 'a', 'A', 'b', and 'B'.  "[^ab]" with this flag will
+ * match all except 'a', 'A', 'b', and 'B'. This adds the lower-,
+ * title-, and uppercase mappings as well as the case folding
+ * of each existing element in the set.
+ */
+
+public static final int ADD_CASE_MAPPINGS = 4; // 0x4
+
+/**
+ * Constant for the set of all code points. (Since UnicodeSets can include strings, does not include everything that a UnicodeSet can.)
+ */
+
+public static final android.icu.text.UnicodeSet ALL_CODE_POINTS;
+static { ALL_CODE_POINTS = null; }
+
+/**
+ * Bitmask for constructor, applyPattern(), and closeOver()
+ * indicating letter case.  This may be ORed together with other
+ * selectors.
+ *
+ * Enable case insensitive matching.  E.g., "[ab]" with this flag
+ * will match 'a', 'A', 'b', and 'B'.  "[^ab]" with this flag will
+ * match all except 'a', 'A', 'b', and 'B'. This performs a full
+ * closure over case mappings, e.g. U+017F for s.
+ *
+ * The resulting set is a superset of the input for the code points but
+ * not for the strings.
+ * It performs a case mapping closure of the code points and adds
+ * full case folding strings for the code points, and reduces strings of
+ * the original set to their full case folding equivalents.
+ *
+ * This is designed for case-insensitive matches, for example
+ * in regular expressions. The full code point case closure allows checking of
+ * an input character directly against the closure set.
+ * Strings are matched by comparing the case-folded form from the closure
+ * set with an incremental case folding of the string in question.
+ *
+ * The closure set will also contain single code points if the original
+ * set contained case-equivalent strings (like U+00DF for "ss" or "Ss" etc.).
+ * This is not necessary (that is, redundant) for the above matching method
+ * but results in the same closure sets regardless of whether the original
+ * set contained the code point or a string.
+ */
+
+public static final int CASE = 2; // 0x2
+
+/**
+ * Alias for UnicodeSet.CASE, for ease of porting from C++ where ICU4C
+ * also has both USET_CASE and USET_CASE_INSENSITIVE (see uset.h).
+ * @see #CASE
+ */
+
+public static final int CASE_INSENSITIVE = 2; // 0x2
+
+/**
+ * Constant for the empty set.
+ */
+
+public static final android.icu.text.UnicodeSet EMPTY;
+static { EMPTY = null; }
+
+/**
+ * Bitmask for constructor and applyPattern() indicating that
+ * white space should be ignored.  If set, ignore Unicode Pattern_White_Space characters,
+ * unless they are quoted or escaped.  This may be ORed together
+ * with other selectors.
+ */
+
+public static final int IGNORE_SPACE = 1; // 0x1
+
+/**
+ * Maximum value that can be stored in a UnicodeSet.
+ */
+
+public static final int MAX_VALUE = 1114111; // 0x10ffff
+
+/**
+ * Minimum value that can be stored in a UnicodeSet.
+ */
+
+public static final int MIN_VALUE = 0; // 0x0
+/**
+ * Comparison style enums used by {@link android.icu.text.UnicodeSet#compareTo(android.icu.text.UnicodeSet,android.icu.text.UnicodeSet.ComparisonStyle) UnicodeSet#compareTo(UnicodeSet, ComparisonStyle)}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum ComparisonStyle {
+/**
+ */
+
+SHORTER_FIRST,
+/**
+ */
+
+LEXICOGRAPHIC,
+/**
+ */
+
+LONGER_FIRST;
+}
+
+/**
+ * A struct-like class used for iteration through ranges, for faster iteration than by String.
+ * Read about the restrictions on usage in {@link android.icu.text.UnicodeSet#ranges() UnicodeSet#ranges()}.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class EntryRange {
+
+EntryRange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The starting code point of the range.
+ */
+
+public int codepoint;
+
+/**
+ * The ending code point of the range
+ */
+
+public int codepointEnd;
+}
+
+/**
+ * Argument values for whether span() and similar functions continue while the current character is contained vs.
+ * not contained in the set.
+ * <p>
+ * The functionality is straightforward for sets with only single code points, without strings (which is the common
+ * case):
+ * <ul>
+ * <li>CONTAINED and SIMPLE work the same.
+ * <li>CONTAINED and SIMPLE are inverses of NOT_CONTAINED.
+ * <li>span() and spanBack() partition any string the
+ * same way when alternating between span(NOT_CONTAINED) and span(either "contained" condition).
+ * <li>Using a
+ * complemented (inverted) set and the opposite span conditions yields the same results.
+ * </ul>
+ * When a set contains multi-code point strings, then these statements may not be true, depending on the strings in
+ * the set (for example, whether they overlap with each other) and the string that is processed. For a set with
+ * strings:
+ * <ul>
+ * <li>The complement of the set contains the opposite set of code points, but the same set of strings.
+ * Therefore, complementing both the set and the span conditions may yield different results.
+ * <li>When starting spans
+ * at different positions in a string (span(s, ...) vs. span(s+1, ...)) the ends of the spans may be different
+ * because a set string may start before the later position.
+ * <li>span(SIMPLE) may be shorter than
+ * span(CONTAINED) because it will not recursively try all possible paths. For example, with a set which
+ * contains the three strings "xy", "xya" and "ax", span("xyax", CONTAINED) will return 4 but span("xyax",
+ * SIMPLE) will return 3. span(SIMPLE) will never be longer than span(CONTAINED).
+ * <li>With either "contained" condition, span() and spanBack() may partition a string in different ways. For example,
+ * with a set which contains the two strings "ab" and "ba", and when processing the string "aba", span() will yield
+ * contained/not-contained boundaries of { 0, 2, 3 } while spanBack() will yield boundaries of { 0, 1, 3 }.
+ * </ul>
+ * Note: If it is important to get the same boundaries whether iterating forward or backward through a string, then
+ * either only span() should be used and the boundaries cached for backward operation, or an ICU BreakIterator could
+ * be used.
+ * <p>
+ * Note: Unpaired surrogates are treated like surrogate code points. Similarly, set strings match only on code point
+ * boundaries, never in the middle of a surrogate pair.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum SpanCondition {
+/**
+ * Continues a span() while there is no set element at the current position.
+ * Increments by one code point at a time.
+ * Stops before the first set element (character or string).
+ * (For code points only, this is like while contains(current)==false).
+ * <p>
+ * When span() returns, the substring between where it started and the position it returned consists only of
+ * characters that are not in the set, and none of its strings overlap with the span.
+ */
+
+NOT_CONTAINED,
+/**
+ * Spans the longest substring that is a concatenation of set elements (characters or strings).
+ * (For characters only, this is like while contains(current)==true).
+ * <p>
+ * When span() returns, the substring between where it started and the position it returned consists only of set
+ * elements (characters or strings) that are in the set.
+ * <p>
+ * If a set contains strings, then the span will be the longest substring for which there
+ * exists at least one non-overlapping concatenation of set elements (characters or strings).
+ * This is equivalent to a POSIX regular expression for <code>(OR of each set element)*</code>.
+ * (Java/ICU/Perl regex stops at the first match of an OR.)
+ */
+
+CONTAINED,
+/**
+ * Continues a span() while there is a set element at the current position.
+ * Increments by the longest matching element at each position.
+ * (For characters only, this is like while contains(current)==true).
+ * <p>
+ * When span() returns, the substring between where it started and the position it returned consists only of set
+ * elements (characters or strings) that are in the set.
+ * <p>
+ * If a set only contains single characters, then this is the same as CONTAINED.
+ * <p>
+ * If a set contains strings, then the span will be the longest substring with a match at each position with the
+ * longest single set element (character or string).
+ * <p>
+ * Use this span condition together with other longest-match algorithms, such as ICU converters
+ * (ucnv_getUnicodeSet()).
+ */
+
+SIMPLE,
+/**
+ * One more than the last span condition.
+ */
+
+CONDITION_COUNT;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetIterator.java
new file mode 100644
index 0000000..34a5b07
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetIterator.java
@@ -0,0 +1,160 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+
+/**
+ * UnicodeSetIterator iterates over the contents of a UnicodeSet.  It
+ * iterates over either code points or code point ranges.  After all
+ * code points or ranges have been returned, it returns the
+ * multicharacter strings of the UnicodSet, if any.
+ *
+ * <p>To iterate over code points and multicharacter strings,
+ * use a loop like this:
+ * <pre>
+ * for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.next();) {
+ *   processString(it.getString());
+ * }
+ * </pre>
+ *
+ * <p>To iterate over code point ranges, use a loop like this:
+ * <pre>
+ * for (UnicodeSetIterator it = new UnicodeSetIterator(set); it.nextRange();) {
+ *   if (it.codepoint != UnicodeSetIterator.IS_STRING) {
+ *     processCodepointRange(it.codepoint, it.codepointEnd);
+ *   } else {
+ *     processString(it.getString());
+ *   }
+ * }
+ * </pre>
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ * @author M. Davis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnicodeSetIterator {
+
+/**
+ * Create an iterator over the given set.
+ * @param set set to iterate over
+ */
+
+public UnicodeSetIterator(android.icu.text.UnicodeSet set) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Create an iterator over nothing.  <tt>next()</tt> and
+ * <tt>nextRange()</tt> return false. This is a convenience
+ * constructor allowing the target to be set later.
+ */
+
+public UnicodeSetIterator() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the next element in the set, either a single code point
+ * or a string.  If there are no more elements in the set, return
+ * false.  If <tt>codepoint == IS_STRING</tt>, the value is a
+ * string in the <tt>string</tt> field.  Otherwise the value is a
+ * single code point in the <tt>codepoint</tt> field.
+ *
+ * <p>The order of iteration is all code points in sorted order,
+ * followed by all strings sorted order.  <tt>codepointEnd</tt> is
+ * undefined after calling this method.  <tt>string</tt> is
+ * undefined unless <tt>codepoint == IS_STRING</tt>.  Do not mix
+ * calls to <tt>next()</tt> and <tt>nextRange()</tt> without
+ * calling <tt>reset()</tt> between them.  The results of doing so
+ * are undefined.
+ * <p><b>Warning: </b>For speed, UnicodeSet iteration does not check for concurrent modification.
+ * Do not alter the UnicodeSet while iterating.
+ * @return true if there was another element in the set and this
+ * object contains the element.
+ */
+
+public boolean next() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the next element in the set, either a code point range
+ * or a string.  If there are no more elements in the set, return
+ * false.  If <tt>codepoint == IS_STRING</tt>, the value is a
+ * string in the <tt>string</tt> field.  Otherwise the value is a
+ * range of one or more code points from <tt>codepoint</tt> to
+ * <tt>codepointeEnd</tt> inclusive.
+ *
+ * <p>The order of iteration is all code points ranges in sorted
+ * order, followed by all strings sorted order.  Ranges are
+ * disjoint and non-contiguous.  <tt>string</tt> is undefined
+ * unless <tt>codepoint == IS_STRING</tt>.  Do not mix calls to
+ * <tt>next()</tt> and <tt>nextRange()</tt> without calling
+ * <tt>reset()</tt> between them.  The results of doing so are
+ * undefined.
+ *
+ * @return true if there was another element in the set and this
+ * object contains the element.
+ */
+
+public boolean nextRange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this iterator to visit the elements of the given set and
+ * resets it to the start of that set.  The iterator is valid only
+ * so long as <tt>set</tt> is valid.
+ * @param uset the set to iterate over.
+ */
+
+public void reset(android.icu.text.UnicodeSet uset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets this iterator to the start of the set.
+ */
+
+public void reset() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the current string from the iterator. Only use after calling next(), not nextRange().
+ */
+
+public java.lang.String getString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Value of <tt>codepoint</tt> if the iterator points to a string.
+ * If <tt>codepoint == IS_STRING</tt>, then examine
+ * <tt>string</tt> for the current iteration result.
+ */
+
+public static int IS_STRING = -1; // 0xffffffff
+
+/**
+ * Current code point, or the special value <tt>IS_STRING</tt>, if
+ * the iterator points to a string.
+ */
+
+public int codepoint;
+
+/**
+ * When iterating over ranges using <tt>nextRange()</tt>,
+ * <tt>codepointEnd</tt> contains the inclusive end of the
+ * iteration range, if <tt>codepoint != IS_STRING</tt>.  If
+ * iterating over code points using <tt>next()</tt>, or if
+ * <tt>codepoint == IS_STRING</tt>, then the value of
+ * <tt>codepointEnd</tt> is undefined.
+ */
+
+public int codepointEnd;
+
+/**
+ * If <tt>codepoint == IS_STRING</tt>, then <tt>string</tt> points
+ * to the current string.  If <tt>codepoint != IS_STRING</tt>, the
+ * value of <tt>string</tt> is undefined.
+ */
+
+public java.lang.String string;
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetSpanner.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetSpanner.java
new file mode 100644
index 0000000..5c4f6b4
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/text/UnicodeSetSpanner.java
@@ -0,0 +1,297 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2014-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.text;
+
+import android.icu.text.UnicodeSet.SpanCondition;
+
+/**
+ * A helper class used to count, replace, and trim CharSequences based on UnicodeSet matches.
+ * An instance is immutable (and thus thread-safe) iff the source UnicodeSet is frozen.
+ * <p><b>Note:</b> The counting, deletion, and replacement depend on alternating a {@link android.icu.text.UnicodeSet.SpanCondition SpanCondition} with
+ * its inverse. That is, the code spans, then spans for the inverse, then spans, and so on.
+ * For the inverse, the following mapping is used:
+ * <ul>
+ * <li>{@link android.icu.text.UnicodeSet.SpanCondition#SIMPLE UnicodeSet.SpanCondition#SIMPLE} ? {@link android.icu.text.UnicodeSet.SpanCondition#NOT_CONTAINED UnicodeSet.SpanCondition#NOT_CONTAINED}</li>
+ * <li>{@link android.icu.text.UnicodeSet.SpanCondition#CONTAINED UnicodeSet.SpanCondition#CONTAINED} ? {@link android.icu.text.UnicodeSet.SpanCondition#NOT_CONTAINED UnicodeSet.SpanCondition#NOT_CONTAINED}</li>
+ * <li>{@link android.icu.text.UnicodeSet.SpanCondition#NOT_CONTAINED UnicodeSet.SpanCondition#NOT_CONTAINED} ? {@link android.icu.text.UnicodeSet.SpanCondition#SIMPLE UnicodeSet.SpanCondition#SIMPLE}</li>
+ * </ul>
+ * These are actually not complete inverses. However, the alternating works because there are no gaps.
+ * For example, with [a{ab}{bc}], you get the following behavior when scanning forward:
+ *
+ * <table border="1">
+ * <tr><th>SIMPLE</th><td>xxx[ab]cyyy</td></tr>
+ * <tr><th>CONTAINED</th><td>xxx[abc]yyy</td></tr>
+ * <tr><th>NOT_CONTAINED</th><td>[xxx]ab[cyyy]</td></tr>
+ * </table>
+ * <p>So here is what happens when you alternate:
+ *
+ * <table border="1">
+ * <tr><th>start</th><td>|xxxabcyyy</td></tr>
+ * <tr><th>NOT_CONTAINED</th><td>xxx|abcyyy</td></tr>
+ * <tr><th>CONTAINED</th><td>xxxabc|yyy</td></tr>
+ * <tr><th>NOT_CONTAINED</th><td>xxxabcyyy|</td></tr>
+ * </table>
+ * <p>The entire string is traversed.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class UnicodeSetSpanner {
+
+/**
+ * Create a spanner from a UnicodeSet. For speed and safety, the UnicodeSet should be frozen. However, this class
+ * can be used with a non-frozen version to avoid the cost of freezing.
+ *
+ * @param source
+ *            the original UnicodeSet
+ */
+
+public UnicodeSetSpanner(android.icu.text.UnicodeSet source) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the UnicodeSet used for processing. It is frozen iff the original was.
+ *
+ * @return the construction set.
+ */
+
+public android.icu.text.UnicodeSet getUnicodeSet() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of matching characters found in a character sequence,
+ * counting by CountMethod.MIN_ELEMENTS using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            the sequence to count characters in
+ * @return the count. Zero if there are none.
+ */
+
+public int countIn(java.lang.CharSequence sequence) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of matching characters found in a character sequence, using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            the sequence to count characters in
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @return the count. Zero if there are none.
+ */
+
+public int countIn(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.CountMethod countMethod) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of matching characters found in a character sequence.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            the sequence to count characters in
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @param spanCondition
+ *            the spanCondition to use. SIMPLE or CONTAINED means only count the elements in the span;
+ *            NOT_CONTAINED is the reverse.
+ *            <br><b>WARNING: </b> when a UnicodeSet contains strings, there may be unexpected behavior in edge cases.
+ * @return the count. Zero if there are none.
+ */
+
+public int countIn(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.CountMethod countMethod, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Delete all the matching spans in sequence, using SpanCondition.SIMPLE
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @return modified string.
+ */
+
+public java.lang.String deleteFrom(java.lang.CharSequence sequence) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Delete all matching spans in sequence, according to the spanCondition.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param spanCondition
+ *            specify whether to modify the matching spans (CONTAINED or SIMPLE) or the non-matching (NOT_CONTAINED)
+ * @return modified string.
+ */
+
+public java.lang.String deleteFrom(java.lang.CharSequence sequence, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Replace all matching spans in sequence by the replacement,
+ * counting by CountMethod.MIN_ELEMENTS using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param replacement
+ *            replacement sequence. To delete, use ""
+ * @return modified string.
+ */
+
+public java.lang.String replaceFrom(java.lang.CharSequence sequence, java.lang.CharSequence replacement) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Replace all matching spans in sequence by replacement, according to the CountMethod, using SpanCondition.SIMPLE.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ *
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param replacement
+ *            replacement sequence. To delete, use ""
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @return modified string.
+ */
+
+public java.lang.String replaceFrom(java.lang.CharSequence sequence, java.lang.CharSequence replacement, android.icu.text.UnicodeSetSpanner.CountMethod countMethod) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Replace all matching spans in sequence by replacement, according to the countMethod and spanCondition.
+ * The code alternates spans; see the class doc for {@link android.icu.text.UnicodeSetSpanner UnicodeSetSpanner} for a note about boundary conditions.
+ * @param sequence
+ *            charsequence to replace matching spans in.
+ * @param replacement
+ *            replacement sequence. To delete, use ""
+ * @param countMethod
+ *            whether to treat an entire span as a match, or individual elements as matches
+ * @param spanCondition
+ *            specify whether to modify the matching spans (CONTAINED or SIMPLE) or the non-matching
+ *            (NOT_CONTAINED)
+ * @return modified string.
+ */
+
+public java.lang.String replaceFrom(java.lang.CharSequence sequence, java.lang.CharSequence replacement, android.icu.text.UnicodeSetSpanner.CountMethod countMethod, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a trimmed sequence (using CharSequence.subsequence()), that omits matching elements at the start and
+ * end of the string, using TrimOption.BOTH and SpanCondition.SIMPLE. For example:
+ *
+ * <pre>
+ * {@code
+ *
+ *   new UnicodeSet("[ab]").trim("abacatbab")}
+ * </pre>
+ *
+ * ... returns {@code "cat"}.
+ * @param sequence
+ *            the sequence to trim
+ * @return a subsequence
+ */
+
+public java.lang.CharSequence trim(java.lang.CharSequence sequence) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a trimmed sequence (using CharSequence.subsequence()), that omits matching elements at the start or
+ * end of the string, using the trimOption and SpanCondition.SIMPLE. For example:
+ *
+ * <pre>
+ * {@code
+ *
+ *   new UnicodeSet("[ab]").trim("abacatbab", TrimOption.LEADING)}
+ * </pre>
+ *
+ * ... returns {@code "catbab"}.
+ *
+ * @param sequence
+ *            the sequence to trim
+ * @param trimOption
+ *            LEADING, TRAILING, or BOTH
+ * @return a subsequence
+ */
+
+public java.lang.CharSequence trim(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.TrimOption trimOption) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a trimmed sequence (using CharSequence.subsequence()), that omits matching elements at the start or
+ * end of the string, depending on the trimOption and spanCondition. For example:
+ *
+ * <pre>
+ * {@code
+ *
+ *   new UnicodeSet("[ab]").trim("abacatbab", TrimOption.LEADING, SpanCondition.SIMPLE)}
+ * </pre>
+ *
+ * ... returns {@code "catbab"}.
+ *
+ * @param sequence
+ *            the sequence to trim
+ * @param trimOption
+ *            LEADING, TRAILING, or BOTH
+ * @param spanCondition
+ *            SIMPLE, CONTAINED or NOT_CONTAINED
+ * @return a subsequence
+ */
+
+public java.lang.CharSequence trim(java.lang.CharSequence sequence, android.icu.text.UnicodeSetSpanner.TrimOption trimOption, android.icu.text.UnicodeSet.SpanCondition spanCondition) { throw new RuntimeException("Stub!"); }
+/**
+ * Options for replaceFrom and countIn to control how to treat each matched span.
+ * It is similar to whether one is replacing [abc] by x, or [abc]* by x.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CountMethod {
+/**
+ * Collapse spans. That is, modify/count the entire matching span as a single item, instead of separate
+ * set elements.
+ */
+
+WHOLE_SPAN,
+/**
+ * Use the smallest number of elements in the spanned range for counting and modification,
+ * based on the {@link android.icu.text.UnicodeSet.SpanCondition UnicodeSet.SpanCondition}.
+ * If the set has no strings, this will be the same as the number of spanned code points.
+ * <p>For example, in the string "abab" with SpanCondition.SIMPLE:
+ * <ul>
+ * <li>spanning with [ab] will count four MIN_ELEMENTS.</li>
+ * <li>spanning with [{ab}] will count two MIN_ELEMENTS.</li>
+ * <li>spanning with [ab{ab}] will also count two MIN_ELEMENTS.</li>
+ * </ul>
+ */
+
+MIN_ELEMENTS;
+}
+
+/**
+ * Options for the trim() method
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum TrimOption {
+/**
+ * Trim leading spans.
+ */
+
+LEADING,
+/**
+ * Trim leading and trailing spans.
+ */
+
+BOTH,
+/**
+ * Trim trailing spans.
+ */
+
+TRAILING;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/BuddhistCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/BuddhistCalendar.java
new file mode 100644
index 0000000..157dc88
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/BuddhistCalendar.java
@@ -0,0 +1,183 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2012, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * <code>BuddhistCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since the birth of the Buddha.  This is the civil calendar
+ * in some predominantly Buddhist countries such as Thailand, and it is used for
+ * religious purposes elsewhere.
+ * <p>
+ * The Buddhist calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  Years are numbered since the birth of the
+ * Buddha in 543 BC (Gregorian), so that 1 AD (Gregorian) is equivalent to 544
+ * BE (Buddhist Era) and 1998 AD is 2541 BE.
+ * <p>
+ * The Buddhist Calendar has only one allowable era: <code>BE</code>.  If the
+ * calendar is not in lenient mode (see <code>setLenient</code>), dates before
+ * 1/1/1 BE are rejected with an <code>IllegalArgumentException</code>.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * BuddhistCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=buddhist"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class BuddhistCalendar extends android.icu.util.GregorianCalendar {
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public BuddhistCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone the given time zone.
+ */
+
+public BuddhistCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public BuddhistCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public BuddhistCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param aLocale the given locale.
+ */
+
+public BuddhistCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param locale the given ulocale.
+ */
+
+public BuddhistCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public BuddhistCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>BuddhistCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public BuddhistCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a BuddhistCalendar with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public BuddhistCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override GregorianCalendar.  There is only one Buddhist ERA.  We
+ * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
+ * implement the 1..5000000 range, but it's not critical.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the Buddhist Era.  This is the only allowable <code>ERA</code>
+ * value for the Buddhist calendar.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int BE = 0; // 0x0
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Calendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Calendar.java
new file mode 100644
index 0000000..ca9c2ae
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Calendar.java
@@ -0,0 +1,2857 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *   Copyright (C) 1996-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.util;
+
+import android.icu.text.DateFormat;
+import java.util.Date;
+import android.icu.util.ULocale.Category;
+import android.icu.text.DateFormatSymbols;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.Calendar}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>Calendar</code> is an abstract base class for converting between
+ * a <code>Date</code> object and a set of integer fields such as
+ * <code>YEAR</code>, <code>MONTH</code>, <code>DAY</code>, <code>HOUR</code>,
+ * and so on. (A <code>Date</code> object represents a specific instant in
+ * time with millisecond precision. See
+ * {@link java.util.Date Date}
+ * for information about the <code>Date</code> class.)
+ *
+ * <p>Subclasses of <code>Calendar</code> interpret a <code>Date</code>
+ * according to the rules of a specific calendar system.  ICU4J contains
+ * several subclasses implementing different international calendar systems.
+ *
+ * <p>
+ * Like other locale-sensitive classes, <code>Calendar</code> provides a
+ * class method, <code>getInstance</code>, for getting a generally useful
+ * object of this type. <code>Calendar</code>'s <code>getInstance</code> method
+ * returns a calendar of a type appropriate to the locale, whose
+ * time fields have been initialized with the current date and time:
+ * <blockquote>
+ * <pre>Calendar rightNow = Calendar.getInstance()</pre>
+ * </blockquote>
+ *
+ * <p>When a <code>ULocale</code> is used by <code>getInstance</code>, its
+ * '<code>calendar</code>' tag and value are retrieved if present.  If a recognized
+ * value is supplied, a calendar is provided and configured as appropriate.
+ * Currently recognized tags are "buddhist", "chinese", "coptic", "ethiopic",
+ * "gregorian", "hebrew", "islamic", "islamic-civil", "japanese", and "roc".  For
+ * example: <blockquote>
+ * <pre>Calendar cal = Calendar.getInstance(new ULocale("en_US@calendar=japanese"));</pre>
+ * </blockquote> will return an instance of JapaneseCalendar (using en_US conventions for
+ * minimum days in first week, start day of week, et cetera).
+ *
+ * <p>A <code>Calendar</code> object can produce all the time field values
+ * needed to implement the date-time formatting for a particular language and
+ * calendar style (for example, Japanese-Gregorian, Japanese-Traditional).
+ * <code>Calendar</code> defines the range of values returned by certain fields,
+ * as well as their meaning.  For example, the first month of the year has value
+ * <code>MONTH</code> == <code>JANUARY</code> for all calendars.  Other values
+ * are defined by the concrete subclass, such as <code>ERA</code> and
+ * <code>YEAR</code>.  See individual field documentation and subclass
+ * documentation for details.
+ *
+ * <p>When a <code>Calendar</code> is <em>lenient</em>, it accepts a wider range
+ * of field values than it produces.  For example, a lenient
+ * <code>GregorianCalendar</code> interprets <code>MONTH</code> ==
+ * <code>JANUARY</code>, <code>DAY_OF_MONTH</code> == 32 as February 1.  A
+ * non-lenient <code>GregorianCalendar</code> throws an exception when given
+ * out-of-range field settings.  When calendars recompute field values for
+ * return by <code>get()</code>, they normalize them.  For example, a
+ * <code>GregorianCalendar</code> always produces <code>DAY_OF_MONTH</code>
+ * values between 1 and the length of the month.
+ *
+ * <p><code>Calendar</code> defines a locale-specific seven day week using two
+ * parameters: the first day of the week and the minimal days in first week
+ * (from 1 to 7).  These numbers are taken from the locale resource data when a
+ * <code>Calendar</code> is constructed.  They may also be specified explicitly
+ * through the API.
+ *
+ * <p>When setting or getting the <code>WEEK_OF_MONTH</code> or
+ * <code>WEEK_OF_YEAR</code> fields, <code>Calendar</code> must determine the
+ * first week of the month or year as a reference point.  The first week of a
+ * month or year is defined as the earliest seven day period beginning on
+ * <code>getFirstDayOfWeek()</code> and containing at least
+ * <code>getMinimalDaysInFirstWeek()</code> days of that month or year.  Weeks
+ * numbered ..., -1, 0 precede the first week; weeks numbered 2, 3,... follow
+ * it.  Note that the normalized numbering returned by <code>get()</code> may be
+ * different.  For example, a specific <code>Calendar</code> subclass may
+ * designate the week before week 1 of a year as week <em>n</em> of the previous
+ * year.
+ *
+ * <p> When computing a <code>Date</code> from time fields, some special
+ * circumstances may arise: there may be insufficient information to compute the
+ * <code>Date</code> (such as only year and month but no day in the month),
+ * there may be inconsistent information (such as "Tuesday, July 15, 1996" --
+ * July 15, 1996 is actually a Monday), or the input time might be ambiguous
+ * because of time zone transition.
+ *
+ * <p><strong>Insufficient information.</strong> The calendar will use default
+ * information to specify the missing fields. This may vary by calendar; for
+ * the Gregorian calendar, the default for a field is the same as that of the
+ * start of the epoch: i.e., YEAR = 1970, MONTH = JANUARY, DATE = 1, etc.
+ *
+ * <p><strong>Inconsistent information.</strong> If fields conflict, the calendar
+ * will give preference to fields set more recently. For example, when
+ * determining the day, the calendar will look for one of the following
+ * combinations of fields.  The most recent combination, as determined by the
+ * most recently set single field, will be used.
+ *
+ * <blockquote>
+ * <pre>
+ * MONTH + DAY_OF_MONTH
+ * MONTH + WEEK_OF_MONTH + DAY_OF_WEEK
+ * MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK
+ * DAY_OF_YEAR
+ * DAY_OF_WEEK + WEEK_OF_YEAR</pre>
+ * </blockquote>
+ *
+ * For the time of day:
+ *
+ * <blockquote>
+ * <pre>
+ * HOUR_OF_DAY
+ * AM_PM + HOUR</pre>
+ * </blockquote>
+ *
+ * <p><strong>Ambiguous Wall Clock Time.</strong> When time offset from UTC has
+ * changed, it produces an ambiguous time slot around the transition. For example,
+ * many US locations observe daylight saving time. On the date switching to daylight
+ * saving time in US, wall clock time jumps from 12:59 AM (standard) to 2:00 AM
+ * (daylight). Therefore, wall clock time from 1:00 AM to 1:59 AM do not exist on
+ * the date. When the input wall time fall into this missing time slot, the ICU
+ * Calendar resolves the time using the UTC offset before the transition by default.
+ * In this example, 1:30 AM is interpreted as 1:30 AM standard time (non-exist),
+ * so the final result will be 2:30 AM daylight time.
+ *
+ * <p>On the date switching back to standard time, wall clock time is moved back one
+ * hour at 2:00 AM. So wall clock time from 1:00 AM to 1:59 AM occur twice. In this
+ * case, the ICU Calendar resolves the time using the UTC offset after the transition
+ * by default. For example, 1:30 AM on the date is resolved as 1:30 AM standard time.
+ *
+ * <p>Ambiguous wall clock time resolution behaviors can be customized by Calendar APIs
+ * {@link #setRepeatedWallTimeOption(int)} and {@link #setSkippedWallTimeOption(int)}.
+ * These methods are available in ICU 49 or later versions.
+ *
+ * <p><strong>Note:</strong> for some non-Gregorian calendars, different
+ * fields may be necessary for complete disambiguation. For example, a full
+ * specification of the historial Arabic astronomical calendar requires year,
+ * month, day-of-month <em>and</em> day-of-week in some cases.
+ *
+ * <p><strong>Note:</strong> There are certain possible ambiguities in
+ * interpretation of certain singular times, which are resolved in the
+ * following ways:
+ * <ol>
+ *     <li> 24:00:00 "belongs" to the following day. That is,
+ *          23:59 on Dec 31, 1969 &lt; 24:00 on Jan 1, 1970 &lt; 24:01:00 on Jan 1, 1970
+ *
+ *     <li> Although historically not precise, midnight also belongs to "am",
+ *          and noon belongs to "pm", so on the same day,
+ *          12:00 am (midnight) &lt; 12:01 am, and 12:00 pm (noon) &lt; 12:01 pm
+ * </ol>
+ *
+ * <p>The date or time format strings are not part of the definition of a
+ * calendar, as those must be modifiable or overridable by the user at
+ * runtime. Use {@link android.icu.text.DateFormat DateFormat}
+ * to format dates.
+ *
+ * <p><strong>Field manipulation methods</strong></p>
+ *
+ * <p><code>Calendar</code> fields can be changed using three methods:
+ * <code>set()</code>, <code>add()</code>, and <code>roll()</code>.</p>
+ *
+ * <p><strong><code>set(f, value)</code></strong> changes field
+ * <code>f</code> to <code>value</code>.  In addition, it sets an
+ * internal member variable to indicate that field <code>f</code> has
+ * been changed. Although field <code>f</code> is changed immediately,
+ * the calendar's milliseconds is not recomputed until the next call to
+ * <code>get()</code>, <code>getTime()</code>, or
+ * <code>getTimeInMillis()</code> is made. Thus, multiple calls to
+ * <code>set()</code> do not trigger multiple, unnecessary
+ * computations. As a result of changing a field using
+ * <code>set()</code>, other fields may also change, depending on the
+ * field, the field value, and the calendar system. In addition,
+ * <code>get(f)</code> will not necessarily return <code>value</code>
+ * after the fields have been recomputed. The specifics are determined by
+ * the concrete calendar class.</p>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>set(Calendar.MONTH,
+ * Calendar.SEPTEMBER)</code> sets the calendar to September 31,
+ * 1999. This is a temporary internal representation that resolves to
+ * October 1, 1999 if <code>getTime()</code>is then called. However, a
+ * call to <code>set(Calendar.DAY_OF_MONTH, 30)</code> before the call to
+ * <code>getTime()</code> sets the calendar to September 30, 1999, since
+ * no recomputation occurs after <code>set()</code> itself.</p>
+ *
+ * <p><strong><code>add(f, delta)</code></strong> adds <code>delta</code>
+ * to field <code>f</code>.  This is equivalent to calling <code>set(f,
+ * get(f) + delta)</code> with two adjustments:</p>
+ *
+ * <blockquote>
+ *   <p><strong>Add rule 1</strong>. The value of field <code>f</code>
+ *   after the call minus the value of field <code>f</code> before the
+ *   call is <code>delta</code>, modulo any overflow that has occurred in
+ *   field <code>f</code>. Overflow occurs when a field value exceeds its
+ *   range and, as a result, the next larger field is incremented or
+ *   decremented and the field value is adjusted back into its range.</p>
+ *
+ *   <p><strong>Add rule 2</strong>. If a smaller field is expected to be
+ *   invariant, but &nbsp; it is impossible for it to be equal to its
+ *   prior value because of changes in its minimum or maximum after field
+ *   <code>f</code> is changed, then its value is adjusted to be as close
+ *   as possible to its expected value. A smaller field represents a
+ *   smaller unit of time. <code>HOUR</code> is a smaller field than
+ *   <code>DAY_OF_MONTH</code>. No adjustment is made to smaller fields
+ *   that are not expected to be invariant. The calendar system
+ *   determines what fields are expected to be invariant.</p>
+ * </blockquote>
+ *
+ * <p>In addition, unlike <code>set()</code>, <code>add()</code> forces
+ * an immediate recomputation of the calendar's milliseconds and all
+ * fields.</p>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>add(Calendar.MONTH,
+ * 13)</code> sets the calendar to September 30, 2000. <strong>Add rule
+ * 1</strong> sets the <code>MONTH</code> field to September, since
+ * adding 13 months to August gives September of the next year. Since
+ * <code>DAY_OF_MONTH</code> cannot be 31 in September in a
+ * <code>GregorianCalendar</code>, <strong>add rule 2</strong> sets the
+ * <code>DAY_OF_MONTH</code> to 30, the closest possible value. Although
+ * it is a smaller field, <code>DAY_OF_WEEK</code> is not adjusted by
+ * rule 2, since it is expected to change when the month changes in a
+ * <code>GregorianCalendar</code>.</p>
+ *
+ * <p><strong><code>roll(f, delta)</code></strong> adds
+ * <code>delta</code> to field <code>f</code> without changing larger
+ * fields. This is equivalent to calling <code>add(f, delta)</code> with
+ * the following adjustment:</p>
+ *
+ * <blockquote>
+ *   <p><strong>Roll rule</strong>. Larger fields are unchanged after the
+ *   call. A larger field represents a larger unit of
+ *   time. <code>DAY_OF_MONTH</code> is a larger field than
+ *   <code>HOUR</code>.</p>
+ * </blockquote>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to August 31, 1999. Calling <code>roll(Calendar.MONTH,
+ * 8)</code> sets the calendar to April 30, <strong>1999</strong>.  Add
+ * rule 1 sets the <code>MONTH</code> field to April. Using a
+ * <code>GregorianCalendar</code>, the <code>DAY_OF_MONTH</code> cannot
+ * be 31 in the month April. Add rule 2 sets it to the closest possible
+ * value, 30. Finally, the <strong>roll rule</strong> maintains the
+ * <code>YEAR</code> field value of 1999.</p>
+ *
+ * <p><em>Example</em>: Consider a <code>GregorianCalendar</code>
+ * originally set to Sunday June 6, 1999. Calling
+ * <code>roll(Calendar.WEEK_OF_MONTH, -1)</code> sets the calendar to
+ * Tuesday June 1, 1999, whereas calling
+ * <code>add(Calendar.WEEK_OF_MONTH, -1)</code> sets the calendar to
+ * Sunday May 30, 1999. This is because the roll rule imposes an
+ * additional constraint: The <code>MONTH</code> must not change when the
+ * <code>WEEK_OF_MONTH</code> is rolled. Taken together with add rule 1,
+ * the resultant date must be between Tuesday June 1 and Saturday June
+ * 5. According to add rule 2, the <code>DAY_OF_WEEK</code>, an invariant
+ * when changing the <code>WEEK_OF_MONTH</code>, is set to Tuesday, the
+ * closest possible value to Sunday (where Sunday is the first day of the
+ * week).</p>
+ *
+ * <p><strong>Usage model</strong>. To motivate the behavior of
+ * <code>add()</code> and <code>roll()</code>, consider a user interface
+ * component with increment and decrement buttons for the month, day, and
+ * year, and an underlying <code>GregorianCalendar</code>. If the
+ * interface reads January 31, 1999 and the user presses the month
+ * increment button, what should it read? If the underlying
+ * implementation uses <code>set()</code>, it might read March 3, 1999. A
+ * better result would be February 28, 1999. Furthermore, if the user
+ * presses the month increment button again, it should read March 31,
+ * 1999, not March 28, 1999. By saving the original date and using either
+ * <code>add()</code> or <code>roll()</code>, depending on whether larger
+ * fields should be affected, the user interface can behave as most users
+ * will intuitively expect.</p>
+ *
+ * <p><b>Note:</b> You should always use {@link #roll roll} and {@link #add add} rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ *
+ * <p><big><big><b>Calendar Architecture in ICU4J</b></big></big></p>
+ *
+ * <p>Recently the implementation of <code>Calendar</code> has changed
+ * significantly in order to better support subclassing. The original
+ * <code>Calendar</code> class was designed to support subclassing, but
+ * it had only one implemented subclass, <code>GregorianCalendar</code>.
+ * With the implementation of several new calendar subclasses, including
+ * the <code>BuddhistCalendar</code>, <code>ChineseCalendar</code>,
+ * <code>HebrewCalendar</code>, <code>IslamicCalendar</code>, and
+ * <code>JapaneseCalendar</code>, the subclassing API has been reworked
+ * thoroughly. This section details the new subclassing API and other
+ * ways in which <code>android.icu.util.Calendar</code> differs from
+ * <code>java.util.Calendar</code>.
+ * </p>
+ *
+ * <p><big><b>Changes</b></big></p>
+ *
+ * <p>Overview of changes between the classic <code>Calendar</code>
+ * architecture and the new architecture.
+ *
+ * <ul>
+ *
+ *   <li>The <code>fields[]</code> array is <code>private</code> now
+ *     instead of <code>protected</code>.  Subclasses must access it
+ *     using the methods {@link #internalSet} and
+ *     {@link #internalGet}.  <b>Motivation:</b> Subclasses should
+ *     not directly access data members.</li>
+ *
+ *   <li>The <code>time</code> long word is <code>private</code> now
+ *     instead of <code>protected</code>.  Subclasses may access it using
+ *     the method {@link #internalGetTimeInMillis}, which does not
+ *     provoke an update. <b>Motivation:</b> Subclasses should not
+ *     directly access data members.</li>
+ *
+ *   <li>The scope of responsibility of subclasses has been drastically
+ *     reduced. As much functionality as possible is implemented in the
+ *     <code>Calendar</code> base class. As a result, it is much easier
+ *     to subclass <code>Calendar</code>. <b>Motivation:</b> Subclasses
+ *     should not have to reimplement common code. Certain behaviors are
+ *     common across calendar systems: The definition and behavior of
+ *     week-related fields and time fields, the arithmetic
+ *     ({@link #add(int,int) add} and {@link #roll(int,int) roll}) behavior of many
+ *     fields, and the field validation system.</li>
+ *
+ *   <li>The subclassing API has been completely redesigned.</li>
+ *
+ *   <li>The <code>Calendar</code> base class contains some Gregorian
+ *     calendar algorithmic support that subclasses can use (specifically
+ *     in {@link #handleComputeFields}).  Subclasses can use the
+ *     methods <code>getGregorianXxx()</code> to obtain precomputed
+ *     values. <b>Motivation:</b> This is required by all
+ *     <code>Calendar</code> subclasses in order to implement consistent
+ *     time zone behavior, and Gregorian-derived systems can use the
+ *     already computed data.</li>
+ *
+ *   <li>The <code>FIELD_COUNT</code> constant has been removed. Use
+ *     {@link #getFieldCount}.  In addition, framework API has been
+ *     added to allow subclasses to define additional fields.
+ *     <b>Motivation: </b>The number of fields is not constant across
+ *     calendar systems.</li>
+ *
+ *   <li>The range of handled dates has been narrowed from +/-
+ *     ~300,000,000 years to +/- ~5,000,000 years. In practical terms
+ *     this should not affect clients. However, it does mean that client
+ *     code cannot be guaranteed well-behaved results with dates such as
+ *     <code>Date(Long.MIN_VALUE)</code> or
+ *     <code>Date(Long.MAX_VALUE)</code>. Instead, the
+ *     <code>Calendar</code> protected constants should be used.
+ *     <b>Motivation:</b> With
+ *     the addition of the {@link #JULIAN_DAY} field, Julian day
+ *     numbers must be restricted to a 32-bit <code>int</code>.  This
+ *     restricts the overall supported range. Furthermore, restricting
+ *     the supported range simplifies the computations by removing
+ *     special case code that was used to accomodate arithmetic overflow
+ *     at millis near <code>Long.MIN_VALUE</code> and
+ *     <code>Long.MAX_VALUE</code>.</li>
+ *
+ *   <li>New fields are implemented: {@link #JULIAN_DAY} defines
+ *     single-field specification of the
+ *     date. {@link #MILLISECONDS_IN_DAY} defines a single-field
+ *     specification of the wall time. {@link #DOW_LOCAL} and
+ *     {@link #YEAR_WOY} implement localized day-of-week and
+ *     week-of-year behavior.</li>
+ *
+ *   <li>Subclasses can access protected millisecond constants
+ *   defined in <code>Calendar</code>.</li>
+ *
+ *   <li>New API has been added to support calendar-specific subclasses
+ *     of <code>DateFormat</code>.</li>
+ *
+ *   <li>Several subclasses have been implemented, representing
+ *     various international calendar systems.</li>
+ *
+ * </ul>
+ *
+ * <p><big><b>Subclass API</b></big></p>
+ *
+ * <p>The original <code>Calendar</code> API was based on the experience
+ * of implementing a only a single subclass,
+ * <code>GregorianCalendar</code>. As a result, all of the subclassing
+ * kinks had not been worked out. The new subclassing API has been
+ * refined based on several implemented subclasses. This includes methods
+ * that must be overridden and methods for subclasses to call. Subclasses
+ * no longer have direct access to <code>fields</code> and
+ * <code>stamp</code>. Instead, they have new API to access
+ * these. Subclasses are able to allocate the <code>fields</code> array
+ * through a protected framework method; this allows subclasses to
+ * specify additional fields. </p>
+ *
+ * <p>More functionality has been moved into the base class. The base
+ * class now contains much of the computational machinery to support the
+ * Gregorian calendar. This is based on two things: (1) Many calendars
+ * are based on the Gregorian calendar (such as the Buddhist and Japanese
+ * imperial calendars). (2) <em>All</em> calendars require basic
+ * Gregorian support in order to handle timezone computations. </p>
+ *
+ * <p>Common computations have been moved into
+ * <code>Calendar</code>. Subclasses no longer compute the week related
+ * fields and the time related fields. These are commonly handled for all
+ * calendars by the base class. </p>
+ *
+ * <p><b>Subclass computation of time <tt>=&gt;</tt> fields</b>
+ *
+ * <p>The {@link #ERA}, {@link #YEAR},
+ * {@link #EXTENDED_YEAR}, {@link #MONTH},
+ * {@link #DAY_OF_MONTH}, and {@link #DAY_OF_YEAR} fields are
+ * computed by the subclass, based on the Julian day. All other fields
+ * are computed by <code>Calendar</code>.
+ *
+ * <ul>
+ *
+ *   <li>Subclasses should implement {@link #handleComputeFields}
+ *     to compute the {@link #ERA}, {@link #YEAR},
+ *     {@link #EXTENDED_YEAR}, {@link #MONTH},
+ *     {@link #DAY_OF_MONTH}, and {@link #DAY_OF_YEAR} fields,
+ *     based on the value of the {@link #JULIAN_DAY} field. If there
+ *     are calendar-specific fields not defined by <code>Calendar</code>,
+ *     they must also be computed. These are the only fields that the
+ *     subclass should compute. All other fields are computed by the base
+ *     class, so time and week fields behave in a consistent way across
+ *     all calendars. The default version of this method in
+ *     <code>Calendar</code> implements a proleptic Gregorian
+ *     calendar. Within this method, subclasses may call
+ *     <code>getGregorianXxx()</code> to obtain the Gregorian calendar
+ *     month, day of month, and extended year for the given date.</li>
+ *
+ * </ul>
+ *
+ * <p><b>Subclass computation of fields <tt>=&gt;</tt> time</b>
+ *
+ * <p>The interpretation of most field values is handled entirely by
+ * <code>Calendar</code>. <code>Calendar</code> determines which fields
+ * are set, which are not, which are set more recently, and so on. In
+ * addition, <code>Calendar</code> handles the computation of the time
+ * from the time fields and handles the week-related fields. The only
+ * thing the subclass must do is determine the extended year, based on
+ * the year fields, and then, given an extended year and a month, it must
+ * return a Julian day number.
+ *
+ * <ul>
+ *
+ *   <li>Subclasses should implement {@link #handleGetExtendedYear}
+ *     to return the extended year for this calendar system, based on the
+ *     {@link #YEAR}, {@link #EXTENDED_YEAR}, and any fields that
+ *     the calendar system uses that are larger than a year, such as
+ *     {@link #ERA}.</li>
+ *
+ *   <li>Subclasses should implement {@link #handleComputeMonthStart}
+ *     to return the Julian day number
+ *     associated with a month and extended year. This is the Julian day
+ *     number of the day before the first day of the month. The month
+ *     number is zero-based. This computation should not depend on any
+ *     field values.</li>
+ *
+ * </ul>
+ *
+ * <p><b>Other methods</b>
+ *
+ * <ul>
+ *
+ *   <li>Subclasses should implement {@link #handleGetMonthLength}
+ *     to return the number of days in a
+ *     given month of a given extended year. The month number, as always,
+ *     is zero-based.</li>
+ *
+ *   <li>Subclasses should implement {@link #handleGetYearLength}
+ *     to return the number of days in the given
+ *     extended year. This method is used by
+ *     <tt>computeWeekFields</tt> to compute the
+ *     {@link #WEEK_OF_YEAR} and {@link #YEAR_WOY} fields.</li>
+ *
+ *   <li>Subclasses should implement {@link #handleGetLimit}
+ *     to return the protected values of a field, depending on the value of
+ *     <code>limitType</code>. This method only needs to handle the
+ *     fields {@link #ERA}, {@link #YEAR}, {@link #MONTH},
+ *     {@link #WEEK_OF_YEAR}, {@link #WEEK_OF_MONTH},
+ *     {@link #DAY_OF_MONTH}, {@link #DAY_OF_YEAR},
+ *     {@link #DAY_OF_WEEK_IN_MONTH}, {@link #YEAR_WOY}, and
+ *     {@link #EXTENDED_YEAR}.  Other fields are invariant (with
+ *     respect to calendar system) and are handled by the base
+ *     class.</li>
+ *
+ *   <li>Optionally, subclasses may override {@link #validateField}
+ *     to check any subclass-specific fields. If the
+ *     field's value is out of range, the method should throw an
+ *     <code>IllegalArgumentException</code>. The method may call
+ *     <code>super.validateField(field)</code> to handle fields in a
+ *     generic way, that is, to compare them to the range
+ *     <code>getMinimum(field)</code>..<code>getMaximum(field)</code>.</li>
+ *
+ *   <li>Optionally, subclasses may override
+ *     {@link #handleCreateFields} to create an <code>int[]</code>
+ *     array large enough to hold the calendar's fields. This is only
+ *     necessary if the calendar defines additional fields beyond those
+ *     defined by <code>Calendar</code>. The length of the result must be
+ *     be between the base and maximum field counts.</li>
+ *
+ *   <li>Optionally, subclasses may override
+ *     {@link #handleGetDateFormat} to create a
+ *     <code>DateFormat</code> appropriate to this calendar. This is only
+ *     required if a calendar subclass redefines the use of a field (for
+ *     example, changes the {@link #ERA} field from a symbolic field
+ *     to a numeric one) or defines an additional field.</li>
+ *
+ *   <li>Optionally, subclasses may override {@link #roll roll} and
+ *     {@link #add add} to handle fields that are discontinuous. For
+ *     example, in the Hebrew calendar the month &quot;Adar I&quot; only
+ *     occurs in leap years; in other years the calendar jumps from
+ *     Shevat (month #4) to Adar (month #6). The {@link android.icu.util.HebrewCalendar#add HebrewCalendar.add} and {@link android.icu.util.HebrewCalendar#roll HebrewCalendar.roll} methods take this into
+ *     account, so that adding 1 month to Shevat gives the proper result
+ *     (Adar) in a non-leap year. The protected utility method {@link
+ *     #pinField pinField} is often useful when implementing these two
+ *     methods. </li>
+ *
+ * </ul>
+ *
+ * <p><big><b>Normalized behavior</b></big>
+ *
+ * <p>The behavior of certain fields has been made consistent across all
+ * calendar systems and implemented in <code>Calendar</code>.
+ *
+ * <ul>
+ *
+ *   <li>Time is normalized. Even though some calendar systems transition
+ *     between days at sunset or at other times, all ICU4J calendars
+ *     transition between days at <em>local zone midnight</em>.  This
+ *     allows ICU4J to centralize the time computations in
+ *     <code>Calendar</code> and to maintain basic correpsondences
+ *     between calendar systems. Affected fields: {@link #AM_PM},
+ *     {@link #HOUR}, {@link #HOUR_OF_DAY}, {@link #MINUTE},
+ *     {@link #SECOND}, {@link #MILLISECOND},
+ *     {@link #ZONE_OFFSET}, and {@link #DST_OFFSET}.</li>
+ *
+ *   <li>DST behavior is normalized. Daylight savings time behavior is
+ *     computed the same for all calendar systems, and depends on the
+ *     value of several <code>GregorianCalendar</code> fields: the
+ *     {@link #YEAR}, {@link #MONTH}, and
+ *     {@link #DAY_OF_MONTH}. As a result, <code>Calendar</code>
+ *     always computes these fields, even for non-Gregorian calendar
+ *     systems. These fields are available to subclasses.</li>
+ *
+ *   <li>Weeks are normalized. Although locales define the week
+ *     differently, in terms of the day on which it starts, and the
+ *     designation of week number one of a month or year, they all use a
+ *     common mechanism. Furthermore, the day of the week has a simple
+ *     and consistent definition throughout history. For example,
+ *     although the Gregorian calendar introduced a discontinuity when
+ *     first instituted, the day of week was not disrupted. For this
+ *     reason, the fields {@link #DAY_OF_WEEK}, <code>WEEK_OF_YEAR,
+ *     WEEK_OF_MONTH</code>, {@link #DAY_OF_WEEK_IN_MONTH},
+ *     {@link #DOW_LOCAL}, {@link #YEAR_WOY} are all computed in
+ *     a consistent way in the base class, based on the
+ *     {@link #EXTENDED_YEAR}, {@link #DAY_OF_YEAR},
+ *     {@link #MONTH}, and {@link #DAY_OF_MONTH}, which are
+ *     computed by the subclass.</li>
+ *
+ * </ul>
+ *
+ * <p><big><b>Supported range</b></big>
+ *
+ * <p>The allowable range of <code>Calendar</code> has been
+ * narrowed. <code>GregorianCalendar</code> used to attempt to support
+ * the range of dates with millisecond values from
+ * <code>Long.MIN_VALUE</code> to <code>Long.MAX_VALUE</code>. This
+ * introduced awkward constructions (hacks) which slowed down
+ * performance. It also introduced non-uniform behavior at the
+ * boundaries. The new <code>Calendar</code> protocol specifies the
+ * maximum range of supportable dates as those having Julian day numbers
+ * of <code>-0x7F000000</code> to <code>+0x7F000000</code>. This
+ * corresponds to years from ~5,800,000 BCE to ~5,800,000 CE. Programmers
+ * should use the protected constants in <code>Calendar</code> to
+ * specify an extremely early or extremely late date.</p>
+ *
+ * <p><big><b>General notes</b></big>
+ *
+ * <ul>
+ *
+ *   <li>Calendars implementations are <em>proleptic</em>. For example,
+ *     even though the Gregorian calendar was not instituted until the
+ *     16th century, the <code>GregorianCalendar</code> class supports
+ *     dates before the historical onset of the calendar by extending the
+ *     calendar system backward in time. Similarly, the
+ *     <code>HebrewCalendar</code> extends backward before the start of
+ *     its epoch into zero and negative years. Subclasses do not throw
+ *     exceptions because a date precedes the historical start of a
+ *     calendar system. Instead, they implement
+ *     {@link #handleGetLimit} to return appropriate limits on
+ *     {@link #YEAR}, {@link #ERA}, etc. fields. Then, if the
+ *     calendar is set to not be lenient, out-of-range field values will
+ *     trigger an exception.</li>
+ *
+ *   <li>Calendar system subclasses compute a <em>extended
+ *     year</em>. This differs from the {@link #YEAR} field in that
+ *     it ranges over all integer values, including zero and negative
+ *     values, and it encapsulates the information of the
+ *     {@link #YEAR} field and all larger fields.  Thus, for the
+ *     Gregorian calendar, the {@link #EXTENDED_YEAR} is computed as
+ *     <code>ERA==AD ? YEAR : 1-YEAR</code>. Another example is the Mayan
+ *     long count, which has years (<code>KUN</code>) and nested cycles
+ *     of years (<code>KATUN</code> and <code>BAKTUN</code>). The Mayan
+ *     {@link #EXTENDED_YEAR} is computed as <code>TUN + 20 * (KATUN
+ *     + 20 * BAKTUN)</code>. The <code>Calendar</code> base class uses
+ *     the {@link #EXTENDED_YEAR} field to compute the week-related
+ *     fields.</li>
+ *
+ * </ul>
+ *
+ * @see          java.util.Date
+ * @see          android.icu.util.GregorianCalendar
+ * @see          android.icu.util.TimeZone
+ * @see          android.icu.text.DateFormat
+ * @author Mark Davis, Deborah Goldsmith, Chen-Lieh Huang, Alan Liu, Laura Werner
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class Calendar implements java.io.Serializable, java.lang.Cloneable, java.lang.Comparable<android.icu.util.Calendar> {
+
+/**
+ * Constructs a Calendar with the default time zone
+ * and the default <code>FORMAT</code> locale.
+ * @see     android.icu.util.TimeZone#getDefault
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+protected Calendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param aLocale the locale for the week data
+ */
+
+protected Calendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param locale the ulocale for the week data
+ */
+
+protected Calendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the default time zone and locale.
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the specified time zone and default locale.
+ * @param zone the time zone to use
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the default time zone and specified locale.
+ * @param aLocale the locale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar using the default time zone and specified locale.
+ * @param locale the ulocale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param aLocale the locale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a calendar with the specified time zone and locale.
+ * @param zone the time zone to use
+ * @param locale the ulocale for the week data
+ * @return a Calendar.
+ */
+
+public static android.icu.util.Calendar getInstance(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the list of locales for which Calendars are installed.
+ * @return the list of locales for which Calendars are installed.
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a key and a locale, returns an array of string values in a preferred
+ * order that would make a difference. These are all and only those values where
+ * the open (creation) of the service with the locale formed from the input locale
+ * plus input keyword and that value has different behavior than creation with the
+ * input locale alone.
+ * @param key           one of the keys supported by this service.  For now, only
+ *                      "calendar" is supported.
+ * @param locale        the locale
+ * @param commonlyUsed  if set to true it will return only commonly used values
+ *                      with the given locale in preferred order.  Otherwise,
+ *                      it will return all the available values for the locale.
+ * @return an array of string values for the given key and the locale.
+ */
+
+public static final java.lang.String[] getKeywordValuesForLocale(java.lang.String key, android.icu.util.ULocale locale, boolean commonlyUsed) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Calendar's current time.
+ * @return the current time.
+ */
+
+public final java.util.Date getTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Calendar's current time with the given Date.
+ *
+ * <p>Note: Calling <code>setTime</code> with
+ * <code>Date(Long.MAX_VALUE)</code> or <code>Date(Long.MIN_VALUE)</code>
+ * may yield incorrect field values from {@link #get(int)}.
+ * @param date the given Date.
+ */
+
+public final void setTime(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this Calendar's current time as a long.
+ * @return the current time as UTC milliseconds from the epoch.
+ */
+
+public long getTimeInMillis() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets this Calendar's current time from the given long value.
+ * An IllegalIcuArgumentException is thrown when millis is outside the range permitted
+ * by a Calendar object when in strict mode.
+ * When in lenient mode the out of range values are pinned to their respective min/max.
+ * @param millis the new time in UTC milliseconds from the epoch.
+ */
+
+public void setTimeInMillis(long millis) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the value for a given time field.
+ * @param field the given time field.
+ * @return the value for the given time field.
+ */
+
+public final int get(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the value for a given time field.  This is an internal method
+ * for subclasses that does <em>not</em> trigger any calculations.
+ * @param field the given time field.
+ * @return the value for the given time field.
+ */
+
+protected final int internalGet(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the value for a given time field, or return the given default
+ * value if the field is not set.  This is an internal method for
+ * subclasses that does <em>not</em> trigger any calculations.
+ * @param field the given time field.
+ * @param defaultValue value to return if field is not set
+ * @return the value for the given time field of defaultValue if the
+ * field is unset
+ */
+
+protected final int internalGet(int field, int defaultValue) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time field with the given value.
+ * @param field the given time field.
+ * @param value the value to be set for the given time field.
+ */
+
+public final void set(int field, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the values for the fields year, month, and date.
+ * Previous values of other fields are retained.  If this is not desired,
+ * call {@link #clear()} first.
+ * @param year the value used to set the YEAR time field.
+ * @param month the value used to set the MONTH time field.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field.
+ */
+
+public final void set(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the values for the fields year, month, date, hour, and minute.
+ * Previous values of other fields are retained.  If this is not desired,
+ * call {@link #clear()} first.
+ * @param year the value used to set the YEAR time field.
+ * @param month the value used to set the MONTH time field.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field.
+ * @param hour the value used to set the HOUR_OF_DAY time field.
+ * @param minute the value used to set the MINUTE time field.
+ */
+
+public final void set(int year, int month, int date, int hour, int minute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the values for the fields year, month, date, hour, minute, and second.
+ * Previous values of other fields are retained.  If this is not desired,
+ * call {@link #clear} first.
+ * @param year the value used to set the YEAR time field.
+ * @param month the value used to set the MONTH time field.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field.
+ * @param hour the value used to set the HOUR_OF_DAY time field.
+ * @param minute the value used to set the MINUTE time field.
+ * @param second the value used to set the SECOND time field.
+ */
+
+public final void set(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears the values of all the time fields.
+ */
+
+public final void clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Clears the value in the given time field.
+ * @param field the time field to be cleared.
+ */
+
+public final void clear(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the given time field has a value set.
+ * @return true if the given time field has a value set; false otherwise.
+ */
+
+public final boolean isSet(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Fills in any unset fields in the time field list.
+ */
+
+protected void complete() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares this calendar to the specified object.
+ * The result is <code>true</code> if and only if the argument is
+ * not <code>null</code> and is a <code>Calendar</code> object that
+ * represents the same calendar as this object.
+ * @param obj the object to compare with.
+ * @return <code>true</code> if the objects are the same;
+ * <code>false</code> otherwise.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if the given Calendar object is equivalent to this
+ * one.  An equivalent Calendar will behave exactly as this one
+ * does, but it may be set to a different time.  By contrast, for
+ * the equals() method to return true, the other Calendar must
+ * be set to the same time.
+ *
+ * @param other the Calendar to be compared with this Calendar
+ */
+
+public boolean isEquivalentTo(android.icu.util.Calendar other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a hash code for this calendar.
+ * @return a hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the time field records.
+ * Equivalent to comparing result of conversion to UTC.
+ * @param when the Calendar to be compared with this Calendar.
+ * @return true if the current time of this Calendar is before
+ * the time of Calendar when; false otherwise.
+ */
+
+public boolean before(java.lang.Object when) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the time field records.
+ * Equivalent to comparing result of conversion to UTC.
+ * @param when the Calendar to be compared with this Calendar.
+ * @return true if the current time of this Calendar is after
+ * the time of Calendar when; false otherwise.
+ */
+
+public boolean after(java.lang.Object when) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum value that this field could have, given the
+ * current date.  For example, with the Gregorian date February 3, 1997
+ * and the {@link #DAY_OF_MONTH DAY_OF_MONTH} field, the actual maximum
+ * is 28; for February 3, 1996 it is 29.
+ *
+ * <p>The actual maximum computation ignores smaller fields and the
+ * current value of like-sized fields.  For example, the actual maximum
+ * of the DAY_OF_YEAR or MONTH depends only on the year and supra-year
+ * fields.  The actual maximum of the DAY_OF_MONTH depends, in
+ * addition, on the MONTH field and any other fields at that
+ * granularity (such as IS_LEAP_MONTH).  The
+ * DAY_OF_WEEK_IN_MONTH field does not depend on the current
+ * DAY_OF_WEEK; it returns the maximum for any day of week in the
+ * current month.  Likewise for the WEEK_OF_MONTH and WEEK_OF_YEAR
+ * fields.
+ *
+ * @param field the field whose maximum is desired
+ * @return the maximum of the given field for the current date of this calendar
+ * @see #getMaximum
+ * @see #getLeastMaximum
+ */
+
+public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum value that this field could have, given the current date.
+ * For most fields, this is the same as {@link #getMinimum getMinimum}
+ * and {@link #getGreatestMinimum getGreatestMinimum}.  However, some fields,
+ * especially those related to week number, are more complicated.
+ * <p>
+ * For example, assume {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+ * returns 4 and {@link #getFirstDayOfWeek getFirstDayOfWeek} returns SUNDAY.
+ * If the first day of the month is Sunday, Monday, Tuesday, or Wednesday
+ * there will be four or more days in the first week, so it will be week number 1,
+ * and <code>getActualMinimum(WEEK_OF_MONTH)</code> will return 1.  However,
+ * if the first of the month is a Thursday, Friday, or Saturday, there are
+ * <em>not</em> four days in that week, so it is week number 0, and
+ * <code>getActualMinimum(WEEK_OF_MONTH)</code> will return 0.
+ * <p>
+ * @param field the field whose actual minimum value is desired.
+ * @return the minimum of the given field for the current date of this calendar
+ *
+ * @see #getMinimum
+ * @see #getGreatestMinimum
+ */
+
+public int getActualMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Prepare this calendar for computing the actual minimum or maximum.
+ * This method modifies this calendar's fields; it is called on a
+ * temporary calendar.
+ *
+ * <p>Rationale: The semantics of getActualXxx() is to return the
+ * maximum or minimum value that the given field can take, taking into
+ * account other relevant fields.  In general these other fields are
+ * larger fields.  For example, when computing the actual maximum
+ * DAY_OF_MONTH, the current value of DAY_OF_MONTH itself is ignored,
+ * as is the value of any field smaller.
+ *
+ * <p>The time fields all have fixed minima and maxima, so we don't
+ * need to worry about them.  This also lets us set the
+ * MILLISECONDS_IN_DAY to zero to erase any effects the time fields
+ * might have when computing date fields.
+ *
+ * <p>DAY_OF_WEEK is adjusted specially for the WEEK_OF_MONTH and
+ * WEEK_OF_YEAR fields to ensure that they are computed correctly.
+ */
+
+protected void prepareGetActual(int field, boolean isMinimum) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Rolls (up/down) a single unit of time on the given field.  If the
+ * field is rolled past its maximum allowable value, it will "wrap" back
+ * to its minimum and continue rolling. For
+ * example, to roll the current date up by one day, you can call:
+ * <p>
+ * <code>roll({@link #DATE}, true)</code>
+ * <p>
+ * When rolling on the {@link #YEAR} field, it will roll the year
+ * value in the range between 1 and the value returned by calling
+ * {@link #getMaximum getMaximum}({@link #YEAR}).
+ * <p>
+ * When rolling on certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when rolling the <code>MONTH</code> field
+ * for the Gregorian date 1/31/96 upward, the <code>DAY_OF_MONTH</code> field
+ * must be adjusted so that the result is 2/29/96 rather than the invalid
+ * 2/31/96.
+ * <p>
+ * Rolling up always means rolling forward in time (unless
+ * the limit of the field is reached, in which case it may pin or wrap), so for the
+ * Gregorian calendar, starting with 100 BC and rolling the year up results in 99 BC.
+ * When eras have a definite beginning and end (as in the Chinese calendar, or as in
+ * most eras in the Japanese calendar) then rolling the year past either limit of the
+ * era will cause the year to wrap around. When eras only have a limit at one end,
+ * then attempting to roll the year past that limit will result in pinning the year
+ * at that limit. Note that for most calendars in which era 0 years move forward in
+ * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to
+ * result in negative years for era 0 (that is the only way to represent years before
+ * the calendar epoch in such calendars).
+ * <p>
+ * <b>Note:</b> Calling <tt>roll(field, true)</tt> N times is <em>not</em>
+ * necessarily equivalent to calling <tt>roll(field, N)</tt>.  For example,
+ * imagine that you start with the date Gregorian date January 31, 1995.  If you call
+ * <tt>roll(Calendar.MONTH, 2)</tt>, the result will be March 31, 1995.
+ * But if you call <tt>roll(Calendar.MONTH, true)</tt>, the result will be
+ * February 28, 1995.  Calling it one more time will give March 28, 1995, which
+ * is usually not the desired result.
+ * <p>
+ * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ * <p>
+ * @param field the calendar field to roll.
+ *
+ * @param up    indicates if the value of the specified time field is to be
+ *              rolled up or rolled down. Use <code>true</code> if rolling up,
+ *              <code>false</code> otherwise.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ * @see #roll(int, int)
+ * @see #add
+ */
+
+public final void roll(int field, boolean up) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Rolls (up/down) a specified amount time on the given field.  For
+ * example, to roll the current date up by three days, you can call
+ * <code>roll(Calendar.DATE, 3)</code>.  If the
+ * field is rolled past its maximum allowable value, it will "wrap" back
+ * to its minimum and continue rolling.
+ * For example, calling <code>roll(Calendar.DATE, 10)</code>
+ * on a Gregorian calendar set to 4/25/96 will result in the date 4/5/96.
+ * <p>
+ * When rolling on certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when rolling the {@link #MONTH MONTH} field
+ * for the Gregorian date 1/31/96 by +1, the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is 2/29/96 rather than the invalid
+ * 2/31/96.
+ * <p>
+ * Rolling by a positive value always means rolling forward in time (unless
+ * the limit of the field is reached, in which case it may pin or wrap), so for the
+ * Gregorian calendar, starting with 100 BC and rolling the year by + 1 results in 99 BC.
+ * When eras have a definite beginning and end (as in the Chinese calendar, or as in
+ * most eras in the Japanese calendar) then rolling the year past either limit of the
+ * era will cause the year to wrap around. When eras only have a limit at one end,
+ * then attempting to roll the year past that limit will result in pinning the year
+ * at that limit. Note that for most calendars in which era 0 years move forward in
+ * time (such as Buddhist, Hebrew, or Islamic), it is possible for add or roll to
+ * result in negative years for era 0 (that is the only way to represent years before
+ * the calendar epoch in such calendars).
+ * <p>
+ * <strong>[icu] Note:</strong> the ICU implementation of this method is able to roll
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+ * additional fields in their overrides of <code>roll</code>.
+ * <p>
+ * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ * <p>
+ * <b>Subclassing:</b><br>
+ * This implementation of <code>roll</code> assumes that the behavior of the
+ * field is continuous between its minimum and maximum, which are found by
+ * calling {@link #getActualMinimum getActualMinimum} and {@link #getActualMaximum getActualMaximum}.
+ * For most such fields, simple addition, subtraction, and modulus operations
+ * are sufficient to perform the roll.  For week-related fields,
+ * the results of {@link #getFirstDayOfWeek getFirstDayOfWeek} and
+ * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} are also necessary.
+ * Subclasses can override these two methods if their values differ from the defaults.
+ * <p>
+ * Subclasses that have fields for which the assumption of continuity breaks
+ * down must overide <code>roll</code> to handle those fields specially.
+ * For example, in the Hebrew calendar the month "Adar I"
+ * only occurs in leap years; in other years the calendar jumps from
+ * Shevat (month #4) to Adar (month #6).  The
+ * {@link android.icu.util.HebrewCalendar#roll HebrewCalendar.roll} method takes this into account,
+ * so that rolling the month of Shevat by one gives the proper result (Adar) in a
+ * non-leap year.
+ * <p>
+ * @param field     the calendar field to roll.
+ * @param amount    the amount by which the field should be rolled.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ * @see #roll(int, boolean)
+ * @see #add
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a signed amount to a specified field, using this calendar's rules.
+ * For example, to add three days to the current date, you can call
+ * <code>add(Calendar.DATE, 3)</code>.
+ * <p>
+ * When adding to certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when adding one to the {@link #MONTH MONTH} field
+ * for the Gregorian date 1/31/96, the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is 2/29/96 rather than the invalid
+ * 2/31/96.
+ * <p>
+ * Adding a positive value always means moving forward in time, so for the Gregorian
+ * calendar, starting with 100 BC and adding +1 to year results in 99 BC (even though
+ * this actually reduces the numeric value of the field itself).
+ * <p>
+ * <strong>[icu] Note:</strong> The ICU implementation of this method is able to add to
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+ * additional fields in their overrides of <code>add</code>.
+ * <p>
+ * <b>Note:</b> You should always use <tt>roll</tt> and <tt>add</tt> rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>Calendar</tt>.  It is quite possible for <tt>Calendar</tt> subclasses
+ * to have fields with non-linear behavior, for example missing months
+ * or days during non-leap years.  The subclasses' <tt>add</tt> and <tt>roll</tt>
+ * methods will take this into account, while simple arithmetic manipulations
+ * may give invalid results.
+ * <p>
+ * <b>Subclassing:</b><br>
+ * This implementation of <code>add</code> assumes that the behavior of the
+ * field is continuous between its minimum and maximum, which are found by
+ * calling {@link #getActualMinimum getActualMinimum} and
+ * {@link #getActualMaximum getActualMaximum}.
+ * For such fields, simple arithmetic operations are sufficient to
+ * perform the add.
+ * <p>
+ * Subclasses that have fields for which this assumption of continuity breaks
+ * down must overide <code>add</code> to handle those fields specially.
+ * For example, in the Hebrew calendar the month "Adar I"
+ * only occurs in leap years; in other years the calendar jumps from
+ * Shevat (month #4) to Adar (month #6).  The
+ * {@link android.icu.util.HebrewCalendar#add HebrewCalendar.add} method takes this into account,
+ * so that adding one month
+ * to a date in Shevat gives the proper result (Adar) in a non-leap year.
+ * <p>
+ * @param field     the time field.
+ * @param amount    the amount to add to the field.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ * @see #roll(int, int)
+ */
+
+public void add(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the name of this calendar in the language of the given locale.
+ */
+
+public java.lang.String getDisplayName(java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the name of this calendar in the language of the given locale.
+ */
+
+public java.lang.String getDisplayName(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares the times (in millis) represented by two
+ * <code>Calendar</code> objects.
+ *
+ * @param that the <code>Calendar</code> to compare to this.
+ * @return <code>0</code> if the time represented by
+ * this <code>Calendar</code> is equal to the time represented
+ * by that <code>Calendar</code>, a value less than
+ * <code>0</code> if the time represented by this is before
+ * the time represented by that, and a value greater than
+ * <code>0</code> if the time represented by this
+ * is after the time represented by that.
+ * @throws java.lang.NullPointerException if that
+ * <code>Calendar</code> is null.
+ * @throws java.lang.IllegalArgumentException if the time of that
+ * <code>Calendar</code> can't be obtained because of invalid
+ * calendar values.
+ */
+
+public int compareTo(android.icu.util.Calendar that) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a <code>DateFormat</code> appropriate to this calendar.
+ * Subclasses wishing to specialize this behavior should override
+ * {@link #handleGetDateFormat}.
+ */
+
+public android.icu.text.DateFormat getDateTimeFormat(int dateStyle, int timeStyle, java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a <code>DateFormat</code> appropriate to this calendar.
+ * Subclasses wishing to specialize this behavior should override
+ * {@link #handleGetDateFormat}.
+ */
+
+public android.icu.text.DateFormat getDateTimeFormat(int dateStyle, int timeStyle, android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a <code>DateFormat</code> appropriate to this calendar.
+ * This is a framework method for subclasses to override.  This method
+ * is responsible for creating the calendar-specific DateFormat and
+ * DateFormatSymbols objects as needed.
+ * @param pattern the pattern, specific to the <code>DateFormat</code>
+ * subclass
+ * @param locale the locale for which the symbols should be drawn
+ * @return a <code>DateFormat</code> appropriate to this calendar
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a <code>DateFormat</code> appropriate to this calendar.
+ * This is a framework method for subclasses to override.  This method
+ * is responsible for creating the calendar-specific DateFormat and
+ * DateFormatSymbols objects as needed.
+ * @param pattern the pattern, specific to the <code>DateFormat</code>
+ * subclass
+ * @param override The override string.  A numbering system override string can take one of the following forms:
+ *     1). If just a numbering system name is specified, it applies to all numeric fields in the date format pattern.
+ *     2). To specify an alternate numbering system on a field by field basis, use the field letters from the pattern
+ *         followed by an = sign, followed by the numbering system name.  For example, to specify that just the year
+ *         be formatted using Hebrew digits, use the override "y=hebr".  Multiple overrides can be specified in a single
+ *         string by separating them with a semi-colon. For example, the override string "m=thai;y=deva" would format using
+ *         Thai digits for the month and Devanagari digits for the year.
+ * @param locale the locale for which the symbols should be drawn
+ * @return a <code>DateFormat</code> appropriate to this calendar
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, java.lang.String override, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Creates a <code>DateFormat</code> appropriate to this calendar.
+ * This is a framework method for subclasses to override.  This method
+ * is responsible for creating the calendar-specific DateFormat and
+ * DateFormatSymbols objects as needed.
+ * @param pattern the pattern, specific to the <code>DateFormat</code>
+ * subclass
+ * @param locale the locale for which the symbols should be drawn
+ * @return a <code>DateFormat</code> appropriate to this calendar
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adjust the specified field so that it is within
+ * the allowable range for the date to which this calendar is set.
+ * For example, in a Gregorian calendar pinning the {@link #DAY_OF_MONTH DAY_OF_MONTH}
+ * field for a calendar set to April 31 would cause it to be set
+ * to April 30.
+ * <p>
+ * <b>Subclassing:</b>
+ * <br>
+ * This utility method is intended for use by subclasses that need to implement
+ * their own overrides of {@link #roll roll} and {@link #add add}.
+ * <p>
+ * <b>Note:</b>
+ * <code>pinField</code> is implemented in terms of
+ * {@link #getActualMinimum getActualMinimum}
+ * and {@link #getActualMaximum getActualMaximum}.  If either of those methods uses
+ * a slow, iterative algorithm for a particular field, it would be
+ * unwise to attempt to call <code>pinField</code> for that field.  If you
+ * really do need to do so, you should override this method to do
+ * something more efficient for that field.
+ * <p>
+ * @param field The calendar field whose value should be pinned.
+ *
+ * @see #getActualMinimum
+ * @see #getActualMaximum
+ */
+
+protected void pinField(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the week number of a day, within a period. This may be the week number in
+ * a year or the week number in a month. Usually this will be a value &gt;= 1, but if
+ * some initial days of the period are excluded from week 1, because
+ * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is &gt; 1, then
+ * the week number will be zero for those
+ * initial days. This method requires the day number and day of week for some
+ * known date in the period in order to determine the day of week
+ * on the desired day.
+ * <p>
+ * <b>Subclassing:</b>
+ * <br>
+ * This method is intended for use by subclasses in implementing their
+ * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
+ * It is often useful in {@link #getActualMinimum getActualMinimum} and
+ * {@link #getActualMaximum getActualMaximum} as well.
+ * <p>
+ * This variant is handy for computing the week number of some other
+ * day of a period (often the first or last day of the period) when its day
+ * of the week is not known but the day number and day of week for some other
+ * day in the period (e.g. the current date) <em>is</em> known.
+ * <p>
+ * @param desiredDay    The {@link #DAY_OF_YEAR DAY_OF_YEAR} or
+ *              {@link #DAY_OF_MONTH DAY_OF_MONTH} whose week number is desired.
+ *              Should be 1 for the first day of the period.
+ *
+ * @param dayOfPeriod   The {@link #DAY_OF_YEAR DAY_OF_YEAR}
+ *              or {@link #DAY_OF_MONTH DAY_OF_MONTH} for a day in the period whose
+ *              {@link #DAY_OF_WEEK DAY_OF_WEEK} is specified by the
+ *              <code>dayOfWeek</code> parameter.
+ *              Should be 1 for first day of period.
+ *
+ * @param dayOfWeek  The {@link #DAY_OF_WEEK DAY_OF_WEEK} for the day
+ *              corresponding to the <code>dayOfPeriod</code> parameter.
+ *              1-based with 1=Sunday.
+ *
+ * @return      The week number (one-based), or zero if the day falls before
+ *              the first week because
+ *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+ *              is more than one.
+ */
+
+protected int weekNumber(int desiredDay, int dayOfPeriod, int dayOfWeek) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the week number of a day, within a period. This may be the week number in
+ * a year, or the week number in a month. Usually this will be a value &gt;= 1, but if
+ * some initial days of the period are excluded from week 1, because
+ * {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek} is &gt; 1,
+ * then the week number will be zero for those
+ * initial days. This method requires the day of week for the given date in order to
+ * determine the result.
+ * <p>
+ * <b>Subclassing:</b>
+ * <br>
+ * This method is intended for use by subclasses in implementing their
+ * {@link #computeTime computeTime} and/or {@link #computeFields computeFields} methods.
+ * It is often useful in {@link #getActualMinimum getActualMinimum} and
+ * {@link #getActualMaximum getActualMaximum} as well.
+ * <p>
+ * @param dayOfPeriod   The {@link #DAY_OF_YEAR DAY_OF_YEAR} or
+ *                      {@link #DAY_OF_MONTH DAY_OF_MONTH} whose week number is desired.
+ *                      Should be 1 for the first day of the period.
+ *
+ * @param dayOfWeek     The {@link #DAY_OF_WEEK DAY_OF_WEEK} for the day
+ *                      corresponding to the <code>dayOfPeriod</code> parameter.
+ *                      1-based with 1=Sunday.
+ *
+ * @return      The week number (one-based), or zero if the day falls before
+ *              the first week because
+ *              {@link #getMinimalDaysInFirstWeek getMinimalDaysInFirstWeek}
+ *              is more than one.
+ */
+
+protected final int weekNumber(int dayOfPeriod, int dayOfWeek) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the difference between the given time and the time this
+ * calendar object is set to.  If this calendar is set
+ * <em>before</em> the given time, the returned value will be
+ * positive.  If this calendar is set <em>after</em> the given
+ * time, the returned value will be negative.  The
+ * <code>field</code> parameter specifies the units of the return
+ * value.  For example, if <code>fieldDifference(when,
+ * Calendar.MONTH)</code> returns 3, then this calendar is set to
+ * 3 months before <code>when</code>, and possibly some additional
+ * time less than one month.
+ *
+ * <p>As a side effect of this call, this calendar is advanced
+ * toward <code>when</code> by the given amount.  That is, calling
+ * this method has the side effect of calling <code>add(field,
+ * n)</code>, where <code>n</code> is the return value.
+ *
+ * <p>Usage: To use this method, call it first with the largest
+ * field of interest, then with progressively smaller fields.  For
+ * example:
+ *
+ * <pre>
+ * int y = cal.fieldDifference(when, Calendar.YEAR);
+ * int m = cal.fieldDifference(when, Calendar.MONTH);
+ * int d = cal.fieldDifference(when, Calendar.DATE);</pre>
+ *
+ * computes the difference between <code>cal</code> and
+ * <code>when</code> in years, months, and days.
+ *
+ * <p>Note: <code>fieldDifference()</code> is
+ * <em>asymmetrical</em>.  That is, in the following code:
+ *
+ * <pre>
+ * cal.setTime(date1);
+ * int m1 = cal.fieldDifference(date2, Calendar.MONTH);
+ * int d1 = cal.fieldDifference(date2, Calendar.DATE);
+ * cal.setTime(date2);
+ * int m2 = cal.fieldDifference(date1, Calendar.MONTH);
+ * int d2 = cal.fieldDifference(date1, Calendar.DATE);</pre>
+ *
+ * one might expect that <code>m1 == -m2 &amp;&amp; d1 == -d2</code>.
+ * However, this is not generally the case, because of
+ * irregularities in the underlying calendar system (e.g., the
+ * Gregorian calendar has a varying number of days per month).
+ *
+ * @param when the date to compare this calendar's time to
+ * @param field the field in which to compute the result
+ * @return the difference, either positive or negative, between
+ * this calendar's time and <code>when</code>, in terms of
+ * <code>field</code>.
+ */
+
+public int fieldDifference(java.util.Date when, int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone with the given time zone value.
+ * @param value the given time zone.
+ */
+
+public void setTimeZone(android.icu.util.TimeZone value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone.
+ * @return the time zone object associated with this calendar.
+ */
+
+public android.icu.util.TimeZone getTimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Specify whether or not date/time interpretation is to be lenient.  With
+ * lenient interpretation, a date such as "February 942, 1996" will be
+ * treated as being equivalent to the 941st day after February 1, 1996.
+ * With strict interpretation, such dates will cause an exception to be
+ * thrown.
+ *
+ * @see android.icu.text.DateFormat#setLenient
+ */
+
+public void setLenient(boolean lenient) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Tell whether date/time interpretation is to be lenient.
+ */
+
+public boolean isLenient() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Sets the behavior for handling wall time repeating multiple times
+ * at negative time zone offset transitions. For example, 1:30 AM on
+ * November 6, 2011 in US Eastern time (Ameirca/New_York) occurs twice;
+ * 1:30 AM EDT, then 1:30 AM EST one hour later. When <code>WALLTIME_FIRST</code>
+ * is used, the wall time 1:30AM in this example will be interpreted as 1:30 AM EDT
+ * (first occurrence). When <code>WALLTIME_LAST</code> is used, it will be
+ * interpreted as 1:30 AM EST (last occurrence). The default value is
+ * <code>WALLTIME_LAST</code>.
+ *
+ * @param option the behavior for handling repeating wall time, either
+ * <code>WALLTIME_FIRST</code> or <code>WALLTIME_LAST</code>.
+ * @throws java.lang.IllegalArgumentException when <code>option</code> is neither
+ * <code>WALLTIME_FIRST</code> nor <code>WALLTIME_LAST</code>.
+ *
+ * @see #getRepeatedWallTimeOption()
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ */
+
+public void setRepeatedWallTimeOption(int option) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Gets the behavior for handling wall time repeating multiple times
+ * at negative time zone offset transitions.
+ *
+ * @return the behavior for handling repeating wall time, either
+ * <code>WALLTIME_FIRST</code> or <code>WALLTIME_LAST</code>.
+ *
+ * @see #setRepeatedWallTimeOption(int)
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ */
+
+public int getRepeatedWallTimeOption() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Sets the behavior for handling skipped wall time at positive time zone offset
+ * transitions. For example, 2:30 AM on March 13, 2011 in US Eastern time (America/New_York)
+ * does not exist because the wall time jump from 1:59 AM EST to 3:00 AM EDT. When
+ * <code>WALLTIME_FIRST</code> is used, 2:30 AM is interpreted as 30 minutes before 3:00 AM
+ * EDT, therefore, it will be resolved as 1:30 AM EST. When <code>WALLTIME_LAST</code>
+ * is used, 2:30 AM is interpreted as 31 minutes after 1:59 AM EST, therefore, it will be
+ * resolved as 3:30 AM EDT. When <code>WALLTIME_NEXT_VALID</code> is used, 2:30 AM will
+ * be resolved as next valid wall time, that is 3:00 AM EDT. The default value is
+ * <code>WALLTIME_LAST</code>.
+ * <p>
+ * <b>Note:</b>This option is effective only when this calendar is {@link #isLenient() lenient}.
+ * When the calendar is strict, such non-existing wall time will cause an exception.
+ *
+ * @param option the behavior for handling skipped wall time at positive time zone
+ * offset transitions, one of <code>WALLTIME_FIRST</code>, <code>WALLTIME_LAST</code> and
+ * <code>WALLTIME_NEXT_VALID</code>.
+ * @throws java.lang.IllegalArgumentException when <code>option</code> is not any of
+ * <code>WALLTIME_FIRST</code>, <code>WALLTIME_LAST</code> and <code>WALLTIME_NEXT_VALID</code>.
+ *
+ * @see #getSkippedWallTimeOption()
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ * @see #WALLTIME_NEXT_VALID
+ */
+
+public void setSkippedWallTimeOption(int option) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong>Gets the behavior for handling skipped wall time at positive time zone offset
+ * transitions.
+ *
+ * @return the behavior for handling skipped wall time, one of
+ * <code>WALLTIME_FIRST</code>, <code>WALLTIME_LAST</code> and <code>WALLTIME_NEXT_VALID</code>.
+ *
+ * @see #setSkippedWallTimeOption(int)
+ * @see #WALLTIME_FIRST
+ * @see #WALLTIME_LAST
+ * @see #WALLTIME_NEXT_VALID
+ */
+
+public int getSkippedWallTimeOption() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets what the first day of the week is,
+ * where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ * @param value the given first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ */
+
+public void setFirstDayOfWeek(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns what the first day of the week is,
+ * where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ * e.g., Sunday in US, Monday in France
+ * @return the first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}.
+ */
+
+public int getFirstDayOfWeek() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets what the minimal days required in the first week of the year are.
+ * For example, if the first week is defined as one that contains the first
+ * day of the first month of a year, call the method with value 1. If it
+ * must be a full week, use value 7.
+ * @param value the given minimal days required in the first week
+ * of the year.
+ */
+
+public void setMinimalDaysInFirstWeek(int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns what the minimal days required in the first week of the year are.
+ * That is, if the first week is defined as one that contains the first day
+ * of the first month of a year, getMinimalDaysInFirstWeek returns 1. If
+ * the minimal days required must be a full week, getMinimalDaysInFirstWeek
+ * returns 7.
+ * @return the minimal days required in the first week of the year.
+ */
+
+public int getMinimalDaysInFirstWeek() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclass API for defining limits of different types.
+ * Subclasses must implement this method to return limits for the
+ * following fields:
+ *
+ * <pre>ERA
+ * YEAR
+ * MONTH
+ * WEEK_OF_YEAR
+ * WEEK_OF_MONTH
+ * DAY_OF_MONTH
+ * DAY_OF_YEAR
+ * DAY_OF_WEEK_IN_MONTH
+ * YEAR_WOY
+ * EXTENDED_YEAR</pre>
+ *
+ * @param field one of the above field numbers
+ * @param limitType one of <code>MINIMUM</code>, <code>GREATEST_MINIMUM</code>,
+ * <code>LEAST_MAXIMUM</code>, or <code>MAXIMUM</code>
+ */
+
+protected abstract int handleGetLimit(int field, int limitType);
+
+/**
+ * Returns a limit for a field.
+ * @param field the field, from 0..<code>getFieldCount()-1</code>
+ * @param limitType the type specifier for the limit
+ * @see #MINIMUM
+ * @see #GREATEST_MINIMUM
+ * @see #LEAST_MAXIMUM
+ * @see #MAXIMUM
+ */
+
+protected int getLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minimum value for the given time field.
+ * e.g., for Gregorian DAY_OF_MONTH, 1.
+ * @param field the given time field.
+ * @return the minimum value for the given time field.
+ */
+
+public final int getMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the maximum value for the given time field.
+ * e.g. for Gregorian DAY_OF_MONTH, 31.
+ * @param field the given time field.
+ * @return the maximum value for the given time field.
+ */
+
+public final int getMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the highest minimum value for the given field if varies.
+ * Otherwise same as getMinimum(). For Gregorian, no difference.
+ * @param field the given time field.
+ * @return the highest minimum value for the given time field.
+ */
+
+public final int getGreatestMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the lowest maximum value for the given field if varies.
+ * Otherwise same as getMaximum(). e.g., for Gregorian DAY_OF_MONTH, 28.
+ * @param field the given time field.
+ * @return the lowest maximum value for the given time field.
+ */
+
+public final int getLeastMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if the given date and time is in the weekend in this calendar
+ * system.  Equivalent to calling setTime() followed by isWeekend().  Note: This
+ * method changes the time this calendar is set to.
+ * @param date the date and time
+ * @return true if the given date and time is part of the
+ * weekend
+ * @see #isWeekend()
+ */
+
+public boolean isWeekend(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns true if this Calendar's current date and time is in the weekend in
+ * this calendar system.
+ * @return true if the given date and time is part of the
+ * weekend
+ * @see #isWeekend(Date)
+ */
+
+public boolean isWeekend() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides Cloneable
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this calendar. This method
+ * is intended to be used only for debugging purposes, and the
+ * format of the returned string may vary between implementations.
+ * The returned string may be empty but may not be <code>null</code>.
+ *
+ * @return  a string representation of this calendar.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return simple, immutable struct-like class for access to the CLDR week data.
+ * @param region The input region. The results are undefined if the region code is not valid.
+ * @return the WeekData for the input region. It is never null.
+ */
+
+public static android.icu.util.Calendar.WeekData getWeekDataForRegion(java.lang.String region) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Return simple, immutable struct-like class for access to the week data in this calendar.
+ * @return the WeekData for this calendar.
+ */
+
+public android.icu.util.Calendar.WeekData getWeekData() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Set data in this calendar based on the WeekData input.
+ * @param wdata The week data to use
+ * @return this, for chaining
+ */
+
+public android.icu.util.Calendar setWeekData(android.icu.util.Calendar.WeekData wdata) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the current millisecond time value <code>time</code> to
+ * field values in <code>fields[]</code>.  This synchronizes the time
+ * field values with a new time that is set for the calendar.  The time
+ * is <em>not</em> recomputed first; to recompute the time, then the
+ * fields, call the <code>complete</code> method.
+ * @see #complete
+ */
+
+protected void computeFields() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the Gregorian calendar year, month, and day of month from the
+ * Julian day.  These values are not stored in fields, but in member
+ * variables gregorianXxx.  They are used for time zone computations and by
+ * subclasses that are Gregorian derivatives.  Subclasses may call this
+ * method to perform a Gregorian calendar millis-&gt;fields computation.
+ * To perform a Gregorian calendar fields-&gt;millis computation, call
+ * computeGregorianMonthStart().
+ * @see #computeGregorianMonthStart
+ */
+
+protected final void computeGregorianFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a precedence table, return the newest field combination in
+ * the table, or -1 if none is found.
+ *
+ * <p>The precedence table is a 3-dimensional array of integers.  It
+ * may be thought of as an array of groups.  Each group is an array of
+ * lines.  Each line is an array of field numbers.  Within a line, if
+ * all fields are set, then the time stamp of the line is taken to be
+ * the stamp of the most recently set field.  If any field of a line is
+ * unset, then the line fails to match.  Within a group, the line with
+ * the newest time stamp is selected.  The first field of the line is
+ * returned to indicate which line matched.
+ *
+ * <p>In some cases, it may be desirable to map a line to field that
+ * whose stamp is NOT examined.  For example, if the best field is
+ * DAY_OF_WEEK then the DAY_OF_WEEK_IN_MONTH algorithm may be used.  In
+ * order to do this, insert the value <code>REMAP_RESOLVE | F</code> at
+ * the start of the line, where <code>F</code> is the desired return
+ * field value.  This field will NOT be examined; it only determines
+ * the return value if the other fields in the line are the newest.
+ *
+ * <p>If all lines of a group contain at least one unset field, then no
+ * line will match, and the group as a whole will fail to match.  In
+ * that case, the next group will be processed.  If all groups fail to
+ * match, then -1 is returned.
+ */
+
+protected int resolveFields(int[][][] precedenceTable) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the newest stamp of a given range of fields.
+ */
+
+protected int newestStamp(int first, int last, int bestStampSoFar) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the timestamp of a field.
+ */
+
+protected final int getStamp(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the field that is newer, either defaultField, or
+ * alternateField.  If neither is newer or neither is set, return defaultField.
+ */
+
+protected int newerField(int defaultField, int alternateField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Ensure that each field is within its valid range by calling {@link
+ * #validateField(int)} on each field that has been set.  This method
+ * should only be called if this calendar is not lenient.
+ * @see #isLenient
+ * @see #validateField(int)
+ */
+
+protected void validateFields() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Validate a single field of this calendar.  Subclasses should
+ * override this method to validate any calendar-specific fields.
+ * Generic fields can be handled by
+ * <code>Calendar.validateField()</code>.
+ * @see #validateField(int, int, int)
+ */
+
+protected void validateField(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Validate a single field of this calendar given its minimum and
+ * maximum allowed value.  If the field is out of range, throw a
+ * descriptive <code>IllegalArgumentException</code>.  Subclasses may
+ * use this method in their implementation of {@link
+ * #validateField(int)}.
+ */
+
+protected final void validateField(int field, int min, int max) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts the current field values in <code>fields[]</code> to the
+ * millisecond time value <code>time</code>.
+ */
+
+protected void computeTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the milliseconds in the day from the fields.  This is a
+ * value from 0 to 23:59:59.999 inclusive, unless fields are out of
+ * range, in which case it can be an arbitrary value.  This value
+ * reflects local zone wall time.
+ * @deprecated ICU 60
+ */
+
+@Deprecated
+protected int computeMillisInDay() { throw new RuntimeException("Stub!"); }
+
+/**
+ * This method can assume EXTENDED_YEAR has been set.
+ * @param millis milliseconds of the date fields (local midnight millis)
+ * @param millisInDay milliseconds of the time fields; may be out
+ * or range.
+ * @return total zone offset (raw + DST) for the given moment
+ * @deprecated ICU 60
+ */
+
+@Deprecated
+protected int computeZoneOffset(long millis, int millisInDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the Julian day number as specified by this calendar's fields.
+ */
+
+protected int computeJulianDay() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the field resolution array for this calendar.  Calendars that
+ * define additional fields or change the semantics of existing fields
+ * should override this method to adjust the field resolution semantics
+ * accordingly.  Other subclasses should not override this method.
+ * @see #resolveFields
+ */
+
+protected int[][][] getFieldResolutionTable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Julian day number of day before the first day of the
+ * given month in the given extended year.  Subclasses should override
+ * this method to implement their calendar system.
+ * @param eyear the extended year
+ * @param month the zero-based month, or 0 if useMonth is false
+ * @param useMonth if false, compute the day before the first day of
+ * the given year, otherwise, compute the day before the first day of
+ * the given month
+ * @return the Julian day number of the day before the first
+ * day of the given month and year
+ */
+
+protected abstract int handleComputeMonthStart(int eyear, int month, boolean useMonth);
+
+/**
+ * Returns the extended year defined by the current fields.  This will
+ * use the EXTENDED_YEAR field or the YEAR and supra-year fields (such
+ * as ERA) specific to the calendar system, depending on which set of
+ * fields is newer.
+ * @return the extended year
+ */
+
+protected abstract int handleGetExtendedYear();
+
+/**
+ * Returns the number of days in the given month of the given extended
+ * year of this calendar system.  Subclasses should override this
+ * method if they can provide a more correct or more efficient
+ * implementation than the default implementation in Calendar.
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of days in the given extended year of this
+ * calendar system.  Subclasses should override this method if they can
+ * provide a more correct or more efficient implementation than the
+ * default implementation in Calendar.
+ */
+
+protected int handleGetYearLength(int eyear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses that use additional fields beyond those defined in
+ * <code>Calendar</code> should override this method to return an
+ * <code>int[]</code> array of the appropriate length.  The length
+ * must be at least <code>BASE_FIELD_COUNT</code> and no more than
+ * <code>MAX_FIELD_COUNT</code>.
+ */
+
+protected int[] handleCreateFields() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses may override this.  This method calls
+ * handleGetMonthLength() to obtain the calendar-specific month
+ * length.
+ */
+
+protected int handleComputeJulianDay(int bestField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compute the Julian day of a month of the Gregorian calendar.
+ * Subclasses may call this method to perform a Gregorian calendar
+ * fields-&gt;millis computation.  To perform a Gregorian calendar
+ * millis-&gt;fields computation, call computeGregorianFields().
+ * @param year extended Gregorian year
+ * @param month zero-based Gregorian month
+ * @return the Julian day number of the day before the first
+ * day of the given month in the given extended year
+ * @see #computeGregorianFields
+ */
+
+protected int computeGregorianMonthStart(int year, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses may override this method to compute several fields
+ * specific to each calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which
+ * will be set when this method is called.  Subclasses can also call
+ * the getGregorianXxx() methods to obtain Gregorian calendar
+ * equivalents for the given Julian day.
+ *
+ * <p>In addition, subclasses should compute any subclass-specific
+ * fields, that is, fields from BASE_FIELD_COUNT to
+ * getFieldCount() - 1.
+ *
+ * <p>The default implementation in <code>Calendar</code> implements
+ * a pure proleptic Gregorian calendar.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the extended year on the Gregorian calendar as computed by
+ * <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the month (0-based) on the Gregorian calendar as computed by
+ * <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianMonth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the day of year (1-based) on the Gregorian calendar as
+ * computed by <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianDayOfYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the day of month (1-based) on the Gregorian calendar as
+ * computed by <code>computeGregorianFields()</code>.
+ * @see #computeGregorianFields
+ */
+
+protected final int getGregorianDayOfMonth() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the number of fields defined by this calendar.  Valid field
+ * arguments to <code>set()</code> and <code>get()</code> are
+ * <code>0..getFieldCount()-1</code>.
+ */
+
+public final int getFieldCount() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set a field to a value.  Subclasses should use this method when
+ * computing fields.  It sets the time stamp in the
+ * <code>stamp[]</code> array to <code>INTERNALLY_SET</code>.  If a
+ * field that may not be set by subclasses is passed in, an
+ * <code>IllegalArgumentException</code> is thrown.  This prevents
+ * subclasses from modifying fields that are intended to be
+ * calendar-system invariant.
+ */
+
+protected final void internalSet(int field, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the given year is a leap year. Returns true if the
+ * given year is a leap year.
+ * @param year the given year.
+ * @return true if the given year is a leap year; false otherwise.
+ */
+
+protected static final boolean isGregorianLeapYear(int year) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of a month of the Gregorian calendar.
+ * @param y the extended year
+ * @param m the 0-based month number
+ * @return the number of days in the given month
+ */
+
+protected static final int gregorianMonthLength(int y, int m) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of a previous month of the Gregorian calendar.
+ * @param y the extended year
+ * @param m the 0-based month number
+ * @return the number of days in the month previous to the given month
+ */
+
+protected static final int gregorianPreviousMonthLength(int y, int m) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two long integers, returning the floor of the quotient.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0
+ * but <code>floorDivide(-1,4)</code> =&gt; -1.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @return the floor of the quotient.
+ */
+
+protected static final long floorDivide(long numerator, long denominator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two integers, returning the floor of the quotient.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0
+ * but <code>floorDivide(-1,4)</code> =&gt; -1.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @return the floor of the quotient.
+ */
+
+protected static final int floorDivide(int numerator, int denominator) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two integers, returning the floor of the quotient, and
+ * the modulus remainder.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0 and <code>-1%4</code> =&gt; -1,
+ * but <code>floorDivide(-1,4)</code> =&gt; -1 with <code>remainder[0]</code> =&gt; 3.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @param remainder an array of at least one element in which the value
+ * <code>numerator mod denominator</code> is returned. Unlike <code>numerator
+ * % denominator</code>, this will always be non-negative.
+ * @return the floor of the quotient.
+ */
+
+protected static final int floorDivide(int numerator, int denominator, int[] remainder) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Divide two integers, returning the floor of the quotient, and
+ * the modulus remainder.
+ * <p>
+ * Unlike the built-in division, this is mathematically well-behaved.
+ * E.g., <code>-1/4</code> =&gt; 0 and <code>-1%4</code> =&gt; -1,
+ * but <code>floorDivide(-1,4)</code> =&gt; -1 with <code>remainder[0]</code> =&gt; 3.
+ * @param numerator the numerator
+ * @param denominator a divisor which must be &gt; 0
+ * @param remainder an array of at least one element in which the value
+ * <code>numerator mod denominator</code> is returned. Unlike <code>numerator
+ * % denominator</code>, this will always be non-negative.
+ * @return the floor of the quotient.
+ */
+
+protected static final int floorDivide(long numerator, int denominator, int[] remainder) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string name for a field, for debugging and exceptions.
+ */
+
+protected java.lang.String fieldName(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts time as milliseconds to Julian day.
+ * @param millis the given milliseconds.
+ * @return the Julian day number.
+ */
+
+protected static final int millisToJulianDay(long millis) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Converts Julian day to time as milliseconds.
+ * @param julian the given Julian day number.
+ * @return time as milliseconds.
+ */
+
+protected static final long julianDayToMillis(int julian) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the day of week, from SUNDAY to SATURDAY, given a Julian day.
+ */
+
+protected static final int julianDayToDayOfWeek(int julian) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current milliseconds without recomputing.
+ */
+
+protected final long internalGetTimeInMillis() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the calendar type name string for this Calendar object.
+ * The returned string is the legacy ICU calendar attribute value,
+ * for example, "gregorian" or "japanese".
+ *
+ * <p>See type="old type name" for the calendar attribute of locale IDs
+ * at http://www.unicode.org/reports/tr35/#Key_Type_Definitions
+ *
+ * @return legacy calendar type name string
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Value of the <code>AM_PM</code> field indicating the
+ * period of the day from midnight to just before noon.
+ */
+
+public static final int AM = 0; // 0x0
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating
+ * whether the <code>HOUR</code> is before or after noon.
+ * E.g., at 10:04:15.250 PM the <code>AM_PM</code> is <code>PM</code>.
+ * @see #AM
+ * @see #PM
+ * @see #HOUR
+ */
+
+public static final int AM_PM = 9; // 0x9
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * fourth month of the year.
+ */
+
+public static final int APRIL = 3; // 0x3
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * eighth month of the year.
+ */
+
+public static final int AUGUST = 7; // 0x7
+
+/**
+ * The number of fields defined by this class.  Subclasses may define
+ * addition fields starting with this number.
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+ */
+
+@Deprecated protected static final int BASE_FIELD_COUNT = 23; // 0x17
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * day of the month. This is a synonym for {@link #DAY_OF_MONTH}.
+ * The first day of the month has value 1.
+ * @see #DAY_OF_MONTH
+ */
+
+public static final int DATE = 5; // 0x5
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * day of the month. This is a synonym for {@link #DATE}.
+ * The first day of the month has value 1.
+ * @see #DATE
+ */
+
+public static final int DAY_OF_MONTH = 5; // 0x5
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the day
+ * of the week.  This field takes values {@link #SUNDAY},
+ * {@link #MONDAY}, {@link #TUESDAY}, {@link #WEDNESDAY},
+ * {@link #THURSDAY}, {@link #FRIDAY}, and {@link #SATURDAY}.
+ * @see #SUNDAY
+ * @see #MONDAY
+ * @see #TUESDAY
+ * @see #WEDNESDAY
+ * @see #THURSDAY
+ * @see #FRIDAY
+ * @see #SATURDAY
+ */
+
+public static final int DAY_OF_WEEK = 7; // 0x7
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * ordinal number of the day of the week within the current month. Together
+ * with the {@link #DAY_OF_WEEK} field, this uniquely specifies a day
+ * within a month.  Unlike {@link #WEEK_OF_MONTH} and
+ * {@link #WEEK_OF_YEAR}, this field's value does <em>not</em> depend on
+ * {@link #getFirstDayOfWeek()} or
+ * {@link #getMinimalDaysInFirstWeek()}.  <code>DAY_OF_MONTH 1</code>
+ * through <code>7</code> always correspond to <code>DAY_OF_WEEK_IN_MONTH
+ * 1</code>; <code>8</code> through <code>15</code> correspond to
+ * <code>DAY_OF_WEEK_IN_MONTH 2</code>, and so on.
+ * <code>DAY_OF_WEEK_IN_MONTH 0</code> indicates the week before
+ * <code>DAY_OF_WEEK_IN_MONTH 1</code>.  Negative values count back from the
+ * end of the month, so the last Sunday of a month is specified as
+ * <code>DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1</code>.  Because
+ * negative values count backward they will usually be aligned differently
+ * within the month than positive values.  For example, if a month has 31
+ * days, <code>DAY_OF_WEEK_IN_MONTH -1</code> will overlap
+ * <code>DAY_OF_WEEK_IN_MONTH 5</code> and the end of <code>4</code>.
+ * @see #DAY_OF_WEEK
+ * @see #WEEK_OF_MONTH
+ */
+
+public static final int DAY_OF_WEEK_IN_MONTH = 8; // 0x8
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the day
+ * number within the current year.  The first day of the year has value 1.
+ */
+
+public static final int DAY_OF_YEAR = 6; // 0x6
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * twelfth month of the year.
+ */
+
+public static final int DECEMBER = 11; // 0xb
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the localized day of week.  This will be a value from 1
+ * to 7 inclusive, with 1 being the localized first day of the week.
+ */
+
+public static final int DOW_LOCAL = 18; // 0x12
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * daylight savings offset in milliseconds.
+ */
+
+public static final int DST_OFFSET = 16; // 0x10
+
+/**
+ * The Julian day of the epoch, that is, January 1, 1970 on the
+ * Gregorian calendar.
+ */
+
+protected static final int EPOCH_JULIAN_DAY = 2440588; // 0x253d8c
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * era, e.g., AD or BC in the Julian calendar. This is a calendar-specific
+ * value; see subclass documentation.
+ * @see android.icu.util.GregorianCalendar#AD
+ * @see android.icu.util.GregorianCalendar#BC
+ */
+
+public static final int ERA = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the extended year.  This is a single number designating
+ * the year of this calendar system, encompassing all supra-year
+ * fields.  For example, for the Julian calendar system, year numbers
+ * are positive, with an era of BCE or CE.  An extended year value for
+ * the Julian calendar system assigns positive values to CE years and
+ * negative values to BCE years, with 1 BCE being year 0.
+ */
+
+public static final int EXTENDED_YEAR = 19; // 0x13
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * second month of the year.
+ */
+
+public static final int FEBRUARY = 1; // 0x1
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Friday.
+ */
+
+public static final int FRIDAY = 6; // 0x6
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the greatest minimum value that a field can take.
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int GREATEST_MINIMUM = 1; // 0x1
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * hour of the morning or afternoon. <code>HOUR</code> is used for the 12-hour
+ * clock.
+ * E.g., at 10:04:15.250 PM the <code>HOUR</code> is 10.
+ * @see #AM_PM
+ * @see #HOUR_OF_DAY
+ */
+
+public static final int HOUR = 10; // 0xa
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * hour of the day. <code>HOUR_OF_DAY</code> is used for the 24-hour clock.
+ * E.g., at 10:04:15.250 PM the <code>HOUR_OF_DAY</code> is 22.
+ * @see #HOUR
+ */
+
+public static final int HOUR_OF_DAY = 11; // 0xb
+
+/**
+ * Value of the time stamp <code>stamp[]</code> indicating that a field
+ * has been set via computations from the time or from other fields.
+ * @see #UNSET
+ * @see #MINIMUM_USER_STAMP
+ */
+
+protected static final int INTERNALLY_SET = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Field indicating whether or not the current month is a leap month.
+ * Should have a value of 0 for non-leap months, and 1 for leap months.
+ */
+
+public static final int IS_LEAP_MONTH = 22; // 0x16
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * first month of the year.
+ */
+
+public static final int JANUARY = 0; // 0x0
+
+/**
+ * The Julian day of the Gregorian epoch, that is, January 1, 1 on the
+ * Gregorian calendar.
+ */
+
+protected static final int JAN_1_1_JULIAN_DAY = 1721426; // 0x1a4452
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the modified Julian day number.  This is different from
+ * the conventional Julian day number in two regards.  First, it
+ * demarcates days at local zone midnight, rather than noon GMT.
+ * Second, it is a local number; that is, it depends on the local time
+ * zone.  It can be thought of as a single number that encompasses all
+ * the date-related fields.
+ */
+
+public static final int JULIAN_DAY = 20; // 0x14
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * seventh month of the year.
+ */
+
+public static final int JULY = 6; // 0x6
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * sixth month of the year.
+ */
+
+public static final int JUNE = 5; // 0x5
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the least maximum value that a field can take.
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int LEAST_MAXIMUM = 2; // 0x2
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * third month of the year.
+ */
+
+public static final int MARCH = 2; // 0x2
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the maximum value that a field can take (greatest maximum).
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int MAXIMUM = 3; // 0x3
+
+/**
+ * The maximum supported <code>Date</code>.  This value is equivalent
+ * to {@link #MAX_JULIAN} and {@link #MAX_MILLIS}.
+ */
+
+protected static final java.util.Date MAX_DATE;
+static { MAX_DATE = null; }
+
+/**
+ * The maximum number of fields possible.  Subclasses must not define
+ * more total fields than this number.
+ * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
+ */
+
+@Deprecated protected static final int MAX_FIELD_COUNT = 32; // 0x20
+
+/**
+ * The maximum supported Julian day.  This value is equivalent to
+ * {@link #MAX_MILLIS} and {@link #MAX_DATE}.
+ * @see #JULIAN_DAY
+ */
+
+protected static final int MAX_JULIAN = 2130706432; // 0x7f000000
+
+/**
+ * The maximum supported epoch milliseconds.  This value is equivalent
+ * to {@link #MAX_JULIAN} and {@link #MAX_DATE}.
+ */
+
+protected static final long MAX_MILLIS = 183882168921600000L; // 0x28d47dbbf19b000L
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * fifth month of the year.
+ */
+
+public static final int MAY = 4; // 0x4
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * millisecond within the second.
+ * E.g., at 10:04:15.250 PM the <code>MILLISECOND</code> is 250.
+ */
+
+public static final int MILLISECOND = 14; // 0xe
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the milliseconds in the day.  This ranges from 0 to
+ * 23:59:59.999 (regardless of DST).  This field behaves
+ * <em>exactly</em> like a composite of all time-related fields, not
+ * including the zone fields.  As such, it also reflects
+ * discontinuities of those fields on DST transition days.  On a day of
+ * DST onset, it will jump forward.  On a day of DST cessation, it will
+ * jump backward.  This reflects the fact that is must be combined with
+ * the DST_OFFSET field to obtain a unique local time value.
+ */
+
+public static final int MILLISECONDS_IN_DAY = 21; // 0x15
+
+/**
+ * Limit type for <code>getLimit()</code> and <code>handleGetLimit()</code>
+ * indicating the minimum value that a field can take (least minimum).
+ * @see #getLimit
+ * @see #handleGetLimit
+ */
+
+protected static final int MINIMUM = 0; // 0x0
+
+/**
+ * If the time stamp <code>stamp[]</code> has a value greater than or
+ * equal to <code>MINIMUM_USER_SET</code> then it has been set by the
+ * user via a call to <code>set()</code>.
+ * @see #UNSET
+ * @see #INTERNALLY_SET
+ */
+
+protected static final int MINIMUM_USER_STAMP = 2; // 0x2
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * minute within the hour.
+ * E.g., at 10:04:15.250 PM the <code>MINUTE</code> is 4.
+ */
+
+public static final int MINUTE = 12; // 0xc
+
+/**
+ * The minimum supported <code>Date</code>.  This value is equivalent
+ * to {@link #MIN_JULIAN} and {@link #MIN_MILLIS}.
+ */
+
+protected static final java.util.Date MIN_DATE;
+static { MIN_DATE = null; }
+
+/**
+ * The minimum supported Julian day.  This value is equivalent to
+ * {@link #MIN_MILLIS} and {@link #MIN_DATE}.
+ * @see #JULIAN_DAY
+ */
+
+protected static final int MIN_JULIAN = -2130706432; // 0x81000000
+
+/**
+ * The minimum supported epoch milliseconds.  This value is equivalent
+ * to {@link #MIN_JULIAN} and {@link #MIN_DATE}.
+ */
+
+protected static final long MIN_MILLIS = -184303902528000000L; // 0xfd713893bf19b000L
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Monday.
+ */
+
+public static final int MONDAY = 2; // 0x2
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * month. This is a calendar-specific value. The first month of the year is
+ * <code>JANUARY</code>; the last depends on the number of months in a year.
+ * @see #JANUARY
+ * @see #FEBRUARY
+ * @see #MARCH
+ * @see #APRIL
+ * @see #MAY
+ * @see #JUNE
+ * @see #JULY
+ * @see #AUGUST
+ * @see #SEPTEMBER
+ * @see #OCTOBER
+ * @see #NOVEMBER
+ * @see #DECEMBER
+ * @see #UNDECIMBER
+ */
+
+public static final int MONTH = 2; // 0x2
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * eleventh month of the year.
+ */
+
+public static final int NOVEMBER = 10; // 0xa
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * tenth month of the year.
+ */
+
+public static final int OCTOBER = 9; // 0x9
+
+/**
+ * The number of milliseconds in one day.  Although ONE_DAY and
+ * ONE_WEEK can fit into ints, they must be longs in order to prevent
+ * arithmetic overflow when performing (bug 4173516).
+ */
+
+protected static final long ONE_DAY = 86400000L; // 0x5265c00L
+
+/**
+ * The number of milliseconds in one hour.
+ */
+
+protected static final int ONE_HOUR = 3600000; // 0x36ee80
+
+/**
+ * The number of milliseconds in one minute.
+ */
+
+protected static final int ONE_MINUTE = 60000; // 0xea60
+
+/**
+ * The number of milliseconds in one second.
+ */
+
+protected static final int ONE_SECOND = 1000; // 0x3e8
+
+/**
+ * The number of milliseconds in one week.  Although ONE_DAY and
+ * ONE_WEEK can fit into ints, they must be longs in order to prevent
+ * arithmetic overflow when performing (bug 4173516).
+ */
+
+protected static final long ONE_WEEK = 604800000L; // 0x240c8400L
+
+/**
+ * Value of the <code>AM_PM</code> field indicating the
+ * period of the day from noon to just before midnight.
+ */
+
+public static final int PM = 1; // 0x1
+
+/**
+ * Value to OR against resolve table field values for remapping.
+ * @see #resolveFields
+ */
+
+protected static final int RESOLVE_REMAP = 32; // 0x20
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Saturday.
+ */
+
+public static final int SATURDAY = 7; // 0x7
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * second within the minute.
+ * E.g., at 10:04:15.250 PM the <code>SECOND</code> is 15.
+ */
+
+public static final int SECOND = 13; // 0xd
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * ninth month of the year.
+ */
+
+public static final int SEPTEMBER = 8; // 0x8
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Sunday.
+ */
+
+public static final int SUNDAY = 1; // 0x1
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Thursday.
+ */
+
+public static final int THURSDAY = 5; // 0x5
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Tuesday.
+ */
+
+public static final int TUESDAY = 3; // 0x3
+
+/**
+ * Value of the <code>MONTH</code> field indicating the
+ * thirteenth month of the year. Although {@link android.icu.util.GregorianCalendar GregorianCalendar}
+ * does not use this value, lunar calendars do.
+ */
+
+public static final int UNDECIMBER = 12; // 0xc
+
+/**
+ * Value of the time stamp <code>stamp[]</code> indicating that
+ * a field has not been set since the last call to <code>clear()</code>.
+ * @see #INTERNALLY_SET
+ * @see #MINIMUM_USER_STAMP
+ */
+
+protected static final int UNSET = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong>Option used by {@link #setRepeatedWallTimeOption(int)} and
+ * {@link #setSkippedWallTimeOption(int)} specifying an ambiguous wall time
+ * to be interpreted as the earliest.
+ * @see #setRepeatedWallTimeOption(int)
+ * @see #getRepeatedWallTimeOption()
+ * @see #setSkippedWallTimeOption(int)
+ * @see #getSkippedWallTimeOption()
+ */
+
+public static final int WALLTIME_FIRST = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong>Option used by {@link #setRepeatedWallTimeOption(int)} and
+ * {@link #setSkippedWallTimeOption(int)} specifying an ambiguous wall time
+ * to be interpreted as the latest.
+ * @see #setRepeatedWallTimeOption(int)
+ * @see #getRepeatedWallTimeOption()
+ * @see #setSkippedWallTimeOption(int)
+ * @see #getSkippedWallTimeOption()
+ */
+
+public static final int WALLTIME_LAST = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong>Option used by {@link #setSkippedWallTimeOption(int)} specifying an
+ * ambiguous wall time to be interpreted as the next valid wall time.
+ * @see #setSkippedWallTimeOption(int)
+ * @see #getSkippedWallTimeOption()
+ */
+
+public static final int WALLTIME_NEXT_VALID = 2; // 0x2
+
+/**
+ * Value of the <code>DAY_OF_WEEK</code> field indicating
+ * Wednesday.
+ */
+
+public static final int WEDNESDAY = 4; // 0x4
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * week number within the current month.  The first week of the month, as
+ * defined by {@link #getFirstDayOfWeek()} and
+ * {@link #getMinimalDaysInFirstWeek()}, has value 1.  Subclasses define
+ * the value of {@link #WEEK_OF_MONTH} for days before the first week of
+ * the month.
+ * @see #getFirstDayOfWeek
+ * @see #getMinimalDaysInFirstWeek
+ */
+
+public static final int WEEK_OF_MONTH = 4; // 0x4
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * week number within the current year.  The first week of the year, as
+ * defined by {@link #getFirstDayOfWeek()} and
+ * {@link #getMinimalDaysInFirstWeek()}, has value 1.  Subclasses define
+ * the value of {@link #WEEK_OF_YEAR} for days before the first week of
+ * the year.
+ * @see #getFirstDayOfWeek
+ * @see #getMinimalDaysInFirstWeek
+ */
+
+public static final int WEEK_OF_YEAR = 3; // 0x3
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * year. This is a calendar-specific value; see subclass documentation.
+ */
+
+public static final int YEAR = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> Field number for <code>get()</code> and <code>set()</code>
+ * indicating the extended year corresponding to the
+ * {@link #WEEK_OF_YEAR} field.  This may be one greater or less
+ * than the value of {@link #EXTENDED_YEAR}.
+ */
+
+public static final int YEAR_WOY = 17; // 0x11
+
+/**
+ * Field number for <code>get</code> and <code>set</code> indicating the
+ * raw offset from GMT in milliseconds.
+ */
+
+public static final int ZONE_OFFSET = 15; // 0xf
+/**
+ * Simple, immutable struct-like class for access to the CLDR week data.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class WeekData {
+
+/**
+ * Constructor
+ *
+ * @param fdow the first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ * @param mdifw the minimal number of days in the first week
+ * @param weekendOnset the onset day, where 1 = Sunday and 7 = Saturday
+ * @param weekendOnsetMillis the onset time in millis during the onset day
+ * @param weekendCease the cease day, where 1 = Sunday and 7 = Saturday
+ * @param weekendCeaseMillis the cease time in millis during the cease day.
+ */
+
+public WeekData(int fdow, int mdifw, int weekendOnset, int weekendOnsetMillis, int weekendCease, int weekendCeaseMillis) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * the first day of the week, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ */
+
+public final int firstDayOfWeek;
+{ firstDayOfWeek = 0; }
+
+/**
+ * the minimal number of days in the first week
+ */
+
+public final int minimalDaysInFirstWeek;
+{ minimalDaysInFirstWeek = 0; }
+
+/**
+ * the cease day, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ */
+
+public final int weekendCease;
+{ weekendCease = 0; }
+
+/**
+ * the cease time in millis during the cease day. Exclusive, so the max is 24:00:00.000.
+ * Note that this will format as 00:00 the next day.
+ */
+
+public final int weekendCeaseMillis;
+{ weekendCeaseMillis = 0; }
+
+/**
+ * the onset day, where 1 = {@link #SUNDAY} and 7 = {@link #SATURDAY}
+ */
+
+public final int weekendOnset;
+{ weekendOnset = 0; }
+
+/**
+ * the onset time in millis during the onset day
+ */
+
+public final int weekendOnsetMillis;
+{ weekendOnsetMillis = 0; }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ChineseCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ChineseCalendar.java
new file mode 100644
index 0000000..85685f8
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ChineseCalendar.java
@@ -0,0 +1,306 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*********************************************************************
+ * Copyright (C) 2000-2014, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *********************************************************************
+ */
+
+
+package android.icu.util;
+
+import android.icu.text.DateFormat;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>ChineseCalendar</code> is a concrete subclass of {@link android.icu.util.Calendar Calendar}
+ * that implements a traditional Chinese calendar.  The traditional Chinese
+ * calendar is a lunisolar calendar: Each month starts on a new moon, and
+ * the months are numbered according to solar events, specifically, to
+ * guarantee that month 11 always contains the winter solstice.  In order
+ * to accomplish this, leap months are inserted in certain years.  Leap
+ * months are numbered the same as the month they follow.  The decision of
+ * which month is a leap month depends on the relative movements of the sun
+ * and moon.
+ *
+ * <p>All astronomical computations are performed with respect to a time
+ * zone of GMT+8:00 and a longitude of 120 degrees east.  Although some
+ * calendars implement a historically more accurate convention of using
+ * Beijing's local longitude (116 degrees 25 minutes east) and time zone
+ * (GMT+7:45:40) for dates before 1929, we do not implement this here.
+ *
+ * <p>Years are counted in two different ways in the Chinese calendar.  The
+ * first method is by sequential numbering from the 61st year of the reign
+ * of Huang Di, 2637 BCE, which is designated year 1 on the Chinese
+ * calendar.  The second method uses 60-year cycles from the same starting
+ * point, which is designated year 1 of cycle 1.  In this class, the
+ * <code>EXTENDED_YEAR</code> field contains the sequential year count.
+ * The <code>ERA</code> field contains the cycle number, and the
+ * <code>YEAR</code> field contains the year of the cycle, a value between
+ * 1 and 60.
+ *
+ * <p>There is some variation in what is considered the starting point of
+ * the calendar, with some sources starting in the first year of the reign
+ * of Huang Di, rather than the 61st.  This gives continuous year numbers
+ * 60 years greater and cycle numbers one greater than what this class
+ * implements.
+ *
+ * <p>Because <code>ChineseCalendar</code> defines an additional field and
+ * redefines the way the <code>ERA</code> field is used, it requires a new
+ * format class, <code>ChineseDateFormat</code>.  As always, use the
+ * methods <code>DateFormat.getXxxInstance(Calendar cal,...)</code> to
+ * obtain a formatter for this calendar.
+ *
+ * <p>References:<ul>
+ *
+ * <li>Dershowitz and Reingold, <i>Calendrical Calculations</i>,
+ * Cambridge University Press, 1997</li>
+ *
+ * <li>Helmer Aslaksen's
+ * <a href="http://www.math.nus.edu.sg/aslaksen/calendar/chinese.shtml">
+ * Chinese Calendar page</a></li>
+ *
+ * <li>The <a href="http://www.tondering.dk/claus/calendar.html">
+ * Calendar FAQ</a></li>
+ *
+ * </ul>
+ *
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * ChineseCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=chinese"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ChineseCalendar extends android.icu.util.Calendar {
+
+/**
+ * Construct a <code>ChineseCalendar</code> with the default time zone and locale.
+ */
+
+public ChineseCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code> with the give date set in the default time zone
+ * with the default locale.
+ * @param date The date to which the new calendar is set.
+ */
+
+public ChineseCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth The value used to set the Chinese calendar's {@link #IS_LEAP_MONTH}
+ *                  time field.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int year, int month, int isLeapMonth, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth the value used to set the {@link #IS_LEAP_MONTH} time field
+ *              in the calendar.
+ * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+ *              in the calendar.
+ * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+ *              in the calendar.
+ * @param second the value used to set the {@link #SECOND SECOND} time field
+ *              in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int year, int month, int isLeapMonth, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constructs a <code>ChineseCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param era       The value used to set the calendar's {@link #ERA ERA} time field.
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth The value used to set the Chinese calendar's {@link #IS_LEAP_MONTH}
+ *                  time field.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int era, int year, int month, int isLeapMonth, int date) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constructs a <code>ChineseCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param era   the value used to set the calendar's {@link #ERA ERA} time field.
+ * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for January.
+ * @param isLeapMonth the value used to set the {@link #IS_LEAP_MONTH} time field
+ *              in the calendar.
+ * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+ *              in the calendar.
+ * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+ *              in the calendar.
+ * @param second the value used to set the {@link #SECOND SECOND} time field
+ *              in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(int era, int year, int month, int isLeapMonth, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ * @param aLocale The given locale
+ */
+
+public ChineseCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ * @param zone the given time zone
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public ChineseCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ * @param zone the given time zone
+ * @param aLocale the given locale
+ */
+
+public ChineseCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>ChineseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale
+ */
+
+public ChineseCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Construct a <code>ChineseCalendar</code>  based on the current time
+ * with the given time zone with the given locale.
+ * @param zone the given time zone
+ * @param locale the given ulocale
+ */
+
+public ChineseCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to return the limit value for the given field.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Implement abstract Calendar method to return the extended year
+ * defined by the current fields.  This will use either the ERA and
+ * YEAR field as the cycle and year-of-cycle, or the EXTENDED_YEAR
+ * field as the continuous year count, depending on which is newer.
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar method to return the number of days in the given
+ * extended year and month.
+ *
+ * <p>Note: This method also reads the IS_LEAP_MONTH field to determine
+ * whether or not the given month is a leap month.
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected android.icu.text.DateFormat handleGetDateFormat(java.lang.String pattern, java.lang.String override, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to add IS_LEAP_MONTH to the field resolution
+ * table.
+ */
+
+protected int[][][] getFieldResolutionTable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to handle leap months properly.
+ */
+
+public void add(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to handle leap months properly.
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to compute several fields specific to the Chinese
+ * calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
+ * method is called.  The getGregorianXxx() methods return Gregorian
+ * calendar equivalents for the given Julian day.
+ *
+ * <p>Compute the ChineseCalendar-specific field IS_LEAP_MONTH.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the Julian day number of day before the first day of the
+ * given month in the given extended year.
+ *
+ * <p>Note: This method reads the IS_LEAP_MONTH field to determine
+ * whether the given month is a leap month.
+ * @param eyear the extended year
+ * @param month the zero-based month.  The month is also determined
+ * by reading the IS_LEAP_MONTH field.
+ * @return the Julian day number of the day before the first
+ * day of the given month and year
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/CopticCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/CopticCalendar.java
new file mode 100644
index 0000000..11673ae
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/CopticCalendar.java
@@ -0,0 +1,247 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2005-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * Implement the Coptic calendar system.
+ * <p>
+ * CopticCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=coptic"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class CopticCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>CopticCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public CopticCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone The time zone for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public CopticCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale The icu locale for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param aLocale The locale for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param locale The icu locale for the new calendar.
+ */
+
+public CopticCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tout.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public CopticCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public CopticCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>CopticCalendar</code> with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tout.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public CopticCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/extended year
+ */
+
+protected int handleComputeMonthStart(int eyear, int emonth, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Calculate the limit for a specified type of limit and field
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constant for ????? / ?????,
+ * the 6th month of the Coptic year.
+ */
+
+public static final int AMSHIR = 5; // 0x5
+
+/** 
+ * Constant for ????? / ????,
+ * the 2nd month of the Coptic year.
+ */
+
+public static final int BABA = 1; // 0x1
+
+/** 
+ * Constant for ???????? / ??????,
+ * the 7th month of the Coptic year.
+ */
+
+public static final int BARAMHAT = 6; // 0x6
+
+/** 
+ * Constant for ??????? / ??????,
+ * the 8th month of the Coptic year.
+ */
+
+public static final int BARAMOUDA = 7; // 0x7
+
+/** 
+ * Constant for ????? / ????;,
+ * the 9th month of the Coptic year.
+ */
+
+public static final int BASHANS = 8; // 0x8
+
+/** 
+ * Constant for ???? / ????,
+ * the 11th month of the Coptic year.
+ */
+
+public static final int EPEP = 10; // 0xa
+
+/** 
+ * Constant for ???? / ?????,
+ * the 3rd month of the Coptic year.
+ */
+
+public static final int HATOR = 2; // 0x2
+
+/** 
+ * Constant for ????? / ????;,
+ * the 4th month of the Coptic year.
+ */
+
+public static final int KIAHK = 3; // 0x3
+
+/** 
+ * Constant for ?????? / ????,
+ * the 12th month of the Coptic year.
+ */
+
+public static final int MESRA = 11; // 0xb
+
+/** 
+ * Constant for ??????? ????? / ???????????,
+ * the 13th month of the Coptic year.
+ */
+
+public static final int NASIE = 12; // 0xc
+
+/** 
+ * Constant for ????? / ?????,
+ * the 10th month of the Coptic year.
+ */
+
+public static final int PAONA = 9; // 0x9
+
+/** 
+ * Constant for ???? / ????,
+ * the 5th month of the Coptic year.
+ */
+
+public static final int TOBA = 4; // 0x4
+
+/** 
+ * Constant for ???? / ???,
+ * the 1st month of the Coptic year.
+ */
+
+public static final int TOUT = 0; // 0x0
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Currency.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Currency.java
new file mode 100644
index 0000000..48d28fd
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Currency.java
@@ -0,0 +1,463 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/**
+ *******************************************************************************
+ * Copyright (C) 2001-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+import java.util.Locale;
+import android.icu.util.ULocale.Category;
+
+/**
+ * A class encapsulating a currency, as defined by ISO 4217.  A
+ * <tt>Currency</tt> object can be created given a <tt>Locale</tt> or
+ * given an ISO 4217 code.  Once created, the <tt>Currency</tt> object
+ * can return various data necessary to its proper display:
+ *
+ * <ul><li>A display symbol, for a specific locale
+ * <li>The number of fraction digits to display
+ * <li>A rounding increment
+ * </ul>
+ *
+ * The <tt>DecimalFormat</tt> class uses these data to display
+ * currencies.
+ *
+ * <p>Note: This class deliberately resembles
+ * <tt>java.util.Currency</tt> but it has a completely independent
+ * implementation, and adds features not present in the JDK.
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Currency extends android.icu.util.MeasureUnit {
+
+/**
+ * Constructs a currency object for the given ISO 4217 3-letter
+ * code.  This constructor assumes that the code is valid.
+ *
+ * @param theISOCode The iso code used to construct the currency.
+ */
+
+protected Currency(java.lang.String theISOCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency object for the default currency in the given
+ * locale.
+ * @param locale the locale
+ * @return the currency object for this locale
+ */
+
+public static android.icu.util.Currency getInstance(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency object for the default currency in the given
+ * locale.
+ */
+
+public static android.icu.util.Currency getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of Strings which contain the currency
+ * identifiers that are valid for the given locale on the
+ * given date.  If there are no such identifiers, returns null.
+ * Returned identifiers are in preference order.
+ * @param loc the locale for which to retrieve currency codes.
+ * @param d the date for which to retrieve currency codes for the given locale.
+ * @return The array of ISO currency codes.
+ */
+
+public static java.lang.String[] getAvailableCurrencyCodes(android.icu.util.ULocale loc, java.util.Date d) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an array of Strings which contain the currency
+ * identifiers that are valid for the given {@link java.util.Locale} on the
+ * given date.  If there are no such identifiers, returns null.
+ * Returned identifiers are in preference order.
+ * @param loc the {@link java.util.Locale} for which to retrieve currency codes.
+ * @param d the date for which to retrieve currency codes for the given locale.
+ * @return The array of ISO currency codes.
+ */
+
+public static java.lang.String[] getAvailableCurrencyCodes(java.util.Locale loc, java.util.Date d) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of available currencies. The returned set of currencies contains all of the
+ * available currencies, including obsolete ones. The result set can be modified without
+ * affecting the available currencies in the runtime.
+ *
+ * @return The set of available currencies. The returned set could be empty if there is no
+ * currency data available.
+ */
+
+public static java.util.Set<android.icu.util.Currency> getAvailableCurrencies() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a currency object given an ISO 4217 3-letter code.
+ * @param theISOCode the iso code
+ * @return the currency for this iso code
+ * @throws java.lang.NullPointerException if <code>theISOCode</code> is null.
+ * @throws java.lang.IllegalArgumentException if <code>theISOCode</code> is not a
+ *         3-letter alpha code.
+ */
+
+public static android.icu.util.Currency getInstance(java.lang.String theISOCode) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a Currency object based on the currency represented by the given java.util.Currency.
+ *
+ * @param currency The Java currency object to convert.
+ * @return An equivalent ICU currency object.
+ */
+
+public static android.icu.util.Currency fromJavaCurrency(java.util.Currency currency) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a java.util.Currency object based on the currency represented by this Currency.
+ *
+ * @return An equivalent Java currency object.
+ */
+
+public java.util.Currency toJavaCurrency() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return an array of the locales for which a currency
+ * is defined.
+ * @return an array of the available locales
+ */
+
+public static java.util.Locale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return an array of the ulocales for which a currency
+ * is defined.
+ * @return an array of the available ulocales
+ */
+
+public static android.icu.util.ULocale[] getAvailableULocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a key and a locale, returns an array of values for the key for which data
+ * exists.  If commonlyUsed is true, these are the values that typically are used
+ * with this locale, otherwise these are all values for which data exists.
+ * This is a common service API.
+ * <p>
+ * The only supported key is "currency", other values return an empty array.
+ * <p>
+ * Currency information is based on the region of the locale.  If the locale does not
+ * indicate a region, {@link android.icu.util.ULocale#addLikelySubtags(android.icu.util.ULocale) ULocale#addLikelySubtags(ULocale)} is used to infer a region,
+ * except for the 'und' locale.
+ * <p>
+ * If commonlyUsed is true, only the currencies known to be in use as of the current date
+ * are returned.  When there are more than one, these are returned in preference order
+ * (typically, this occurs when a country is transitioning to a new currency, and the
+ * newer currency is preferred), see
+ * <a href="http://unicode.org/reports/tr35/#Supplemental_Currency_Data">Unicode TR#35 Sec. C1</a>.
+ * If commonlyUsed is false, all currencies ever used in any locale are returned, in no
+ * particular order.
+ *
+ * @param key           key whose values to look up.  the only recognized key is "currency"
+ * @param locale        the locale
+ * @param commonlyUsed  if true, return only values that are currently used in the locale.
+ *                      Otherwise returns all values.
+ * @return an array of values for the given key and the locale.  If there is no data, the
+ *   array will be empty.
+ */
+
+public static final java.lang.String[] getKeywordValuesForLocale(java.lang.String key, android.icu.util.ULocale locale, boolean commonlyUsed) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 4217 3-letter code for this currency object.
+ */
+
+public java.lang.String getCurrencyCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 4217 numeric code for this currency object.
+ * <p>Note: If the ISO 4217 numeric code is not assigned for the currency or
+ * the currency is unknown, this method returns 0.</p>
+ * @return The ISO 4217 numeric code of this currency.
+ */
+
+public int getNumericCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience and compatibility override of getName that
+ * requests the symbol name for the default <code>DISPLAY</code> locale.
+ * @see #getName
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getSymbol() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience and compatibility override of getName that
+ * requests the symbol name.
+ * @param loc the Locale for the symbol
+ * @see #getName
+ */
+
+public java.lang.String getSymbol(java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience and compatibility override of getName that
+ * requests the symbol name.
+ * @param uloc the ULocale for the symbol
+ * @see #getName
+ */
+
+public java.lang.String getSymbol(android.icu.util.ULocale uloc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the
+ * given locale.
+ * This is a convenient method for
+ * getName(ULocale, int, boolean[]);
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return.
+ *                  The nameStyle should be SYMBOL_NAME, NARROW_SYMBOL_NAME,
+ *                  or LONG_NAME. Otherwise, throw IllegalArgumentException.
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ */
+
+public java.lang.String getName(java.util.Locale locale, int nameStyle, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the
+ * given locale.  For example, the display name for the USD
+ * currency object in the en_US locale is "$".
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return.
+ *                  The nameStyle should be SYMBOL_NAME, NARROW_SYMBOL_NAME,
+ *                  or LONG_NAME. Otherwise, throw IllegalArgumentException.
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ * <p>
+ * @throws  java.lang.IllegalArgumentException  if the nameStyle is not SYMBOL_NAME
+ *                                    or LONG_NAME.
+ * @see #getName(ULocale, int, String, boolean[])
+ */
+
+public java.lang.String getName(android.icu.util.ULocale locale, int nameStyle, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the given locale.
+ * This is a convenience overload of getName(ULocale, int, String, boolean[]);
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return
+ * @param pluralCount plural count string for this locale
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ */
+
+public java.lang.String getName(java.util.Locale locale, int nameStyle, java.lang.String pluralCount, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for the given currency in the
+ * given locale.  For example, the SYMBOL_NAME for the USD
+ * currency object in the en_US locale is "$".
+ * The PLURAL_LONG_NAME for the USD currency object when the currency
+ * amount is plural is "US dollars", such as in "3.00 US dollars";
+ * while the PLURAL_LONG_NAME for the USD currency object when the currency
+ * amount is singular is "US dollar", such as in "1.00 US dollar".
+ *
+ * @param locale locale in which to display currency
+ * @param nameStyle selector for which kind of name to return
+ * @param pluralCount plural count string for this locale
+ * @param isChoiceFormat isChoiceFormat[0] is always set to false, or isChoiceFormat can be null;
+ *     display names are static strings;
+ *     since ICU 4.4, ChoiceFormat patterns are no longer supported
+ * @return display string for this currency.  If the resource data
+ * contains no entry for this currency, then the ISO 4217 code is
+ * returned.
+ * @throws  java.lang.IllegalArgumentException  if the nameStyle is not SYMBOL_NAME,
+ *                                    LONG_NAME, or PLURAL_LONG_NAME.
+ */
+
+public java.lang.String getName(android.icu.util.ULocale locale, int nameStyle, java.lang.String pluralCount, boolean[] isChoiceFormat) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for this currency in the default locale.
+ * If the resource data for the default locale contains no entry for this currency,
+ * then the ISO 4217 code is returned.
+ * <p>
+ * Note: This method is a convenience equivalent for
+ * {@link java.util.Currency#getDisplayName()} and is equivalent to
+ * <code>getName(Locale.getDefault(), LONG_NAME, null)</code>.
+ *
+ * @return The display name of this currency
+ * @see #getDisplayName(Locale)
+ * @see #getName(Locale, int, boolean[])
+ */
+
+public java.lang.String getDisplayName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the display name for this currency in the given locale.
+ * If the resource data for the given locale contains no entry for this currency,
+ * then the ISO 4217 code is returned.
+ * <p>
+ * Note: This method is a convenience equivalent for
+ * {@link java.util.Currency#getDisplayName(java.util.Locale)} and is equivalent
+ * to <code>getName(locale, LONG_NAME, null)</code>.
+ *
+ * @param locale locale in which to display currency
+ * @return The display name of this currency for the specified locale
+ * @see #getDisplayName(Locale)
+ * @see #getName(Locale, int, boolean[])
+ */
+
+public java.lang.String getDisplayName(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of the number of fraction digits that should
+ * be displayed for this currency.
+ * This is equivalent to getDefaultFractionDigits(CurrencyUsage.STANDARD);
+ *
+ * Important: The number of fraction digits for a given currency is NOT
+ * guaranteed to be constant across versions of ICU or CLDR. For example,
+ * do NOT use this value as a mechanism for deciding the magnitude used
+ * to store currency values in a database. You should use this value for
+ * display purposes only.
+ *
+ * @return a non-negative number of fraction digits to be
+ * displayed
+ */
+
+public int getDefaultFractionDigits() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of the number of fraction digits that should
+ * be displayed for this currency with Usage.
+ *
+ * Important: The number of fraction digits for a given currency is NOT
+ * guaranteed to be constant across versions of ICU or CLDR. For example,
+ * do NOT use this value as a mechanism for deciding the magnitude used
+ * to store currency values in a database. You should use this value for
+ * display purposes only.
+ *
+ * @param Usage the usage of currency(Standard or Cash)
+ * @return a non-negative number of fraction digits to be
+ * displayed
+ */
+
+public int getDefaultFractionDigits(android.icu.util.Currency.CurrencyUsage Usage) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding increment for this currency, or 0.0 if no
+ * rounding is done by this currency.
+ * This is equivalent to getRoundingIncrement(CurrencyUsage.STANDARD);
+ * @return the non-negative rounding increment, or 0.0 if none
+ */
+
+public double getRoundingIncrement() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the rounding increment for this currency, or 0.0 if no
+ * rounding is done by this currency with the Usage.
+ * @param Usage the usage of currency(Standard or Cash)
+ * @return the non-negative rounding increment, or 0.0 if none
+ */
+
+public double getRoundingIncrement(android.icu.util.Currency.CurrencyUsage Usage) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the ISO 4217 code for this currency.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Queries if the given ISO 4217 3-letter code is available on the specified date range.
+ * <p>
+ * Note: For checking availability of a currency on a specific date, specify the date on both <code>from</code> and
+ * <code>to</code>. When both <code>from</code> and <code>to</code> are null, this method checks if the specified
+ * currency is available all time.
+ *
+ * @param code
+ *            The ISO 4217 3-letter code.
+ * @param from
+ *            The lower bound of the date range, inclusive. When <code>from</code> is null, check the availability
+ *            of the currency any date before <code>to</code>
+ * @param to
+ *            The upper bound of the date range, inclusive. When <code>to</code> is null, check the availability of
+ *            the currency any date after <code>from</code>
+ * @return true if the given ISO 4217 3-letter code is supported on the specified date range.
+ * @throws java.lang.IllegalArgumentException when <code>to</code> is before <code>from</code>.
+ */
+
+public static boolean isAvailable(java.lang.String code, java.util.Date from, java.util.Date to) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Selector for getName() indicating the long name for a
+ * currency, such as "US Dollar" for USD.
+ */
+
+public static final int LONG_NAME = 1; // 0x1
+
+/**
+ * Selector for getName() indicating the narrow currency symbol.
+ * <p>
+ * The narrow currency symbol is similar to the regular currency symbol,
+ * but it always takes the shortest form;
+ * for example, "$" instead of "US$" for USD in en-CA.
+ */
+
+public static final int NARROW_SYMBOL_NAME = 3; // 0x3
+
+/**
+ * Selector for getName() indicating the plural long name for a
+ * currency, such as "US dollar" for USD in "1 US dollar",
+ * and "US dollars" for USD in "2 US dollars".
+ */
+
+public static final int PLURAL_LONG_NAME = 2; // 0x2
+
+/**
+ * Selector for getName() indicating a symbolic name for a
+ * currency, such as "$" for USD.
+ */
+
+public static final int SYMBOL_NAME = 0; // 0x0
+/**
+ * Currency Usage used for Decimal Format
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CurrencyUsage {
+/**
+ * a setting to specify currency usage which determines currency digit and rounding
+ * for standard usage, for example: "50.00 NT$"
+ */
+
+STANDARD,
+/**
+ * a setting to specify currency usage which determines currency digit and rounding
+ * for cash usage, for example: "50 NT$"
+ */
+
+CASH;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/CurrencyAmount.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/CurrencyAmount.java
new file mode 100644
index 0000000..aa5585f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/CurrencyAmount.java
@@ -0,0 +1,69 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (c) 2004-2010, International Business Machines
+* Corporation and others.  All Rights Reserved.
+**********************************************************************
+* Author: Alan Liu
+* Created: April 12, 2004
+* Since: ICU 3.0
+**********************************************************************
+*/
+
+package android.icu.util;
+
+
+/**
+ * An amount of currency, consisting of a Number and a Currency.
+ * CurrencyAmount objects are immutable.
+ *
+ * @see java.lang.Number
+ * @see android.icu.util.Currency
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class CurrencyAmount extends android.icu.util.Measure {
+
+/**
+ * Constructs a new object given a number and a currency.
+ * @param number the number
+ * @param currency the currency
+ */
+
+public CurrencyAmount(java.lang.Number number, android.icu.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new object given a double value and a currency.
+ * @param number a double value
+ * @param currency the currency
+ */
+
+public CurrencyAmount(double number, android.icu.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new object given a number and a Java currency.
+ * @param number the number
+ * @param currency the currency
+ */
+
+public CurrencyAmount(java.lang.Number number, java.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new object given a double value and a Java currency.
+ * @param number a double value
+ * @param currency the currency
+ */
+
+public CurrencyAmount(double number, java.util.Currency currency) { super(null, null); throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the currency of this object.
+ * @return this object's Currency
+ */
+
+public android.icu.util.Currency getCurrency() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/DateInterval.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/DateInterval.java
new file mode 100644
index 0000000..ad413b2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/DateInterval.java
@@ -0,0 +1,63 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ *   Copyright (C) 2008-2009, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * This class represents date interval.
+ * It is a pair of long representing from date 1 to date 2.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class DateInterval implements java.io.Serializable {
+
+/** 
+ * Constructor given from date and to date.
+ * @param from      The from date in date interval.
+ * @param to        The to date in date interval.
+ */
+
+public DateInterval(long from, long to) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Get the from date.
+ * @return  the from date in dateInterval.
+ */
+
+public long getFromDate() { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Get the to date.
+ * @return  the to date in dateInterval.
+ */
+
+public long getToDate() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override equals
+ */
+
+public boolean equals(java.lang.Object a) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashcode
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override toString
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/EthiopicCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/EthiopicCalendar.java
new file mode 100644
index 0000000..c2ac482
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/EthiopicCalendar.java
@@ -0,0 +1,251 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2005-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * Implement the Ethiopic calendar system.
+ * <p>
+ * EthiopicCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=ethiopic"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class EthiopicCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>EthiopicCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public EthiopicCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone The time zone for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public EthiopicCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale The icu locale for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param aLocale The locale for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @param locale The icu locale for the new calendar.
+ */
+
+public EthiopicCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Meskerem.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public EthiopicCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public EthiopicCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>EthiopicCalendar</code> with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Meskerem.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public EthiopicCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Set Alem or Mihret era.
+ *
+ * @param onOff Set Amete Alem era if true, otherwise set Amete Mihret era.
+ */
+
+public void setAmeteAlemEra(boolean onOff) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return true if this calendar is set to the Amete Alem era.
+ *
+ * @return true if set to the Amete Alem era.
+ */
+
+public boolean isAmeteAlemEra() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * @deprecated This API is ICU internal only.
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/extended year
+ */
+
+protected int handleComputeMonthStart(int eyear, int emonth, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constant for ????, the 9th month of the Ethiopic year.
+ */
+
+public static final int GENBOT = 8; // 0x8
+
+/** 
+ * Constant for ???, the 11th month of the Ethiopic year.
+ */
+
+public static final int HAMLE = 10; // 0xa
+
+/** 
+ * Constant for ???, the 3rd month of the Ethiopic year.
+ */
+
+public static final int HEDAR = 2; // 0x2
+
+/** 
+ * Constant for ????, the 7th month of the Ethiopic year.
+ */
+
+public static final int MEGABIT = 6; // 0x6
+
+/** 
+ * Constant for ?????, the 1st month of the Ethiopic year.
+ */
+
+public static final int MESKEREM = 0; // 0x0
+
+/** 
+ * Constant for ????, the 8th month of the Ethiopic year.
+ */
+
+public static final int MIAZIA = 7; // 0x7
+
+/** 
+ * Constant for ???, the 12th month of the Ethiopic year.
+ */
+
+public static final int NEHASSE = 11; // 0xb
+
+/** 
+ * Constant for ????, the 13th month of the Ethiopic year.
+ */
+
+public static final int PAGUMEN = 12; // 0xc
+
+/** 
+ * Constant for ??, the 10th month of the Ethiopic year.
+ */
+
+public static final int SENE = 9; // 0x9
+
+/** 
+ * Constant for ????, the 4th month of the Ethiopic year.
+ */
+
+public static final int TAHSAS = 3; // 0x3
+
+/** 
+ * Constant for ????, the 2nd month of the Ethiopic year.
+ */
+
+public static final int TEKEMT = 1; // 0x1
+
+/** 
+ * Constant for ??, the 5th month of the Ethiopic year.
+ */
+
+public static final int TER = 4; // 0x4
+
+/** 
+ * Constant for ????, the 6th month of the Ethiopic year.
+ */
+
+public static final int YEKATIT = 5; // 0x5
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Freezable.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Freezable.java
new file mode 100644
index 0000000..d330654
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Freezable.java
@@ -0,0 +1,329 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ ******************************************************************************
+ * Copyright (C) 2005-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                               *
+ ******************************************************************************
+*/
+
+package android.icu.util;
+
+
+/**
+ * Provides a flexible mechanism for controlling access, without requiring that
+ * a class be immutable. Once frozen, an object can never be unfrozen, so it is
+ * thread-safe from that point onward. Once the object has been frozen,
+ * it must guarantee that no changes can be made to it. Any attempt to alter
+ * it must raise an UnsupportedOperationException exception. This means that when
+ * the object returns internal objects, or if anyone has references to those internal
+ * objects, that those internal objects must either be immutable, or must also
+ * raise exceptions if any attempt to modify them is made. Of course, the object
+ * can return clones of internal objects, since those are safe.
+ * <h2>Background</h2>
+ * <p>
+ * There are often times when you need objects to be objects 'safe', so that
+ * they can't be modified. Examples are when objects need to be thread-safe, or
+ * in writing robust code, or in caches. If you are only creating your own
+ * objects, you can guarantee this, of course -- but only if you don't make a
+ * mistake. If you have objects handed into you, or are creating objects using
+ * others handed into you, it is a different story. It all comes down to whether
+ * you want to take the Blanche Dubois approach (&quot;depend on the kindness of
+ * strangers&quot;) or the Andy Grove approach (&quot;Only the Paranoid
+ * Survive&quot;).
+ * </p>
+ * <p>
+ * For example, suppose we have a simple class:
+ * </p>
+ *
+ * <pre>
+ * public class A {
+ *      protected Collection b;
+ *
+ *      protected Collection c;
+ *
+ *      public Collection get_b() {
+ *              return b;
+ *      }
+ *
+ *      public Collection get_c() {
+ *              return c;
+ *      }
+ *
+ *      public A(Collection new_b, Collection new_c) {
+ *              b = new_b;
+ *              c = new_c;
+ *      }
+ * }
+ * </pre>
+ *
+ * <p>
+ * Since the class doesn't have any setters, someone might think that it is
+ * immutable. You know where this is leading, of course; this class is unsafe in
+ * a number of ways. The following illustrates that.
+ * </p>
+ *
+ * <pre>
+ *  public test1(SupposedlyImmutableClass x, SafeStorage y) {
+ *    // unsafe getter
+ *    A a = x.getA();
+ *    Collection col = a.get_b();
+ *    col.add(something); // a has now been changed, and x too
+ *
+ *    // unsafe constructor
+ *    a = new A(col, col);
+ *    y.store(a);
+ *    col.add(something); // a has now been changed, and y too
+ *  }
+ * </pre>
+ *
+ * <p>
+ * There are a few different techniques for having safe classes.
+ * </p>
+ * <ol>
+ * <li>Const objects. In C++, you can declare parameters const.</li>
+ * <li>Immutable wrappers. For example, you can put a collection in an
+ * immutable wrapper.</li>
+ * <li>Always-Immutable objects. Java uses this approach, with a few
+ * variations. Examples:
+ * <ol>
+ * <li>Simple. Once a Color is created (eg from R, G, and B integers) it is
+ * immutable.</li>
+ * <li>Builder Class. There is a separate 'builder' class. For example,
+ * modifiable Strings are created using StringBuffer (which doesn't have the
+ * full String API available). Once you want an immutable form, you create one
+ * with toString().</li>
+ * <li>Primitives. These are always safe, since they are copied on input/output
+ * from methods.</li>
+ * </ol>
+ * </li>
+ * <li>Cloning. Where you need an object to be safe, you clone it.</li>
+ * </ol>
+ * <p>
+ * There are advantages and disadvantages of each of these.
+ * </p>
+ * <ol>
+ * <li>Const provides a certain level of protection, but since const can be and
+ * is often cast away, it only protects against most inadvertent mistakes. It
+ * also offers no threading protection, since anyone who has a pointer to the
+ * (unconst) object in another thread can mess you up.</li>
+ * <li>Immutable wrappers are safer than const in that the constness can't be
+ * cast away. But other than that they have all the same problems: not safe if
+ * someone else keeps hold of the original object, or if any of the objects
+ * returned by the class are mutable.</li>
+ * <li>Always-Immutable Objects are safe, but usage can require excessive
+ * object creation.</li>
+ * <li>Cloning is only safe if the object truly has a 'safe' clone; defined as
+ * one that <i>ensures that no change to the clone affects the original</i>.
+ * Unfortunately, many objects don't have a 'safe' clone, and always cloning can
+ * require excessive object creation.</li>
+ * </ol>
+ * <h2>Freezable Model</h2>
+ * <p>
+ * The <code>Freezable</code> model supplements these choices by giving you
+ * the ability to build up an object by calling various methods, then when it is
+ * in a final state, you can <i>make</i> it immutable. Once immutable, an
+ * object cannot <i>ever </i>be modified, and is completely thread-safe: that
+ * is, multiple threads can have references to it without any synchronization.
+ * If someone needs a mutable version of an object, they can use
+ * <code>cloneAsThawed()</code>, and modify the copy. This provides a simple,
+ * effective mechanism for safe classes in circumstances where the alternatives
+ * are insufficient or clumsy. (If an object is shared before it is immutable,
+ * then it is the responsibility of each thread to mutex its usage (as with
+ * other objects).)
+ * </p>
+ * <p>
+ * Here is what needs to be done to implement this interface, depending on the
+ * type of the object.
+ * </p>
+ * <h3><b>Immutable Objects</b></h3>
+ * <p>
+ * These are the easiest. You just use the interface to reflect that, by adding
+ * the following:
+ * </p>
+ *
+ * <pre>
+ *  public class A implements Freezable&lt;A&gt; {
+ *   ...
+ *   public final boolean isFrozen() {return true;}
+ *   public final A freeze() {return this;}
+ *   public final A cloneAsThawed() { return this; }
+ *   }
+ * </pre>
+ *
+ * <p>
+ * These can be final methods because subclasses of immutable objects must
+ * themselves be immutable. (Note: <code>freeze</code> is returning
+ * <code>this</code> for chaining.)
+ * </p>
+ * <h3><b>Mutable Objects</b></h3>
+ * <p>
+ * Add a protected 'flagging' field:
+ * </p>
+ *
+ * <pre>
+ * protected volatile boolean frozen; // WARNING: must be volatile
+ * </pre>
+ *
+ * <p>
+ * Add the following methods:
+ * </p>
+ *
+ * <pre>
+ * public final boolean isFrozen() {
+ *      return frozen;
+ * };
+ *
+ * public A freeze() {
+ *      frozen = true;  // WARNING: must be final statement before return
+ *      return this;
+ * }
+ * </pre>
+ *
+ * <p>
+ * Add a <code>cloneAsThawed()</code> method following the normal pattern for
+ * <code>clone()</code>, except that <code>frozen=false</code> in the new
+ * clone.
+ * </p>
+ * <p>
+ * Then take the setters (that is, any method that can change the internal state
+ * of the object), and add the following as the first statement:
+ * </p>
+ *
+ * <pre>
+ * if (isFrozen()) {
+ *      throw new UnsupportedOperationException(&quot;Attempt to modify frozen object&quot;);
+ * }
+ * </pre>
+ *
+ * <h4><b>Subclassing</b></h4>
+ * <p>
+ * Any subclass of a <code>Freezable</code> will just use its superclass's
+ * flagging field. It must override <code>freeze()</code> and
+ * <code>cloneAsThawed()</code> to call the superclass, but normally does not
+ * override <code>isFrozen()</code>. It must then just pay attention to its
+ * own getters, setters and fields.
+ * </p>
+ * <h4><b>Internal Caches</b></h4>
+ * <p>
+ * Internal caches are cases where the object is logically unmodified, but
+ * internal state of the object changes. For example, there are const C++
+ * functions that cast away the const on the &quot;this&quot; pointer in order
+ * to modify an object cache. These cases are handled by mutexing the internal
+ * cache to ensure thread-safety. For example, suppose that UnicodeSet had an
+ * internal marker to the last code point accessed. In this case, the field is
+ * not externally visible, so the only thing you need to do is to synchronize
+ * the field for thread safety.
+ * </p>
+ * <h4>Unsafe Internal Access</h4>
+ * <p>
+ * Internal fields are called <i>safe</i> if they are either
+ * <code>frozen</code> or immutable (such as String or primitives). If you've
+ * never allowed internal access to these, then you are all done. For example,
+ * converting UnicodeSet to be <code>Freezable</code> is just accomplished
+ * with the above steps. But remember that you <i><b>have</b></i> allowed
+ * access to unsafe internals if you have any code like the following, in a
+ * getter, setter, or constructor:
+ * </p>
+ *
+ * <pre>
+ * Collection getStuff() {
+ *      return stuff;
+ * } // caller could keep reference &amp; modify
+ *
+ * void setStuff(Collection x) {
+ *      stuff = x;
+ * } // caller could keep reference &amp; modify
+ *
+ * MyClass(Collection x) {
+ *      stuff = x;
+ * } // caller could keep reference &amp; modify
+ * </pre>
+ *
+ * <p>
+ * These also illustrated in the code sample in <b>Background</b> above.
+ * </p>
+ * <p>
+ * To deal with unsafe internals, the simplest course of action is to do the
+ * work in the <code>freeze()</code> function. Just make all of your internal
+ * fields frozen, and set the frozen flag. Any subsequent getter/setter will
+ * work properly. Here is an example:
+ * </p>
+ * <p><b>Warning!</b> The 'frozen' boolean MUST be volatile, and must be set as the last statement
+ * in the method.</p>
+ * <pre>
+ * public A freeze() {
+ *      if (!frozen) {
+ *              foo.freeze();
+ *              frozen = true;
+ *      }
+ *      return this;
+ * }
+ * </pre>
+ *
+ * <p>
+ * If the field is a <code>Collection</code> or <code>Map</code>, then to
+ * make it frozen you have two choices. If you have never allowed access to the
+ * collection from outside your object, then just wrap it to prevent future
+ * modification.
+ * </p>
+ *
+ * <pre>
+ * zone_to_country = Collections.unmodifiableMap(zone_to_country);
+ * </pre>
+ *
+ * <p>
+ * If you have <i>ever</i> allowed access, then do a <code>clone()</code>
+ * before wrapping it.
+ * </p>
+ *
+ * <pre>
+ * zone_to_country = Collections.unmodifiableMap(zone_to_country.clone());
+ * </pre>
+ *
+ * <p>
+ * If a collection <i>(or any other container of objects)</i> itself can
+ * contain mutable objects, then for a safe clone you need to recurse through it
+ * to make the entire collection immutable. The recursing code should pick the
+ * most specific collection available, to avoid the necessity of later
+ * downcasing.
+ * </p>
+ * <blockquote>
+ * <p>
+ * <b>Note: </b>An annoying flaw in Java is that the generic collections, like
+ * <code>Map</code> or <code>Set</code>, don't have a <code>clone()</code>
+ * operation. When you don't know the type of the collection, the simplest
+ * course is to just create a new collection:
+ * </p>
+ *
+ * <pre>
+ * zone_to_country = Collections.unmodifiableMap(new HashMap(zone_to_country));
+ * </pre>
+ *
+ * </blockquote>
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface Freezable<T> extends java.lang.Cloneable {
+
+/**
+ * Determines whether the object has been frozen or not.
+ */
+
+public boolean isFrozen();
+
+/**
+ * Freezes the object.
+ * @return the object itself.
+ */
+
+public T freeze();
+
+/**
+ * Provides for the clone operation. Any clone is initially unfrozen.
+ */
+
+public T cloneAsThawed();
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/GregorianCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/GregorianCalendar.java
new file mode 100644
index 0000000..e2c895c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/GregorianCalendar.java
@@ -0,0 +1,426 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ * Copyright (C) 1996-2016, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.util;
+
+import java.util.Date;
+import android.icu.util.ULocale.Category;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.GregorianCalendar}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>GregorianCalendar</code> is a concrete subclass of
+ * {@link android.icu.util.Calendar Calendar}
+ * and provides the standard calendar used by most of the world.
+ *
+ * <p>The standard (Gregorian) calendar has 2 eras, BC and AD.
+ *
+ * <p>This implementation handles a single discontinuity, which corresponds by
+ * default to the date the Gregorian calendar was instituted (October 15, 1582
+ * in some countries, later in others).  The cutover date may be changed by the
+ * caller by calling <code>setGregorianChange()</code>.
+ *
+ * <p>Historically, in those countries which adopted the Gregorian calendar first,
+ * October 4, 1582 was thus followed by October 15, 1582. This calendar models
+ * this correctly.  Before the Gregorian cutover, <code>GregorianCalendar</code>
+ * implements the Julian calendar.  The only difference between the Gregorian
+ * and the Julian calendar is the leap year rule. The Julian calendar specifies
+ * leap years every four years, whereas the Gregorian calendar omits century
+ * years which are not divisible by 400.
+ *
+ * <p><code>GregorianCalendar</code> implements <em>proleptic</em> Gregorian and
+ * Julian calendars. That is, dates are computed by extrapolating the current
+ * rules indefinitely far backward and forward in time. As a result,
+ * <code>GregorianCalendar</code> may be used for all years to generate
+ * meaningful and consistent results. However, dates obtained using
+ * <code>GregorianCalendar</code> are historically accurate only from March 1, 4
+ * AD onward, when modern Julian calendar rules were adopted.  Before this date,
+ * leap year rules were applied irregularly, and before 45 BC the Julian
+ * calendar did not even exist.
+ *
+ * <p>Prior to the institution of the Gregorian calendar, New Year's Day was
+ * March 25. To avoid confusion, this calendar always uses January 1. A manual
+ * adjustment may be made if desired for dates that are prior to the Gregorian
+ * changeover and which fall between January 1 and March 24.
+ *
+ * <p>Values calculated for the <code>WEEK_OF_YEAR</code> field range from 1 to
+ * 53.  Week 1 for a year is the earliest seven day period starting on
+ * <code>getFirstDayOfWeek()</code> that contains at least
+ * <code>getMinimalDaysInFirstWeek()</code> days from that year.  It thus
+ * depends on the values of <code>getMinimalDaysInFirstWeek()</code>,
+ * <code>getFirstDayOfWeek()</code>, and the day of the week of January 1.
+ * Weeks between week 1 of one year and week 1 of the following year are
+ * numbered sequentially from 2 to 52 or 53 (as needed).
+ 
+ * <p>For example, January 1, 1998 was a Thursday.  If
+ * <code>getFirstDayOfWeek()</code> is <code>MONDAY</code> and
+ * <code>getMinimalDaysInFirstWeek()</code> is 4 (these are the values
+ * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts
+ * on December 29, 1997, and ends on January 4, 1998.  If, however,
+ * <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>, then week 1 of 1998
+ * starts on January 4, 1998, and ends on January 10, 1998; the first three days
+ * of 1998 then are part of week 53 of 1997.
+ *
+ * <p>Values calculated for the <code>WEEK_OF_MONTH</code> field range from 0 or
+ * 1 to 4 or 5.  Week 1 of a month (the days with <code>WEEK_OF_MONTH =
+ * 1</code>) is the earliest set of at least
+ * <code>getMinimalDaysInFirstWeek()</code> contiguous days in that month,
+ * ending on the day before <code>getFirstDayOfWeek()</code>.  Unlike
+ * week 1 of a year, week 1 of a month may be shorter than 7 days, need
+ * not start on <code>getFirstDayOfWeek()</code>, and will not include days of
+ * the previous month.  Days of a month before week 1 have a
+ * <code>WEEK_OF_MONTH</code> of 0.
+ *
+ * <p>For example, if <code>getFirstDayOfWeek()</code> is <code>SUNDAY</code>
+ * and <code>getMinimalDaysInFirstWeek()</code> is 4, then the first week of
+ * January 1998 is Sunday, January 4 through Saturday, January 10.  These days
+ * have a <code>WEEK_OF_MONTH</code> of 1.  Thursday, January 1 through
+ * Saturday, January 3 have a <code>WEEK_OF_MONTH</code> of 0.  If
+ * <code>getMinimalDaysInFirstWeek()</code> is changed to 3, then January 1
+ * through January 3 have a <code>WEEK_OF_MONTH</code> of 1.
+ *
+ * <p>
+ * <strong>Example:</strong>
+ * <blockquote>
+ * <pre>
+ * // get the supported ids for GMT-08:00 (Pacific Standard Time)
+ * String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
+ * // if no ids were returned, something is wrong. get out.
+ * if (ids.length == 0)
+ *     System.exit(0);
+ *
+ *  // begin output
+ * System.out.println("Current Time");
+ *
+ * // create a Pacific Standard Time time zone
+ * SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
+ *
+ * // set up rules for daylight savings time
+ * pdt.setStartRule(Calendar.MARCH, 2, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+ * pdt.setEndRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
+ *
+ * // create a GregorianCalendar with the Pacific Daylight time zone
+ * // and the current date and time
+ * Calendar calendar = new GregorianCalendar(pdt);
+ * Date trialTime = new Date();
+ * calendar.setTime(trialTime);
+ *
+ * // print out a bunch of interesting things
+ * System.out.println("ERA: " + calendar.get(Calendar.ERA));
+ * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
+ * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
+ * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
+ * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
+ * System.out.println("DATE: " + calendar.get(Calendar.DATE));
+ * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
+ * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
+ * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
+ * System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
+ * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
+ * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
+ * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
+ * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
+ * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
+ * System.out.println("ZONE_OFFSET: "
+ *                    + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
+ * System.out.println("DST_OFFSET: "
+ *                    + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));
+ 
+ * System.out.println("Current Time, with hour reset to 3");
+ * calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
+ * calendar.set(Calendar.HOUR, 3);
+ * System.out.println("ERA: " + calendar.get(Calendar.ERA));
+ * System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
+ * System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
+ * System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
+ * System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
+ * System.out.println("DATE: " + calendar.get(Calendar.DATE));
+ * System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
+ * System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
+ * System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
+ * System.out.println("DAY_OF_WEEK_IN_MONTH: "
+ *                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
+ * System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
+ * System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
+ * System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
+ * System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
+ * System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
+ * System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
+ * System.out.println("ZONE_OFFSET: "
+ *        + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
+ * System.out.println("DST_OFFSET: "
+ *        + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours</pre>
+ * </blockquote>
+ * <p>
+ * GregorianCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=gregorian"</code>.</p>
+ 
+ * @see          android.icu.util.Calendar
+ * @see          android.icu.util.TimeZone
+ * @author Deborah Goldsmith, Mark Davis, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class GregorianCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default GregorianCalendar using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ * @param zone the given time zone.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar based on the current time
+ * in the default time zone with the given locale.
+ * @param aLocale the given locale.
+ */
+
+public GregorianCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constructs a GregorianCalendar based on the current time
+ * in the default time zone with the given locale.
+ * @param locale the given ulocale.
+ */
+
+public GregorianCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Constructs a GregorianCalendar based on the current time
+ * in the given time zone with the given locale.
+ * @param zone the given time zone.
+ * @param aLocale the given locale.
+ */
+
+public GregorianCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar based on the current time
+ * in the given time zone with the given locale.
+ * @param zone the given time zone.
+ * @param locale the given ulocale.
+ */
+
+public GregorianCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @param year the value used to set the YEAR time field in the calendar.
+ * @param month the value used to set the MONTH time field in the calendar.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ * @param year the value used to set the YEAR time field in the calendar.
+ * @param month the value used to set the MONTH time field in the calendar.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field in the calendar.
+ * @param hour the value used to set the HOUR_OF_DAY time field
+ * in the calendar.
+ * @param minute the value used to set the MINUTE time field
+ * in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(int year, int month, int date, int hour, int minute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a GregorianCalendar with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ * @param year the value used to set the YEAR time field in the calendar.
+ * @param month the value used to set the MONTH time field in the calendar.
+ * Month value is 0-based. e.g., 0 for January.
+ * @param date the value used to set the DATE time field in the calendar.
+ * @param hour the value used to set the HOUR_OF_DAY time field
+ * in the calendar.
+ * @param minute the value used to set the MINUTE time field
+ * in the calendar.
+ * @param second the value used to set the SECOND time field
+ * in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public GregorianCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the GregorianCalendar change date. This is the point when the switch
+ * from Julian dates to Gregorian dates occurred. Default is October 15,
+ * 1582. Previous to this, dates will be in the Julian calendar.
+ * <p>
+ * To obtain a pure Julian calendar, set the change date to
+ * <code>Date(Long.MAX_VALUE)</code>.  To obtain a pure Gregorian calendar,
+ * set the change date to <code>Date(Long.MIN_VALUE)</code>.
+ *
+ * @param date the given Gregorian cutover date.
+ */
+
+public void setGregorianChange(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the Gregorian Calendar change date.  This is the point when the
+ * switch from Julian dates to Gregorian dates occurred. Default is
+ * October 15, 1582. Previous to this, dates will be in the Julian
+ * calendar.
+ * @return the Gregorian cutover date for this calendar.
+ */
+
+public final java.util.Date getGregorianChange() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Determines if the given year is a leap year. Returns true if the
+ * given year is a leap year.
+ * @param year the given year.
+ * @return true if the given year is a leap year; false otherwise.
+ */
+
+public boolean isLeapYear(int year) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the given Calendar object is equivalent to this
+ * one.  Calendar override.
+ *
+ * @param other the Calendar to be compared with this Calendar
+ */
+
+public boolean isEquivalentTo(android.icu.util.Calendar other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override hashCode.
+ * Generates the hash code for the GregorianCalendar object
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Roll a field by a signed amount.
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the minimum value that this field could have, given the current date.
+ * For the Gregorian calendar, this is the same as getMinimum() and getGreatestMinimum().
+ */
+
+public int getActualMinimum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the maximum value that this field could have, given the current date.
+ * For example, with the date "Feb 3, 1997" and the DAY_OF_MONTH field, the actual
+ * maximum would be 28; for "Feb 3, 1996" it s 29.  Similarly for a Hebrew calendar,
+ * for some years the actual maximum for MONTH is 12, and for others 13.
+ */
+
+public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetYearLength(int eyear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to compute several fields specific to the hybrid
+ * Gregorian-Julian calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleComputeJulianDay(int bestField) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/year
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Value of the <code>ERA</code> field indicating
+ * the common era (Anno Domini), also known as CE.
+ * The sequence of years at the transition from <code>BC</code> to <code>AD</code> is
+ * ..., 2 BC, 1 BC, 1 AD, 2 AD,...
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int AD = 1; // 0x1
+
+/**
+ * Value of the <code>ERA</code> field indicating
+ * the period before the common era (before Christ), also known as BCE.
+ * The sequence of years at the transition from <code>BC</code> to <code>AD</code> is
+ * ..., 2 BC, 1 BC, 1 AD, 2 AD,...
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int BC = 0; // 0x0
+
+/**
+ * Used by handleComputeJulianDay() and handleComputeMonthStart().
+ */
+
+protected transient boolean invertGregorian;
+
+/**
+ * Used by handleComputeJulianDay() and handleComputeMonthStart().
+ */
+
+protected transient boolean isGregorian;
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/HebrewCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/HebrewCalendar.java
new file mode 100644
index 0000000..826bf03
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/HebrewCalendar.java
@@ -0,0 +1,395 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>HebrewCalendar</code> is a subclass of <code>Calendar</code>
+ * that that implements the traditional Hebrew calendar.
+ * This is the civil calendar in Israel and the liturgical calendar
+ * of the Jewish faith worldwide.
+ * <p>
+ * The Hebrew calendar is lunisolar and thus has a number of interesting
+ * properties that distinguish it from the Gregorian.  Months start
+ * on the day of (an arithmetic approximation of) each new moon.  Since the
+ * solar year (approximately 365.24 days) is not an even multiple of
+ * the lunar month (approximately 29.53 days) an extra "leap month" is
+ * inserted in 7 out of every 19 years.  To make matters even more
+ * interesting, the start of a year can be delayed by up to three days
+ * in order to prevent certain holidays from falling on the Sabbath and
+ * to prevent certain illegal year lengths.  Finally, the lengths of certain
+ * months can vary depending on the number of days in the year.
+ * <p>
+ * The leap month is known as "Adar 1" and is inserted between the
+ * months of Shevat and Adar in leap years.  Since the leap month does
+ * not come at the end of the year, calculations involving
+ * month numbers are particularly complex.  Users of this class should
+ * make sure to use the {@link #roll roll} and {@link #add add} methods
+ * rather than attempting to perform date arithmetic by manipulating
+ * the fields directly.
+ * <p>
+ * <b>Note:</b> In the traditional Hebrew calendar, days start at sunset.
+ * However, in order to keep the time fields in this class
+ * synchronized with those of the other calendars and with local clock time,
+ * we treat days and months as beginning at midnight,
+ * roughly 6 hours after the corresponding sunset.
+ * <p>
+ * If you are interested in more information on the rules behind the Hebrew
+ * calendar, see one of the following references:
+ * <ul>
+ * <li>"<a href="http://www.amazon.com/exec/obidos/ASIN/0521564743">Calendrical Calculations</a>",
+ *      by Nachum Dershowitz &amp; Edward Reingold, Cambridge University Press, 1997, pages 85-91.
+ *
+ * <li>Hebrew Calendar Science and Myths,
+ *      <a href="http://web.archive.org/web/20090423084613/http://www.geocities.com/Athens/1584/">
+ *      http://web.archive.org/web/20090423084613/http://www.geocities.com/Athens/1584/</a>
+ *
+ * <li>The Calendar FAQ,
+ *      <a href="http://www.faqs.org/faqs/calendars/faq/">
+ *      http://www.faqs.org/faqs/calendars/faq/</a>
+ * </ul>
+ *
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * HebrewCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=hebrew"</code>.</p>
+ *
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.Calendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class HebrewCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>HebrewCalendar</code> using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param zone The time zone for the new calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public HebrewCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale The locale for the new calendar.
+ */
+
+public HebrewCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ *
+ * @param aLocale The locale for the new calendar.
+ */
+
+public HebrewCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone The time zone for the new calendar.
+ *
+ * @param locale The locale for the new calendar.
+ */
+
+public HebrewCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tishri.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>HebrewCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for Tishri.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public HebrewCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Add a signed amount to a specified field, using this calendar's rules.
+ * For example, to add three days to the current date, you can call
+ * <code>add(Calendar.DATE, 3)</code>.
+ * <p>
+ * When adding to certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when adding one to the {@link #MONTH MONTH} field
+ * for the date "30 Av 5758", the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is "29 Elul 5758" rather than the invalid
+ * "30 Elul 5758".
+ * <p>
+ * This method is able to add to
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.
+ * <p>
+ * <b>Note:</b> You should always use {@link #roll roll} and add rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>HebrewCalendar</tt>.  Since the {@link #MONTH MONTH} field behaves
+ * discontinuously in non-leap years, simple arithmetic can give invalid results.
+ * <p>
+ * @param field     the time field.
+ * @param amount    the amount to add to the field.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ */
+
+public void add(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Rolls (up/down) a specified amount time on the given field.  For
+ * example, to roll the current date up by three days, you can call
+ * <code>roll(Calendar.DATE, 3)</code>.  If the
+ * field is rolled past its maximum allowable value, it will "wrap" back
+ * to its minimum and continue rolling.
+ * For example, calling <code>roll(Calendar.DATE, 10)</code>
+ * on a Hebrew calendar set to "25 Av 5758" will result in the date "5 Av 5758".
+ * <p>
+ * When rolling certain fields, the values of other fields may conflict and
+ * need to be changed.  For example, when rolling the {@link #MONTH MONTH} field
+ * upward by one for the date "30 Av 5758", the {@link #DAY_OF_MONTH DAY_OF_MONTH} field
+ * must be adjusted so that the result is "29 Elul 5758" rather than the invalid
+ * "30 Elul".
+ * <p>
+ * This method is able to roll
+ * all fields except for {@link #ERA ERA}, {@link #DST_OFFSET DST_OFFSET},
+ * and {@link #ZONE_OFFSET ZONE_OFFSET}.  Subclasses may, of course, add support for
+ * additional fields in their overrides of <code>roll</code>.
+ * <p>
+ * <b>Note:</b> You should always use roll and {@link #add add} rather
+ * than attempting to perform arithmetic operations directly on the fields
+ * of a <tt>HebrewCalendar</tt>.  Since the {@link #MONTH MONTH} field behaves
+ * discontinuously in non-leap years, simple arithmetic can give invalid results.
+ * <p>
+ * @param field     the time field.
+ * @param amount    the amount by which the field should be rolled.
+ *
+ * @exception   java.lang.IllegalArgumentException if the field is invalid or refers
+ *              to a field that cannot be handled by this method.
+ */
+
+public void roll(int field, int amount) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the length of the given month in the given year
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the number of days in the given Hebrew year
+ */
+
+protected int handleGetYearLength(int eyear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ * <p>
+ * Overrides {@link android.icu.util.Calendar#validateField(int) Calendar#validateField(int)} to provide
+ * special handling for month validation for Hebrew calendar.
+ * @deprecated This API is ICU internal only.
+ * @hide original deprecated declaration
+ * @hide draft / provisional / internal are hidden on Android
+ */
+
+@Deprecated
+protected void validateField(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Subclasses may override this method to compute several fields
+ * specific to each calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields,
+ * which will be set when this method is called.  Subclasses can
+ * also call the getGregorianXxx() methods to obtain Gregorian
+ * calendar equivalents for the given Julian day.
+ *
+ * <p>In addition, subclasses should compute any subclass-specific
+ * fields, that is, fields from BASE_FIELD_COUNT to
+ * getFieldCount() - 1.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return JD of start of given month/year.
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the Adar, the 7th month of the Hebrew year.
+ */
+
+public static final int ADAR = 6; // 0x6
+
+/**
+ * Constant for Adar I, the 6th month of the Hebrew year
+ * (present in leap years only). In non-leap years, the calendar
+ * jumps from Shevat (5th month) to Adar (7th month).
+ */
+
+public static final int ADAR_1 = 5; // 0x5
+
+/**
+ * Constant for Av, the 12th month of the Hebrew year.
+ */
+
+public static final int AV = 11; // 0xb
+
+/**
+ * Constant for Elul, the 13th month of the Hebrew year.
+ */
+
+public static final int ELUL = 12; // 0xc
+
+/**
+ * Constant for Heshvan, the 2nd month of the Hebrew year.
+ */
+
+public static final int HESHVAN = 1; // 0x1
+
+/**
+ * Constant for Iyar, the 9th month of the Hebrew year.
+ */
+
+public static final int IYAR = 8; // 0x8
+
+/**
+ * Constant for Kislev, the 3rd month of the Hebrew year.
+ */
+
+public static final int KISLEV = 2; // 0x2
+
+/**
+ * Constant for Nisan, the 8th month of the Hebrew year.
+ */
+
+public static final int NISAN = 7; // 0x7
+
+/**
+ * Constant for Shevat, the 5th month of the Hebrew year.
+ */
+
+public static final int SHEVAT = 4; // 0x4
+
+/**
+ * Constant for Sivan, the 10th month of the Hebrew year.
+ */
+
+public static final int SIVAN = 9; // 0x9
+
+/**
+ * Constant for Tammuz, the 11th month of the Hebrew year.
+ */
+
+public static final int TAMUZ = 10; // 0xa
+
+/**
+ * Constant for Tevet, the 4th month of the Hebrew year.
+ */
+
+public static final int TEVET = 3; // 0x3
+
+/**
+ * Constant for Tishri, the 1st month of the Hebrew year.
+ */
+
+public static final int TISHRI = 0; // 0x0
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ICUUncheckedIOException.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ICUUncheckedIOException.java
new file mode 100644
index 0000000..5fed3fb
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ICUUncheckedIOException.java
@@ -0,0 +1,58 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2014-2015, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Unchecked version of {@link java.io.IOException}.
+ * Some ICU APIs do not throw the standard exception but instead wrap it
+ * into this unchecked version.
+ *
+ * <p>This currently extends {@link java.lang.RuntimeException RuntimeException},
+ * but when ICU can rely on Java 8 this class should be changed to extend
+ * java.io.UncheckedIOException instead.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class ICUUncheckedIOException extends java.lang.RuntimeException {
+
+/**
+ * Default constructor.
+ */
+
+public ICUUncheckedIOException() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructor.
+ *
+ * @param message exception message string
+ */
+
+public ICUUncheckedIOException(java.lang.String message) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructor.
+ *
+ * @param cause original exception (normally a {@link java.io.IOException})
+ */
+
+public ICUUncheckedIOException(java.lang.Throwable cause) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructor.
+ *
+ * @param message exception message string
+ * @param cause original exception (normally a {@link java.io.IOException})
+ */
+
+public ICUUncheckedIOException(java.lang.String message, java.lang.Throwable cause) { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IllformedLocaleException.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IllformedLocaleException.java
new file mode 100644
index 0000000..3b3797b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IllformedLocaleException.java
@@ -0,0 +1,62 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2009-2012, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Thrown by methods in {@link android.icu.util.ULocale ULocale} and {@link android.icu.util.ULocale.Builder ULocale.Builder} to
+ * indicate that an argument is not a well-formed BCP 47 tag.
+ *
+ * @see android.icu.util.ULocale
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IllformedLocaleException extends java.lang.RuntimeException {
+
+/**
+ * Constructs a new <code>IllformedLocaleException</code> with no
+ * detail message and -1 as the error index.
+ */
+
+public IllformedLocaleException() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>IllformedLocaleException</code> with the
+ * given message and -1 as the error index.
+ *
+ * @param message the message
+ */
+
+public IllformedLocaleException(java.lang.String message) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a new <code>IllformedLocaleException</code> with the
+ * given message and the error index.  The error index is the approximate
+ * offset from the start of the ill-formed value to the point where the
+ * parse first detected an error.  A negative error index value indicates
+ * either the error index is not applicable or unknown.
+ *
+ * @param message the message
+ * @param errorIndex the index
+ */
+
+public IllformedLocaleException(java.lang.String message, int errorIndex) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the index where the error was found. A negative value indicates
+ * either the error index is not applicable or unknown.
+ *
+ * @return the error index
+ */
+
+public int getErrorIndex() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IndianCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IndianCalendar.java
new file mode 100644
index 0000000..04f3de7
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IndianCalendar.java
@@ -0,0 +1,297 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2011, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>IndianCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since the birth of the Buddha.  This is the civil calendar
+ * which is accepted by government of India as Indian National Calendar.
+ * The two calendars most widely used in India today are the Vikrama calendar
+ * followed in North India and the Shalivahana or Saka calendar which is followed
+ * in South India and Maharashtra.
+ 
+ * A variant of the Shalivahana Calendar was reformed and standardized as the
+ * Indian National calendar in 1957.
+ * <p>
+ * Some details of Indian National Calendar (to be implemented) :
+ * The Months
+ * Month          Length      Start date (Gregorian)
+ * =================================================
+ * 1 Chaitra      30/31          March 22*
+ * 2 Vaisakha     31             April 21
+ * 3 Jyaistha     31             May 22
+ * 4 Asadha       31             June 22
+ * 5 Sravana      31             July 23
+ * 6 Bhadra       31             August 23
+ * 7 Asvina       30             September 23
+ * 8 Kartika      30             October 23
+ * 9 Agrahayana   30             November 22
+ * 10 Pausa       30             December 22
+ * 11 Magha       30             January 21
+ * 12 Phalguna    30             February 20
+ 
+ * In leap years, Chaitra has 31 days and starts on March 21 instead.
+ * The leap years of Gregorian calendar and Indian National Calendar are in synchornization.
+ * So When its a leap year in Gregorian calendar then Chaitra has 31 days.
+ *
+ * The Years
+ * Years are counted in the Saka Era, which starts its year 0 in 78AD (by gregorian calendar).
+ * So for eg. 9th June 2006 by Gregorian Calendar, is same as 19th of Jyaistha in 1928 of Saka
+ * era by Indian National Calendar.
+ * <p>
+ * The Indian Calendar has only one allowable era: <code>Saka Era</code>.  If the
+ * calendar is not in lenient mode (see <code>setLenient</code>), dates before
+ * 1/1/1 Saka Era are rejected with an <code>IllegalArgumentException</code>.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * IndianCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=Indian"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IndianCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a <code>IndianCalendar</code> using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param zone the given time zone.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public IndianCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public IndianCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param aLocale the given locale.
+ */
+
+public IndianCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param locale the given ulocale.
+ */
+
+public IndianCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>IndianCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a IndianCalendar with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IndianCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetYearLength(int extendedYear) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleComputeMonthStart(int year, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/** 
+ * Constant for Agrahayana, the 9th month of the Indian year.
+ */
+
+public static final int AGRAHAYANA = 8; // 0x8
+
+/** 
+ * Constant for Asadha, the 4th month of the Indian year.
+ */
+
+public static final int ASADHA = 3; // 0x3
+
+/** 
+ * Constant for Asvina, the 7th month of the Indian year.
+ */
+
+public static final int ASVINA = 6; // 0x6
+
+/** 
+ * Constant for Bhadra, the 6th month of the Indian year.
+ */
+
+public static final int BHADRA = 5; // 0x5
+
+/** 
+ * Constant for Chaitra, the 1st month of the Indian year.
+ */
+
+public static final int CHAITRA = 0; // 0x0
+
+/**
+ * Constant for the Indian Era.  This is the only allowable <code>ERA</code>
+ * value for the Indian calendar.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int IE = 0; // 0x0
+
+/** 
+ * Constant for Jyaistha, the 3rd month of the Indian year.
+ */
+
+public static final int JYAISTHA = 2; // 0x2
+
+/** 
+ * Constant for Kartika, the 8th month of the Indian year.
+ */
+
+public static final int KARTIKA = 7; // 0x7
+
+/** 
+ * Constant for Magha, the 11th month of the Indian year.
+ */
+
+public static final int MAGHA = 10; // 0xa
+
+/** 
+ * Constant for Pausa, the 10th month of the Indian year.
+ */
+
+public static final int PAUSA = 9; // 0x9
+
+/** 
+ * Constant for Phalguna, the 12th month of the Indian year.
+ */
+
+public static final int PHALGUNA = 11; // 0xb
+
+/** 
+ * Constant for Sravana, the 5th month of the Indian year.
+ */
+
+public static final int SRAVANA = 4; // 0x4
+
+/** 
+ * Constant for Vaisakha, the 2nd month of the Indian year.
+ */
+
+public static final int VAISAKHA = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IslamicCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IslamicCalendar.java
new file mode 100644
index 0000000..2691266
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/IslamicCalendar.java
@@ -0,0 +1,348 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * <code>IslamicCalendar</code> is a subclass of <code>Calendar</code>
+ * that that implements the Islamic civil and religious calendars.  It
+ * is used as the civil calendar in most of the Arab world and the
+ * liturgical calendar of the Islamic faith worldwide.  This calendar
+ * is also known as the "Hijri" calendar, since it starts at the time
+ * of Mohammed's emigration (or "hijra") to Medinah on Thursday,
+ * July 15, 622 AD (Julian).
+ * <p>
+ * The Islamic calendar is strictly lunar, and thus an Islamic year of twelve
+ * lunar months does not correspond to the solar year used by most other
+ * calendar systems, including the Gregorian.  An Islamic year is, on average,
+ * about 354 days long, so each successive Islamic year starts about 11 days
+ * earlier in the corresponding Gregorian year.
+ * <p>
+ * Each month of the calendar starts when the new moon's crescent is visible
+ * at sunset.  However, in order to keep the time fields in this class
+ * synchronized with those of the other calendars and with local clock time,
+ * we treat days and months as beginning at midnight,
+ * roughly 6 hours after the corresponding sunset.
+ * <p>
+ * There are three main variants of the Islamic calendar in existence.  The first
+ * is the <em>civil</em> calendar, which uses a fixed cycle of alternating 29-
+ * and 30-day months, with a leap day added to the last month of 11 out of
+ * every 30 years.  This calendar is easily calculated and thus predictable in
+ * advance, so it is used as the civil calendar in a number of Arab countries.
+ * This is the default behavior of a newly-created <code>IslamicCalendar</code>
+ * object.
+ * <p>
+ * The Islamic <em>religious</em> calendar and Saudi Arabia's <em>Umm al-Qura</em>
+ * calendar, however, are based on the <em>observation</em> of the crescent moon.
+ * It is thus affected by the position at which the
+ * observations are made, seasonal variations in the time of sunset, the
+ * eccentricities of the moon's orbit, and even the weather at the observation
+ * site.  This makes it impossible to calculate in advance, and it causes the
+ * start of a month in the religious calendar to differ from the civil calendar
+ * by up to three days.
+ * <p>
+ * Using astronomical calculations for the position of the sun and moon, the
+ * moon's illumination, and other factors, it is possible to determine the start
+ * of a lunar month with a fairly high degree of certainty.  However, these
+ * calculations are extremely complicated and thus slow, so most algorithms,
+ * including the one used here, are only approximations of the true astronomical
+ * calculations.  At present, the approximations used in this class are fairly
+ * simplistic; they will be improved in later versions of the code.
+ * <p>
+ * Like the Islamic religious calendar, <em>Umm al-Qura</em> is also based
+ * on the sighting method of the crescent moon but is standardized by Saudi Arabia.
+ * <p>
+ * The fixed-cycle <em>civil</em> calendar is used.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * IslamicCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=islamic"</code> or <code>"@calendar=islamic-civil"</code>
+ * or <code>"@calendar=islamic-umalqura"</code>.</p>
+ *
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.Calendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class IslamicCalendar extends android.icu.util.Calendar {
+
+/**
+ * Constructs a default <code>IslamicCalendar</code> using the current time
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the given time zone with the default <code>FORMAT</code> locale.
+ * @param zone the given time zone.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public IslamicCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public IslamicCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ * @param aLocale the given locale.
+ */
+
+public IslamicCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ * @param locale the given ulocale.
+ */
+
+public IslamicCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> with the given date set
+ * in the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for Muharram.
+ * @param date the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>IslamicCalendar</code> with the given date
+ * and time set for the default time zone with the default <code>FORMAT</code> locale.
+ *
+ * @param year  the value used to set the {@link #YEAR YEAR} time field in the calendar.
+ * @param month the value used to set the {@link #MONTH MONTH} time field in the calendar.
+ *              Note that the month value is 0-based. e.g., 0 for Muharram.
+ * @param date  the value used to set the {@link #DATE DATE} time field in the calendar.
+ * @param hour  the value used to set the {@link #HOUR_OF_DAY HOUR_OF_DAY} time field
+ *              in the calendar.
+ * @param minute the value used to set the {@link #MINUTE MINUTE} time field
+ *              in the calendar.
+ * @param second the value used to set the {@link #SECOND SECOND} time field
+ *              in the calendar.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public IslamicCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the length (in days) of the given month.
+ *
+ * @param extendedYear  The hijri year
+ * @param month The hijri month, 0-based
+ */
+
+protected int handleGetMonthLength(int extendedYear, int month) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return the number of days in the given Islamic year
+ */
+
+protected int handleGetYearLength(int extendedYear) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleComputeMonthStart(int eyear, int month, boolean useMonth) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override Calendar to compute several fields specific to the Islamic
+ * calendar system.  These are:
+ *
+ * <ul><li>ERA
+ * <li>YEAR
+ * <li>MONTH
+ * <li>DAY_OF_MONTH
+ * <li>DAY_OF_YEAR
+ * <li>EXTENDED_YEAR</ul>
+ *
+ * The DAY_OF_WEEK and DOW_LOCAL fields are already set when this
+ * method is called. The getGregorianXxx() methods return Gregorian
+ * calendar equivalents for the given Julian day.
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * sets the calculation type for this calendar.
+ */
+
+public void setCalculationType(android.icu.util.IslamicCalendar.CalculationType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * gets the calculation type for this calendar.
+ */
+
+public android.icu.util.IslamicCalendar.CalculationType getCalculationType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for Dhu al-Hijjah, the 12th month of the Islamic year.
+ */
+
+public static final int DHU_AL_HIJJAH = 11; // 0xb
+
+/**
+ * Constant for Dhu al-Qi'dah, the 11th month of the Islamic year.
+ */
+
+public static final int DHU_AL_QIDAH = 10; // 0xa
+
+/**
+ * Constant for Jumada al-awwal or (Jumada I), the 5th month of the Islamic year.
+ */
+
+public static final int JUMADA_1 = 4; // 0x4
+
+/**
+ * Constant for Jumada al-thani or (Jumada II), the 6th month of the Islamic year.
+ */
+
+public static final int JUMADA_2 = 5; // 0x5
+
+/**
+ * Constant for Muharram, the 1st month of the Islamic year.
+ */
+
+public static final int MUHARRAM = 0; // 0x0
+
+/**
+ * Constant for Rabi' al-awwal (or Rabi' I), the 3rd month of the Islamic year.
+ */
+
+public static final int RABI_1 = 2; // 0x2
+
+/**
+ * Constant for Rabi' al-thani or (Rabi' II), the 4th month of the Islamic year.
+ */
+
+public static final int RABI_2 = 3; // 0x3
+
+/**
+ * Constant for Rajab, the 7th month of the Islamic year.
+ */
+
+public static final int RAJAB = 6; // 0x6
+
+/**
+ * Constant for Ramadan, the 9th month of the Islamic year.
+ */
+
+public static final int RAMADAN = 8; // 0x8
+
+/**
+ * Constant for Safar, the 2nd month of the Islamic year.
+ */
+
+public static final int SAFAR = 1; // 0x1
+
+/**
+ * Constant for Sha'ban, the 8th month of the Islamic year.
+ */
+
+public static final int SHABAN = 7; // 0x7
+
+/**
+ * Constant for Shawwal, the 10th month of the Islamic year.
+ */
+
+public static final int SHAWWAL = 9; // 0x9
+/**
+ *  enumeration of available calendar calculation types
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum CalculationType {
+/**
+ * Religious calendar (atronomical simulation)
+ */
+
+ISLAMIC,
+/**
+ * Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm
+ * with civil (Friday) epoch.
+ */
+
+ISLAMIC_CIVIL,
+/**
+ * Umm al-Qura calendar
+ */
+
+ISLAMIC_UMALQURA,
+/**
+ * Tabular (intercalary years [2,5,7,10,13,16,18,21,24,26,29]) algorithm
+ * with astronomical (Thursday) epoch.
+ */
+
+ISLAMIC_TBLA;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/JapaneseCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/JapaneseCalendar.java
new file mode 100644
index 0000000..c6c417c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/JapaneseCalendar.java
@@ -0,0 +1,258 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2014, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * <code>JapaneseCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years and eras based on the reigns of the Japanese emperors.
+ * The Japanese calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  The ascension of each  emperor to the throne
+ * begins a new era, and the years of that era are numbered starting with the
+ * year of ascension as year 1.
+ * <p>
+ * Note that in the year of an imperial ascension, there are two possible sets
+ * of year and era values: that for the old era and for the new.  For example, a
+ * new era began on January 7, 1989 AD.  Strictly speaking, the first six days
+ * of that year were in the Showa era, e.g. "January 6, 64 Showa", while the rest
+ * of the year was in the Heisei era, e.g. "January 7, 1 Heisei".  This class
+ * handles this distinction correctly when computing dates.  However, in lenient
+ * mode either form of date is acceptable as input.
+ * <p>
+ * In modern times, eras have started on January 8, 1868 AD, Gregorian (Meiji),
+ * July 30, 1912 (Taisho), December 25, 1926 (Showa), and January 7, 1989 (Heisei).  Constants
+ * for these eras, suitable for use in the <code>ERA</code> field, are provided
+ * in this class.  Note that the <em>number</em> used for each era is more or
+ * less arbitrary.  Currently, the era starting in 645 AD is era #0; however this
+ * may change in the future.  Use the predefined constants rather than using actual,
+ * absolute numbers.
+ * <p>
+ * Since ICU4J 63, start date of each era is imported from CLDR. CLDR era data
+ * may contain tentative era in near future with placeholder names. By default,
+ * such era data is not enabled. ICU4J users who want to test the behavior of
+ * the future era can enable this by one of following settings (in the priority
+ * order):
+ * <ol>
+ * <li>Java system property <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * <li>Environment variable <code>ICU_ENABLE_TENTATIVE_ERA=true</code>.</li>
+ * <li>Java system property <code>jdk.calendar.japanese.supplemental.era=xxx</code>.
+ *     (Note: This configuration is used for specifying a new era's start date and
+ *     names in OpenJDK. ICU4J implementation enables the CLDR tentative era when
+ *     this property is defined, but it does not use the start date and names specified
+ *     by the property value.)</li>
+ * </ol>
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * JapaneseCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=japanese"</code>.</p>
+ *
+ * @see android.icu.util.GregorianCalendar
+ * @see android.icu.util.Calendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class JapaneseCalendar extends android.icu.util.GregorianCalendar {
+
+/**
+ * Constructs a default <code>JapaneseCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public JapaneseCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ * @param zone the given time zone.
+ */
+
+public JapaneseCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ * @param aLocale the given locale.
+ */
+
+public JapaneseCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ * @param locale the given ulocale.
+ */
+
+public JapaneseCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param aLocale the given locale.
+ */
+
+public JapaneseCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ *
+ * @param locale the given ulocale.
+ */
+
+public JapaneseCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public JapaneseCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param era       The imperial era used to set the calendar's {@link #ERA ERA} field.
+ *                  Eras are numbered starting with the Tenki era, which
+ *                  began in 1053 AD Gregorian, as era zero.  Recent
+ *                  eras can be specified using the constants
+ *                  {@link #MEIJI} (which started in 1868 AD),
+ *                  {@link #TAISHO} (1912 AD),
+ *                  {@link #SHOWA} (1926 AD), and
+ *                  {@link #HEISEI} (1989 AD).
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} field,
+ *                  in terms of the era.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's DATE field.
+ */
+
+public JapaneseCalendar(int era, int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} field,
+ *                  in the era Heisei, the most current at the time this
+ *                  class was last updated.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} field.
+ */
+
+public JapaneseCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>JapaneseCalendar</code> with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field,
+ *                  in the era Heisei, the most current at the time of this
+ *                  writing.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ *
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ *
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ *
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public JapaneseCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override GregorianCalendar.  We should really handle YEAR_WOY and
+ * EXTENDED_YEAR here too to implement the 1..5000000 range, but it's
+ * not critical.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int getActualMaximum(int field) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the era starting on Jan. 7, 1989 AD.
+ */
+
+public static final int HEISEI;
+static { HEISEI = 0; }
+
+/**
+ * Constant for the era starting on Sept. 8, 1868 AD.
+ */
+
+public static final int MEIJI;
+static { MEIJI = 0; }
+
+/**
+ * Constant for the era starting on May 1, 2019 AD.
+ */
+
+public static final int REIWA;
+static { REIWA = 0; }
+
+/**
+ * Constant for the era starting on Dec. 25, 1926 AD.
+ */
+
+public static final int SHOWA;
+static { SHOWA = 0; }
+
+/**
+ * Constant for the era starting on July 30, 1912 AD.
+ */
+
+public static final int TAISHO;
+static { TAISHO = 0; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/LocaleData.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/LocaleData.java
new file mode 100644
index 0000000..27e8cfa
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/LocaleData.java
@@ -0,0 +1,181 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **************************************************************************************
+ * Copyright (C) 2009-2016, International Business Machines Corporation,
+ * Google, Inc. and others. All Rights Reserved.
+ **************************************************************************************
+ */
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+
+/**
+ * A class for accessing miscellaneous data in the locale bundles
+ * @author ram
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class LocaleData {
+
+private LocaleData() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the LocaleData object associated with the ULocale specified in locale
+ *
+ * @param locale    Locale with thich the locale data object is associated.
+ * @return          A locale data object.
+ */
+
+public static android.icu.util.LocaleData getInstance(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the LocaleData object associated with the default <code>FORMAT</code> locale
+ *
+ * @return          A locale data object.
+ * @see android.icu.util.ULocale.Category#FORMAT
+ */
+
+public static android.icu.util.LocaleData getInstance() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the "no substitute" behavior of this locale data object.
+ *
+ * @param setting   Value for the no substitute behavior.  If TRUE,
+ *                  methods of this locale data object will return
+ *                  an error when no data is available for that method,
+ *                  given the locale ID supplied to the constructor.
+ */
+
+public void setNoSubstitute(boolean setting) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the "no substitute" behavior of this locale data object.
+ *
+ * @return          Value for the no substitute behavior.  If TRUE,
+ *                  methods of this locale data object will return
+ *                  an error when no data is available for that method,
+ *                  given the locale ID supplied to the constructor.
+ */
+
+public boolean getNoSubstitute() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retrieves a delimiter string from the locale data.
+ *
+ * @param type      The type of delimiter string desired.  Currently,
+ *                  the valid choices are QUOTATION_START, QUOTATION_END,
+ *                  ALT_QUOTATION_START, or ALT_QUOTATION_END.
+ * @return          The desired delimiter string.
+ */
+
+public java.lang.String getDelimiter(int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the measurement system used in the locale specified by the locale.
+ *
+ * @param locale      The locale for which the measurement system to be retrieved.
+ * @return MeasurementSystem the measurement system used in the locale.
+ */
+
+public static android.icu.util.LocaleData.MeasurementSystem getMeasurementSystem(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the size of paper used in the locale. The paper sizes returned are always in
+ * <em>milli-meters</em>.
+ * @param locale The locale for which the measurement system to be retrieved.
+ * @return The paper size used in the locale
+ */
+
+public static android.icu.util.LocaleData.PaperSize getPaperSize(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current CLDR version
+ */
+
+public static android.icu.util.VersionInfo getCLDRVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int ALT_QUOTATION_END = 3; // 0x3
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int ALT_QUOTATION_START = 2; // 0x2
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int QUOTATION_END = 1; // 0x1
+
+/**
+ * Delimiter type for {@link #getDelimiter(int)}.
+ */
+
+public static final int QUOTATION_START = 0; // 0x0
+/**
+ * Enumeration for representing the measurement systems.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class MeasurementSystem {
+
+private MeasurementSystem() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Measurement system specified by Le Syst&#x00E8;me International d'Unit&#x00E9;s (SI)
+ * otherwise known as Metric system.
+ */
+
+public static final android.icu.util.LocaleData.MeasurementSystem SI;
+static { SI = null; }
+
+/**
+ * Mix of metric and imperial units used in Great Britain.
+ */
+
+public static final android.icu.util.LocaleData.MeasurementSystem UK;
+static { UK = null; }
+
+/**
+ * Measurement system followed in the United States of America.
+ */
+
+public static final android.icu.util.LocaleData.MeasurementSystem US;
+static { US = null; }
+}
+
+/**
+ * A class that represents the size of letter head
+ * used in the country
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class PaperSize {
+
+private PaperSize() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Retruns the height of the paper
+ * @return the height
+ */
+
+public int getHeight() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the width of the paper
+ * @return the width
+ */
+
+public int getWidth() { throw new RuntimeException("Stub!"); }
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Measure.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Measure.java
new file mode 100644
index 0000000..5b4615e
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Measure.java
@@ -0,0 +1,82 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+**********************************************************************
+* Copyright (c) 2004-2013, International Business Machines
+* Corporation and others.  All Rights Reserved.
+**********************************************************************
+* Author: Alan Liu
+* Created: April 20, 2004
+* Since: ICU 3.0
+**********************************************************************
+*/
+
+package android.icu.util;
+
+
+/**
+ * An amount of a specified unit, consisting of a Number and a Unit.
+ * For example, a length measure consists of a Number and a length
+ * unit, such as feet or meters.
+ *
+ * <p>Measure objects are parsed and formatted by subclasses of
+ * MeasureFormat.
+ *
+ * <p>Measure objects are immutable. All subclasses must guarantee that.
+ * (However, subclassing is discouraged.)
+ *
+ * @see java.lang.Number
+ * @see android.icu.util.MeasureUnit
+ * @see android.icu.text.MeasureFormat
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Measure {
+
+/**
+ * Constructs a new object given a number and a unit.
+ * @param number the number
+ * @param unit the unit
+ */
+
+public Measure(java.lang.Number number, android.icu.util.MeasureUnit unit) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the given object is equal to this object.
+ * @return true if this object is equal to the given object
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a hashcode for this object.
+ * @return a 32-bit hash
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this object.
+ * @return a string representation consisting of the ISO currency
+ * code together with the numeric amount
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the numeric value of this object.
+ * @return this object's Number
+ */
+
+public java.lang.Number getNumber() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the unit of this object.
+ * @return this object's Unit
+ */
+
+public android.icu.util.MeasureUnit getUnit() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/MeasureUnit.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/MeasureUnit.java
new file mode 100644
index 0000000..0e1c50f
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/MeasureUnit.java
@@ -0,0 +1,1108 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2004-2016, Google Inc, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * A unit such as length, mass, volume, currency, etc.  A unit is
+ * coupled with a numeric amount to produce a Measure. MeasureUnit objects are immutable.
+ * All subclasses must guarantee that. (However, subclassing is discouraged.)
+ 
+ *
+ * @see android.icu.util.Measure
+ * @author Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class MeasureUnit implements java.io.Serializable {
+
+MeasureUnit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the type, such as "length". May return null.
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get the subType, such as ?foot?. May return null.
+ */
+
+public java.lang.String getSubtype() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean equals(java.lang.Object rhs) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get all of the available units' types. Returned set is unmodifiable.
+ */
+
+public static synchronized java.util.Set<java.lang.String> getAvailableTypes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * For the given type, return the available units.
+ * @param type the type
+ * @return the available units for type. Returned set is unmodifiable.
+ */
+
+public static synchronized java.util.Set<android.icu.util.MeasureUnit> getAvailable(java.lang.String type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get all of the available units. Returned set is unmodifiable.
+ */
+
+public static synchronized java.util.Set<android.icu.util.MeasureUnit> getAvailable() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for unit of area: acre
+ */
+
+public static final android.icu.util.MeasureUnit ACRE;
+static { ACRE = null; }
+
+/**
+ * Constant for unit of volume: acre-foot
+ */
+
+public static final android.icu.util.MeasureUnit ACRE_FOOT;
+static { ACRE_FOOT = null; }
+
+/**
+ * Constant for unit of electric: ampere
+ */
+
+public static final android.icu.util.MeasureUnit AMPERE;
+static { AMPERE = null; }
+
+/**
+ * Constant for unit of angle: arc-minute
+ */
+
+public static final android.icu.util.MeasureUnit ARC_MINUTE;
+static { ARC_MINUTE = null; }
+
+/**
+ * Constant for unit of angle: arc-second
+ */
+
+public static final android.icu.util.MeasureUnit ARC_SECOND;
+static { ARC_SECOND = null; }
+
+/**
+ * Constant for unit of length: astronomical-unit
+ */
+
+public static final android.icu.util.MeasureUnit ASTRONOMICAL_UNIT;
+static { ASTRONOMICAL_UNIT = null; }
+
+/**
+ * Constant for unit of pressure: atmosphere
+ */
+
+public static final android.icu.util.MeasureUnit ATMOSPHERE;
+static { ATMOSPHERE = null; }
+
+/**
+ * Constant for unit of digital: bit
+ */
+
+public static final android.icu.util.MeasureUnit BIT;
+static { BIT = null; }
+
+/**
+ * Constant for unit of volume: bushel
+ */
+
+public static final android.icu.util.MeasureUnit BUSHEL;
+static { BUSHEL = null; }
+
+/**
+ * Constant for unit of digital: byte
+ */
+
+public static final android.icu.util.MeasureUnit BYTE;
+static { BYTE = null; }
+
+/**
+ * Constant for unit of energy: calorie
+ */
+
+public static final android.icu.util.MeasureUnit CALORIE;
+static { CALORIE = null; }
+
+/**
+ * Constant for unit of mass: carat
+ */
+
+public static final android.icu.util.MeasureUnit CARAT;
+static { CARAT = null; }
+
+/**
+ * Constant for unit of temperature: celsius
+ */
+
+public static final android.icu.util.MeasureUnit CELSIUS;
+static { CELSIUS = null; }
+
+/**
+ * Constant for unit of volume: centiliter
+ */
+
+public static final android.icu.util.MeasureUnit CENTILITER;
+static { CENTILITER = null; }
+
+/**
+ * Constant for unit of length: centimeter
+ */
+
+public static final android.icu.util.MeasureUnit CENTIMETER;
+static { CENTIMETER = null; }
+
+/**
+ * Constant for unit of duration: century
+ */
+
+public static final android.icu.util.MeasureUnit CENTURY;
+static { CENTURY = null; }
+
+/**
+ * Constant for unit of volume: cubic-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_CENTIMETER;
+static { CUBIC_CENTIMETER = null; }
+
+/**
+ * Constant for unit of volume: cubic-foot
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_FOOT;
+static { CUBIC_FOOT = null; }
+
+/**
+ * Constant for unit of volume: cubic-inch
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_INCH;
+static { CUBIC_INCH = null; }
+
+/**
+ * Constant for unit of volume: cubic-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_KILOMETER;
+static { CUBIC_KILOMETER = null; }
+
+/**
+ * Constant for unit of volume: cubic-meter
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_METER;
+static { CUBIC_METER = null; }
+
+/**
+ * Constant for unit of volume: cubic-mile
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_MILE;
+static { CUBIC_MILE = null; }
+
+/**
+ * Constant for unit of volume: cubic-yard
+ */
+
+public static final android.icu.util.MeasureUnit CUBIC_YARD;
+static { CUBIC_YARD = null; }
+
+/**
+ * Constant for unit of volume: cup
+ */
+
+public static final android.icu.util.MeasureUnit CUP;
+static { CUP = null; }
+
+/**
+ * Constant for unit of volume: cup-metric
+ */
+
+public static final android.icu.util.MeasureUnit CUP_METRIC;
+static { CUP_METRIC = null; }
+
+/**
+ * Constant for unit of duration: day
+ */
+
+public static final android.icu.util.TimeUnit DAY;
+static { DAY = null; }
+
+/**
+ * Constant for unit of duration: decade
+ */
+
+public static final android.icu.util.MeasureUnit DECADE;
+static { DECADE = null; }
+
+/**
+ * Constant for unit of volume: deciliter
+ */
+
+public static final android.icu.util.MeasureUnit DECILITER;
+static { DECILITER = null; }
+
+/**
+ * Constant for unit of length: decimeter
+ */
+
+public static final android.icu.util.MeasureUnit DECIMETER;
+static { DECIMETER = null; }
+
+/**
+ * Constant for unit of angle: degree
+ */
+
+public static final android.icu.util.MeasureUnit DEGREE;
+static { DEGREE = null; }
+
+/**
+ * Constant for unit of graphics: dot-per-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit DOT_PER_CENTIMETER;
+static { DOT_PER_CENTIMETER = null; }
+
+/**
+ * Constant for unit of graphics: dot-per-inch
+ */
+
+public static final android.icu.util.MeasureUnit DOT_PER_INCH;
+static { DOT_PER_INCH = null; }
+
+/**
+ * Constant for unit of graphics: em
+ */
+
+public static final android.icu.util.MeasureUnit EM;
+static { EM = null; }
+
+/**
+ * Constant for unit of temperature: fahrenheit
+ */
+
+public static final android.icu.util.MeasureUnit FAHRENHEIT;
+static { FAHRENHEIT = null; }
+
+/**
+ * Constant for unit of length: fathom
+ */
+
+public static final android.icu.util.MeasureUnit FATHOM;
+static { FATHOM = null; }
+
+/**
+ * Constant for unit of volume: fluid-ounce
+ */
+
+public static final android.icu.util.MeasureUnit FLUID_OUNCE;
+static { FLUID_OUNCE = null; }
+
+/**
+ * Constant for unit of energy: foodcalorie
+ */
+
+public static final android.icu.util.MeasureUnit FOODCALORIE;
+static { FOODCALORIE = null; }
+
+/**
+ * Constant for unit of length: foot
+ */
+
+public static final android.icu.util.MeasureUnit FOOT;
+static { FOOT = null; }
+
+/**
+ * Constant for unit of length: furlong
+ */
+
+public static final android.icu.util.MeasureUnit FURLONG;
+static { FURLONG = null; }
+
+/**
+ * Constant for unit of volume: gallon
+ */
+
+public static final android.icu.util.MeasureUnit GALLON;
+static { GALLON = null; }
+
+/**
+ * Constant for unit of volume: gallon-imperial
+ */
+
+public static final android.icu.util.MeasureUnit GALLON_IMPERIAL;
+static { GALLON_IMPERIAL = null; }
+
+/**
+ * Constant for unit of temperature: generic
+ */
+
+public static final android.icu.util.MeasureUnit GENERIC_TEMPERATURE;
+static { GENERIC_TEMPERATURE = null; }
+
+/**
+ * Constant for unit of digital: gigabit
+ */
+
+public static final android.icu.util.MeasureUnit GIGABIT;
+static { GIGABIT = null; }
+
+/**
+ * Constant for unit of digital: gigabyte
+ */
+
+public static final android.icu.util.MeasureUnit GIGABYTE;
+static { GIGABYTE = null; }
+
+/**
+ * Constant for unit of frequency: gigahertz
+ */
+
+public static final android.icu.util.MeasureUnit GIGAHERTZ;
+static { GIGAHERTZ = null; }
+
+/**
+ * Constant for unit of power: gigawatt
+ */
+
+public static final android.icu.util.MeasureUnit GIGAWATT;
+static { GIGAWATT = null; }
+
+/**
+ * Constant for unit of mass: gram
+ */
+
+public static final android.icu.util.MeasureUnit GRAM;
+static { GRAM = null; }
+
+/**
+ * Constant for unit of acceleration: g-force
+ */
+
+public static final android.icu.util.MeasureUnit G_FORCE;
+static { G_FORCE = null; }
+
+/**
+ * Constant for unit of area: hectare
+ */
+
+public static final android.icu.util.MeasureUnit HECTARE;
+static { HECTARE = null; }
+
+/**
+ * Constant for unit of volume: hectoliter
+ */
+
+public static final android.icu.util.MeasureUnit HECTOLITER;
+static { HECTOLITER = null; }
+
+/**
+ * Constant for unit of pressure: hectopascal
+ */
+
+public static final android.icu.util.MeasureUnit HECTOPASCAL;
+static { HECTOPASCAL = null; }
+
+/**
+ * Constant for unit of frequency: hertz
+ */
+
+public static final android.icu.util.MeasureUnit HERTZ;
+static { HERTZ = null; }
+
+/**
+ * Constant for unit of power: horsepower
+ */
+
+public static final android.icu.util.MeasureUnit HORSEPOWER;
+static { HORSEPOWER = null; }
+
+/**
+ * Constant for unit of duration: hour
+ */
+
+public static final android.icu.util.TimeUnit HOUR;
+static { HOUR = null; }
+
+/**
+ * Constant for unit of length: inch
+ */
+
+public static final android.icu.util.MeasureUnit INCH;
+static { INCH = null; }
+
+/**
+ * Constant for unit of pressure: inch-ofhg
+ */
+
+public static final android.icu.util.MeasureUnit INCH_HG;
+static { INCH_HG = null; }
+
+/**
+ * Constant for unit of energy: joule
+ */
+
+public static final android.icu.util.MeasureUnit JOULE;
+static { JOULE = null; }
+
+/**
+ * Constant for unit of concentr: karat
+ */
+
+public static final android.icu.util.MeasureUnit KARAT;
+static { KARAT = null; }
+
+/**
+ * Constant for unit of temperature: kelvin
+ */
+
+public static final android.icu.util.MeasureUnit KELVIN;
+static { KELVIN = null; }
+
+/**
+ * Constant for unit of digital: kilobit
+ */
+
+public static final android.icu.util.MeasureUnit KILOBIT;
+static { KILOBIT = null; }
+
+/**
+ * Constant for unit of digital: kilobyte
+ */
+
+public static final android.icu.util.MeasureUnit KILOBYTE;
+static { KILOBYTE = null; }
+
+/**
+ * Constant for unit of energy: kilocalorie
+ */
+
+public static final android.icu.util.MeasureUnit KILOCALORIE;
+static { KILOCALORIE = null; }
+
+/**
+ * Constant for unit of mass: kilogram
+ */
+
+public static final android.icu.util.MeasureUnit KILOGRAM;
+static { KILOGRAM = null; }
+
+/**
+ * Constant for unit of frequency: kilohertz
+ */
+
+public static final android.icu.util.MeasureUnit KILOHERTZ;
+static { KILOHERTZ = null; }
+
+/**
+ * Constant for unit of energy: kilojoule
+ */
+
+public static final android.icu.util.MeasureUnit KILOJOULE;
+static { KILOJOULE = null; }
+
+/**
+ * Constant for unit of length: kilometer
+ */
+
+public static final android.icu.util.MeasureUnit KILOMETER;
+static { KILOMETER = null; }
+
+/**
+ * Constant for unit of speed: kilometer-per-hour
+ */
+
+public static final android.icu.util.MeasureUnit KILOMETER_PER_HOUR;
+static { KILOMETER_PER_HOUR = null; }
+
+/**
+ * Constant for unit of power: kilowatt
+ */
+
+public static final android.icu.util.MeasureUnit KILOWATT;
+static { KILOWATT = null; }
+
+/**
+ * Constant for unit of energy: kilowatt-hour
+ */
+
+public static final android.icu.util.MeasureUnit KILOWATT_HOUR;
+static { KILOWATT_HOUR = null; }
+
+/**
+ * Constant for unit of speed: knot
+ */
+
+public static final android.icu.util.MeasureUnit KNOT;
+static { KNOT = null; }
+
+/**
+ * Constant for unit of length: light-year
+ */
+
+public static final android.icu.util.MeasureUnit LIGHT_YEAR;
+static { LIGHT_YEAR = null; }
+
+/**
+ * Constant for unit of volume: liter
+ */
+
+public static final android.icu.util.MeasureUnit LITER;
+static { LITER = null; }
+
+/**
+ * Constant for unit of consumption: liter-per-100-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit LITER_PER_100KILOMETERS;
+static { LITER_PER_100KILOMETERS = null; }
+
+/**
+ * Constant for unit of consumption: liter-per-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit LITER_PER_KILOMETER;
+static { LITER_PER_KILOMETER = null; }
+
+/**
+ * Constant for unit of light: lux
+ */
+
+public static final android.icu.util.MeasureUnit LUX;
+static { LUX = null; }
+
+/**
+ * Constant for unit of digital: megabit
+ */
+
+public static final android.icu.util.MeasureUnit MEGABIT;
+static { MEGABIT = null; }
+
+/**
+ * Constant for unit of digital: megabyte
+ */
+
+public static final android.icu.util.MeasureUnit MEGABYTE;
+static { MEGABYTE = null; }
+
+/**
+ * Constant for unit of frequency: megahertz
+ */
+
+public static final android.icu.util.MeasureUnit MEGAHERTZ;
+static { MEGAHERTZ = null; }
+
+/**
+ * Constant for unit of volume: megaliter
+ */
+
+public static final android.icu.util.MeasureUnit MEGALITER;
+static { MEGALITER = null; }
+
+/**
+ * Constant for unit of graphics: megapixel
+ */
+
+public static final android.icu.util.MeasureUnit MEGAPIXEL;
+static { MEGAPIXEL = null; }
+
+/**
+ * Constant for unit of power: megawatt
+ */
+
+public static final android.icu.util.MeasureUnit MEGAWATT;
+static { MEGAWATT = null; }
+
+/**
+ * Constant for unit of length: meter
+ */
+
+public static final android.icu.util.MeasureUnit METER;
+static { METER = null; }
+
+/**
+ * Constant for unit of speed: meter-per-second
+ */
+
+public static final android.icu.util.MeasureUnit METER_PER_SECOND;
+static { METER_PER_SECOND = null; }
+
+/**
+ * Constant for unit of acceleration: meter-per-square-second
+ */
+
+public static final android.icu.util.MeasureUnit METER_PER_SECOND_SQUARED;
+static { METER_PER_SECOND_SQUARED = null; }
+
+/**
+ * Constant for unit of mass: metric-ton
+ */
+
+public static final android.icu.util.MeasureUnit METRIC_TON;
+static { METRIC_TON = null; }
+
+/**
+ * Constant for unit of mass: microgram
+ */
+
+public static final android.icu.util.MeasureUnit MICROGRAM;
+static { MICROGRAM = null; }
+
+/**
+ * Constant for unit of length: micrometer
+ */
+
+public static final android.icu.util.MeasureUnit MICROMETER;
+static { MICROMETER = null; }
+
+/**
+ * Constant for unit of duration: microsecond
+ */
+
+public static final android.icu.util.MeasureUnit MICROSECOND;
+static { MICROSECOND = null; }
+
+/**
+ * Constant for unit of length: mile
+ */
+
+public static final android.icu.util.MeasureUnit MILE;
+static { MILE = null; }
+
+/**
+ * Constant for unit of consumption: mile-per-gallon
+ */
+
+public static final android.icu.util.MeasureUnit MILE_PER_GALLON;
+static { MILE_PER_GALLON = null; }
+
+/**
+ * Constant for unit of consumption: mile-per-gallon-imperial
+ */
+
+public static final android.icu.util.MeasureUnit MILE_PER_GALLON_IMPERIAL;
+static { MILE_PER_GALLON_IMPERIAL = null; }
+
+/**
+ * Constant for unit of speed: mile-per-hour
+ */
+
+public static final android.icu.util.MeasureUnit MILE_PER_HOUR;
+static { MILE_PER_HOUR = null; }
+
+/**
+ * Constant for unit of length: mile-scandinavian
+ */
+
+public static final android.icu.util.MeasureUnit MILE_SCANDINAVIAN;
+static { MILE_SCANDINAVIAN = null; }
+
+/**
+ * Constant for unit of electric: milliampere
+ */
+
+public static final android.icu.util.MeasureUnit MILLIAMPERE;
+static { MILLIAMPERE = null; }
+
+/**
+ * Constant for unit of pressure: millibar
+ */
+
+public static final android.icu.util.MeasureUnit MILLIBAR;
+static { MILLIBAR = null; }
+
+/**
+ * Constant for unit of mass: milligram
+ */
+
+public static final android.icu.util.MeasureUnit MILLIGRAM;
+static { MILLIGRAM = null; }
+
+/**
+ * Constant for unit of concentr: milligram-per-deciliter
+ */
+
+public static final android.icu.util.MeasureUnit MILLIGRAM_PER_DECILITER;
+static { MILLIGRAM_PER_DECILITER = null; }
+
+/**
+ * Constant for unit of volume: milliliter
+ */
+
+public static final android.icu.util.MeasureUnit MILLILITER;
+static { MILLILITER = null; }
+
+/**
+ * Constant for unit of length: millimeter
+ */
+
+public static final android.icu.util.MeasureUnit MILLIMETER;
+static { MILLIMETER = null; }
+
+/**
+ * Constant for unit of pressure: millimeter-ofhg
+ */
+
+public static final android.icu.util.MeasureUnit MILLIMETER_OF_MERCURY;
+static { MILLIMETER_OF_MERCURY = null; }
+
+/**
+ * Constant for unit of concentr: millimole-per-liter
+ */
+
+public static final android.icu.util.MeasureUnit MILLIMOLE_PER_LITER;
+static { MILLIMOLE_PER_LITER = null; }
+
+/**
+ * Constant for unit of duration: millisecond
+ */
+
+public static final android.icu.util.MeasureUnit MILLISECOND;
+static { MILLISECOND = null; }
+
+/**
+ * Constant for unit of power: milliwatt
+ */
+
+public static final android.icu.util.MeasureUnit MILLIWATT;
+static { MILLIWATT = null; }
+
+/**
+ * Constant for unit of duration: minute
+ */
+
+public static final android.icu.util.TimeUnit MINUTE;
+static { MINUTE = null; }
+
+/**
+ * Constant for unit of duration: month
+ */
+
+public static final android.icu.util.TimeUnit MONTH;
+static { MONTH = null; }
+
+/**
+ * Constant for unit of length: nanometer
+ */
+
+public static final android.icu.util.MeasureUnit NANOMETER;
+static { NANOMETER = null; }
+
+/**
+ * Constant for unit of duration: nanosecond
+ */
+
+public static final android.icu.util.MeasureUnit NANOSECOND;
+static { NANOSECOND = null; }
+
+/**
+ * Constant for unit of length: nautical-mile
+ */
+
+public static final android.icu.util.MeasureUnit NAUTICAL_MILE;
+static { NAUTICAL_MILE = null; }
+
+/**
+ * Constant for unit of electric: ohm
+ */
+
+public static final android.icu.util.MeasureUnit OHM;
+static { OHM = null; }
+
+/**
+ * Constant for unit of mass: ounce
+ */
+
+public static final android.icu.util.MeasureUnit OUNCE;
+static { OUNCE = null; }
+
+/**
+ * Constant for unit of mass: ounce-troy
+ */
+
+public static final android.icu.util.MeasureUnit OUNCE_TROY;
+static { OUNCE_TROY = null; }
+
+/**
+ * Constant for unit of length: parsec
+ */
+
+public static final android.icu.util.MeasureUnit PARSEC;
+static { PARSEC = null; }
+
+/**
+ * Constant for unit of concentr: permillion
+ */
+
+public static final android.icu.util.MeasureUnit PART_PER_MILLION;
+static { PART_PER_MILLION = null; }
+
+/**
+ * Constant for unit of concentr: percent
+ */
+
+public static final android.icu.util.MeasureUnit PERCENT;
+static { PERCENT = null; }
+
+/**
+ * Constant for unit of concentr: permille
+ */
+
+public static final android.icu.util.MeasureUnit PERMILLE;
+static { PERMILLE = null; }
+
+/**
+ * Constant for unit of digital: petabyte
+ */
+
+public static final android.icu.util.MeasureUnit PETABYTE;
+static { PETABYTE = null; }
+
+/**
+ * Constant for unit of length: picometer
+ */
+
+public static final android.icu.util.MeasureUnit PICOMETER;
+static { PICOMETER = null; }
+
+/**
+ * Constant for unit of volume: pint
+ */
+
+public static final android.icu.util.MeasureUnit PINT;
+static { PINT = null; }
+
+/**
+ * Constant for unit of volume: pint-metric
+ */
+
+public static final android.icu.util.MeasureUnit PINT_METRIC;
+static { PINT_METRIC = null; }
+
+/**
+ * Constant for unit of graphics: pixel
+ */
+
+public static final android.icu.util.MeasureUnit PIXEL;
+static { PIXEL = null; }
+
+/**
+ * Constant for unit of graphics: pixel-per-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit PIXEL_PER_CENTIMETER;
+static { PIXEL_PER_CENTIMETER = null; }
+
+/**
+ * Constant for unit of graphics: pixel-per-inch
+ */
+
+public static final android.icu.util.MeasureUnit PIXEL_PER_INCH;
+static { PIXEL_PER_INCH = null; }
+
+/**
+ * Constant for unit of length: point
+ */
+
+public static final android.icu.util.MeasureUnit POINT;
+static { POINT = null; }
+
+/**
+ * Constant for unit of mass: pound
+ */
+
+public static final android.icu.util.MeasureUnit POUND;
+static { POUND = null; }
+
+/**
+ * Constant for unit of pressure: pound-force-per-square-inch
+ */
+
+public static final android.icu.util.MeasureUnit POUND_PER_SQUARE_INCH;
+static { POUND_PER_SQUARE_INCH = null; }
+
+/**
+ * Constant for unit of volume: quart
+ */
+
+public static final android.icu.util.MeasureUnit QUART;
+static { QUART = null; }
+
+/**
+ * Constant for unit of angle: radian
+ */
+
+public static final android.icu.util.MeasureUnit RADIAN;
+static { RADIAN = null; }
+
+/**
+ * Constant for unit of angle: revolution
+ */
+
+public static final android.icu.util.MeasureUnit REVOLUTION_ANGLE;
+static { REVOLUTION_ANGLE = null; }
+
+/**
+ * Constant for unit of duration: second
+ */
+
+public static final android.icu.util.TimeUnit SECOND;
+static { SECOND = null; }
+
+/**
+ * Constant for unit of area: square-centimeter
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_CENTIMETER;
+static { SQUARE_CENTIMETER = null; }
+
+/**
+ * Constant for unit of area: square-foot
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_FOOT;
+static { SQUARE_FOOT = null; }
+
+/**
+ * Constant for unit of area: square-inch
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_INCH;
+static { SQUARE_INCH = null; }
+
+/**
+ * Constant for unit of area: square-kilometer
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_KILOMETER;
+static { SQUARE_KILOMETER = null; }
+
+/**
+ * Constant for unit of area: square-meter
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_METER;
+static { SQUARE_METER = null; }
+
+/**
+ * Constant for unit of area: square-mile
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_MILE;
+static { SQUARE_MILE = null; }
+
+/**
+ * Constant for unit of area: square-yard
+ */
+
+public static final android.icu.util.MeasureUnit SQUARE_YARD;
+static { SQUARE_YARD = null; }
+
+/**
+ * Constant for unit of mass: stone
+ */
+
+public static final android.icu.util.MeasureUnit STONE;
+static { STONE = null; }
+
+/**
+ * Constant for unit of volume: tablespoon
+ */
+
+public static final android.icu.util.MeasureUnit TABLESPOON;
+static { TABLESPOON = null; }
+
+/**
+ * Constant for unit of volume: teaspoon
+ */
+
+public static final android.icu.util.MeasureUnit TEASPOON;
+static { TEASPOON = null; }
+
+/**
+ * Constant for unit of digital: terabit
+ */
+
+public static final android.icu.util.MeasureUnit TERABIT;
+static { TERABIT = null; }
+
+/**
+ * Constant for unit of digital: terabyte
+ */
+
+public static final android.icu.util.MeasureUnit TERABYTE;
+static { TERABYTE = null; }
+
+/**
+ * Constant for unit of mass: ton
+ */
+
+public static final android.icu.util.MeasureUnit TON;
+static { TON = null; }
+
+/**
+ * Constant for unit of electric: volt
+ */
+
+public static final android.icu.util.MeasureUnit VOLT;
+static { VOLT = null; }
+
+/**
+ * Constant for unit of power: watt
+ */
+
+public static final android.icu.util.MeasureUnit WATT;
+static { WATT = null; }
+
+/**
+ * Constant for unit of duration: week
+ */
+
+public static final android.icu.util.TimeUnit WEEK;
+static { WEEK = null; }
+
+/**
+ * Constant for unit of length: yard
+ */
+
+public static final android.icu.util.MeasureUnit YARD;
+static { YARD = null; }
+
+/**
+ * Constant for unit of duration: year
+ */
+
+public static final android.icu.util.TimeUnit YEAR;
+static { YEAR = null; }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Output.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Output.java
new file mode 100644
index 0000000..8e9c70b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/Output.java
@@ -0,0 +1,47 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 2011-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Simple struct-like class for output parameters.
+ * @param <T> The type of the parameter.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class Output<T> {
+
+/**
+ * Constructs an empty <code>Output</code>
+ */
+
+public Output() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs an <code>Output</code> with the given value.
+ * @param value the initial value
+ */
+
+public Output(T value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * The value field
+ */
+
+public T value;
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/RangeValueIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/RangeValueIterator.java
new file mode 100644
index 0000000..8631da2
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/RangeValueIterator.java
@@ -0,0 +1,110 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*/
+
+
+package android.icu.util;
+
+
+/**
+ * <p>Interface for enabling iteration over sets of &lt;int index, int value&gt;,
+ * where index is the sorted integer index in ascending order and value, its
+ * associated integer value.
+ * <p>The result for each iteration is the consecutive range of
+ * &lt;int index, int value&gt; with the same value. Result is represented by
+ * &lt;start, limit, value&gt; where
+ * <ul>
+ * <li> start is the starting integer of the result range
+ * <li> limit is 1 after the maximum integer that follows start, such that
+ *      all integers between start and (limit - 1), inclusive, have the same
+ *      associated integer value.
+ * <li> value is the integer value that all integers from start to (limit - 1)
+ *      share in common.
+ * </ul>
+ * <p>
+ * Hence value(start) = value(start + 1) = .... = value(start + n) = .... =
+ * value(limit - 1). However value(start -1) != value(start) and
+ * value(limit) != value(start).
+ *
+ * <p>Most implementations will be created by factory methods, such as the
+ * character type iterator in UCharacter.getTypeIterator. See example below.
+ *
+ * <p>Example of use:<br>
+ * <pre>
+ * RangeValueIterator iterator = UCharacter.getTypeIterator();
+ * RangeValueIterator.Element result = new RangeValueIterator.Element();
+ * while (iterator.next(result)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(result.start) +
+ *                        " to codepoint \\u" +
+ *                        Integer.toHexString(result.limit - 1) +
+ *                        " has the character type " + result.value);
+ * }
+ * </pre>
+ * @author synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface RangeValueIterator {
+
+/**
+ * <p>Returns the next maximal result range with a common value and returns
+ * true if we are not at the end of the iteration, false otherwise.
+ * <p>If this returns a false, the contents of elements will not
+ * be updated.
+ * @param element for storing the result range and value
+ * @return true if we are not at the end of the iteration, false otherwise.
+ * @see android.icu.util.RangeValueIterator.Element
+ */
+
+public boolean next(android.icu.util.RangeValueIterator.Element element);
+
+/**
+ * Resets the iterator to the beginning of the iteration.
+ */
+
+public void reset();
+/**
+ * Return result wrapper for android.icu.util.RangeValueIterator.
+ * Stores the start and limit of the continous result range and the
+ * common value all integers between [start, limit - 1] has.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static class Element {
+
+/**
+ * Empty default constructor to make javadoc happy
+ */
+
+public Element() { throw new RuntimeException("Stub!"); }
+
+/**
+ * (End + 1) integer of continuous result range that has the same
+ * value
+ */
+
+public int limit;
+
+/**
+ * Starting integer of the continuous result range that has the same
+ * value
+ */
+
+public int start;
+
+/**
+ * Gets the common value of the continous result range
+ */
+
+public int value;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TaiwanCalendar.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TaiwanCalendar.java
new file mode 100644
index 0000000..0a55d3a
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TaiwanCalendar.java
@@ -0,0 +1,178 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2010, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/** 
+ * <code>TaiwanCalendar</code> is a subclass of <code>GregorianCalendar</code>
+ * that numbers years since 1912.
+ * <p>
+ * The Taiwan calendar is identical to the Gregorian calendar in all respects
+ * except for the year and era.  Years are numbered since 1912 AD (Gregorian).
+ * <p>
+ * The Taiwan Calendar has one era: <code>MINGUO</code>.
+ * <p>
+ * This class should not be subclassed.</p>
+ * <p>
+ * TaiwanCalendar usually should be instantiated using
+ * {@link android.icu.util.Calendar#getInstance(ULocale)} passing in a <code>ULocale</code>
+ * with the tag <code>"@calendar=roc"</code>.</p>
+ *
+ * @see android.icu.util.Calendar
+ * @see android.icu.util.GregorianCalendar
+ *
+ * @author Laura Werner
+ * @author Alan Liu
+ * @author Steven R. Loomis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class TaiwanCalendar extends android.icu.util.GregorianCalendar {
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> using the current time
+ * in the default time zone with the default locale.
+ */
+
+public TaiwanCalendar() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the given time zone with the default locale.
+ *
+ * @param zone the given time zone.
+ */
+
+public TaiwanCalendar(android.icu.util.TimeZone zone) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param aLocale the given locale.
+ */
+
+public TaiwanCalendar(java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the default time zone with the given locale.
+ *
+ * @param locale the given ulocale.
+ */
+
+public TaiwanCalendar(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ */
+
+public TaiwanCalendar(android.icu.util.TimeZone zone, java.util.Locale aLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> based on the current time
+ * in the given time zone with the given locale.
+ *
+ * @param zone the given time zone.
+ * @param locale the given ulocale.
+ */
+
+public TaiwanCalendar(android.icu.util.TimeZone zone, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param date      The date to which the new calendar is set.
+ */
+
+public TaiwanCalendar(java.util.Date date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a <code>TaiwanCalendar</code> with the given date set
+ * in the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ *
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ */
+
+public TaiwanCalendar(int year, int month, int date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a TaiwanCalendar with the given date
+ * and time set for the default time zone with the default locale.
+ *
+ * @param year      The value used to set the calendar's {@link #YEAR YEAR} time field.
+ *
+ * @param month     The value used to set the calendar's {@link #MONTH MONTH} time field.
+ *                  The value is 0-based. e.g., 0 for January.
+ * @param date      The value used to set the calendar's {@link #DATE DATE} time field.
+ * @param hour      The value used to set the calendar's {@link #HOUR_OF_DAY HOUR_OF_DAY} time field.
+ * @param minute    The value used to set the calendar's {@link #MINUTE MINUTE} time field.
+ * @param second    The value used to set the calendar's {@link #SECOND SECOND} time field.
+ */
+
+public TaiwanCalendar(int year, int month, int date, int hour, int minute, int second) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected int handleGetExtendedYear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+protected void handleComputeFields(int julianDay) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Override GregorianCalendar.  There is only one Taiwan ERA.  We
+ * should really handle YEAR, YEAR_WOY, and EXTENDED_YEAR here too to
+ * implement the 1..5000000 range, but it's not critical.
+ */
+
+protected int handleGetLimit(int field, int limitType) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public java.lang.String getType() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constant for the Taiwan Era for years before Minguo 1.
+ * Brefore Minuo 1 is Gregorian 1911, Before Minguo 2 is Gregorian 1910
+ * and so on.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int BEFORE_MINGUO = 0; // 0x0
+
+/**
+ * Constant for the Taiwan Era for Minguo.  Minguo 1 is 1912 in
+ * Gregorian calendar.
+ *
+ * @see android.icu.util.Calendar#ERA
+ */
+
+public static final int MINGUO = 1; // 0x1
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TimeUnit.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TimeUnit.java
new file mode 100644
index 0000000..ad8c877
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TimeUnit.java
@@ -0,0 +1,31 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **************************************************************************
+ * Copyright (C) 2008-2014, Google, International Business Machines
+ * Corporation and others. All Rights Reserved.
+ **************************************************************************
+ */
+
+package android.icu.util;
+
+
+/**
+ * Measurement unit for time units.
+ * @see android.icu.util.TimeUnit
+ * @author markdavis
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public class TimeUnit extends android.icu.util.MeasureUnit {
+
+TimeUnit() { throw new RuntimeException("Stub!"); }
+
+/**
+ * @return the available values
+ */
+
+public static android.icu.util.TimeUnit[] values() { throw new RuntimeException("Stub!"); }
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TimeZone.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TimeZone.java
new file mode 100644
index 0000000..0614fad
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/TimeZone.java
@@ -0,0 +1,755 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ * @(#)TimeZone.java    1.51 00/01/19
+ *
+ * Copyright (C) 1996-2016, International Business Machines
+ * Corporation and others.  All Rights Reserved.
+ */
+
+
+package android.icu.util;
+
+import android.icu.util.ULocale.Category;
+import java.util.Date;
+import java.util.Set;
+import java.util.MissingResourceException;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.TimeZone}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * <p><code>TimeZone</code> represents a time zone offset, and also computes daylight
+ * savings.
+ *
+ * <p>Typically, you get a <code>TimeZone</code> using {@link #getDefault()}
+ * which creates a <code>TimeZone</code> based on the time zone where the program
+ * is running. For example, for a program running in Japan, <code>getDefault</code>
+ * creates a <code>TimeZone</code> object based on Japanese Standard Time.
+ *
+ * <p>You can also get a <code>TimeZone</code> using {@link #getTimeZone(java.lang.String)}
+ * along with a time zone ID. For instance, the time zone ID for the
+ * U.S. Pacific Time zone is "America/Los_Angeles". So, you can get a
+ * U.S. Pacific Time <code>TimeZone</code> object with:
+ *
+ * <blockquote>
+ * <pre>
+ * TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
+ * </pre>
+ * </blockquote>
+ * You can use the {@link #getAvailableIDs()} method to iterate through
+ * all the supported time zone IDs, or getCanonicalID method to check
+ * if a time zone ID is supported or not. You can then choose a
+ * supported ID to get a <code>TimeZone</code>.
+ * If the time zone you want is not represented by one of the
+ * supported IDs, then you can create a custom time zone ID with
+ * the following syntax:
+ *
+ * <blockquote>
+ * <pre>
+ * GMT[+|-]hh[[:]mm]
+ * </pre>
+ * </blockquote>
+ *
+ * For example, you might specify GMT+14:00 as a custom
+ * time zone ID.  The <code>TimeZone</code> that is returned
+ * when you specify a custom time zone ID uses the specified
+ * offset from GMT(=UTC) and does not observe daylight saving
+ * time. For example, you might specify GMT+14:00 as a custom
+ * time zone ID to create a TimeZone representing 14 hours ahead
+ * of GMT (with no daylight saving time). In addition,
+ * <code>getCanonicalID</code> can also be used to
+ * normalize a custom time zone ID.
+ *
+ * <p>For compatibility with JDK 1.1.x, some other three-letter time zone IDs
+ * (such as "PST", "CTT", "AST") are also supported. However, <strong>their
+ * use is deprecated</strong> because the same abbreviation is often used
+ * for multiple time zones (for example, "CST" could be U.S. "Central Standard
+ * Time" and "China Standard Time"), and the Java platform can then only
+ * recognize one of them.
+ *
+ * @see          android.icu.util.Calendar
+ * @see          android.icu.util.GregorianCalendar
+ * @author       Mark Davis, Deborah Goldsmith, Chen-Lieh Huang, Alan Liu
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public abstract class TimeZone implements java.io.Serializable, java.lang.Cloneable, android.icu.util.Freezable<android.icu.util.TimeZone> {
+
+/**
+ * Default constructor.  (For invocation by subclass constructors,
+ * typically implicit.)
+ */
+
+public TimeZone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the time zone offset, for current date, modified in case of
+ * daylight savings. This is the offset to add *to* UTC to get local time.
+ * @param era the era of the given date.
+ * @param year the year in the given date.
+ * @param month the month in the given date.
+ * Month is 0-based. e.g., 0 for January.
+ * @param day the day-in-month of the given date.
+ * @param dayOfWeek the day-of-week of the given date.
+ * @param milliseconds the millis in day in <em>standard</em> local time.
+ * @return the offset to add *to* GMT to get local time.
+ */
+
+public abstract int getOffset(int era, int year, int month, int day, int dayOfWeek, int milliseconds);
+
+/**
+ * Returns the offset of this time zone from UTC at the specified
+ * date. If Daylight Saving Time is in effect at the specified
+ * date, the offset value is adjusted with the amount of daylight
+ * saving.
+ *
+ * @param date the date represented in milliseconds since January 1, 1970 00:00:00 GMT
+ * @return the amount of time in milliseconds to add to UTC to get local time.
+ *
+ * @see android.icu.util.Calendar#ZONE_OFFSET
+ * @see android.icu.util.Calendar#DST_OFFSET
+ * @see #getOffset(long, boolean, int[])
+ */
+
+public int getOffset(long date) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the time zone raw and GMT offset for the given moment
+ * in time.  Upon return, local-millis = GMT-millis + rawOffset +
+ * dstOffset.  All computations are performed in the proleptic
+ * Gregorian calendar.  The default implementation in the TimeZone
+ * class delegates to the 8-argument getOffset().
+ *
+ * @param date moment in time for which to return offsets, in
+ * units of milliseconds from January 1, 1970 0:00 GMT, either GMT
+ * time or local wall time, depending on `local'.
+ * @param local if true, `date' is local wall time; otherwise it
+ * is in GMT time.
+ * @param offsets output parameter to receive the raw offset, that
+ * is, the offset not including DST adjustments, in offsets[0],
+ * and the DST offset, that is, the offset to be added to
+ * `rawOffset' to obtain the total offset between local and GMT
+ * time, in offsets[1]. If DST is not in effect, the DST offset is
+ * zero; otherwise it is a positive value, typically one hour.
+ */
+
+public void getOffset(long date, boolean local, int[] offsets) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the base time zone offset to GMT.
+ * This is the offset to add *to* UTC to get local time.
+ * @param offsetMillis the given base time zone offset to GMT.
+ */
+
+public abstract void setRawOffset(int offsetMillis);
+
+/**
+ * Gets unmodified offset, NOT modified in case of daylight savings.
+ * This is the offset to add *to* UTC to get local time.
+ * @return the unmodified offset to add *to* UTC to get local time.
+ */
+
+public abstract int getRawOffset();
+
+/**
+ * Gets the ID of this time zone.
+ * @return the ID of this time zone.
+ */
+
+public java.lang.String getID() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the time zone ID. This does not change any other data in
+ * the time zone object.
+ * @param ID the new time zone ID.
+ */
+
+public void setID(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the default <code>DISPLAY</code> locale.
+ * This method returns the long generic name.
+ * If the display name is not available for the locale,
+ * a fallback based on the country, city, or time zone id will be used.
+ * @return the human-readable name of this time zone in the default locale.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public final java.lang.String getDisplayName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * This method returns the long generic name.
+ * If the display name is not available for the locale,
+ * a fallback based on the country, city, or time zone id will be used.
+ * @param locale the locale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default locale if the given locale is not recognized.
+ */
+
+public final java.lang.String getDisplayName(java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * This method returns the long name, not including daylight savings.
+ * If the display name is not available for the locale,
+ * a fallback based on the country, city, or time zone id will be used.
+ * @param locale the ulocale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default ulocale if the given ulocale is not recognized.
+ */
+
+public final java.lang.String getDisplayName(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the default <code>DISPLAY</code> locale.
+ * If the display name is not available for the locale,
+ * then this method returns a string in the localized GMT offset format
+ * such as <code>GMT[+-]HH:mm</code>.
+ * @param daylight if true, return the daylight savings name.
+ * @param style the output style of the display name.  Valid styles are
+ * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
+ * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
+ * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
+ * @return the human-readable name of this time zone in the default locale.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public final java.lang.String getDisplayName(boolean daylight, int style) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * If the display name is not available for the locale,
+ * then this method returns a string in the localized GMT offset format
+ * such as <code>GMT[+-]HH:mm</code>.
+ * @param daylight if true, return the daylight savings name.
+ * @param style the output style of the display name.  Valid styles are
+ * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
+ * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
+ * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
+ * @param locale the locale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default locale if the given locale is not recognized.
+ * @exception java.lang.IllegalArgumentException style is invalid.
+ */
+
+public java.lang.String getDisplayName(boolean daylight, int style, java.util.Locale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a name of this time zone suitable for presentation to the user
+ * in the specified locale.
+ * If the display name is not available for the locale,
+ * then this method returns a string in the localized GMT offset format
+ * such as <code>GMT[+-]HH:mm</code>.
+ * @param daylight if true, return the daylight savings name.
+ * @param style the output style of the display name.  Valid styles are
+ * <code>SHORT</code>, <code>LONG</code>, <code>SHORT_GENERIC</code>,
+ * <code>LONG_GENERIC</code>, <code>SHORT_GMT</code>, <code>LONG_GMT</code>,
+ * <code>SHORT_COMMONLY_USED</code> or <code>GENERIC_LOCATION</code>.
+ * @param locale the locale in which to supply the display name.
+ * @return the human-readable name of this time zone in the given locale
+ * or in the default locale if the given locale is not recognized.
+ * @exception java.lang.IllegalArgumentException style is invalid.
+ */
+
+public java.lang.String getDisplayName(boolean daylight, int style, android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the amount of time to be added to local standard time
+ * to get local wall clock time.
+ * <p>
+ * The default implementation always returns 3600000 milliseconds
+ * (i.e., one hour) if this time zone observes Daylight Saving
+ * Time. Otherwise, 0 (zero) is returned.
+ * <p>
+ * If an underlying TimeZone implementation subclass supports
+ * historical Daylight Saving Time changes, this method returns
+ * the known latest daylight saving value.
+ *
+ * @return the amount of saving time in milliseconds
+ */
+
+public int getDSTSavings() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Queries if this time zone uses daylight savings time.
+ * @return true if this time zone uses daylight savings time,
+ * false, otherwise.
+ * <p><strong>Note:</strong>The default implementation of
+ * ICU TimeZone uses the tz database, which supports historic
+ * rule changes, for system time zones. With the implementation,
+ * there are time zones that used daylight savings time in the
+ * past, but no longer used currently. For example, Asia/Tokyo has
+ * never used daylight savings time since 1951. Most clients would
+ * expect that this method to return <code>false</code> for such case.
+ * The default implementation of this method returns <code>true</code>
+ * when the time zone uses daylight savings time in the current
+ * (Gregorian) calendar year.
+ */
+
+public abstract boolean useDaylightTime();
+
+/**
+ * Queries if this time zone is in daylight saving time or will observe
+ * daylight saving time at any future time.
+ * <p>The default implementation in this class returns <code>true</code> if {@link #useDaylightTime()}
+ * or {@link #inDaylightTime(java.util.Date) inDaylightTime(new Date())} returns <code>true</code>.
+ * <p>
+ * <strong>Note:</strong> This method was added for {@link java.util.TimeZone} compatibility
+ * support. The {@link java.util.TimeZone#useDaylightTime()} method only checks the last known
+ * rule(s), therefore it may return false even the zone observes daylight saving time currently.
+ * {@link java.util.TimeZone} added <code>observesDaylightTime()</code> to resolve the issue.
+ * In ICU, {@link #useDaylightTime()} works differently. The ICU implementation checks if the
+ * zone uses daylight saving time in the current calendar year. Therefore, it will never return
+ * <code>false</code> if daylight saving time is currently used.
+ * <p>
+ * ICU's TimeZone subclass implementations override this method to support the same behavior
+ * with {@link java.util.TimeZone#observesDaylightTime()}. Unlike {@link #useDaylightTime()},
+ * the implementation does not take past daylight saving time into account, so
+ * that this method may return <code>false</code> even when {@link #useDaylightTime()} returns
+ * <code>true</code>.
+ *
+ * @return <code>true</code> if this time zone is in daylight saving time or will observe
+ * daylight saving time at any future time.
+ * @see #useDaylightTime
+ */
+
+public boolean observesDaylightTime() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Queries if the given date is in daylight savings time in
+ * this time zone.
+ * @param date the given Date.
+ * @return true if the given date is in daylight savings time,
+ * false, otherwise.
+ */
+
+public abstract boolean inDaylightTime(java.util.Date date);
+
+/**
+ * Gets the <code>TimeZone</code> for the given ID.
+ *
+ * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
+ * or a custom ID such as "GMT-8:00". Note that the support of abbreviations,
+ * such as "PST", is for JDK 1.1.x compatibility only and full names should be used.
+ *
+ * @return the specified <code>TimeZone</code>, or a mutable clone of the UNKNOWN_ZONE
+ * if the given ID cannot be understood or if the given ID is "Etc/Unknown".
+ * @see #UNKNOWN_ZONE
+ */
+
+public static android.icu.util.TimeZone getTimeZone(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the <code>TimeZone</code> for the given ID. The instance of <code>TimeZone</code>
+ * returned by this method is immutable. Any methods mutate the instance({@link #setID(java.lang.String)},
+ * {@link #setRawOffset(int)}) will throw <code>UnsupportedOperationException</code> upon its
+ * invocation.
+ *
+ * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles",
+ * or a custom ID such as "GMT-8:00". Note that the support of abbreviations,
+ * such as "PST", is for JDK 1.1.x compatibility only and full names should be used.
+ *
+ * @return the specified <code>TimeZone</code>, or the UNKNOWN_ZONE
+ * if the given ID cannot be understood.
+ * @see #UNKNOWN_ZONE
+ */
+
+public static android.icu.util.TimeZone getFrozenTimeZone(java.lang.String ID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the <code>TimeZone</code> for the given ID and the timezone type.
+ * @param ID the ID for a <code>TimeZone</code>, such as "America/Los_Angeles", or a
+ * custom ID such as "GMT-8:00". Note that the support of abbreviations, such as
+ * "PST", is for JDK 1.1.x compatibility only and full names should be used.
+ * @param type Time zone type, either <code>TIMEZONE_ICU</code> or
+ * <code>TIMEZONE_JDK</code>.
+ * @return the specified <code>TimeZone</code>, or a mutable clone of the UNKNOWN_ZONE if the given ID
+ * cannot be understood or if the given ID is "Etc/Unknown".
+ * @see #UNKNOWN_ZONE
+ */
+
+public static android.icu.util.TimeZone getTimeZone(java.lang.String ID, int type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a set of time zone ID strings with the given filter conditions.
+ * <p><b>Note:</b>A <code>Set</code> returned by this method is
+ * immutable.
+ * @param zoneType      The system time zone type.
+ * @param region        The ISO 3166 two-letter country code or UN M.49 three-digit area code.
+ *                      When null, no filtering done by region.
+ * @param rawOffset     An offset from GMT in milliseconds, ignoring the effect of daylight savings
+ *                      time, if any. When null, no filtering done by zone offset.
+ * @return an immutable set of system time zone IDs.
+ * @see android.icu.util.TimeZone.SystemTimeZoneType
+ */
+
+public static java.util.Set<java.lang.String> getAvailableIDs(android.icu.util.TimeZone.SystemTimeZoneType zoneType, java.lang.String region, java.lang.Integer rawOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new String array containing all system TimeZone IDs
+ * with the given raw offset from GMT.  These IDs may be passed to
+ * <code>get()</code> to construct the corresponding TimeZone
+ * object.
+ * @param rawOffset the offset in milliseconds from GMT
+ * @return an array of IDs for system TimeZones with the given
+ * raw offset.  If there are none, return a zero-length array.
+ * @see #getAvailableIDs(SystemTimeZoneType, String, Integer)
+ */
+
+public static java.lang.String[] getAvailableIDs(int rawOffset) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new String array containing all system TimeZone IDs
+ * associated with the given country.  These IDs may be passed to
+ * <code>get()</code> to construct the corresponding TimeZone
+ * object.
+ * @param country a two-letter ISO 3166 country code, or <code>null</code>
+ * to return zones not associated with any country
+ * @return an array of IDs for system TimeZones in the given
+ * country.  If there are none, return a zero-length array.
+ * @see #getAvailableIDs(SystemTimeZoneType, String, Integer)
+ */
+
+public static java.lang.String[] getAvailableIDs(java.lang.String country) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Return a new String array containing all system TimeZone IDs.
+ * These IDs (and only these IDs) may be passed to
+ * <code>get()</code> to construct the corresponding TimeZone
+ * object.
+ * @return an array of all system TimeZone IDs
+ * @see #getAvailableIDs(SystemTimeZoneType, String, Integer)
+ */
+
+public static java.lang.String[] getAvailableIDs() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the number of IDs in the equivalency group that
+ * includes the given ID.  An equivalency group contains zones
+ * that have the same GMT offset and rules.
+ *
+ * <p>The returned count includes the given ID; it is always &gt;= 1
+ * for valid IDs.  The given ID must be a system time zone.  If it
+ * is not, returns zero.
+ * @param id a system time zone ID
+ * @return the number of zones in the equivalency group containing
+ * 'id', or zero if 'id' is not a valid system ID
+ * @see #getEquivalentID
+ */
+
+public static int countEquivalentIDs(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an ID in the equivalency group that
+ * includes the given ID.  An equivalency group contains zones
+ * that have the same GMT offset and rules.
+ *
+ * <p>The given index must be in the range 0..n-1, where n is the
+ * value returned by <code>countEquivalentIDs(id)</code>.  For
+ * some value of 'index', the returned value will be equal to the
+ * given id.  If the given id is not a valid system time zone, or
+ * if 'index' is out of range, then returns an empty string.
+ * @param id a system time zone ID
+ * @param index a value from 0 to n-1, where n is the value
+ * returned by <code>countEquivalentIDs(id)</code>
+ * @return the ID of the index-th zone in the equivalency group
+ * containing 'id', or an empty string if 'id' is not a valid
+ * system ID or 'index' is out of range
+ * @see #countEquivalentIDs
+ */
+
+public static java.lang.String getEquivalentID(java.lang.String id, int index) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Gets the default <code>TimeZone</code> for this host.
+ * The source of the default <code>TimeZone</code>
+ * may vary with implementation.
+ * @return a default <code>TimeZone</code>.
+ */
+
+public static android.icu.util.TimeZone getDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if this zone has the same rule and offset as another zone.
+ * That is, if this zone differs only in ID, if at all.  Returns false
+ * if the other zone is null.
+ * @param other the <code>TimeZone</code> object to be compared with
+ * @return true if the other zone is not null and is the same as this one,
+ * with the possible exception of the ID
+ */
+
+public boolean hasSameRules(android.icu.util.TimeZone other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides clone.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides equals.
+ * @return <code>true</code> if this object is the same as the obj argument; <code>false</code> otherwise.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Overrides hashCode.
+ * @return a hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the time zone data version currently used by ICU.
+ *
+ * @return the version string, such as "2007f"
+ * @throws java.util.MissingResourceException if ICU time zone resource bundle
+ * is missing or the version information is not available.
+ */
+
+public static java.lang.String getTZDataVersion() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the canonical system time zone ID or the normalized
+ * custom time zone ID for the given time zone ID.
+ * @param id The input time zone ID to be canonicalized.
+ * @return The canonical system time zone ID or the custom time zone ID
+ * in normalized format for the given time zone ID.  When the given time zone ID
+ * is neither a known system time zone ID nor a valid custom time zone ID,
+ * null is returned.
+ */
+
+public static java.lang.String getCanonicalID(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the canonical system time zone ID or the normalized
+ * custom time zone ID for the given time zone ID.
+ * @param id The input time zone ID to be canonicalized.
+ * @param isSystemID When non-null boolean array is specified and
+ * the given ID is a known system time zone ID, true is set to <code>isSystemID[0]</code>
+ * @return The canonical system time zone ID or the custom time zone ID
+ * in normalized format for the given time zone ID.  When the given time zone ID
+ * is neither a known system time zone ID nor a valid custom time zone ID,
+ * null is returned.
+ */
+
+public static java.lang.String getCanonicalID(java.lang.String id, boolean[] isSystemID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the region code associated with the given
+ * system time zone ID. The region code is either ISO 3166
+ * 2-letter country code or UN M.49 3-digit area code.
+ * When the time zone is not associated with a specific location,
+ * for example - "Etc/UTC", "EST5EDT", then this method returns
+ * "001" (UN M.49 area code for World).
+ * @param id the system time zone ID.
+ * @return the region code associated with the given
+ * system time zone ID.
+ * @throws java.lang.IllegalArgumentException if <code>id</code> is not a known system ID.
+ * @see #getAvailableIDs(String)
+ */
+
+public static java.lang.String getRegion(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts a system time zone ID to an equivalent Windows time zone ID. For example,
+ * Windows time zone ID "Pacific Standard Time" is returned for input "America/Los_Angeles".
+ *
+ * <p>There are system time zones that cannot be mapped to Windows zones. When the input
+ * system time zone ID is unknown or unmappable to a Windows time zone, then this
+ * method returns <code>null</code>.
+ *
+ * <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
+ * Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
+ * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
+ * Updating the Time Zone Data</a>.
+ *
+ * @param id A system time zone ID
+ * @return A Windows time zone ID mapped from the input system time zone ID,
+ * or <code>null</code> when the input ID is unknown or unmappable.
+ * @see #getIDForWindowsID(String, String)
+ */
+
+public static java.lang.String getWindowsID(java.lang.String id) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts a Windows time zone ID to an equivalent system time zone ID
+ * for a region. For example, system time zone ID "America/Los_Angeles" is returned
+ * for input Windows ID "Pacific Standard Time" and region "US" (or <code>null</code>),
+ * "America/Vancouver" is returned for the same Windows ID "Pacific Standard Time" and
+ * region "CA".
+ *
+ * <p>Not all Windows time zones can be mapped to system time zones. When the input
+ * Windows time zone ID is unknown or unmappable to a system time zone, then this
+ * method returns <code>null</code>.
+ *
+ * <p>This implementation utilizes <a href="http://unicode.org/cldr/charts/supplemental/zone_tzid.html">
+ * Zone-Tzid mapping data</a>. The mapping data is updated time to time. To get the latest changes,
+ * please read the ICU user guide section <a href="https://unicode-org.github.io/icu/userguide/datetime/timezone#updating-the-time-zone-data">
+ * Updating the Time Zone Data</a>.
+ *
+ * @param winid A Windows time zone ID
+ * @param region A region code, or <code>null</code> if no regional preference.
+ * @return A system time zone ID mapped from the input Windows time zone ID,
+ * or <code>null</code> when the input ID is unknown or unmappable.
+ * @see #getWindowsID(String)
+ */
+
+public static java.lang.String getIDForWindowsID(java.lang.String winid, java.lang.String region) { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public boolean isFrozen() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.util.TimeZone freeze() { throw new RuntimeException("Stub!"); }
+
+/**
+ * {@inheritDoc}
+ */
+
+public android.icu.util.TimeZone cloneAsThawed() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a long name derived from the timezone's fallback name, such as
+ * "United States (Los Angeles)."
+ */
+
+public static final int GENERIC_LOCATION = 7; // 0x7
+
+/**
+ * <strong>[icu]</strong> The immutable GMT (=UTC) time zone. Its ID is "Etc/GMT".
+ */
+
+public static final android.icu.util.TimeZone GMT_ZONE;
+static { GMT_ZONE = null; }
+
+/**
+ * A style specifier for <code>getDisplayName()</code> indicating
+ * a long name, such as "Pacific Standard Time."
+ * @see #SHORT
+ */
+
+public static final int LONG = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a long generic name, such as "Pacific Time."
+ * @see #SHORT_GENERIC
+ */
+
+public static final int LONG_GENERIC = 3; // 0x3
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a long name derived from the timezone's offset, such as "GMT-08:00."
+ * @see #SHORT_GMT
+ */
+
+public static final int LONG_GMT = 5; // 0x5
+
+/**
+ * A style specifier for <code>getDisplayName()</code> indicating
+ * a short name, such as "PST."
+ * @see #LONG
+ */
+
+public static final int SHORT = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a short name derived from the timezone's short standard or daylight
+ * timezone name ignoring commonlyUsed, such as "PDT."
+ */
+
+public static final int SHORT_COMMONLY_USED = 6; // 0x6
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a short generic name, such as "PT."
+ * @see #LONG_GENERIC
+ */
+
+public static final int SHORT_GENERIC = 2; // 0x2
+
+/**
+ * <strong>[icu]</strong> A style specifier for <code>getDisplayName()</code> indicating
+ * a short name derived from the timezone's offset, such as "-0800."
+ * @see #LONG_GMT
+ */
+
+public static final int SHORT_GMT = 4; // 0x4
+
+/**
+ * <strong>[icu]</strong> A time zone implementation type indicating ICU's own TimeZone used by
+ * <code>getTimeZone</code>.
+ */
+
+public static final int TIMEZONE_ICU = 0; // 0x0
+
+/**
+ * <strong>[icu]</strong> A time zone implementation type indicating the {@link java.util.TimeZone}
+ * used by <code>getTimeZone</code>.
+ */
+
+public static final int TIMEZONE_JDK = 1; // 0x1
+
+/**
+ * <strong>[icu]</strong> The immutable (frozen) "unknown" time zone.
+ * It behaves like the GMT/UTC time zone but has the UNKNOWN_ZONE_ID = "Etc/Unknown".
+ * {@link android.icu.util.TimeZone#getTimeZone(java.lang.String) TimeZone#getTimeZone(String)} returns a mutable clone of this
+ * time zone if the input ID is not recognized.
+ *
+ * @see #UNKNOWN_ZONE_ID
+ * @see #getTimeZone(String)
+ */
+
+public static final android.icu.util.TimeZone UNKNOWN_ZONE;
+static { UNKNOWN_ZONE = null; }
+
+/**
+ * <strong>[icu]</strong> The time zone ID reserved for unknown time zone.
+ * @see #getTimeZone(String)
+ */
+
+public static final java.lang.String UNKNOWN_ZONE_ID = "Etc/Unknown";
+/**
+ * <strong>[icu]</strong> System time zone type constants used by filtering zones in
+ * {@link android.icu.util.TimeZone#getAvailableIDs(android.icu.util.TimeZone.SystemTimeZoneType,java.lang.String,java.lang.Integer) TimeZone#getAvailableIDs(SystemTimeZoneType, String, Integer)}
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum SystemTimeZoneType {
+/**
+ * Any system zones.
+ */
+
+ANY,
+/**
+ * Canonical system zones.
+ */
+
+CANONICAL,
+/**
+ * Canonical system zones associated with actual locations.
+ */
+
+CANONICAL_LOCATION;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ULocale.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ULocale.java
new file mode 100644
index 0000000..acfae51
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ULocale.java
@@ -0,0 +1,1749 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ ******************************************************************************
+ * Copyright (C) 2003-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ ******************************************************************************
+ */
+
+
+package android.icu.util;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import android.icu.text.LocaleDisplayNames;
+
+/**
+ * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.Locale}.&nbsp;Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'.
+ *
+ * A class analogous to {@link java.util.Locale} that provides additional
+ * support for ICU protocol.  In ICU 3.0 this class is enhanced to support
+ * RFC 3066 language identifiers.
+ *
+ * <p>Many classes and services in ICU follow a factory idiom, in
+ * which a factory method or object responds to a client request with
+ * an object.  The request includes a locale (the <i>requested</i>
+ * locale), and the returned object is constructed using data for that
+ * locale.  The system may lack data for the requested locale, in
+ * which case the locale fallback mechanism will be invoked until a
+ * populated locale is found (the <i>valid</i> locale).  Furthermore,
+ * even when a populated locale is found (the <i>valid</i> locale),
+ * further fallback may be required to reach a locale containing the
+ * specific data required by the service (the <i>actual</i> locale).
+ *
+ * <p>ULocale performs <b>'normalization'</b> and <b>'canonicalization'</b> of locale ids.
+ * Normalization 'cleans up' ICU locale ids as follows:
+ * <ul>
+ * <li>language, script, country, variant, and keywords are properly cased<br>
+ * (lower, title, upper, upper, and lower case respectively)</li>
+ * <li>hyphens used as separators are converted to underscores</li>
+ * <li>three-letter language and country ids are converted to two-letter
+ * equivalents where available</li>
+ * <li>surrounding spaces are removed from keywords and values</li>
+ * <li>if there are multiple keywords, they are put in sorted order</li>
+ * </ul>
+ * Canonicalization additionally performs the following:
+ * <ul>
+ * <li>POSIX ids are converted to ICU format IDs</li>
+ * <li>Legacy language tags (marked as ?Type: grandfathered? in BCP 47)
+ * are converted to ICU standard form</li>
+ * </ul>
+ * All ULocale constructors automatically normalize the locale id.  To handle
+ * POSIX ids, <code>canonicalize</code> can be called to convert the id
+ * to canonical form, or the <code>canonicalInstance</code> factory method
+ * can be called.
+ *
+ * <p>Note: The <i>actual</i> locale is returned correctly, but the <i>valid</i>
+ * locale is not, in most cases.
+ *
+ * @see java.util.Locale
+ * @author weiv
+ * @author Alan Liu
+ * @author Ram Viswanadha
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class ULocale implements java.io.Serializable, java.lang.Comparable<android.icu.util.ULocale> {
+
+/**
+ * <strong>[icu]</strong> Constructs a ULocale from a RFC 3066 locale ID. The locale ID consists
+ * of optional language, script, country, and variant fields in that order,
+ * separated by underscores, followed by an optional keyword list.  The
+ * script, if present, is four characters long-- this distinguishes it
+ * from a country code, which is two characters long.  Other fields
+ * are distinguished by position as indicated by the underscores.  The
+ * start of the keyword list is indicated by '@', and consists of two
+ * or more keyword/value pairs separated by semicolons(';').
+ *
+ * <p>This constructor does not canonicalize the localeID.  So, for
+ * example, "zh__pinyin" remains unchanged instead of converting
+ * to "zh@collation=pinyin".  By default ICU only recognizes the
+ * latter as specifying pinyin collation.  Use {@link #createCanonical}
+ * or {@link #canonicalize} if you need to canonicalize the localeID.
+ *
+ * @param localeID string representation of the locale, e.g:
+ * "en_US", "sy_Cyrl_YU", "zh__pinyin", "es_ES@currency=EUR;collation=traditional"
+ */
+
+public ULocale(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convenience overload of ULocale(String, String, String) for
+ * compatibility with java.util.Locale.
+ * @see #ULocale(String, String, String)
+ */
+
+public ULocale(java.lang.String a, java.lang.String b) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Constructs a ULocale from a localeID constructed from the three 'fields' a, b, and
+ * c.  These fields are concatenated using underscores to form a localeID of the form
+ * a_b_c, which is then handled like the localeID passed to <code>ULocale(String
+ * localeID)</code>.
+ *
+ * <p>Java locale strings consisting of language, country, and
+ * variant will be handled by this form, since the country code
+ * (being shorter than four letters long) will not be interpreted
+ * as a script code.  If a script code is present, the final
+ * argument ('c') will be interpreted as the country code.  It is
+ * recommended that this constructor only be used to ease porting,
+ * and that clients instead use the single-argument constructor
+ * when constructing a ULocale from a localeID.
+ * @param a first component of the locale id
+ * @param b second component of the locale id
+ * @param c third component of the locale id
+ * @see #ULocale(String)
+ */
+
+public ULocale(java.lang.String a, java.lang.String b, java.lang.String c) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a ULocale object for a {@link java.util.Locale}.
+ * The ULocale is canonicalized.
+ * @param loc a {@link java.util.Locale}
+ */
+
+public static android.icu.util.ULocale forLocale(java.util.Locale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Creates a ULocale from the id by first canonicalizing the id according to CLDR.
+ * @param nonCanonicalID the locale id to canonicalize
+ * @return the locale created from the canonical version of the ID.
+ */
+
+public static android.icu.util.ULocale createCanonical(java.lang.String nonCanonicalID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts this ULocale object to a {@link java.util.Locale}.
+ * @return a {@link java.util.Locale} that either exactly represents this object
+ * or is the closest approximation.
+ */
+
+public java.util.Locale toLocale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current default ULocale.
+ * <p>
+ * The default ULocale is synchronized to the default Java Locale. This method checks
+ * the current default Java Locale and returns an equivalent ULocale.
+ *
+ * @return the default ULocale.
+ */
+
+public static android.icu.util.ULocale getDefault() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the current default ULocale for the specified category.
+ *
+ * @param category the category
+ * @return the default ULocale for the specified category.
+ */
+
+public static android.icu.util.ULocale getDefault(android.icu.util.ULocale.Category category) { throw new RuntimeException("Stub!"); }
+
+/**
+ * This is for compatibility with Locale-- in actuality, since ULocale is
+ * immutable, there is no reason to clone it, so this API returns 'this'.
+ */
+
+public java.lang.Object clone() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hashCode.
+ * @return a hash code value for this object.
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns true if the other object is another ULocale with the
+ * same full name.
+ * Note that since names are not canonicalized, two ULocales that
+ * function identically might not compare equal.
+ *
+ * @return true if this Locale is equal to the specified object.
+ */
+
+public boolean equals(java.lang.Object obj) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares two ULocale for ordering.
+ * <p><b>Note:</b> The order might change in future.
+ *
+ * @param other the ULocale to be compared.
+ * @return a negative integer, zero, or a positive integer as this ULocale is less than, equal to, or greater
+ * than the specified ULocale.
+ * @throws java.lang.NullPointerException if <code>other</code> is null.
+ */
+
+public int compareTo(android.icu.util.ULocale other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu] Note:</strong> Unlike the Locale API, this returns an array of <code>ULocale</code>,
+ * not <code>Locale</code>.
+ *
+ * <p>Returns a list of all installed locales.
+ */
+
+public static android.icu.util.ULocale[] getAvailableLocales() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of all installed locales according to the specified type.
+ */
+
+public static java.util.Collection<android.icu.util.ULocale> getAvailableLocalesByType(android.icu.util.ULocale.AvailableType type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of all 2-letter country codes defined in ISO 3166.
+ * Can be used to create Locales.
+ */
+
+public static java.lang.String[] getISOCountries() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a list of all 2-letter language codes defined in ISO 639.
+ * Can be used to create Locales.
+ * [NOTE:  ISO 639 is not a stable standard-- some languages' codes have changed.
+ * The list this function returns includes both the new and the old codes for the
+ * languages whose codes have changed.]
+ */
+
+public static java.lang.String[] getISOLanguages() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the language code for this locale, which will either be the empty string
+ * or a lowercase ISO 639 code.
+ * @see #getDisplayLanguage()
+ * @see #getDisplayLanguage(ULocale)
+ */
+
+public java.lang.String getLanguage() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the language code for the locale ID,
+ * which will either be the empty string
+ * or a lowercase ISO 639 code.
+ * @see #getDisplayLanguage()
+ * @see #getDisplayLanguage(ULocale)
+ */
+
+public static java.lang.String getLanguage(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the script code for this locale, which might be the empty string.
+ * @see #getDisplayScript()
+ * @see #getDisplayScript(ULocale)
+ */
+
+public java.lang.String getScript() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the script code for the specified locale, which might be the empty
+ * string.
+ * @see #getDisplayScript()
+ * @see #getDisplayScript(ULocale)
+ */
+
+public static java.lang.String getScript(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the country/region code for this locale, which will either be the empty string
+ * or an uppercase ISO 3166 2-letter code.
+ * @see #getDisplayCountry()
+ * @see #getDisplayCountry(ULocale)
+ */
+
+public java.lang.String getCountry() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the country/region code for this locale, which will either be the empty string
+ * or an uppercase ISO 3166 2-letter code.
+ * @param localeID The locale identification string.
+ * @see #getDisplayCountry()
+ * @see #getDisplayCountry(ULocale)
+ */
+
+public static java.lang.String getCountry(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the variant code for this locale, which might be the empty string.
+ * @see #getDisplayVariant()
+ * @see #getDisplayVariant(ULocale)
+ */
+
+public java.lang.String getVariant() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the variant code for the specified locale, which might be the empty string.
+ * @see #getDisplayVariant()
+ * @see #getDisplayVariant(ULocale)
+ */
+
+public static java.lang.String getVariant(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the fallback locale for the specified locale, which might be the
+ * empty string.
+ */
+
+public static java.lang.String getFallback(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the fallback locale for this locale.  If this locale is root,
+ * returns null.
+ */
+
+public android.icu.util.ULocale getFallback() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) base name for this locale,
+ * like {@link #getName()}, but without keywords.
+ *
+ * @return the base name as a String.
+ */
+
+public java.lang.String getBaseName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) base name for the specified locale,
+ * like {@link #getName(java.lang.String)}, but without keywords.
+ *
+ * @param localeID the locale ID as a string
+ * @return the base name as a String.
+ */
+
+public static java.lang.String getBaseName(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) full name for this locale.
+ *
+ * @return String the full name of the localeID
+ */
+
+public java.lang.String getName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the (normalized) full name for the specified locale.
+ *
+ * @param localeID the localeID as a string
+ * @return String the full name of the localeID
+ */
+
+public static java.lang.String getName(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a string representation of this object.
+ * @return a string representation of the object.
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an iterator over keywords for this locale.  If there
+ * are no keywords, returns null.
+ * @return iterator over keywords, or null if there are no keywords.
+ */
+
+public java.util.Iterator<java.lang.String> getKeywords() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns an iterator over keywords for the specified locale.  If there
+ * are no keywords, returns null.
+ * @return an iterator over the keywords in the specified locale, or null
+ * if there are no keywords.
+ */
+
+public static java.util.Iterator<java.lang.String> getKeywords(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the value for a keyword in this locale. If the keyword is not
+ * defined, returns null.
+ * @param keywordName name of the keyword whose value is desired. Case insensitive.
+ * @return the value of the keyword, or null.
+ */
+
+public java.lang.String getKeywordValue(java.lang.String keywordName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the value for a keyword in the specified locale. If the keyword is
+ * not defined, returns null.  The locale name does not need to be normalized.
+ * @param keywordName name of the keyword whose value is desired. Case insensitive.
+ * @return String the value of the keyword as a string
+ */
+
+public static java.lang.String getKeywordValue(java.lang.String localeID, java.lang.String keywordName) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the canonical name according to CLDR for the specified locale ID.
+ * This is used to convert POSIX and other legacy IDs to standard ICU form.
+ * @param localeID the locale id
+ * @return the canonicalized id
+ */
+
+public static java.lang.String canonicalize(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Given a keyword and a value, return a new locale with an updated
+ * keyword and value.  If the keyword is null, this removes all keywords from the locale id.
+ * Otherwise, if the value is null, this removes the value for this keyword from the
+ * locale id.  Otherwise, this adds/replaces the value for this keyword in the locale id.
+ * The keyword and value must not be empty.
+ *
+ * <p>Related: {@link #getBaseName()} returns the locale ID string with all keywords removed.
+ *
+ * @param keyword the keyword to add/remove, or null to remove all keywords.
+ * @param value the value to add/set, or null to remove this particular keyword.
+ * @return the updated locale
+ */
+
+public android.icu.util.ULocale setKeywordValue(java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Given a locale id, a keyword, and a value, return a new locale id with an updated
+ * keyword and value.  If the keyword is null, this removes all keywords from the locale id.
+ * Otherwise, if the value is null, this removes the value for this keyword from the
+ * locale id.  Otherwise, this adds/replaces the value for this keyword in the locale id.
+ * The keyword and value must not be empty.
+ *
+ * <p>Related: {@link #getBaseName(java.lang.String)} returns the locale ID string with all keywords removed.
+ *
+ * @param localeID the locale id to modify
+ * @param keyword the keyword to add/remove, or null to remove all keywords.
+ * @param value the value to add/set, or null to remove this particular keyword.
+ * @return the updated locale id
+ */
+
+public static java.lang.String setKeywordValue(java.lang.String localeID, java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a three-letter abbreviation for this locale's language.  If the locale
+ * doesn't specify a language, returns the empty string.  Otherwise, returns
+ * a lowercase ISO 639-2/T language code.
+ * The ISO 639-2 language codes can be found on-line at
+ *   <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a>
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter language abbreviation is not available for this locale.
+ */
+
+public java.lang.String getISO3Language() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a three-letter abbreviation for this locale's language.  If the locale
+ * doesn't specify a language, returns the empty string.  Otherwise, returns
+ * a lowercase ISO 639-2/T language code.
+ * The ISO 639-2 language codes can be found on-line at
+ *   <a href="ftp://dkuug.dk/i18n/iso-639-2.txt"><code>ftp://dkuug.dk/i18n/iso-639-2.txt</code></a>
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter language abbreviation is not available for this locale.
+ */
+
+public static java.lang.String getISO3Language(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a three-letter abbreviation for this locale's country/region.  If the locale
+ * doesn't specify a country, returns the empty string.  Otherwise, returns
+ * an uppercase ISO 3166 3-letter country code.
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter country abbreviation is not available for this locale.
+ */
+
+public java.lang.String getISO3Country() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a three-letter abbreviation for this locale's country/region.  If the locale
+ * doesn't specify a country, returns the empty string.  Otherwise, returns
+ * an uppercase ISO 3166 3-letter country code.
+ * @exception java.util.MissingResourceException Throws MissingResourceException if the
+ * three-letter country abbreviation is not available for this locale.
+ */
+
+public static java.lang.String getISO3Country(java.lang.String localeID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns whether this locale's script is written right-to-left.
+ * If there is no script subtag, then the likely script is used,
+ * see {@link #addLikelySubtags(android.icu.util.ULocale)}.
+ * If no likely script is known, then false is returned.
+ *
+ * <p>A script is right-to-left according to the CLDR script metadata
+ * which corresponds to whether the script's letters have Bidi_Class=R or AL.
+ *
+ * <p>Returns true for "ar" and "en-Hebr", false for "zh" and "fa-Cyrl".
+ *
+ * @return true if the locale's script is written right-to-left
+ */
+
+public boolean isRightToLeft() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's language localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized language name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayLanguage() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's language localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public java.lang.String getDisplayLanguage(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguage(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguage(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's language localized for display in the default <code>DISPLAY</code> locale.
+ * If a dialect name is present in the data, then it is returned.
+ * @return the localized language name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayLanguageWithDialect() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's language localized for display in the provided locale.
+ * If a dialect name is present in the data, then it is returned.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public java.lang.String getDisplayLanguageWithDialect(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * If a dialect name is present in the data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguageWithDialect(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's language localized for display in the provided locale.
+ * If a dialect name is present in the data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose language will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized language name.
+ */
+
+public static java.lang.String getDisplayLanguageWithDialect(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's script localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized script name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayScript() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's script localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized script name.
+ */
+
+public java.lang.String getDisplayScript(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's script localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose script will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized script name.
+ */
+
+public static java.lang.String getDisplayScript(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's script localized for display in the provided locale.
+ * @param localeID the id of the locale whose script will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized script name.
+ */
+
+public static java.lang.String getDisplayScript(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's country localized for display in the default <code>DISPLAY</code> locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * @return the localized country name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayCountry() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's country localized for display in the provided locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized country name.
+ */
+
+public java.lang.String getDisplayCountry(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's country localized for display in the provided locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose country will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized country name.
+ */
+
+public static java.lang.String getDisplayCountry(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's country localized for display in the provided locale.
+ * <b>Warning: </b>this is for the region part of a valid locale ID; it cannot just be the region code (like "FR").
+ * To get the display name for a region alone, or for other options, use {@link android.icu.text.LocaleDisplayNames LocaleDisplayNames} instead.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose country will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized country name.
+ */
+
+public static java.lang.String getDisplayCountry(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's variant localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized variant name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayVariant() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale's variant localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized variant name.
+ */
+
+public java.lang.String getDisplayVariant(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's variant localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose variant will be displayed
+ * @param displayLocaleID the id of the locale in which to display the name.
+ * @return the localized variant name.
+ */
+
+public static java.lang.String getDisplayVariant(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a locale's variant localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose variant will be displayed.
+ * @param displayLocale the locale in which to display the name.
+ * @return the localized variant name.
+ */
+
+public static java.lang.String getDisplayVariant(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword localized for display in the default <code>DISPLAY</code> locale.
+ * @param keyword the keyword to be displayed.
+ * @return the localized keyword name.
+ * @see #getKeywords()
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public static java.lang.String getDisplayKeyword(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword localized for display in the specified locale.
+ * @param keyword the keyword to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the keyword.
+ * @return the localized keyword name.
+ * @see #getKeywords(String)
+ */
+
+public static java.lang.String getDisplayKeyword(java.lang.String keyword, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword localized for display in the specified locale.
+ * @param keyword the keyword to be displayed.
+ * @param displayLocale the locale in which to display the keyword.
+ * @return the localized keyword name.
+ * @see #getKeywords(String)
+ */
+
+public static java.lang.String getDisplayKeyword(java.lang.String keyword, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the default <code>DISPLAY</code> locale.
+ * @param keyword the keyword whose value is to be displayed.
+ * @return the localized value name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayKeywordValue(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the specified locale.
+ * @param keyword the keyword whose value is to be displayed.
+ * @param displayLocale the locale in which to display the value.
+ * @return the localized value name.
+ */
+
+public java.lang.String getDisplayKeywordValue(java.lang.String keyword, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the specified locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose keyword value is to be displayed.
+ * @param keyword the keyword whose value is to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the value.
+ * @return the localized value name.
+ */
+
+public static java.lang.String getDisplayKeywordValue(java.lang.String localeID, java.lang.String keyword, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns a keyword value localized for display in the specified locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the id of the locale whose keyword value is to be displayed.
+ * @param keyword the keyword whose value is to be displayed.
+ * @param displayLocale the id of the locale in which to display the value.
+ * @return the localized value name.
+ */
+
+public static java.lang.String getDisplayKeywordValue(java.lang.String localeID, java.lang.String keyword, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale name localized for display in the default <code>DISPLAY</code> locale.
+ * @return the localized locale name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayName() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns this locale name localized for display in the provided locale.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public java.lang.String getDisplayName(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayName(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayName(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale name localized for display in the default <code>DISPLAY</code> locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * @return the localized locale name.
+ * @see android.icu.util.ULocale.Category#DISPLAY
+ */
+
+public java.lang.String getDisplayNameWithDialect() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale name localized for display in the provided locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public java.lang.String getDisplayNameWithDialect(android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocaleID the id of the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayNameWithDialect(java.lang.String localeID, java.lang.String displayLocaleID) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns the locale ID localized for display in the provided locale.
+ * If a dialect name is present in the locale data, then it is returned.
+ * This is a cover for the ICU4C API.
+ * @param localeID the locale whose name is to be displayed.
+ * @param displayLocale the locale in which to display the locale name.
+ * @return the localized locale name.
+ */
+
+public static java.lang.String getDisplayNameWithDialect(java.lang.String localeID, android.icu.util.ULocale displayLocale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's layout orientation for characters.  The possible
+ * values are "left-to-right", "right-to-left", "top-to-bottom" or
+ * "bottom-to-top".
+ * @return The locale's layout orientation for characters.
+ */
+
+public java.lang.String getCharacterOrientation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Returns this locale's layout orientation for lines.  The possible
+ * values are "left-to-right", "right-to-left", "top-to-bottom" or
+ * "bottom-to-top".
+ * @return The locale's layout orientation for lines.
+ */
+
+public java.lang.String getLineOrientation() { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on a HTTP formatted list of acceptable locales, determine an available
+ * locale for the user.  NullPointerException is thrown if acceptLanguageList or
+ * availableLocales is null.  If fallback is non-null, it will contain true if a
+ * fallback locale (one not in the acceptLanguageList) was returned.  The value on
+ * entry is ignored.  ULocale will be one of the locales in availableLocales, or the
+ * ROOT ULocale if if a ROOT locale was used as a fallback (because nothing else in
+ * availableLocales matched).  No ULocale array element should be null; behavior is
+ * undefined if this is the case.
+ *
+ * @param acceptLanguageList list in HTTP "Accept-Language:" format of acceptable locales
+ * @param availableLocales list of available locales. One of these will be returned.
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the availableLocales list, or null if none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(java.lang.String acceptLanguageList, android.icu.util.ULocale[] availableLocales, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on a list of acceptable locales, determine an available locale for the
+ * user.  NullPointerException is thrown if acceptLanguageList or availableLocales is
+ * null.  If fallback is non-null, it will contain true if a fallback locale (one not
+ * in the acceptLanguageList) was returned.  The value on entry is ignored.  ULocale
+ * will be one of the locales in availableLocales, or the ROOT ULocale if if a ROOT
+ * locale was used as a fallback (because nothing else in availableLocales matched).
+ * No ULocale array element should be null; behavior is undefined if this is the case.
+ *
+ * @param acceptLanguageList list of acceptable locales
+ * @param availableLocales list of available locales. One of these will be returned.
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the availableLocales list, or null if none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[] acceptLanguageList, android.icu.util.ULocale[] availableLocales, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on a HTTP formatted list of acceptable locales, determine an available
+ * locale for the user.  NullPointerException is thrown if acceptLanguageList or
+ * availableLocales is null.  If fallback is non-null, it will contain true if a
+ * fallback locale (one not in the acceptLanguageList) was returned.  The value on
+ * entry is ignored.  ULocale will be one of the locales in availableLocales, or the
+ * ROOT ULocale if if a ROOT locale was used as a fallback (because nothing else in
+ * availableLocales matched).  No ULocale array element should be null; behavior is
+ * undefined if this is the case.  This function will choose a locale from the
+ * ULocale.getAvailableLocales() list as available.
+ *
+ * @param acceptLanguageList list in HTTP "Accept-Language:" format of acceptable locales
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the ULocale.getAvailableLocales() list, or null if
+ * none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(java.lang.String acceptLanguageList, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Based on an ordered array of acceptable locales, determine an available
+ * locale for the user.  NullPointerException is thrown if acceptLanguageList or
+ * availableLocales is null.  If fallback is non-null, it will contain true if a
+ * fallback locale (one not in the acceptLanguageList) was returned.  The value on
+ * entry is ignored.  ULocale will be one of the locales in availableLocales, or the
+ * ROOT ULocale if if a ROOT locale was used as a fallback (because nothing else in
+ * availableLocales matched).  No ULocale array element should be null; behavior is
+ * undefined if this is the case.  This function will choose a locale from the
+ * ULocale.getAvailableLocales() list as available.
+ *
+ * @param acceptLanguageList ordered array of acceptable locales (preferred are listed first)
+ * @param fallback if non-null, a 1-element array containing a boolean to be set with
+ * the fallback status
+ * @return one of the locales from the ULocale.getAvailableLocales() list, or null if none match
+ */
+
+public static android.icu.util.ULocale acceptLanguage(android.icu.util.ULocale[] acceptLanguageList, boolean[] fallback) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Adds the likely subtags for a provided locale ID, per the algorithm
+ * described in the following CLDR technical report:
+ *
+ *   http://www.unicode.org/reports/tr35/#Likely_Subtags
+ *
+ * If the provided ULocale instance is already in the maximal form, or there is no
+ * data available available for maximization, it will be returned.  For example,
+ * "und-Zzzz" cannot be maximized, since there is no reasonable maximization.
+ * Otherwise, a new ULocale instance with the maximal form is returned.
+ *
+ * Examples:
+ *
+ * "en" maximizes to "en_Latn_US"
+ *
+ * "de" maximizes to "de_Latn_US"
+ *
+ * "sr" maximizes to "sr_Cyrl_RS"
+ *
+ * "sh" maximizes to "sr_Latn_RS" (Note this will not reverse.)
+ *
+ * "zh_Hani" maximizes to "zh_Hans_CN" (Note this will not reverse.)
+ *
+ * @param loc The ULocale to maximize
+ * @return The maximized ULocale instance.
+ */
+
+public static android.icu.util.ULocale addLikelySubtags(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Minimizes the subtags for a provided locale ID, per the algorithm described
+ * in the following CLDR technical report:<blockquote>
+ *
+ *   <a href="http://www.unicode.org/reports/tr35/#Likely_Subtags"
+ *>http://www.unicode.org/reports/tr35/#Likely_Subtags</a></blockquote>
+ *
+ * If the provided ULocale instance is already in the minimal form, or there
+ * is no data available for minimization, it will be returned.  Since the
+ * minimization algorithm relies on proper maximization, see the comments
+ * for addLikelySubtags for reasons why there might not be any data.
+ *
+ * Examples:<pre>
+ *
+ * "en_Latn_US" minimizes to "en"
+ *
+ * "de_Latn_US" minimizes to "de"
+ *
+ * "sr_Cyrl_RS" minimizes to "sr"
+ *
+ * "zh_Hant_TW" minimizes to "zh_TW" (The region is preferred to the
+ * script, and minimizing to "zh" would imply "zh_Hans_CN".) </pre>
+ *
+ * @param loc The ULocale to minimize
+ * @return The minimized ULocale instance.
+ */
+
+public static android.icu.util.ULocale minimizeSubtags(android.icu.util.ULocale loc) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the extension (or private use) value associated with
+ * the specified key, or null if there is no extension
+ * associated with the key. To be well-formed, the key must be one
+ * of <code>[0-9A-Za-z]</code>. Keys are case-insensitive, so
+ * for example 'z' and 'Z' represent the same extension.
+ *
+ * @param key the extension key
+ * @return The extension, or null if this locale defines no
+ * extension for the specified key.
+ * @throws java.lang.IllegalArgumentException if key is not well-formed
+ * @see #PRIVATE_USE_EXTENSION
+ * @see #UNICODE_LOCALE_EXTENSION
+ */
+
+public java.lang.String getExtension(char key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of extension keys associated with this locale, or the
+ * empty set if it has no extensions. The returned set is unmodifiable.
+ * The keys will all be lower-case.
+ *
+ * @return the set of extension keys, or the empty set if this locale has
+ * no extensions
+ */
+
+public java.util.Set<java.lang.Character> getExtensionKeys() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of unicode locale attributes associated with
+ * this locale, or the empty set if it has no attributes. The
+ * returned set is unmodifiable.
+ *
+ * @return The set of attributes.
+ */
+
+public java.util.Set<java.lang.String> getUnicodeLocaleAttributes() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the Unicode locale type associated with the specified Unicode locale key
+ * for this locale. Returns the empty string for keys that are defined with no type.
+ * Returns null if the key is not defined. Keys are case-insensitive. The key must
+ * be two alphanumeric characters ([0-9a-zA-Z]), or an IllegalArgumentException is
+ * thrown.
+ *
+ * @param key the Unicode locale key
+ * @return The Unicode locale type associated with the key, or null if the
+ * locale does not define the key.
+ * @throws java.lang.IllegalArgumentException if the key is not well-formed
+ * @throws java.lang.NullPointerException if <code>key</code> is null
+ */
+
+public java.lang.String getUnicodeLocaleType(java.lang.String key) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the set of Unicode locale keys defined by this locale, or the empty set if
+ * this locale has none.  The returned set is immutable.  Keys are all lower case.
+ *
+ * @return The set of Unicode locale keys, or the empty set if this locale has
+ * no Unicode locale keywords.
+ */
+
+public java.util.Set<java.lang.String> getUnicodeLocaleKeys() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a well-formed IETF BCP 47 language tag representing
+ * this locale.
+ *
+ * <p>If this <code>ULocale</code> has a language, script, country, or
+ * variant that does not satisfy the IETF BCP 47 language tag
+ * syntax requirements, this method handles these fields as
+ * described below:
+ *
+ * <p><b>Language:</b> If language is empty, or not well-formed
+ * (for example "a" or "e2"), it will be emitted as "und" (Undetermined).
+ *
+ * <p><b>Script:</b> If script is not well-formed (for example "12"
+ * or "Latin"), it will be omitted.
+ *
+ * <p><b>Country:</b> If country is not well-formed (for example "12"
+ * or "USA"), it will be omitted.
+ *
+ * <p><b>Variant:</b> If variant <b>is</b> well-formed, each sub-segment
+ * (delimited by '-' or '_') is emitted as a subtag.  Otherwise:
+ * <ul>
+ *
+ * <li>if all sub-segments match <code>[0-9a-zA-Z]{1,8}</code>
+ * (for example "WIN" or "Oracle_JDK_Standard_Edition"), the first
+ * ill-formed sub-segment and all following will be appended to
+ * the private use subtag.  The first appended subtag will be
+ * "lvariant", followed by the sub-segments in order, separated by
+ * hyphen. For example, "x-lvariant-WIN",
+ * "Oracle-x-lvariant-JDK-Standard-Edition".
+ *
+ * <li>if any sub-segment does not match
+ * <code>[0-9a-zA-Z]{1,8}</code>, the variant will be truncated
+ * and the problematic sub-segment and all following sub-segments
+ * will be omitted.  If the remainder is non-empty, it will be
+ * emitted as a private use subtag as above (even if the remainder
+ * turns out to be well-formed).  For example,
+ * "Solaris_isjustthecoolestthing" is emitted as
+ * "x-lvariant-Solaris", not as "solaris".</li></ul>
+ *
+ * <p><b>Note:</b> Although the language tag created by this
+ * method is well-formed (satisfies the syntax requirements
+ * defined by the IETF BCP 47 specification), it is not
+ * necessarily a valid BCP 47 language tag.  For example,
+ * <pre>
+ *   new Locale("xx", "YY").toLanguageTag();</pre>
+ *
+ * will return "xx-YY", but the language subtag "xx" and the
+ * region subtag "YY" are invalid because they are not registered
+ * in the IANA Language Subtag Registry.
+ *
+ * @return a BCP47 language tag representing the locale
+ * @see #forLanguageTag(String)
+ */
+
+public java.lang.String toLanguageTag() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns a locale for the specified IETF BCP 47 language tag string.
+ *
+ * <p>If the specified language tag contains any ill-formed subtags,
+ * the first such subtag and all following subtags are ignored.  Compare
+ * to {@link android.icu.util.ULocale.Builder#setLanguageTag ULocale.Builder#setLanguageTag} which throws an exception
+ * in this case.
+ *
+ * <p>The following <b>conversions</b> are performed:
+ * <ul>
+ *
+ * <li>The language code "und" is mapped to language "".
+ *
+ * <li>The portion of a private use subtag prefixed by "lvariant",
+ * if any, is removed and appended to the variant field in the
+ * result locale (without case normalization).  If it is then
+ * empty, the private use subtag is discarded:
+ *
+ * <pre>
+ *     ULocale loc;
+ *     loc = ULocale.forLanguageTag("en-US-x-lvariant-icu4j);
+ *     loc.getVariant(); // returns "ICU4J"
+ *     loc.getExtension('x'); // returns null
+ *
+ *     loc = Locale.forLanguageTag("de-icu4j-x-URP-lvariant-Abc-Def");
+ *     loc.getVariant(); // returns "ICU4J_ABC_DEF"
+ *     loc.getExtension('x'); // returns "urp"
+ * </pre>
+ *
+ * <li>When the languageTag argument contains an extlang subtag,
+ * the first such subtag is used as the language, and the primary
+ * language subtag and other extlang subtags are ignored:
+ *
+ * <pre>
+ *     ULocale.forLanguageTag("ar-aao").getLanguage(); // returns "aao"
+ *     ULocale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US"
+ * </pre>
+ *
+ * <li>Case is normalized. Language is normalized to lower case,
+ * script to title case, country to upper case, variant to upper case,
+ * and extensions to lower case.
+ *
+ * </ul>
+ *
+ * <p>This implements the 'Language-Tag' production of BCP 47, and so
+ * supports legacy language tags (marked as ?Type: grandfathered? in BCP 47)
+ * (regular and irregular) as well as private use language tags.
+ *
+ * <p>Stand-alone private use tags are represented as empty language and extension 'x-whatever',
+ * and legacy tags are converted to their canonical replacements where they exist.
+ *
+ * <p>Note that a few legacy tags have no modern replacement;
+ * these will be converted using the fallback described in
+ * the first paragraph, so some information might be lost.
+ *
+ * <p><b>Note</b>: there is no guarantee that <code>toLanguageTag</code>
+ * and <code>forLanguageTag</code> will round-trip.
+ *
+ * @param languageTag the language tag
+ * @return The locale that best represents the language tag.
+ * @throws java.lang.NullPointerException if <code>languageTag</code> is <code>null</code>
+ * @see #toLanguageTag()
+ * @see android.icu.util.ULocale.Builder#setLanguageTag(String)
+ */
+
+public static android.icu.util.ULocale forLanguageTag(java.lang.String languageTag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword (legacy key, or BCP 47 Unicode locale
+ * extension key) to the equivalent BCP 47 Unicode locale extension key.
+ * For example, BCP 47 Unicode locale extension key "co" is returned for
+ * the input keyword "collation".
+ * <p>
+ * When the specified keyword is unknown, but satisfies the BCP syntax,
+ * then the lower-case version of the input keyword will be returned.
+ * For example,
+ * <code>toUnicodeLocaleKey("ZZ")</code> returns "zz".
+ *
+ * @param keyword       the input locale keyword (either legacy key
+ *                      such as "collation" or BCP 47 Unicode locale extension
+ *                      key such as "co").
+ * @return              the well-formed BCP 47 Unicode locale extension key,
+ *                      or null if the specified locale keyword cannot be mapped
+ *                      to a well-formed BCP 47 Unicode locale extension key.
+ * @see #toLegacyKey(String)
+ */
+
+public static java.lang.String toUnicodeLocaleKey(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword value (legacy type, or BCP 47
+ * Unicode locale extension type) to the well-formed BCP 47 Unicode locale
+ * extension type for the specified keyword (category). For example, BCP 47
+ * Unicode locale extension type "phonebk" is returned for the input
+ * keyword value "phonebook", with the keyword "collation" (or "co").
+ * <p>
+ * When the specified keyword is not recognized, but the specified value
+ * satisfies the syntax of the BCP 47 Unicode locale extension type,
+ * or when the specified keyword allows 'variable' type and the specified
+ * value satisfies the syntax, the lower-case version of the input value
+ * will be returned. For example,
+ * <code>toUnicodeLocaleType("Foo", "Bar")</code> returns "bar",
+ * <code>toUnicodeLocaleType("variableTop", "00A4")</code> returns "00a4".
+ *
+ * @param keyword       the locale keyword (either legacy key such as
+ *                      "collation" or BCP 47 Unicode locale extension
+ *                      key such as "co").
+ * @param value         the locale keyword value (either legacy type
+ *                      such as "phonebook" or BCP 47 Unicode locale extension
+ *                      type such as "phonebk").
+ * @return              the well-formed BCP47 Unicode locale extension type,
+ *                      or null if the locale keyword value cannot be mapped to
+ *                      a well-formed BCP 47 Unicode locale extension type.
+ * @see #toLegacyType(String, String)
+ */
+
+public static java.lang.String toUnicodeLocaleType(java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword (BCP 47 Unicode locale extension key, or
+ * legacy key) to the legacy key. For example, legacy key "collation" is
+ * returned for the input BCP 47 Unicode locale extension key "co".
+ *
+ * @param keyword       the input locale keyword (either BCP 47 Unicode locale
+ *                      extension key or legacy key).
+ * @return              the well-formed legacy key, or null if the specified
+ *                      keyword cannot be mapped to a well-formed legacy key.
+ * @see #toUnicodeLocaleKey(String)
+ */
+
+public static java.lang.String toLegacyKey(java.lang.String keyword) { throw new RuntimeException("Stub!"); }
+
+/**
+ * <strong>[icu]</strong> Converts the specified keyword value (BCP 47 Unicode locale extension type,
+ * or legacy type or type alias) to the canonical legacy type. For example,
+ * the legacy type "phonebook" is returned for the input BCP 47 Unicode
+ * locale extension type "phonebk" with the keyword "collation" (or "co").
+ * <p>
+ * When the specified keyword is not recognized, but the specified value
+ * satisfies the syntax of legacy key, or when the specified keyword
+ * allows 'variable' type and the specified value satisfies the syntax,
+ * the lower-case version of the input value will be returned.
+ * For example,
+ * <code>toLegacyType("Foo", "Bar")</code> returns "bar",
+ * <code>toLegacyType("vt", "00A4")</code> returns "00a4".
+ *
+ * @param keyword       the locale keyword (either legacy keyword such as
+ *                      "collation" or BCP 47 Unicode locale extension
+ *                      key such as "co").
+ * @param value         the locale keyword value (either BCP 47 Unicode locale
+ *                      extension type such as "phonebk" or legacy keyword value
+ *                      such as "phonebook").
+ * @return              the well-formed legacy type, or null if the specified
+ *                      keyword value cannot be mapped to a well-formed legacy
+ *                      type.
+ * @see #toUnicodeLocaleType(String, String)
+ */
+
+public static java.lang.String toLegacyType(java.lang.String keyword, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale CANADA;
+static { CANADA = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale CANADA_FRENCH;
+static { CANADA_FRENCH = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale CHINA;
+static { CHINA = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale CHINESE;
+static { CHINESE = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale ENGLISH;
+static { ENGLISH = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale FRANCE;
+static { FRANCE = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale FRENCH;
+static { FRENCH = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale GERMAN;
+static { GERMAN = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale GERMANY;
+static { GERMANY = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale ITALIAN;
+static { ITALIAN = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale ITALY;
+static { ITALY = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale JAPAN;
+static { JAPAN = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale JAPANESE;
+static { JAPANESE = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale KOREA;
+static { KOREA = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale KOREAN;
+static { KOREAN = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale PRC;
+static { PRC = null; }
+
+/**
+ * The key for the private use locale extension ('x').
+ *
+ * @see #getExtension(char)
+ * @see android.icu.util.ULocale.Builder#setExtension(char, String)
+ */
+
+public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
+
+/**
+ * The root ULocale.
+ */
+
+public static final android.icu.util.ULocale ROOT;
+static { ROOT = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale SIMPLIFIED_CHINESE;
+static { SIMPLIFIED_CHINESE = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale TAIWAN;
+static { TAIWAN = null; }
+
+/**
+ * Useful constant for language.
+ */
+
+public static final android.icu.util.ULocale TRADITIONAL_CHINESE;
+static { TRADITIONAL_CHINESE = null; }
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale UK;
+static { UK = null; }
+
+/**
+ * The key for Unicode locale extension ('u').
+ *
+ * @see #getExtension(char)
+ * @see android.icu.util.ULocale.Builder#setExtension(char, String)
+ */
+
+public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
+
+/**
+ * Useful constant for country/region.
+ */
+
+public static final android.icu.util.ULocale US;
+static { US = null; }
+/**
+ * Types for {@link android.icu.util.ULocale#getAvailableLocalesByType ULocale#getAvailableLocalesByType}
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum AvailableType {
+/**
+ * Locales that return data when passed to ICU APIs,
+ * but not including legacy or alias locales.
+ */
+
+DEFAULT,
+/**
+ * Legacy or alias locales that return data when passed to ICU APIs.
+ * Examples of supported legacy or alias locales:
+ *
+ * <ul>
+ * <li>iw (alias to he)
+ * <li>mo (alias to ro)
+ * <li>zh_CN (alias to zh_Hans_CN)
+ * <li>sr_BA (alias to sr_Cyrl_BA)
+ * <li>ars (alias to ar_SA)
+ * </ul>
+ *
+ * The locales in this set are disjoint from the ones in
+ * DEFAULT. To get both sets at the same time, use
+ * WITH_LEGACY_ALIASES.
+ */
+
+ONLY_LEGACY_ALIASES,
+/**
+ * The union of the locales in DEFAULT and ONLY_LEGACY_ALIASES.
+ */
+
+WITH_LEGACY_ALIASES;
+}
+
+/**
+ * <code>Builder</code> is used to build instances of <code>ULocale</code>
+ * from values configured by the setters.  Unlike the <code>ULocale</code>
+ * constructors, the <code>Builder</code> checks if a value configured by a
+ * setter satisfies the syntax requirements defined by the <code>ULocale</code>
+ * class.  A <code>ULocale</code> object created by a <code>Builder</code> is
+ * well-formed and can be transformed to a well-formed IETF BCP 47 language tag
+ * without losing information.
+ *
+ * <p><b>Note:</b> The <code>ULocale</code> class does not provide any
+ * syntactic restrictions on variant, while BCP 47 requires each variant
+ * subtag to be 5 to 8 alphanumerics or a single numeric followed by 3
+ * alphanumerics.  The method <code>setVariant</code> throws
+ * <code>IllformedLocaleException</code> for a variant that does not satisfy
+ * this restriction. If it is necessary to support such a variant, use a
+ * ULocale constructor.  However, keep in mind that a <code>ULocale</code>
+ * object created this way might lose the variant information when
+ * transformed to a BCP 47 language tag.
+ *
+ * <p>The following example shows how to create a <code>Locale</code> object
+ * with the <code>Builder</code>.
+ * <blockquote>
+ * <pre>
+ *     ULocale aLocale = new Builder().setLanguage("sr").setScript("Latn").setRegion("RS").build();
+ * </pre>
+ * </blockquote>
+ *
+ * <p>Builders can be reused; <code>clear()</code> resets all
+ * fields to their default values.
+ *
+ * @see android.icu.util.ULocale#toLanguageTag()
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Builder {
+
+/**
+ * Constructs an empty Builder. The default value of all
+ * fields, extensions, and private use information is the
+ * empty string.
+ */
+
+public Builder() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the <code>Builder</code> to match the provided
+ * <code>locale</code>.  Existing state is discarded.
+ *
+ * <p>All fields of the locale must be well-formed, see {@link java.util.Locale Locale}.
+ *
+ * <p>Locales with any ill-formed fields cause
+ * <code>IllformedLocaleException</code> to be thrown.
+ *
+ * @param locale the locale
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>locale</code> has
+ * any ill-formed fields.
+ * @throws java.lang.NullPointerException if <code>locale</code> is null.
+ */
+
+public android.icu.util.ULocale.Builder setLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the Builder to match the provided IETF BCP 47
+ * language tag.  Discards the existing state.  Null and the
+ * empty string cause the builder to be reset, like {@link
+ * #clear}.  Legacy tags (see {@link android.icu.util.ULocale#forLanguageTag  }) are converted to their canonical
+ * form before being processed.  Otherwise, the language tag
+ * must be well-formed (see {@link android.icu.util.ULocale ULocale}) or an exception is
+ * thrown (unlike <code>ULocale.forLanguageTag</code>, which
+ * just discards ill-formed and following portions of the
+ * tag).
+ *
+ * @param languageTag the language tag
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>languageTag</code> is ill-formed
+ * @see android.icu.util.ULocale#forLanguageTag(String)
+ */
+
+public android.icu.util.ULocale.Builder setLanguageTag(java.lang.String languageTag) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the language.  If <code>language</code> is the empty string or
+ * null, the language in this <code>Builder</code> is removed.  Otherwise,
+ * the language must be <a href="./Locale.html#def_language">well-formed</a>
+ * or an exception is thrown.
+ *
+ * <p>The typical language value is a two or three-letter language
+ * code as defined in ISO639.
+ *
+ * @param language the language
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>language</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setLanguage(java.lang.String language) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the script. If <code>script</code> is null or the empty string,
+ * the script in this <code>Builder</code> is removed.
+ * Otherwise, the script must be well-formed or an exception is thrown.
+ *
+ * <p>The typical script value is a four-letter script code as defined by ISO 15924.
+ *
+ * @param script the script
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>script</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setScript(java.lang.String script) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the region.  If region is null or the empty string, the region
+ * in this <code>Builder</code> is removed.  Otherwise,
+ * the region must be well-formed or an exception is thrown.
+ *
+ * <p>The typical region value is a two-letter ISO 3166 code or a
+ * three-digit UN M.49 area code.
+ *
+ * <p>The country value in the <code>Locale</code> created by the
+ * <code>Builder</code> is always normalized to upper case.
+ *
+ * @param region the region
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>region</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setRegion(java.lang.String region) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the variant.  If variant is null or the empty string, the
+ * variant in this <code>Builder</code> is removed.  Otherwise, it
+ * must consist of one or more well-formed subtags, or an exception is thrown.
+ *
+ * <p><b>Note:</b> This method checks if <code>variant</code>
+ * satisfies the IETF BCP 47 variant subtag's syntax requirements,
+ * and normalizes the value to lowercase letters.  However,
+ * the <code>ULocale</code> class does not impose any syntactic
+ * restriction on variant.  To set such a variant,
+ * use a ULocale constructor.
+ *
+ * @param variant the variant
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>variant</code> is ill-formed
+ */
+
+public android.icu.util.ULocale.Builder setVariant(java.lang.String variant) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the extension for the given key. If the value is null or the
+ * empty string, the extension is removed.  Otherwise, the extension
+ * must be well-formed or an exception is thrown.
+ *
+ * <p><b>Note:</b> The key {@link android.icu.util.ULocale#UNICODE_LOCALE_EXTENSION  UNICODE_LOCALE_EXTENSION} ('u') is used for the Unicode locale extension.
+ * Setting a value for this key replaces any existing Unicode locale key/type
+ * pairs with those defined in the extension.
+ *
+ * <p><b>Note:</b> The key {@link android.icu.util.ULocale#PRIVATE_USE_EXTENSION  PRIVATE_USE_EXTENSION} ('x') is used for the private use code. To be
+ * well-formed, the value for this key needs only to have subtags of one to
+ * eight alphanumeric characters, not two to eight as in the general case.
+ *
+ * @param key the extension key
+ * @param value the extension value
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>key</code> is illegal
+ * or <code>value</code> is ill-formed
+ * @see #setUnicodeLocaleKeyword(String, String)
+ */
+
+public android.icu.util.ULocale.Builder setExtension(char key, java.lang.String value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Sets the Unicode locale keyword type for the given key.  If the type
+ * is null, the Unicode keyword is removed.  Otherwise, the key must be
+ * non-null and both key and type must be well-formed or an exception
+ * is thrown.
+ *
+ * <p>Keys and types are converted to lower case.
+ *
+ * <p><b>Note</b>:Setting the 'u' extension via {@link #setExtension}
+ * replaces all Unicode locale keywords with those defined in the
+ * extension.
+ *
+ * @param key the Unicode locale key
+ * @param type the Unicode locale type
+ * @return This builder.
+ * @throws android.icu.util.IllformedLocaleException if <code>key</code> or <code>type</code>
+ * is ill-formed
+ * @throws java.lang.NullPointerException if <code>key</code> is null
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder setUnicodeLocaleKeyword(java.lang.String key, java.lang.String type) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Adds a unicode locale attribute, if not already present, otherwise
+ * has no effect.  The attribute must not be null and must be well-formed
+ * or an exception is thrown.
+ *
+ * @param attribute the attribute
+ * @return This builder.
+ * @throws java.lang.NullPointerException if <code>attribute</code> is null
+ * @throws android.icu.util.IllformedLocaleException if <code>attribute</code> is ill-formed
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder addUnicodeLocaleAttribute(java.lang.String attribute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Removes a unicode locale attribute, if present, otherwise has no
+ * effect.  The attribute must not be null and must be well-formed
+ * or an exception is thrown.
+ *
+ * <p>Attribute comparision for removal is case-insensitive.
+ *
+ * @param attribute the attribute
+ * @return This builder.
+ * @throws java.lang.NullPointerException if <code>attribute</code> is null
+ * @throws android.icu.util.IllformedLocaleException if <code>attribute</code> is ill-formed
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder removeUnicodeLocaleAttribute(java.lang.String attribute) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the builder to its initial, empty state.
+ *
+ * @return this builder
+ */
+
+public android.icu.util.ULocale.Builder clear() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Resets the extensions to their initial, empty state.
+ * Language, script, region and variant are unchanged.
+ *
+ * @return this builder
+ * @see #setExtension(char, String)
+ */
+
+public android.icu.util.ULocale.Builder clearExtensions() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of <code>ULocale</code> created from the fields set
+ * on this builder.
+ *
+ * @return a new Locale
+ */
+
+public android.icu.util.ULocale build() { throw new RuntimeException("Stub!"); }
+}
+
+/**
+ * Enum for locale categories. These locale categories are used to get/set the default locale for
+ * the specific functionality represented by the category.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public enum Category {
+/**
+ * Category used to represent the default locale for displaying user interfaces.
+ */
+
+DISPLAY,
+/**
+ * Category used to represent the default locale for formatting date, number and/or currency.
+ */
+
+FORMAT;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/UniversalTimeScale.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/UniversalTimeScale.java
new file mode 100644
index 0000000..c3ee75c
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/UniversalTimeScale.java
@@ -0,0 +1,327 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *********************************************************************************
+ * Copyright (C) 2004-2016, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                  *
+ *********************************************************************************
+ *
+ */
+
+
+package android.icu.util;
+
+import android.icu.math.BigDecimal;
+
+/** 
+ * There are quite a few different conventions for binary datetime, depending on different
+ * platforms and protocols. Some of these have severe drawbacks. For example, people using
+ * Unix time (seconds since Jan 1, 1970, usually in a 32-bit integer)
+ * think that they are safe until near the year 2038.
+ * But cases can and do arise where arithmetic manipulations causes serious problems. Consider
+ * the computation of the average of two datetimes, for example: if one calculates them with
+ * <code>averageTime = (time1 + time2)/2</code>, there will be overflow even with dates
+ * beginning in 2004. Moreover, even if these problems don't occur, there is the issue of
+ * conversion back and forth between different systems.
+ *
+ * <p>Binary datetimes differ in a number of ways: the datatype, the unit,
+ * and the epoch (origin). We refer to these as time scales.
+ *
+ * <p>ICU implements a universal time scale that is similar to the
+ * .NET framework's System.DateTime. The universal time scale is a
+ * 64-bit integer that holds ticks since midnight, January 1st, 0001.
+ * (One tick is 100 nanoseconds.)
+ * Negative values are supported. This has enough range to guarantee that
+ * calculations involving dates around the present are safe.
+ *
+ * <p>The universal time scale always measures time according to the
+ * proleptic Gregorian calendar. That is, the Gregorian calendar's
+ * leap year rules are used for all times, even before 1582 when it was
+ * introduced. (This is different from the default ICU calendar which
+ * switches from the Julian to the Gregorian calendar in 1582.
+ * See GregorianCalendar.setGregorianChange() and ucal_setGregorianChange().)
+ *
+ * ICU provides conversion functions to and from all other major time
+ * scales, allowing datetimes in any time scale to be converted to the
+ * universal time scale, safely manipulated, and converted back to any other
+ * datetime time scale.
+ *
+ * <p>For more details and background, see the
+ * <a href="http://www.icu-project.org/userguide/universalTimeScale.html">Universal Time Scale</a>
+ * chapter in the ICU User Guide.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class UniversalTimeScale {
+
+private UniversalTimeScale() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>long</code> datetime from the given time scale to the universal time scale.
+ *
+ * @param otherTime The <code>long</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static long from(long otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>double</code> datetime from the given time scale to the universal time scale.
+ * All calculations are done using <code>BigDecimal</code> to guarantee that the value
+ * does not go out of range.
+ *
+ * @param otherTime The <code>double</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static android.icu.math.BigDecimal bigDecimalFrom(double otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>long</code> datetime from the given time scale to the universal time scale.
+ * All calculations are done using <code>BigDecimal</code> to guarantee that the value
+ * does not go out of range.
+ *
+ * @param otherTime The <code>long</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static android.icu.math.BigDecimal bigDecimalFrom(long otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a <code>BigDecimal</code> datetime from the given time scale to the universal time scale.
+ * All calculations are done using <code>BigDecimal</code> to guarantee that the value
+ * does not go out of range.
+ *
+ * @param otherTime The <code>BigDecimal</code> datetime
+ * @param timeScale The time scale to convert from
+ *
+ * @return The datetime converted to the universal time scale
+ */
+
+public static android.icu.math.BigDecimal bigDecimalFrom(android.icu.math.BigDecimal otherTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a datetime from the universal time scale stored as a <code>BigDecimal</code> to a
+ * <code>long</code> in the given time scale.
+ *
+ * Since this calculation requires a divide, we must round. The straight forward
+ * way to round by adding half of the divisor will push the sum out of range for values
+ * within have the divisor of the limits of the precision of a <code>long</code>. To get around this, we do
+ * the rounding like this:
+ *
+ * <p><code>
+ * (universalTime - units + units/2) / units + 1
+ * </code>
+ *
+ * <p>
+ * (i.e. we subtract units first to guarantee that we'll still be in range when we
+ * add <code>units/2</code>. We then need to add one to the quotent to make up for the extra subtraction.
+ * This simplifies to:
+ *
+ * <p><code>
+ * (universalTime - units/2) / units - 1
+ * </code>
+ *
+ * <p>
+ * For negative values to round away from zero, we need to flip the signs:
+ *
+ * <p><code>
+ * (universalTime + units/2) / units + 1
+ * </code>
+ *
+ * <p>
+ * Since we also need to subtract the epochOffset, we fold the <code>+/- 1</code>
+ * into the offset value. (i.e. <code>epochOffsetP1</code>, <code>epochOffsetM1</code>.)
+ *
+ * @param universalTime The datetime in the universal time scale
+ * @param timeScale The time scale to convert to
+ *
+ * @return The datetime converted to the given time scale
+ */
+
+public static long toLong(long universalTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a datetime from the universal time scale to a <code>BigDecimal</code> in the given time scale.
+ *
+ * @param universalTime The datetime in the universal time scale
+ * @param timeScale The time scale to convert to
+ *
+ * @return The datetime converted to the given time scale
+ */
+
+public static android.icu.math.BigDecimal toBigDecimal(long universalTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Convert a datetime from the universal time scale to a <code>BigDecimal</code> in the given time scale.
+ *
+ * @param universalTime The datetime in the universal time scale
+ * @param timeScale The time scale to convert to
+ *
+ * @return The datetime converted to the given time scale
+ */
+
+public static android.icu.math.BigDecimal toBigDecimal(android.icu.math.BigDecimal universalTime, int timeScale) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Get a value associated with a particular time scale.
+ *
+ * @param scale - the time scale
+ * @param value - a constant representing the value to get
+ *
+ * @return - the value.
+ */
+
+public static long getTimeScaleValue(int scale, int value) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Used in DB2. Data is a <code>?unknown?</code>. Value
+ * is days since December 31, 1899.
+ */
+
+public static final int DB2_TIME = 8; // 0x8
+
+/**
+ * Used in the .NET framework's <code>System.DateTime</code> structure.
+ * Data is a <code>long</code>. Value is ticks (1 tick == 100 nanoseconds) since January 1, 0001.
+ */
+
+public static final int DOTNET_DATE_TIME = 4; // 0x4
+
+/**
+ * The constant used to select the epoch plus one value
+ * for a time scale.
+ *
+ * NOTE: This is an internal value. DO NOT USE IT. May not
+ * actually be equal to the epoch offset value plus one.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int EPOCH_OFFSET_PLUS_1_VALUE = 6; // 0x6
+
+/**
+ * The constant used to select the epoch offset value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int EPOCH_OFFSET_VALUE = 1; // 0x1
+
+/**
+ * Used in Excel. Data is a <code>?unknown?</code>. Value
+ * is days since December 31, 1899.
+ */
+
+public static final int EXCEL_TIME = 7; // 0x7
+
+/**
+ * The constant used to select the maximum from value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int FROM_MAX_VALUE = 3; // 0x3
+
+/**
+ * The constant used to select the minimum from value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int FROM_MIN_VALUE = 2; // 0x2
+
+/**
+ * Used in the ICU4C. Data is a <code>double</code>. Value
+ * is milliseconds since January 1, 1970.
+ */
+
+public static final int ICU4C_TIME = 2; // 0x2
+
+/**
+ * Used in the JDK. Data is a <code>long</code>. Value
+ * is milliseconds since January 1, 1970.
+ */
+
+public static final int JAVA_TIME = 0; // 0x0
+
+/**
+ * Used in older Macintosh systems. Data is an <code>int</code>. Value
+ * is seconds since January 1, 1904.
+ */
+
+public static final int MAC_OLD_TIME = 5; // 0x5
+
+/**
+ * Used in the JDK. Data is a <code>double</code>. Value
+ * is milliseconds since January 1, 2001.
+ */
+
+public static final int MAC_TIME = 6; // 0x6
+
+/**
+ * This is the first unused time scale value.
+ *
+ * @deprecated ICU 59
+ */
+
+@Deprecated public static final int MAX_SCALE = 10; // 0xa
+
+/**
+ * The constant used to select the maximum to value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int TO_MAX_VALUE = 5; // 0x5
+
+/**
+ * The constant used to select the minimum to value
+ * for a time scale.
+ *
+ * @see #getTimeScaleValue
+ */
+
+public static final int TO_MIN_VALUE = 4; // 0x4
+
+/**
+ * The constant used to select the units value
+ * for a time scale.
+ */
+
+public static final int UNITS_VALUE = 0; // 0x0
+
+/**
+ * Data is a <code>long</code>. Value is microseconds since January 1, 1970.
+ * Similar to Unix time (linear value from 1970) and struct timeval
+ * (microseconds resolution).
+ */
+
+public static final int UNIX_MICROSECONDS_TIME = 9; // 0x9
+
+/**
+ * Used in Unix systems. Data is an <code>int</code> or a <code>long</code>. Value
+ * is seconds since January 1, 1970.
+ */
+
+public static final int UNIX_TIME = 1; // 0x1
+
+/**
+ * Used in Windows for file times. Data is a <code>long</code>. Value
+ * is ticks (1 tick == 100 nanoseconds) since January 1, 1601.
+ */
+
+public static final int WINDOWS_FILE_TIME = 3; // 0x3
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ValueIterator.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ValueIterator.java
new file mode 100644
index 0000000..63aeff4
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/ValueIterator.java
@@ -0,0 +1,107 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+* Copyright (C) 1996-2016, International Business Machines Corporation and   *
+* others. All Rights Reserved.                                               *
+******************************************************************************
+*/
+
+
+package android.icu.util;
+
+
+/**
+ * <p>Interface for enabling iteration over sets of &lt;int, Object&gt;, where
+ * int is the sorted integer index in ascending order, and Object its
+ * associated value.
+ * <p>The ValueIterator allows iterations over integer indexes in the range
+ * of Integer.MIN_VALUE to Integer.MAX_VALUE inclusive. Implementations of
+ * ValueIterator should specify their own maximum subrange within the above
+ * range that is meaningful to its applications.
+ * <p>Most implementations will be created by factory methods, such as the
+ * character name iterator in UCharacter.getNameIterator. See example below.
+ *
+ * Example of use:<br>
+ * <pre>
+ * ValueIterator iterator = UCharacter.getNameIterator();
+ * ValueIterator.Element result = new ValueIterator.Element();
+ * iterator.setRange(UCharacter.MIN_VALUE, UCharacter.MAX_VALUE);
+ * while (iterator.next(result)) {
+ *     System.out.println("Codepoint \\u" +
+ *                        Integer.toHexString(result.integer) +
+ *                        " has the character name " + (String)result.value);
+ * }
+ * </pre>
+ * @author synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public interface ValueIterator {
+
+/**
+ * <p>Returns the next result for this iteration and returns
+ * true if we are not at the end of the iteration, false otherwise.
+ * <p>If this returns a false, the contents of elements will not
+ * be updated.
+ * @param element for storing the result index and value
+ * @return true if we are not at the end of the iteration, false otherwise.
+ * @see android.icu.util.ValueIterator.Element
+ */
+
+public boolean next(android.icu.util.ValueIterator.Element element);
+
+/**
+ * <p>Resets the iterator to start iterating from the integer index
+ * Integer.MIN_VALUE or X if a setRange(X, Y) has been called previously.
+ */
+
+public void reset();
+
+/**
+ * <p>Restricts the range of integers to iterate and resets the iteration
+ * to begin at the index argument start.
+ * <p>If setRange(start, end) is not performed before next(element) is
+ * called, the iteration will start from the integer index
+ * Integer.MIN_VALUE and end at Integer.MAX_VALUE.
+ * <p>
+ * If this range is set outside the meaningful range specified by the
+ * implementation, next(element) will always return false.
+ *
+ * @param start first integer in the range to iterate
+ * @param limit one more than the last integer in the range
+ * @exception java.lang.IllegalArgumentException thrown when attempting to set an
+ *            illegal range. E.g limit &lt;= start
+ */
+
+public void setRange(int start, int limit);
+/**
+ * <p>The return result container of each iteration. Stores the next
+ * integer index and its associated value Object.
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public static final class Element {
+
+/**
+ * Empty default constructor to make javadoc happy
+ */
+
+public Element() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Integer index of the current iteration
+ */
+
+public int integer;
+
+/**
+ * Gets the Object value associated with the integer index.
+ */
+
+public java.lang.Object value;
+}
+
+}
+
diff --git a/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/VersionInfo.java b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/VersionInfo.java
new file mode 100644
index 0000000..085358b
--- /dev/null
+++ b/mainline/i18n/sdk/sdk_library/system/i18n.module.public.api_stub_sources/android/icu/util/VersionInfo.java
@@ -0,0 +1,401 @@
+/* GENERATED SOURCE. DO NOT MODIFY. */
+// ? 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ *******************************************************************************
+ * Copyright (C) 1996-2016, International Business Machines Corporation and
+ * others. All Rights Reserved.
+ *******************************************************************************
+ */
+
+
+package android.icu.util;
+
+
+/**
+ * Class to store version numbers of the form major.minor.milli.micro.
+ * @author synwee
+ */
+
+@SuppressWarnings({"unchecked", "deprecation", "all"})
+public final class VersionInfo implements java.lang.Comparable<android.icu.util.VersionInfo> {
+
+private VersionInfo() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * @param version version String in the format of "major.minor.milli.micro"
+ *                or "major.minor.milli" or "major.minor" or "major",
+ *                where major, minor, milli, micro are non-negative numbers
+ *                &lt;= 255. If the trailing version numbers are
+ *                not specified they are taken as 0s. E.g. Version "3.1" is
+ *                equivalent to "3.1.0.0".
+ * @return an instance of VersionInfo with the argument version.
+ * @exception java.lang.IllegalArgumentException when the argument version
+ *                is not in the right format
+ */
+
+public static android.icu.util.VersionInfo getInstance(java.lang.String version) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * @param major major version, non-negative number &lt;= 255.
+ * @param minor minor version, non-negative number &lt;= 255.
+ * @param milli milli version, non-negative number &lt;= 255.
+ * @param micro micro version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major, int minor, int milli, int micro) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * Equivalent to getInstance(major, minor, milli, 0).
+ * @param major major version, non-negative number &lt;= 255.
+ * @param minor minor version, non-negative number &lt;= 255.
+ * @param milli milli version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are
+ *                                     negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major, int minor, int milli) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * Equivalent to getInstance(major, minor, 0, 0).
+ * @param major major version, non-negative number &lt;= 255.
+ * @param minor minor version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are
+ *                                     negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major, int minor) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns an instance of VersionInfo with the argument version.
+ * Equivalent to getInstance(major, 0, 0, 0).
+ * @param major major version, non-negative number &lt;= 255.
+ * @exception java.lang.IllegalArgumentException when either arguments are
+ *                                     negative or &gt; 255
+ */
+
+public static android.icu.util.VersionInfo getInstance(int major) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the String representative of VersionInfo in the format of
+ * "major.minor.milli.micro"
+ * @return String representative of VersionInfo
+ */
+
+public java.lang.String toString() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the major version number
+ * @return the major version number
+ */
+
+public int getMajor() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the minor version number
+ * @return the minor version number
+ */
+
+public int getMinor() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the milli version number
+ * @return the milli version number
+ */
+
+public int getMilli() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the micro version number
+ * @return the micro version number
+ */
+
+public int getMicro() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Checks if this version information is equals to the argument version
+ * @param other object to be compared
+ * @return true if other is equals to this object's version information,
+ *         false otherwise
+ */
+
+public boolean equals(java.lang.Object other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * Returns the hash code value for this set.
+ *
+ * @return the hash code value for this set.
+ * @see java.lang.Object#hashCode()
+ */
+
+public int hashCode() { throw new RuntimeException("Stub!"); }
+
+/**
+ * Compares other with this VersionInfo.
+ * @param other VersionInfo to be compared
+ * @return 0 if the argument is a VersionInfo object that has version
+ *           information equals to this object.
+ *           Less than 0 if the argument is a VersionInfo object that has
+ *           version information greater than this object.
+ *           Greater than 0 if the argument is a VersionInfo object that
+ *           has version information less than this object.
+ */
+
+public int compareTo(android.icu.util.VersionInfo other) { throw new RuntimeException("Stub!"); }
+
+/**
+ * ICU4J current release version
+ */
+
+public static final android.icu.util.VersionInfo ICU_VERSION;
+static { ICU_VERSION = null; }
+
+/**
+ * Collation builder code version.
+ * When this is different, the same tailoring might result
+ * in assigning different collation elements to code points.
+ * This value may change in subsequent releases of ICU.
+ */
+
+public static final android.icu.util.VersionInfo UCOL_BUILDER_VERSION;
+static { UCOL_BUILDER_VERSION = null; }
+
+/**
+ * Collation runtime version (sort key generator, string comparisons).
+ * If the version is different, sort keys for the same string could be different.
+ * This value may change in subsequent releases of ICU.
+ */
+
+public static final android.icu.util.VersionInfo UCOL_RUNTIME_VERSION;
+static { UCOL_RUNTIME_VERSION = null; }
+
+/**
+ * Unicode 10.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_10_0;
+static { UNICODE_10_0 = null; }
+
+/**
+ * Unicode 11.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_11_0;
+static { UNICODE_11_0 = null; }
+
+/**
+ * Unicode 12.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_12_0;
+static { UNICODE_12_0 = null; }
+
+/**
+ * Unicode 12.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_12_1;
+static { UNICODE_12_1 = null; }
+
+/**
+ * Unicode 13.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_13_0;
+static { UNICODE_13_0 = null; }
+
+/**
+ * Unicode 1.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_0;
+static { UNICODE_1_0 = null; }
+
+/**
+ * Unicode 1.0.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_0_1;
+static { UNICODE_1_0_1 = null; }
+
+/**
+ * Unicode 1.1.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_1_0;
+static { UNICODE_1_1_0 = null; }
+
+/**
+ * Unicode 1.1.5 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_1_1_5;
+static { UNICODE_1_1_5 = null; }
+
+/**
+ * Unicode 2.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_0;
+static { UNICODE_2_0 = null; }
+
+/**
+ * Unicode 2.1.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_2;
+static { UNICODE_2_1_2 = null; }
+
+/**
+ * Unicode 2.1.5 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_5;
+static { UNICODE_2_1_5 = null; }
+
+/**
+ * Unicode 2.1.8 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_8;
+static { UNICODE_2_1_8 = null; }
+
+/**
+ * Unicode 2.1.9 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_2_1_9;
+static { UNICODE_2_1_9 = null; }
+
+/**
+ * Unicode 3.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_0;
+static { UNICODE_3_0 = null; }
+
+/**
+ * Unicode 3.0.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_0_1;
+static { UNICODE_3_0_1 = null; }
+
+/**
+ * Unicode 3.1.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_1_0;
+static { UNICODE_3_1_0 = null; }
+
+/**
+ * Unicode 3.1.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_1_1;
+static { UNICODE_3_1_1 = null; }
+
+/**
+ * Unicode 3.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_3_2;
+static { UNICODE_3_2 = null; }
+
+/**
+ * Unicode 4.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_4_0;
+static { UNICODE_4_0 = null; }
+
+/**
+ * Unicode 4.0.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_4_0_1;
+static { UNICODE_4_0_1 = null; }
+
+/**
+ * Unicode 4.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_4_1;
+static { UNICODE_4_1 = null; }
+
+/**
+ * Unicode 5.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_5_0;
+static { UNICODE_5_0 = null; }
+
+/**
+ * Unicode 5.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_5_1;
+static { UNICODE_5_1 = null; }
+
+/**
+ * Unicode 5.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_5_2;
+static { UNICODE_5_2 = null; }
+
+/**
+ * Unicode 6.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_0;
+static { UNICODE_6_0 = null; }
+
+/**
+ * Unicode 6.1 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_1;
+static { UNICODE_6_1 = null; }
+
+/**
+ * Unicode 6.2 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_2;
+static { UNICODE_6_2 = null; }
+
+/**
+ * Unicode 6.3 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_6_3;
+static { UNICODE_6_3 = null; }
+
+/**
+ * Unicode 7.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_7_0;
+static { UNICODE_7_0 = null; }
+
+/**
+ * Unicode 8.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_8_0;
+static { UNICODE_8_0 = null; }
+
+/**
+ * Unicode 9.0 version
+ */
+
+public static final android.icu.util.VersionInfo UNICODE_9_0;
+static { UNICODE_9_0 = null; }
+}
+