Merge "Move i18n module intra core API from libcore"
diff --git a/android_icu4j/Android.bp b/android_icu4j/Android.bp
index ae91761..aeece01 100644
--- a/android_icu4j/Android.bp
+++ b/android_icu4j/Android.bp
@@ -75,7 +75,7 @@
 
     // We use art-module-public-api-stubs-system-modules when compiling core-icu4j as ICU4J does not
     // use any internal or android specific code. If it ever did then it could depend on
-    // core-intra-stubs-system-modules (a superset) instead.
+    // art-module-intra-core-api-stubs-system-modules (a superset) instead.
     // It is important that core-icu4j is restricted to only use stable APIs from the ART module
     // since it is in a different APEX module that can be updated independently.
     sdk_version: "none",
@@ -140,6 +140,65 @@
     system_modules: "art-module-public-api-stubs-system-modules",
 }
 
+// Generates stub source files for the intra-core API of the I18N module.
+// i.e. every class/member that is either in the public API or annotated with
+// @IntraCoreApi.
+//
+// The API specification .txt files managed by this only contain the additional
+// classes/members that are in the intra-core API but which are not the public
+// API.
+droidstubs {
+    name: "i18n-module-intra-core-api-stubs-source",
+    visibility: [
+        // Needed to build core-all as using the compiled library, i.e.
+        // i18n.module.intra.core.api.stubs does not work due to limitations
+        // in javac.
+        "//libcore:__subpackages__",
+    ],
+    srcs: [
+        ":android_icu4j_src_files",
+    ],
+    sdk_version: "none",
+    libs: [
+        "art.module.intra.core.api.stubs",
+    ],
+
+    installable: false,
+    args: "--hide-annotation libcore.api.Hide " +
+        "--show-single-annotation libcore.api.IntraCoreApi " +
+        "--skip-annotation-instance-methods=false ",
+
+    api_filename: "api.txt",
+    removed_api_filename: "removed.txt",
+    previous_api: "previous.txt",
+    check_api: {
+        current: {
+            api_file: "api/intra/current-api.txt",
+            removed_api_file: "api/intra/current-removed.txt",
+        },
+        last_released: {
+            api_file: "api/intra/last-api.txt",
+            removed_api_file: "api/intra/last-removed.txt",
+        },
+    },
+}
+
+// A library containing the intra-core API stubs of the I18N module.
+//
+// Intra-core APIs are only intended for the use of other core library modules.
+java_library {
+    name: "i18n.module.intra.core.api.stubs",
+    visibility: [
+        "//libcore:__subpackages__",
+    ],
+    srcs: [
+        ":i18n-module-intra-core-api-stubs-source",
+    ],
+
+    sdk_version: "none",
+    system_modules: "art-module-intra-core-api-stubs-system-modules",
+}
+
 //==========================================================
 // build repackaged ICU tests
 //
