Add annotations zip, and system and module-lib APIs

At the moment they are all empty but they are needed to ensure that
the prebuilts provide the same outputs as the source modules.

The module-lib and system APIs are empty in the sense that they provide
no additional APIs on top of the public API. Their stub sources are
not empty but are in fact copies of the public API sources.

Updated the files by first running this command:
   m i18n-module-sdk

Then unzip the generated snapshot into a temporary directory. Then copy
the differences in the Android.bp file related to the annotations and
APIs from that directory into this. Also copy the annotations.zip
files. Finally, copied the public API stubs source into module-lib and
system.

BYPASS_INCLUSIVE_LANGUAGE_REASON=copying existing API files

Bug: 216435117
Test: m nothing
      - TH will test the prebuilts in master-art
Change-Id: Iec2e23041e19db090a1a1de2b5f30d982952453b
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; }
+}
+