diff --git a/android_icu4j/api/intra/current-api.txt b/android_icu4j/api/intra/current-api.txt
new file mode 100644
index 0000000..ee51707
--- /dev/null
+++ b/android_icu4j/api/intra/current-api.txt
@@ -0,0 +1,151 @@
+// Signature format: 2.0
+package android.icu.impl {
+
+  public abstract class CacheValue<V> {
+    method public static void setStrength(android.icu.impl.CacheValue.Strength);
+  }
+
+  public enum CacheValue.Strength {
+    enum_constant public static final android.icu.impl.CacheValue.Strength SOFT;
+    enum_constant public static final android.icu.impl.CacheValue.Strength STRONG;
+  }
+
+  public final class ICUData {
+    field public static final String ICU_BASE_NAME = "android/icu/impl/data/icudt64b";
+  }
+
+  public class ICUResourceBundle extends android.icu.util.UResourceBundle {
+    method public String getStringWithFallback(String) throws java.util.MissingResourceException;
+    method public android.icu.impl.ICUResourceBundle getWithFallback(String) throws java.util.MissingResourceException;
+  }
+
+  public class JavaTimeZone extends android.icu.util.TimeZone {
+    ctor public JavaTimeZone(java.util.TimeZone, String);
+  }
+
+  public final class ZoneMeta {
+    method public static String getCanonicalCLDRID(String);
+  }
+
+}
+
+package android.icu.impl.number {
+
+  public class DecimalFormatProperties implements java.lang.Cloneable java.io.Serializable {
+  }
+
+  public enum DecimalFormatProperties.ParseMode {
+    enum_constant public static final android.icu.impl.number.DecimalFormatProperties.ParseMode COMPATIBILITY;
+  }
+
+}
+
+package android.icu.text {
+
+  public class DateFormatSymbols implements java.lang.Cloneable java.io.Serializable {
+    ctor @Deprecated public DateFormatSymbols(android.icu.util.ULocale, String);
+    method public String[] getNarrowEras();
+  }
+
+  public class DateTimePatternGenerator implements java.lang.Cloneable android.icu.util.Freezable<android.icu.text.DateTimePatternGenerator> {
+    method @Deprecated public static android.icu.text.DateTimePatternGenerator getFrozenInstance(android.icu.util.ULocale);
+  }
+
+  public class DecimalFormat extends android.icu.text.NumberFormat {
+    method public void setParseStrictMode(android.icu.impl.number.DecimalFormatProperties.ParseMode);
+  }
+
+  public abstract class IDNA {
+    method @Deprecated public static StringBuffer convertIDNToASCII(String, int) throws android.icu.text.StringPrepParseException;
+    method @Deprecated public static StringBuffer convertIDNToUnicode(String, int) throws android.icu.text.StringPrepParseException;
+  }
+
+  public final class Normalizer implements java.lang.Cloneable {
+    method @Deprecated public static boolean isNormalized(String, android.icu.text.Normalizer.Mode, int);
+    method @Deprecated public static String normalize(String, android.icu.text.Normalizer.Mode);
+    field @Deprecated public static final android.icu.text.Normalizer.Mode NFC;
+    field @Deprecated public static final android.icu.text.Normalizer.Mode NFD;
+    field @Deprecated public static final android.icu.text.Normalizer.Mode NFKC;
+    field @Deprecated public static final android.icu.text.Normalizer.Mode NFKD;
+  }
+
+  @Deprecated public abstract static class Normalizer.Mode {
+  }
+
+  public abstract class TimeZoneNames implements java.io.Serializable {
+    method public java.util.Collection<android.icu.text.TimeZoneNames.MatchInfo> find(CharSequence, int, java.util.EnumSet<android.icu.text.TimeZoneNames.NameType>);
+    method @Deprecated public void getDisplayNames(String, android.icu.text.TimeZoneNames.NameType[], long, String[], int);
+  }
+
+  public static class TimeZoneNames.MatchInfo {
+    method public int matchLength();
+    method public String mzID();
+    method public android.icu.text.TimeZoneNames.NameType nameType();
+    method public String tzID();
+  }
+
+}
+
+package android.icu.util {
+
+  public class AnnualTimeZoneRule extends android.icu.util.TimeZoneRule {
+    method public int getEndYear();
+    method public android.icu.util.DateTimeRule getRule();
+    field public static final int MAX_YEAR = 2147483647; // 0x7fffffff
+  }
+
+  public abstract class BasicTimeZone extends android.icu.util.TimeZone {
+    method public abstract android.icu.util.TimeZoneTransition getNextTransition(long, boolean);
+    method public abstract android.icu.util.TimeZoneRule[] getTimeZoneRules();
+  }
+
+  public abstract class Calendar implements java.lang.Cloneable java.lang.Comparable<android.icu.util.Calendar> java.io.Serializable {
+    method public static String getDateTimeFormatString(android.icu.util.ULocale, String, int, int);
+  }
+
+  public class DateTimeRule implements java.io.Serializable {
+    method public int getDateRuleType();
+    method public int getRuleDayOfMonth();
+    method public int getRuleDayOfWeek();
+    method public int getRuleMillisInDay();
+    method public int getRuleMonth();
+    method public int getTimeRuleType();
+    field public static final int DOM = 0; // 0x0
+    field public static final int DOW = 1; // 0x1
+    field public static final int DOW_GEQ_DOM = 2; // 0x2
+    field public static final int DOW_LEQ_DOM = 3; // 0x3
+    field public static final int STANDARD_TIME = 1; // 0x1
+    field public static final int UTC_TIME = 2; // 0x2
+    field public static final int WALL_TIME = 0; // 0x0
+  }
+
+  public class InitialTimeZoneRule extends android.icu.util.TimeZoneRule {
+  }
+
+  public abstract class TimeZone implements java.lang.Cloneable android.icu.util.Freezable<android.icu.util.TimeZone> java.io.Serializable {
+    method @Deprecated public static void setICUDefault(android.icu.util.TimeZone);
+  }
+
+  public abstract class TimeZoneRule implements java.io.Serializable {
+    method public int getDSTSavings();
+    method public int getRawOffset();
+  }
+
+  public class TimeZoneTransition {
+    method public android.icu.util.TimeZoneRule getFrom();
+    method public long getTime();
+    method public android.icu.util.TimeZoneRule getTo();
+  }
+
+  public final class ULocale implements java.lang.Comparable<android.icu.util.ULocale> java.io.Serializable {
+    method @Deprecated public static String getRegionForSupplementalData(android.icu.util.ULocale, boolean);
+  }
+
+  public abstract class UResourceBundle extends java.util.ResourceBundle {
+    ctor public UResourceBundle();
+    method public static android.icu.util.UResourceBundle getBundleInstance(String, java.util.Locale);
+    method public String[] getStringArray();
+  }
+
+}
+
diff --git a/android_icu4j/api/intra/current-removed.txt b/android_icu4j/api/intra/current-removed.txt
new file mode 100644
index 0000000..d802177
--- /dev/null
+++ b/android_icu4j/api/intra/current-removed.txt
@@ -0,0 +1 @@
+// Signature format: 2.0
diff --git a/android_icu4j/api/intra/last-api.txt b/android_icu4j/api/intra/last-api.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/android_icu4j/api/intra/last-api.txt
diff --git a/android_icu4j/api/intra/last-removed.txt b/android_icu4j/api/intra/last-removed.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/android_icu4j/api/intra/last-removed.txt