Merge "Apply cosmetic changes to String.java from OpenJDK 8u121-b13"
diff --git a/Android.bp b/Android.bp
index 2230ac7..a94c85d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,3 +1,4 @@
 build = [
+    "JavaLibrary.bp",
     "NativeCode.bp",
 ]
diff --git a/Docs.mk b/Docs.mk
index 2edee0d..bf0d3da 100644
--- a/Docs.mk
+++ b/Docs.mk
@@ -5,13 +5,8 @@
 
 ifndef libcore_docs_include_once
 
-include libcore/openjdk_java_files.mk
-include libcore/non_openjdk_java_files.mk
-
-
 # List of libcore javadoc source files
 _libcore_files := $(openjdk_javadoc_files) $(non_openjdk_javadoc_files)
-_libcore_files := $(addprefix libcore/, $(_libcore_files))
 
 _icu_files := \
  $(call find-files-in-subdirs, external/icu, \
diff --git a/JavaLibrary.bp b/JavaLibrary.bp
new file mode 100644
index 0000000..3b65442
--- /dev/null
+++ b/JavaLibrary.bp
@@ -0,0 +1,142 @@
+// Copyright (C) 2007 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//
+// Definitions for building the Java library and associated tests.
+//
+
+// libcore is divided into modules.
+//
+// The structure of each module is:
+//
+//   src/
+//       main/               # To be shipped on every device.
+//            java/          # Java source for library code.
+//            native/        # C++ source for library code.
+//            resources/     # Support files.
+//       test/               # Built only on demand, for testing.
+//            java/          # Java source for tests.
+//            native/        # C++ source for tests (rare).
+//            resources/     # Support files.
+//
+// All subdirectories are optional
+
+build = [
+    "openjdk_java_files.bp",
+    "non_openjdk_java_files.bp",
+]
+
+// The Java files and their associated resources.
+core_resource_dirs = [
+    "luni/src/main/java",
+    "ojluni/src/main/resources/",
+]
+
+java_defaults {
+    name: "libcore_java_defaults",
+    javacflags: [
+        //"-Xlint:all",
+        //"-Xlint:-serial,-deprecation,-unchecked",
+    ],
+    dxflags: ["--core-library"],
+    no_standard_libs: true,
+
+    // For user / userdebug builds, strip the local variable table and the local variable
+    // type table. This has no bearing on stack traces, but will leave less information
+    // available via JDWP.
+    //
+    // TODO: Should this be conditioned on a PRODUCT_ flag or should we just turn this
+    // on for all builds. Also, name of the flag TBD.
+    // TODO(ccross): PRODUCT_MINIMIZE_JAVA_DEBUG_INFO
+    // local_javac_flags += ["-g:source,lines"]
+}
+
+//
+// Build for the target (device).
+//
+
+java_library {
+    name: "core-all",
+    defaults: ["libcore_java_defaults"],
+
+    srcs: [
+        ":openjdk_java_files",
+        ":non_openjdk_java_files",
+        ":android_icu4j_src_files",
+        ":openjdk_lambda_stub_files",
+    ],
+    java_resource_dirs: core_resource_dirs,
+    static_libs: ["android_icu4j_res"],
+
+    required: [
+        "tzdata",
+        "tzlookup.xml",
+    ],
+
+    installable: false,
+}
+
+java_library {
+    name: "core-oj",
+    defaults: ["libcore_java_defaults"],
+
+    srcs: [":openjdk_java_files"],
+    java_resource_dirs: core_resource_dirs,
+    libs: ["core-all"],
+
+    notice: "ojluni/NOTICE",
+
+    required: [
+        "tzdata",
+        "tzlookup.xml",
+    ],
+}
+
+// Definitions to make the core library.
+java_library {
+    name: "core-libart",
+    defaults: ["libcore_java_defaults"],
+
+    srcs: [
+        ":non_openjdk_java_files",
+        ":android_icu4j_src_files",
+    ],
+    static_libs: ["android_icu4j_res"],
+
+    libs: ["core-all"],
+
+    required: [
+        "tzdata",
+        "tzlookup.xml",
+    ],
+}
+
+// A library that exists to satisfy javac when
+// compiling source code that contains lambdas.
+java_library {
+    name: "core-lambda-stubs",
+    defaults: ["libcore_java_defaults"],
+
+    srcs: [
+        ":openjdk_lambda_stub_files",
+        ":openjdk_lambda_duplicate_stub_files",
+    ],
+
+    libs: ["core-all"],
+
+    notice: "ojluni/NOTICE",
+
+    installable: false,
+    include_srcs: true,
+}
diff --git a/JavaLibrary.mk b/JavaLibrary.mk
index 88a8009..e7271f1 100644
--- a/JavaLibrary.mk
+++ b/JavaLibrary.mk
@@ -37,9 +37,6 @@
 #
 # All subdirectories are optional (hence the "2> /dev/null"s below).
 
-include $(LOCAL_PATH)/openjdk_java_files.mk
-include $(LOCAL_PATH)/non_openjdk_java_files.mk
-
 define all-test-java-files-under
 $(foreach dir,$(1),$(patsubst ./%,%,$(shell cd $(LOCAL_PATH) && (find $(dir)/src/test/java -name "*.java" 2> /dev/null) | grep -v -f java_tests_blacklist)))
 endef
@@ -94,78 +91,12 @@
 # Build for the target (device).
 #
 
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(openjdk_java_files) $(non_openjdk_java_files) $(android_icu4j_src_files) $(openjdk_lambda_stub_files)
-LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs) $(android_icu4j_resource_dirs)
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVACFLAGS := $(local_javac_flags)
-LOCAL_JACK_FLAGS := $(local_jack_flags)
-LOCAL_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-all
-LOCAL_REQUIRED_MODULES := tzdata tzlookup.xml
-LOCAL_CORE_LIBRARY := true
-LOCAL_UNINSTALLABLE_MODULE := true
-include $(BUILD_JAVA_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(openjdk_java_files)
-LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVACFLAGS := $(local_javac_flags)
-LOCAL_JACK_FLAGS := $(local_jack_flags)
-LOCAL_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-oj
-LOCAL_JAVA_LIBRARIES := core-all
-LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE
-LOCAL_REQUIRED_MODULES := tzdata tzlookup.xml
-LOCAL_CORE_LIBRARY := true
-include $(BUILD_JAVA_LIBRARY)
-
-# Definitions to make the core library.
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(non_openjdk_java_files) $(android_icu4j_src_files)
-LOCAL_JAVA_RESOURCE_DIRS := $(android_icu4j_resource_dirs)
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVACFLAGS := $(local_javac_flags)
-LOCAL_JACK_FLAGS := $(local_jack_flags)
-LOCAL_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-libart
-LOCAL_JAVA_LIBRARIES := core-all
-ifeq ($(EMMA_INSTRUMENT),true)
-ifneq ($(EMMA_INSTRUMENT_STATIC),true)
-    # For instrumented build, include Jacoco classes into core-libart.
-    LOCAL_STATIC_JAVA_LIBRARIES := jacocoagent
-endif # EMMA_INSTRUMENT_STATIC
-endif # EMMA_INSTRUMENT
-LOCAL_CORE_LIBRARY := true
-LOCAL_REQUIRED_MODULES := tzdata tzlookup.xml
-include $(BUILD_JAVA_LIBRARY)
-
-# A library that exists to satisfy javac when
-# compiling source code that contains lambdas.
-include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(openjdk_lambda_stub_files) $(openjdk_lambda_duplicate_stub_files)
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVACFLAGS := $(local_javac_flags)
-LOCAL_JACK_FLAGS := $(local_jack_flags)
-LOCAL_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-lambda-stubs
-LOCAL_JAVA_LIBRARIES := core-all
-LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE
-LOCAL_CORE_LIBRARY := true
-LOCAL_UNINSTALLABLE_MODULE := true
-include $(BUILD_JAVA_LIBRARY)
-
 ifeq ($(LIBCORE_SKIP_TESTS),)
 # A guaranteed unstripped version of core-oj and core-libart.
 # The build system may or may not strip the core-oj and core-libart jars,
 # but these will not be stripped. See b/24535627.
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(openjdk_java_files)
+LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(openjdk_java_files))
 LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
 LOCAL_NO_STANDARD_LIBRARIES := true
 LOCAL_JAVACFLAGS := $(local_javac_flags)
@@ -199,7 +130,7 @@
 include $(BUILD_HOST_DALVIK_STATIC_JAVA_LIBRARY)
 
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(non_openjdk_java_files) $(android_icu4j_src_files)
+LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(non_openjdk_java_files) $(android_icu4j_src_files))
 LOCAL_JAVA_RESOURCE_DIRS := $(android_icu4j_resource_dirs)
 LOCAL_NO_STANDARD_LIBRARIES := true
 LOCAL_JAVACFLAGS := $(local_javac_flags)
@@ -333,7 +264,7 @@
 ifeq ($(HOST_OS),linux)
 
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(non_openjdk_java_files) $(openjdk_java_files) $(android_icu4j_src_files) $(openjdk_lambda_stub_files)
+LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(non_openjdk_java_files) $(openjdk_java_files) $(android_icu4j_src_files) $(openjdk_lambda_stub_files))
 LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
 LOCAL_NO_STANDARD_LIBRARIES := true
 LOCAL_JAVACFLAGS := $(local_javac_flags)
@@ -346,7 +277,7 @@
 include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
 
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(openjdk_java_files)
+LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(openjdk_java_files))
 LOCAL_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
 LOCAL_NO_STANDARD_LIBRARIES := true
 LOCAL_JAVACFLAGS := $(local_javac_flags)
@@ -361,7 +292,7 @@
 
 # Definitions to make the core library.
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(non_openjdk_java_files) $(android_icu4j_src_files)
+LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(non_openjdk_java_files) $(android_icu4j_src_files))
 LOCAL_JAVA_RESOURCE_DIRS := $(android_icu4j_resource_dirs)
 LOCAL_NO_STANDARD_LIBRARIES := true
 LOCAL_JAVACFLAGS := $(local_javac_flags)
@@ -375,7 +306,7 @@
 # A library that exists to satisfy javac when
 # compiling source code that contains lambdas.
 include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(openjdk_lambda_stub_files) $(openjdk_lambda_duplicate_stub_files)
+LOCAL_SRC_FILES := $(patsubst $(LOCAL_PATH)/%,%,$(openjdk_lambda_stub_files) $(openjdk_lambda_duplicate_stub_files))
 LOCAL_NO_STANDARD_LIBRARIES := true
 LOCAL_JAVACFLAGS := $(local_javac_flags)
 LOCAL_DX_FLAGS := --core-library
@@ -499,6 +430,3 @@
 LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=external/doclava/res/assets/templates-sdk
 
 include $(BUILD_DROIDDOC)
-
-openjdk_java_files :=
-non_openjdk_java_files :=
diff --git a/NativeCode.bp b/NativeCode.bp
index 3b63072..3f296fa 100644
--- a/NativeCode.bp
+++ b/NativeCode.bp
@@ -17,8 +17,9 @@
 //
 
 // Defaults that apply to all of the modules
+
 cc_defaults {
-    name: "core_native_defaults",
+    name: "core_native_default_flags",
     host_supported: true,
     local_include_dirs: ["include"],
     cflags: [
@@ -28,6 +29,15 @@
     ],
     cppflags = ["-DU_USING_ICU_NAMESPACE=0"],
 
+    target: {
+        darwin: {
+            enabled: false,
+        },
+    },
+}
+
+cc_defaults {
+    name: "core_native_default_libs",
     static_libs: [
         "libbase",
         "libfdlibm",
@@ -37,25 +47,14 @@
         "liblog",
         "libnativehelper",
     ],
-
-    host_ldlibs: [
-        "-ldl",
-        "-lpthread",
-    ],
-
-    target: {
-        linux: {
-            host_ldlibs: ["-lrt"],
-        },
-        darwin: {
-            enabled: false,
-        },
-    },
 }
 
 cc_library_shared {
     name: "libjavacore",
-    defaults: ["core_native_defaults"],
+    defaults: [
+        "core_native_default_flags",
+        "core_native_default_libs",
+    ],
     srcs: [
         ":luni_native_srcs",
         "dalvik/src/main/native/org_apache_harmony_dalvik_NativeTestTarget.cpp"
@@ -67,6 +66,7 @@
         "libicuuc",
         "libicui18n",
         "libnativehelper",
+        "libz",
     ],
     static_libs: [
         "libziparchive",
@@ -76,12 +76,6 @@
         android: {
             shared_libs: [
                 "libutils",
-                "libz",
-            ],
-        },
-        host: {
-            shared_libs: [
-                "libz-host",
             ],
         },
     },
@@ -89,7 +83,10 @@
 
 cc_defaults {
     name: "libopenjdk_native_defaults",
-    defaults: ["core_native_defaults"],
+    defaults: [
+        "core_native_default_flags",
+        "core_native_default_libs",
+    ],
     srcs: [":libopenjdk_native_srcs"],
     cflags: [
         // TODO(narayan): Prune down this list of exclusions once the underlying
@@ -109,13 +106,14 @@
         "libcrypto",
         "libicuuc",
         "libssl",
+        "libz",
 
         "libnativehelper",
     ],
     static_libs: ["libfdlibm"],
 
     target: {
-        linux: {
+        linux_glibc: {
             cflags: [ // Sigh.
                 "-D_LARGEFILE64_SOURCE",
                 "-D_GNU_SOURCE",
@@ -123,12 +121,6 @@
                 "-D__GLIBC__",
             ],
         },
-        android: {
-            shared_libs: ["libz"],
-        },
-        host: {
-            shared_libs: ["libz-host"],
-        },
     },
 
     notice: "ojluni/NOTICE",
@@ -154,7 +146,7 @@
 // Test JNI library.
 cc_library_shared {
     name: "libjavacoretests",
-    defaults: ["core_native_defaults"],
+    defaults: ["core_native_default_flags"],
     host_supported:true,
 
     srcs: [
@@ -168,6 +160,9 @@
         android: {
             shared_libs: ["libnativehelper_compat_libc++"],
         },
+        host: {
+            shared_libs: ["libnativehelper"],
+        },
     },
 
     strip: {
@@ -178,7 +173,7 @@
 // Set of gtest unit tests.
 cc_test {
     name: "libjavacore-unit-tests",
-    defaults: ["core_native_defaults"],
+    defaults: ["core_native_default_flags"],
 
     // Add -fno-builtin so that the compiler doesn't attempt to inline
     // memcpy calls that are not really aligned.
@@ -191,7 +186,7 @@
 // Set of benchmarks for libjavacore functions.
 cc_benchmark {
     name: "libjavacore-benchmarks",
-    defaults: ["core_native_defaults"],
+    defaults: ["core_native_default_flags"],
 
     srcs: ["luni/src/benchmark/native/libcore_io_Memory_bench.cpp"],
     test_suites: ["device-tests"],
diff --git a/annotations/ojluni.jaif b/annotations/ojluni.jaif
new file mode 100644
index 0000000..659e016
--- /dev/null
+++ b/annotations/ojluni.jaif
@@ -0,0 +1,112 @@
+//
+// Copyright (C) 2017 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// This file specifies additional annotations that are applied to libcore
+// code before generating android stubs and documentation. This data
+// is human-maintained and is based on jdk annotations shipped in Android
+// Studio.
+
+package libcore.util:
+annotation @NonNull: @java.lang.annotation.Retention(value=CLASS) @java.lang.annotation.Target(value={TYPE_USE})
+
+package java.lang:
+class CharSequence:
+    method toString()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+
+class Enum:
+    method valueOf(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;:
+        return: @libcore.util.NonNull
+
+class Iterable:
+    method iterator()Ljava/util/Iterator;:
+        return: @libcore.util.NonNull
+
+class String:
+    method toString()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method getBytes(Ljava/lang/String;)[B:
+        return: @libcore.util.NonNull
+    method getBytes(Ljava/nio/charset/Charset;)[B:
+        return: @libcore.util.NonNull
+    method getBytes(Ljava/lang/String;)[B:
+        return: @libcore.util.NonNull
+    method getBytes()[B:
+        return: @libcore.util.NonNull
+    method toCharArray()[C:
+        return: @libcore.util.NonNull
+    method subSequence(II)Ljava/lang/CharSequence;:
+        return: @libcore.util.NonNull
+    method concat(Ljava/lang/String;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method copyValueOf([CII)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method copyValueOf([C)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method intern()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method replace(CC)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method substring(I)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method substring(II)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method toLowerCase(Ljava/util/Locale;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method toLowerCase()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method toUpperCase(Ljava/util/Locale;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method toUpperCase()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method trim()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(Z)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(C)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(I)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(J)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(F)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(D)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf(Ljava/lang/Object;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf([C)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method valueOf([CII)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method split(Ljava/lang/String;I)[Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method split(Ljava/lang/String;)[Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method join(Ljava/lang/CharSequence;[Ljava/lang/CharSequence;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method join(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method replaceFirst(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;:
+        return: @libcore.util.NonNull
+
+
+class Thread:
+    method toString()Ljava/lang/String;:
+        return: @libcore.util.NonNull
+    method currentThread()Ljava/lang/Thread;:
+        return: @libcore.util.NonNull
diff --git a/dalvik/src/main/java/dalvik/bytecode/Opcodes.java b/dalvik/src/main/java/dalvik/bytecode/Opcodes.java
index 7ce09c9..707b3c8 100644
--- a/dalvik/src/main/java/dalvik/bytecode/Opcodes.java
+++ b/dalvik/src/main/java/dalvik/bytecode/Opcodes.java
@@ -249,6 +249,8 @@
     int OP_INVOKE_POLYMORPHIC_RANGE     = 0x00fb;
     int OP_INVOKE_CUSTOM                = 0x00fc;
     int OP_INVOKE_CUSTOM_RANGE          = 0x00fd;
+    int OP_CONST_METHOD_HANDLE          = 0x00fe;
+    int OP_CONST_METHOD_TYPE            = 0x00ff;
     // END(libcore-opcodes)
 
     /** Never implemented; do not use. */
diff --git a/luni/src/main/java/android/system/Os.java b/luni/src/main/java/android/system/Os.java
index 5b9ff47..8e312dd 100644
--- a/luni/src/main/java/android/system/Os.java
+++ b/luni/src/main/java/android/system/Os.java
@@ -516,7 +516,6 @@
 
   /** @hide */ public static void setsockoptIpMreqn(FileDescriptor fd, int level, int option, int value) throws ErrnoException { Libcore.os.setsockoptIpMreqn(fd, level, option, value); }
   /** @hide */ public static void setsockoptGroupReq(FileDescriptor fd, int level, int option, StructGroupReq value) throws ErrnoException { Libcore.os.setsockoptGroupReq(fd, level, option, value); }
-  /** @hide */ public static void setsockoptGroupSourceReq(FileDescriptor fd, int level, int option, StructGroupSourceReq value) throws ErrnoException { Libcore.os.setsockoptGroupSourceReq(fd, level, option, value); }
   /** @hide */ public static void setsockoptLinger(FileDescriptor fd, int level, int option, StructLinger value) throws ErrnoException { Libcore.os.setsockoptLinger(fd, level, option, value); }
   /** @hide */ public static void setsockoptTimeval(FileDescriptor fd, int level, int option, StructTimeval value) throws ErrnoException { Libcore.os.setsockoptTimeval(fd, level, option, value); }
 
diff --git a/luni/src/main/java/android/system/StructGroupSourceReq.java b/luni/src/main/java/android/system/StructGroupSourceReq.java
deleted file mode 100644
index c300338..0000000
--- a/luni/src/main/java/android/system/StructGroupSourceReq.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.system;
-
-import java.net.InetAddress;
-import libcore.util.Objects;
-
-/**
- * Corresponds to C's {@code struct group_source_req}.
- *
- * @hide
- */
-public final class StructGroupSourceReq {
-  public final int gsr_interface;
-  public final InetAddress gsr_group;
-  public final InetAddress gsr_source;
-
-  public StructGroupSourceReq(int gsr_interface, InetAddress gsr_group, InetAddress gsr_source) {
-    this.gsr_interface = gsr_interface;
-    this.gsr_group = gsr_group;
-    this.gsr_source = gsr_source;
-  }
-
-  @Override public String toString() {
-    return Objects.toString(this);
-  }
-}
diff --git a/luni/src/main/java/libcore/io/ForwardingOs.java b/luni/src/main/java/libcore/io/ForwardingOs.java
index 3054dc3..529e1e3 100644
--- a/luni/src/main/java/libcore/io/ForwardingOs.java
+++ b/luni/src/main/java/libcore/io/ForwardingOs.java
@@ -23,7 +23,6 @@
 import android.system.StructCapUserHeader;
 import android.system.StructFlock;
 import android.system.StructGroupReq;
-import android.system.StructGroupSourceReq;
 import android.system.StructIfaddrs;
 import android.system.StructLinger;
 import android.system.StructPasswd;
@@ -170,7 +169,6 @@
     public void setsockoptInt(FileDescriptor fd, int level, int option, int value) throws ErrnoException { os.setsockoptInt(fd, level, option, value); }
     public void setsockoptIpMreqn(FileDescriptor fd, int level, int option, int value) throws ErrnoException { os.setsockoptIpMreqn(fd, level, option, value); }
     public void setsockoptGroupReq(FileDescriptor fd, int level, int option, StructGroupReq value) throws ErrnoException { os.setsockoptGroupReq(fd, level, option, value); }
-    public void setsockoptGroupSourceReq(FileDescriptor fd, int level, int option, StructGroupSourceReq value) throws ErrnoException { os.setsockoptGroupSourceReq(fd, level, option, value); }
     public void setsockoptLinger(FileDescriptor fd, int level, int option, StructLinger value) throws ErrnoException { os.setsockoptLinger(fd, level, option, value); }
     public void setsockoptTimeval(FileDescriptor fd, int level, int option, StructTimeval value) throws ErrnoException { os.setsockoptTimeval(fd, level, option, value); }
     public void setuid(int uid) throws ErrnoException { os.setuid(uid); }
diff --git a/luni/src/main/java/libcore/io/IoBridge.java b/luni/src/main/java/libcore/io/IoBridge.java
index 39d52f3..ff4332e 100644
--- a/luni/src/main/java/libcore/io/IoBridge.java
+++ b/luni/src/main/java/libcore/io/IoBridge.java
@@ -18,7 +18,6 @@
 
 import android.system.ErrnoException;
 import android.system.StructGroupReq;
-import android.system.StructGroupSourceReq;
 import android.system.StructLinger;
 import android.system.StructPollfd;
 import android.system.StructTimeval;
diff --git a/luni/src/main/java/libcore/io/Linux.java b/luni/src/main/java/libcore/io/Linux.java
index a0931d2..e5d6698 100644
--- a/luni/src/main/java/libcore/io/Linux.java
+++ b/luni/src/main/java/libcore/io/Linux.java
@@ -23,7 +23,6 @@
 import android.system.StructCapUserHeader;
 import android.system.StructFlock;
 import android.system.StructGroupReq;
-import android.system.StructGroupSourceReq;
 import android.system.StructIfaddrs;
 import android.system.StructLinger;
 import android.system.StructPasswd;
@@ -244,7 +243,6 @@
     public native void setsockoptInt(FileDescriptor fd, int level, int option, int value) throws ErrnoException;
     public native void setsockoptIpMreqn(FileDescriptor fd, int level, int option, int value) throws ErrnoException;
     public native void setsockoptGroupReq(FileDescriptor fd, int level, int option, StructGroupReq value) throws ErrnoException;
-    public native void setsockoptGroupSourceReq(FileDescriptor fd, int level, int option, StructGroupSourceReq value) throws ErrnoException;
     public native void setsockoptLinger(FileDescriptor fd, int level, int option, StructLinger value) throws ErrnoException;
     public native void setsockoptTimeval(FileDescriptor fd, int level, int option, StructTimeval value) throws ErrnoException;
     public native void setuid(int uid) throws ErrnoException;
diff --git a/luni/src/main/java/libcore/io/Os.java b/luni/src/main/java/libcore/io/Os.java
index a8809bf..3880e50 100644
--- a/luni/src/main/java/libcore/io/Os.java
+++ b/luni/src/main/java/libcore/io/Os.java
@@ -23,7 +23,6 @@
 import android.system.StructCapUserHeader;
 import android.system.StructFlock;
 import android.system.StructGroupReq;
-import android.system.StructGroupSourceReq;
 import android.system.StructIfaddrs;
 import android.system.StructLinger;
 import android.system.StructPasswd;
@@ -157,7 +156,6 @@
     public void setsockoptInt(FileDescriptor fd, int level, int option, int value) throws ErrnoException;
     public void setsockoptIpMreqn(FileDescriptor fd, int level, int option, int value) throws ErrnoException;
     public void setsockoptGroupReq(FileDescriptor fd, int level, int option, StructGroupReq value) throws ErrnoException;
-    public void setsockoptGroupSourceReq(FileDescriptor fd, int level, int option, StructGroupSourceReq value) throws ErrnoException;
     public void setsockoptLinger(FileDescriptor fd, int level, int option, StructLinger value) throws ErrnoException;
     public void setsockoptTimeval(FileDescriptor fd, int level, int option, StructTimeval value) throws ErrnoException;
     public void setuid(int uid) throws ErrnoException;
diff --git a/luni/src/main/java/libcore/util/NonNull.java b/luni/src/main/java/libcore/util/NonNull.java
new file mode 100644
index 0000000..fc83108
--- /dev/null
+++ b/luni/src/main/java/libcore/util/NonNull.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package libcore.util;
+
+import static java.lang.annotation.ElementType.TYPE_USE;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * Denotes that a type use can never be null.
+ * <p>
+ * This is a marker annotation and it has no specific attributes.
+ */
+@Documented
+@Retention(SOURCE)
+@Target({TYPE_USE})
+public @interface NonNull {
+}
diff --git a/luni/src/main/native/Android.bp b/luni/src/main/native/Android.bp
index a8e7ee7..8526ce8 100644
--- a/luni/src/main/native/Android.bp
+++ b/luni/src/main/native/Android.bp
@@ -11,6 +11,7 @@
         "cbigint.cpp",
         "java_lang_StringToReal.cpp",
         "java_lang_invoke_MethodHandle.cpp",
+        "java_lang_invoke_VarHandle.cpp",
         "java_math_NativeBN.cpp",
         "java_util_regex_Matcher.cpp",
         "java_util_regex_Pattern.cpp",
diff --git a/luni/src/main/native/NetworkUtilities.cpp b/luni/src/main/native/NetworkUtilities.cpp
index b259814..66daf9c 100644
--- a/luni/src/main/native/NetworkUtilities.cpp
+++ b/luni/src/main/native/NetworkUtilities.cpp
@@ -99,9 +99,15 @@
 
     // Get holder.
     static jfieldID holderFid = env->GetFieldID(JniConstants::inetAddressClass, "holder", "Ljava/net/InetAddress$InetAddressHolder;");
+    if (holderFid == NULL) {
+        return false;
+    }
     ScopedLocalRef<jobject> holder(env, env->GetObjectField(inetAddress, holderFid));
     // Get the address family.
     static jfieldID familyFid = env->GetFieldID(JniConstants::inetAddressHolderClass, "family", "I");
+    if (familyFid == NULL) {
+        return false;
+    }
     ss.ss_family = env->GetIntField(holder.get(), familyFid);
     if (ss.ss_family == AF_UNSPEC) {
         sa_len = sizeof(ss.ss_family);
@@ -117,6 +123,9 @@
 
     // Get the byte array that stores the IP address bytes in the InetAddress.
     static jmethodID bytesMid = env->GetMethodID(JniConstants::inetAddressClass, "getAddress", "()[B");
+    if (bytesMid == NULL) {
+        return false;
+    }
     ScopedLocalRef<jbyteArray> addressBytes(env, reinterpret_cast<jbyteArray>(env->CallObjectMethod(inetAddress, bytesMid)));
     if (env->ExceptionCheck()) {
         return false;
@@ -143,6 +152,9 @@
         static jfieldID holder6Fid = env->GetFieldID(JniConstants::inet6AddressClass,
                                                      "holder6",
                                                      "Ljava/net/Inet6Address$Inet6AddressHolder;");
+        if (holder6Fid == NULL) {
+            return false;
+        }
         ScopedLocalRef<jobject> holder6(env, env->GetObjectField(inetAddress, holder6Fid));
         static jfieldID scopeFid = env->GetFieldID(JniConstants::inet6AddressHolderClass, "scope_id", "I");
         sin6.sin6_scope_id = env->GetIntField(holder6.get(), scopeFid);
diff --git a/luni/src/main/native/Register.cpp b/luni/src/main/native/Register.cpp
index 0c433da..c392553 100644
--- a/luni/src/main/native/Register.cpp
+++ b/luni/src/main/native/Register.cpp
@@ -37,6 +37,7 @@
     REGISTER(register_android_system_OsConstants);
     //    REGISTER(register_java_lang_StringToReal);
     REGISTER(register_java_lang_invoke_MethodHandle);
+    REGISTER(register_java_lang_invoke_VarHandle);
     REGISTER(register_java_math_NativeBN);
     REGISTER(register_java_util_regex_Matcher);
     REGISTER(register_java_util_regex_Pattern);
diff --git a/luni/src/main/native/java_lang_invoke_VarHandle.cpp b/luni/src/main/native/java_lang_invoke_VarHandle.cpp
new file mode 100644
index 0000000..46ea8ff
--- /dev/null
+++ b/luni/src/main/native/java_lang_invoke_VarHandle.cpp
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <nativehelper/JniConstants.h>
+#include <nativehelper/JNIHelp.h>
+
+/** Signature for VarHandle access mode methods with a void return type. */
+static const char* kVarHandleVoidSignature = "([Ljava/lang/Object;)V";
+
+/** Signature for VarHandle access mode methods returning an object reference. */
+static const char* kVarHandleBooleanSignature = "([Ljava/lang/Object;)Z";
+
+/** Signature for VarHandle access mode methods returning a boolean value. */
+static const char* kVarHandleObjectSignature = "([Ljava/lang/Object;)Ljava/lang/Object;";
+
+
+static void ThrowUnsupportedOperationForAccessMode(JNIEnv* env, const char* accessMode) {
+  // VarHandle access mode methods should be dispatched by the
+  // interpreter or inlined into compiled code. The JNI methods below
+  // are discoverable via reflection, but are not intended to be
+  // invoked this way.
+  jniThrowExceptionFmt(env,
+                       "java/lang/UnsupportedOperationException",
+                       "VarHandle.%s cannot be invoked reflectively.",
+                       accessMode);
+}
+
+static void VarHandle_compareAndExchange(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "compareAndExchange");
+}
+
+static void VarHandle_compareAndExchangeAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "compareAndExchangeAcquire");
+}
+
+static void VarHandle_compareAndExchangeRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "compareAndExchangeRelease");
+}
+
+static void VarHandle_compareAndSet(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "compareAndSet");
+}
+
+static void VarHandle_get(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "get");
+}
+
+static void VarHandle_getAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAcquire");
+}
+
+static void VarHandle_getAndAdd(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndAdd");
+}
+
+static void VarHandle_getAndAddAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndAddAcquire");
+}
+
+static void VarHandle_getAndAddRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndAddRelease");
+}
+
+static void VarHandle_getAndBitwiseAnd(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseAnd");
+}
+
+static void VarHandle_getAndBitwiseAndAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseAndAcquire");
+}
+
+static void VarHandle_getAndBitwiseAndRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseAndRelease");
+}
+
+static void VarHandle_getAndBitwiseOr(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseOr");
+}
+
+static void VarHandle_getAndBitwiseOrAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseOrAcquire");
+}
+
+static void VarHandle_getAndBitwiseOrRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseOrRelease");
+}
+
+static void VarHandle_getAndBitwiseXor(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseXor");
+}
+
+static void VarHandle_getAndBitwiseXorAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseXorAcquire");
+}
+
+static void VarHandle_getAndBitwiseXorRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndBitwiseXorRelease");
+}
+
+static void VarHandle_getAndSet(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndSet");
+}
+
+static void VarHandle_getAndSetAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndSetAcquire");
+}
+
+static void VarHandle_getAndSetRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getAndSetRelease");
+}
+
+static void VarHandle_getOpaque(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getOpaque");
+}
+
+static void VarHandle_getVolatile(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "getVolatile");
+}
+
+static void VarHandle_set(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "set");
+}
+
+static void VarHandle_setOpaque(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "setOpaque");
+}
+
+static void VarHandle_setRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "setRelease");
+}
+
+static void VarHandle_setVolatile(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "setVolatile");
+}
+
+static void VarHandle_weakCompareAndSet(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "weakCompareAndSet");
+}
+
+static void VarHandle_weakCompareAndSetAcquire(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "weakCompareAndSetAcquire");
+}
+
+static void VarHandle_weakCompareAndSetPlain(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "weakCompareAndSetPlain");
+}
+
+static void VarHandle_weakCompareAndSetRelease(JNIEnv* env, jobject, jobjectArray) {
+  // Only reachable with reflection (see comment in ThrowUnsupportedOperationForAccessMode).
+  ThrowUnsupportedOperationForAccessMode(env, "weakCompareAndSetRelease");
+}
+
+static JNINativeMethod gMethods[] = {
+  NATIVE_METHOD(VarHandle, compareAndExchange, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, compareAndExchangeAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, compareAndExchangeRelease, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, compareAndSet, kVarHandleBooleanSignature),
+  NATIVE_METHOD(VarHandle, get, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndAdd, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndAddAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndAddRelease, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseAnd, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseAndAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseAndRelease, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseOr, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseOrAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseOrRelease, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseXor, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseXorAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndBitwiseXorRelease, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndSet, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndSetAcquire, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getAndSetRelease, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getOpaque, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, getVolatile, kVarHandleObjectSignature),
+  NATIVE_METHOD(VarHandle, set, kVarHandleVoidSignature),
+  NATIVE_METHOD(VarHandle, setOpaque, kVarHandleVoidSignature),
+  NATIVE_METHOD(VarHandle, setRelease, kVarHandleVoidSignature),
+  NATIVE_METHOD(VarHandle, setVolatile, kVarHandleVoidSignature),
+  NATIVE_METHOD(VarHandle, weakCompareAndSet, kVarHandleBooleanSignature),
+  NATIVE_METHOD(VarHandle, weakCompareAndSetAcquire, kVarHandleBooleanSignature),
+  NATIVE_METHOD(VarHandle, weakCompareAndSetPlain, kVarHandleBooleanSignature),
+  NATIVE_METHOD(VarHandle, weakCompareAndSetRelease, kVarHandleBooleanSignature),
+};
+
+void register_java_lang_invoke_VarHandle(JNIEnv* env) {
+    jniRegisterNativeMethods(env, "java/lang/invoke/VarHandle", gMethods, NELEM(gMethods));
+}
diff --git a/luni/src/main/native/libcore_io_Linux.cpp b/luni/src/main/native/libcore_io_Linux.cpp
index 0f3a4a0..5df45c2 100644
--- a/luni/src/main/native/libcore_io_Linux.cpp
+++ b/luni/src/main/native/libcore_io_Linux.cpp
@@ -374,11 +374,16 @@
         }
         static jmethodID ctor = env->GetMethodID(JniConstants::inetSocketAddressClass,
                 "<init>", "(Ljava/net/InetAddress;I)V");
+        if (ctor == NULL) {
+            return NULL;
+        }
         return env->NewObject(JniConstants::inetSocketAddressClass, ctor, inetAddress, port);
     } else if (ss.ss_family == AF_UNIX) {
         static jmethodID ctor = env->GetMethodID(JniConstants::unixSocketAddressClass,
                 "<init>", "([B)V");
-
+        if (ctor == NULL) {
+            return NULL;
+        }
         jbyteArray javaSunPath = getUnixSocketPath(env, ss, sa_len);
         if (!javaSunPath) {
             return NULL;
@@ -388,6 +393,9 @@
         const struct sockaddr_nl* nl_addr = reinterpret_cast<const struct sockaddr_nl*>(&ss);
         static jmethodID ctor = env->GetMethodID(JniConstants::netlinkSocketAddressClass,
                 "<init>", "(II)V");
+        if (ctor == NULL) {
+            return NULL;
+        }
         return env->NewObject(JniConstants::netlinkSocketAddressClass, ctor,
                 static_cast<jint>(nl_addr->nl_pid),
                 static_cast<jint>(nl_addr->nl_groups));
@@ -395,6 +403,9 @@
         const struct sockaddr_ll* sll = reinterpret_cast<const struct sockaddr_ll*>(&ss);
         static jmethodID ctor = env->GetMethodID(JniConstants::packetSocketAddressClass,
                 "<init>", "(SISB[B)V");
+        if (ctor == NULL) {
+            return NULL;
+        }
         ScopedLocalRef<jbyteArray> byteArray(env, env->NewByteArray(sll->sll_halen));
         if (byteArray.get() == NULL) {
             return NULL;
@@ -420,6 +431,9 @@
     TO_JAVA_STRING(pw_shell, pw.pw_shell);
     static jmethodID ctor = env->GetMethodID(JniConstants::structPasswdClass, "<init>",
             "(Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structPasswdClass, ctor,
             pw_name, static_cast<jint>(pw.pw_uid), static_cast<jint>(pw.pw_gid), pw_dir, pw_shell);
 }
@@ -427,6 +441,9 @@
 static jobject makeStructTimespec(JNIEnv* env, const struct timespec& ts) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structTimespecClass, "<init>",
             "(JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structTimespecClass, ctor,
             static_cast<jlong>(ts.tv_sec), static_cast<jlong>(ts.tv_nsec));
 }
@@ -434,6 +451,10 @@
 static jobject makeStructStat(JNIEnv* env, const struct stat64& sb) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structStatClass, "<init>",
             "(JJIJIIJJLandroid/system/StructTimespec;Landroid/system/StructTimespec;Landroid/system/StructTimespec;JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
+
     return env->NewObject(JniConstants::structStatClass, ctor,
             static_cast<jlong>(sb.st_dev), static_cast<jlong>(sb.st_ino),
             static_cast<jint>(sb.st_mode), static_cast<jlong>(sb.st_nlink),
@@ -447,6 +468,10 @@
 static jobject makeStructStatVfs(JNIEnv* env, const struct statvfs& sb) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structStatVfsClass, "<init>",
             "(JJJJJJJJJJJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
+
     return env->NewObject(JniConstants::structStatVfsClass, ctor,
                           static_cast<jlong>(sb.f_bsize),
                           static_cast<jlong>(sb.f_frsize),
@@ -463,18 +488,27 @@
 
 static jobject makeStructLinger(JNIEnv* env, const struct linger& l) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structLingerClass, "<init>", "(II)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structLingerClass, ctor, l.l_onoff, l.l_linger);
 }
 
 static jobject makeStructTimeval(JNIEnv* env, const struct timeval& tv) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structTimevalClass, "<init>", "(JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structTimevalClass, ctor,
             static_cast<jlong>(tv.tv_sec), static_cast<jlong>(tv.tv_usec));
 }
 
 static jobject makeStructUcred(JNIEnv* env, const struct ucred& u __unused) {
-  static jmethodID ctor = env->GetMethodID(JniConstants::structUcredClass, "<init>", "(III)V");
-  return env->NewObject(JniConstants::structUcredClass, ctor, u.pid, u.uid, u.gid);
+    static jmethodID ctor = env->GetMethodID(JniConstants::structUcredClass, "<init>", "(III)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
+    return env->NewObject(JniConstants::structUcredClass, ctor, u.pid, u.uid, u.gid);
 }
 
 static jobject makeStructUtsname(JNIEnv* env, const struct utsname& buf) {
@@ -485,6 +519,9 @@
     TO_JAVA_STRING(machine, buf.machine);
     static jmethodID ctor = env->GetMethodID(JniConstants::structUtsnameClass, "<init>",
             "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(JniConstants::structUtsnameClass, ctor,
             sysname, nodename, release, version, machine);
 };
@@ -1324,6 +1361,9 @@
 
     ScopedLocalRef<jclass> rlimit_class(env, env->FindClass("android/system/StructRlimit"));
     jmethodID ctor = env->GetMethodID(rlimit_class.get(), "<init>", "(JJ)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
     return env->NewObject(rlimit_class.get(), ctor,
                           static_cast<jlong>(r.rlim_cur),
                           static_cast<jlong>(r.rlim_max));
@@ -1457,6 +1497,9 @@
 static jobjectArray Linux_getifaddrs(JNIEnv* env, jobject) {
     static jmethodID ctor = env->GetMethodID(JniConstants::structIfaddrs, "<init>",
             "(Ljava/lang/String;ILjava/net/InetAddress;Ljava/net/InetAddress;Ljava/net/InetAddress;[B)V");
+    if (ctor == NULL) {
+        return NULL;
+    }
 
     ifaddrs* ifaddr;
     int rc = TEMP_FAILURE_RETRY(getifaddrs(&ifaddr));
@@ -1543,6 +1586,9 @@
 
         jobject o = env->NewObject(JniConstants::structIfaddrs, ctor, name, flags, addr, netmask,
                                    broad, hwaddr);
+        if (o == NULL) {
+            return NULL;
+        }
         env->SetObjectArrayElement(result, index, o);
     }
 
@@ -2173,48 +2219,6 @@
     throwIfMinusOne(env, "setsockopt", rc);
 }
 
-static void Linux_setsockoptGroupSourceReq(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jobject javaGroupSourceReq) {
-    socklen_t sa_len;
-    struct group_source_req req;
-    memset(&req, 0, sizeof(req));
-
-    static jfieldID gsrInterfaceFid = env->GetFieldID(JniConstants::structGroupSourceReqClass, "gsr_interface", "I");
-    req.gsr_interface = env->GetIntField(javaGroupSourceReq, gsrInterfaceFid);
-    // Get the IPv4 or IPv6 multicast address to join or leave.
-    static jfieldID gsrGroupFid = env->GetFieldID(JniConstants::structGroupSourceReqClass, "gsr_group", "Ljava/net/InetAddress;");
-    ScopedLocalRef<jobject> javaGroup(env, env->GetObjectField(javaGroupSourceReq, gsrGroupFid));
-    if (!inetAddressToSockaddrVerbatim(env, javaGroup.get(), 0, req.gsr_group, sa_len)) {
-        return;
-    }
-
-    // Get the IPv4 or IPv6 multicast address to add to the filter.
-    static jfieldID gsrSourceFid = env->GetFieldID(JniConstants::structGroupSourceReqClass, "gsr_source", "Ljava/net/InetAddress;");
-    ScopedLocalRef<jobject> javaSource(env, env->GetObjectField(javaGroupSourceReq, gsrSourceFid));
-    if (!inetAddressToSockaddrVerbatim(env, javaSource.get(), 0, req.gsr_source, sa_len)) {
-        return;
-    }
-
-    int fd = jniGetFDFromFileDescriptor(env, javaFd);
-    int rc = TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &req, sizeof(req)));
-    if (rc == -1 && errno == EINVAL) {
-        // Maybe we're a 32-bit binary talking to a 64-bit kernel?
-        // glibc doesn't automatically handle this.
-        // http://sourceware.org/bugzilla/show_bug.cgi?id=12080
-        struct group_source_req64 {
-            uint32_t gsr_interface;
-            uint32_t my_padding;
-            sockaddr_storage gsr_group;
-            sockaddr_storage gsr_source;
-        };
-        group_source_req64 req64;
-        req64.gsr_interface = req.gsr_interface;
-        memcpy(&req64.gsr_group, &req.gsr_group, sizeof(req.gsr_group));
-        memcpy(&req64.gsr_source, &req.gsr_source, sizeof(req.gsr_source));
-        rc = TEMP_FAILURE_RETRY(setsockopt(fd, level, option, &req64, sizeof(req64)));
-    }
-    throwIfMinusOne(env, "setsockopt", rc);
-}
-
 static void Linux_setsockoptLinger(JNIEnv* env, jobject, jobject javaFd, jint level, jint option, jobject javaLinger) {
     static jfieldID lOnoffFid = env->GetFieldID(JniConstants::structLingerClass, "l_onoff", "I");
     static jfieldID lLingerFid = env->GetFieldID(JniConstants::structLingerClass, "l_linger", "I");
@@ -2507,7 +2511,6 @@
     NATIVE_METHOD(Linux, setsockoptInt, "(Ljava/io/FileDescriptor;III)V"),
     NATIVE_METHOD(Linux, setsockoptIpMreqn, "(Ljava/io/FileDescriptor;III)V"),
     NATIVE_METHOD(Linux, setsockoptGroupReq, "(Ljava/io/FileDescriptor;IILandroid/system/StructGroupReq;)V"),
-    NATIVE_METHOD(Linux, setsockoptGroupSourceReq, "(Ljava/io/FileDescriptor;IILandroid/system/StructGroupSourceReq;)V"),
     NATIVE_METHOD(Linux, setsockoptLinger, "(Ljava/io/FileDescriptor;IILandroid/system/StructLinger;)V"),
     NATIVE_METHOD(Linux, setsockoptTimeval, "(Ljava/io/FileDescriptor;IILandroid/system/StructTimeval;)V"),
     NATIVE_METHOD(Linux, setuid, "(I)V"),
diff --git a/luni/src/test/java/libcore/io/BlockGuardOsTest.java b/luni/src/test/java/libcore/io/BlockGuardOsTest.java
index bb10c3e..a24f114 100644
--- a/luni/src/test/java/libcore/io/BlockGuardOsTest.java
+++ b/luni/src/test/java/libcore/io/BlockGuardOsTest.java
@@ -108,7 +108,6 @@
                 "setsid()",
                 "setsockoptByte(java.io.FileDescriptor,int,int,int)",
                 "setsockoptGroupReq(java.io.FileDescriptor,int,int,android.system.StructGroupReq)",
-                "setsockoptGroupSourceReq(java.io.FileDescriptor,int,int,android.system.StructGroupSourceReq)",
                 "setsockoptIfreq(java.io.FileDescriptor,int,int,java.lang.String)",
                 "setsockoptInt(java.io.FileDescriptor,int,int,int)",
                 "setsockoptIpMreqn(java.io.FileDescriptor,int,int,int)",
diff --git a/non_openjdk_java_files.bp b/non_openjdk_java_files.bp
new file mode 100644
index 0000000..ada8b38
--- /dev/null
+++ b/non_openjdk_java_files.bp
@@ -0,0 +1,361 @@
+filegroup {
+    name: "non_openjdk_javadoc_files",
+    export_to_make_var: "non_openjdk_javadoc_files",
+    srcs: [
+        "luni/src/main/java/android/system/ErrnoException.java",
+        "luni/src/main/java/android/system/GaiException.java",
+        "luni/src/main/java/android/system/NetlinkSocketAddress.java",
+        "luni/src/main/java/android/system/Os.java",
+        "luni/src/main/java/android/system/OsConstants.java",
+        "luni/src/main/java/android/system/PacketSocketAddress.java",
+        "luni/src/main/java/android/system/StructAddrinfo.java",
+        "luni/src/main/java/android/system/StructCapUserData.java",
+        "luni/src/main/java/android/system/StructCapUserHeader.java",
+        "luni/src/main/java/android/system/StructFlock.java",
+        "luni/src/main/java/android/system/StructGroupReq.java",
+        "luni/src/main/java/android/system/StructIcmpHdr.java",
+        "luni/src/main/java/android/system/StructIfaddrs.java",
+        "luni/src/main/java/android/system/StructLinger.java",
+        "luni/src/main/java/android/system/StructPasswd.java",
+        "luni/src/main/java/android/system/StructPollfd.java",
+        "luni/src/main/java/android/system/StructRlimit.java",
+        "luni/src/main/java/android/system/StructStat.java",
+        "luni/src/main/java/android/system/StructStatVfs.java",
+        "luni/src/main/java/android/system/StructTimeval.java",
+        "luni/src/main/java/android/system/StructTimespec.java",
+        "luni/src/main/java/android/system/StructUcred.java",
+        "luni/src/main/java/android/system/StructUtsname.java",
+        "luni/src/main/java/android/util/MutableBoolean.java",
+        "luni/src/main/java/android/util/MutableByte.java",
+        "luni/src/main/java/android/util/MutableChar.java",
+        "luni/src/main/java/android/util/MutableDouble.java",
+        "luni/src/main/java/android/util/MutableFloat.java",
+        "luni/src/main/java/android/util/MutableInt.java",
+        "luni/src/main/java/android/util/MutableLong.java",
+        "luni/src/main/java/android/util/MutableShort.java",
+        "dalvik/src/main/java/dalvik/annotation/AnnotationDefault.java",
+        "dalvik/src/main/java/dalvik/annotation/EnclosingClass.java",
+        "dalvik/src/main/java/dalvik/annotation/EnclosingMethod.java",
+        "dalvik/src/main/java/dalvik/annotation/InnerClass.java",
+        "dalvik/src/main/java/dalvik/annotation/KnownFailure.java",
+        "dalvik/src/main/java/dalvik/annotation/MemberClasses.java",
+        "dalvik/src/main/java/dalvik/annotation/MethodParameters.java",
+        "dalvik/src/main/java/dalvik/annotation/Signature.java",
+        "dalvik/src/main/java/dalvik/annotation/TestTarget.java",
+        "dalvik/src/main/java/dalvik/annotation/TestTargetClass.java",
+        "dalvik/src/main/java/dalvik/annotation/Throws.java",
+        "dalvik/src/main/java/dalvik/annotation/optimization/CriticalNative.java",
+        "dalvik/src/main/java/dalvik/annotation/optimization/FastNative.java",
+        "dalvik/src/main/java/dalvik/bytecode/OpcodeInfo.java",
+        "dalvik/src/main/java/dalvik/bytecode/Opcodes.java",
+        "dalvik/src/main/java/dalvik/system/AllocationLimitError.java",
+        "dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java",
+        "dalvik/src/main/java/dalvik/system/BlockGuard.java",
+        "libart/src/main/java/dalvik/system/ClassExt.java",
+        "dalvik/src/main/java/dalvik/system/CloseGuard.java",
+        "dalvik/src/main/java/dalvik/system/DalvikLogHandler.java",
+        "dalvik/src/main/java/dalvik/system/DalvikLogging.java",
+        "dalvik/src/main/java/dalvik/system/DelegateLastClassLoader.java",
+        "dalvik/src/main/java/dalvik/system/DexClassLoader.java",
+        "dalvik/src/main/java/dalvik/system/DexFile.java",
+        "dalvik/src/main/java/dalvik/system/DexPathList.java",
+        "dalvik/src/main/java/dalvik/system/EmulatedStackFrame.java",
+        "dalvik/src/main/java/dalvik/system/InMemoryDexClassLoader.java",
+        "dalvik/src/main/java/dalvik/system/NativeStart.java",
+        "dalvik/src/main/java/dalvik/system/PathClassLoader.java",
+        "dalvik/src/main/java/dalvik/system/PotentialDeadlockError.java",
+        "dalvik/src/main/java/dalvik/system/SocketTagger.java",
+        "dalvik/src/main/java/dalvik/system/TemporaryDirectory.java",
+        "libart/src/main/java/dalvik/system/TransactionAbortError.java",
+        "dalvik/src/main/java/dalvik/system/VMDebug.java",
+        "libart/src/main/java/dalvik/system/VMRuntime.java",
+        "libart/src/main/java/dalvik/system/VMStack.java",
+        "dalvik/src/main/java/dalvik/system/ZygoteHooks.java",
+        "libart/src/main/java/java/lang/AndroidHardcodedSystemProperties.java",
+        "libart/src/main/java/java/lang/Daemons.java",
+        "libart/src/main/java/java/lang/DexCache.java",
+        "luni/src/main/java/java/lang/FindBugsSuppressWarnings.java",
+        "libart/src/main/java/java/lang/VMClassLoader.java",
+        "luni/src/main/java/java/lang/ref/FinalizerReference.java",
+        "luni/src/main/java/java/math/BigDecimal.java",
+        "luni/src/main/java/java/math/BigInt.java",
+        "luni/src/main/java/java/math/BigInteger.java",
+        "luni/src/main/java/java/math/BitLevel.java",
+        "luni/src/main/java/java/math/Conversion.java",
+        "luni/src/main/java/java/math/Division.java",
+        "luni/src/main/java/java/math/Logical.java",
+        "luni/src/main/java/java/math/MathContext.java",
+        "luni/src/main/java/java/math/Multiplication.java",
+        "luni/src/main/java/java/math/NativeBN.java",
+        "luni/src/main/java/java/math/Primality.java",
+        "luni/src/main/java/java/math/RoundingMode.java",
+        "luni/src/main/java/java/net/DefaultFileNameMap.java",
+        "luni/src/main/java/java/nio/NIOAccess.java",
+        "luni/src/main/java/java/nio/NioUtils.java",
+        "luni/src/main/java/java/nio/charset/CharsetDecoderICU.java",
+        "luni/src/main/java/java/nio/charset/CharsetEncoderICU.java",
+        "luni/src/main/java/java/nio/charset/CharsetICU.java",
+        "luni/src/main/java/java/nio/charset/ModifiedUtf8.java",
+        "luni/src/main/java/javax/xml/XMLConstants.java",
+        "luni/src/main/java/javax/xml/datatype/DatatypeConfigurationException.java",
+        "luni/src/main/java/javax/xml/datatype/DatatypeConstants.java",
+        "luni/src/main/java/javax/xml/datatype/DatatypeFactory.java",
+        "luni/src/main/java/javax/xml/datatype/Duration.java",
+        "luni/src/main/java/javax/xml/datatype/FactoryFinder.java",
+        "luni/src/main/java/javax/xml/datatype/XMLGregorianCalendar.java",
+        "luni/src/main/java/javax/xml/namespace/NamespaceContext.java",
+        "luni/src/main/java/javax/xml/namespace/QName.java",
+        "luni/src/main/java/javax/xml/parsers/DocumentBuilder.java",
+        "luni/src/main/java/javax/xml/parsers/DocumentBuilderFactory.java",
+        "luni/src/main/java/javax/xml/parsers/FactoryConfigurationError.java",
+        "luni/src/main/java/javax/xml/parsers/FilePathToURI.java",
+        "luni/src/main/java/javax/xml/parsers/ParserConfigurationException.java",
+        "luni/src/main/java/javax/xml/parsers/SAXParser.java",
+        "luni/src/main/java/javax/xml/parsers/SAXParserFactory.java",
+        "luni/src/main/java/javax/xml/transform/ErrorListener.java",
+        "luni/src/main/java/javax/xml/transform/OutputKeys.java",
+        "luni/src/main/java/javax/xml/transform/Result.java",
+        "luni/src/main/java/javax/xml/transform/Source.java",
+        "luni/src/main/java/javax/xml/transform/SourceLocator.java",
+        "luni/src/main/java/javax/xml/transform/Templates.java",
+        "luni/src/main/java/javax/xml/transform/Transformer.java",
+        "luni/src/main/java/javax/xml/transform/TransformerConfigurationException.java",
+        "luni/src/main/java/javax/xml/transform/TransformerException.java",
+        "luni/src/main/java/javax/xml/transform/TransformerFactory.java",
+        "luni/src/main/java/javax/xml/transform/TransformerFactoryConfigurationError.java",
+        "luni/src/main/java/javax/xml/transform/URIResolver.java",
+        "luni/src/main/java/javax/xml/transform/dom/DOMLocator.java",
+        "luni/src/main/java/javax/xml/transform/dom/DOMResult.java",
+        "luni/src/main/java/javax/xml/transform/dom/DOMSource.java",
+        "luni/src/main/java/javax/xml/transform/sax/SAXResult.java",
+        "luni/src/main/java/javax/xml/transform/sax/SAXSource.java",
+        "luni/src/main/java/javax/xml/transform/sax/SAXTransformerFactory.java",
+        "luni/src/main/java/javax/xml/transform/sax/TemplatesHandler.java",
+        "luni/src/main/java/javax/xml/transform/sax/TransformerHandler.java",
+        "luni/src/main/java/javax/xml/transform/stream/FilePathToURI.java",
+        "luni/src/main/java/javax/xml/transform/stream/StreamResult.java",
+        "luni/src/main/java/javax/xml/transform/stream/StreamSource.java",
+        "luni/src/main/java/javax/xml/validation/Schema.java",
+        "luni/src/main/java/javax/xml/validation/SchemaFactory.java",
+        "luni/src/main/java/javax/xml/validation/SchemaFactoryFinder.java",
+        "luni/src/main/java/javax/xml/validation/SchemaFactoryLoader.java",
+        "luni/src/main/java/javax/xml/validation/TypeInfoProvider.java",
+        "luni/src/main/java/javax/xml/validation/Validator.java",
+        "luni/src/main/java/javax/xml/validation/ValidatorHandler.java",
+        "luni/src/main/java/javax/xml/xpath/XPath.java",
+        "luni/src/main/java/javax/xml/xpath/XPathConstants.java",
+        "luni/src/main/java/javax/xml/xpath/XPathException.java",
+        "luni/src/main/java/javax/xml/xpath/XPathExpression.java",
+        "luni/src/main/java/javax/xml/xpath/XPathExpressionException.java",
+        "luni/src/main/java/javax/xml/xpath/XPathFactory.java",
+        "luni/src/main/java/javax/xml/xpath/XPathFactoryConfigurationException.java",
+        "luni/src/main/java/javax/xml/xpath/XPathFactoryFinder.java",
+        "luni/src/main/java/javax/xml/xpath/XPathFunction.java",
+        "luni/src/main/java/javax/xml/xpath/XPathFunctionException.java",
+        "luni/src/main/java/javax/xml/xpath/XPathFunctionResolver.java",
+        "luni/src/main/java/javax/xml/xpath/XPathVariableResolver.java",
+        "json/src/main/java/org/json/JSON.java",
+        "json/src/main/java/org/json/JSONArray.java",
+        "json/src/main/java/org/json/JSONException.java",
+        "json/src/main/java/org/json/JSONObject.java",
+        "json/src/main/java/org/json/JSONStringer.java",
+        "json/src/main/java/org/json/JSONTokener.java",
+        "luni/src/main/java/org/w3c/dom/Attr.java",
+        "luni/src/main/java/org/w3c/dom/CDATASection.java",
+        "luni/src/main/java/org/w3c/dom/CharacterData.java",
+        "luni/src/main/java/org/w3c/dom/Comment.java",
+        "luni/src/main/java/org/w3c/dom/DOMConfiguration.java",
+        "luni/src/main/java/org/w3c/dom/DOMError.java",
+        "luni/src/main/java/org/w3c/dom/DOMErrorHandler.java",
+        "luni/src/main/java/org/w3c/dom/DOMException.java",
+        "luni/src/main/java/org/w3c/dom/DOMImplementation.java",
+        "luni/src/main/java/org/w3c/dom/DOMImplementationList.java",
+        "luni/src/main/java/org/w3c/dom/DOMImplementationSource.java",
+        "luni/src/main/java/org/w3c/dom/DOMLocator.java",
+        "luni/src/main/java/org/w3c/dom/DOMStringList.java",
+        "luni/src/main/java/org/w3c/dom/Document.java",
+        "luni/src/main/java/org/w3c/dom/DocumentFragment.java",
+        "luni/src/main/java/org/w3c/dom/DocumentType.java",
+        "luni/src/main/java/org/w3c/dom/Element.java",
+        "luni/src/main/java/org/w3c/dom/Entity.java",
+        "luni/src/main/java/org/w3c/dom/EntityReference.java",
+        "luni/src/main/java/org/w3c/dom/NameList.java",
+        "luni/src/main/java/org/w3c/dom/NamedNodeMap.java",
+        "luni/src/main/java/org/w3c/dom/Node.java",
+        "luni/src/main/java/org/w3c/dom/NodeList.java",
+        "luni/src/main/java/org/w3c/dom/Notation.java",
+        "luni/src/main/java/org/w3c/dom/ProcessingInstruction.java",
+        "luni/src/main/java/org/w3c/dom/Text.java",
+        "luni/src/main/java/org/w3c/dom/TypeInfo.java",
+        "luni/src/main/java/org/w3c/dom/UserDataHandler.java",
+        "luni/src/main/java/org/w3c/dom/ls/DOMImplementationLS.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSException.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSInput.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSOutput.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSParser.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSParserFilter.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSResourceResolver.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSSerializer.java",
+        "luni/src/main/java/org/w3c/dom/ls/LSSerializerFilter.java",
+        "luni/src/main/java/org/w3c/dom/traversal/NodeFilter.java",
+        "luni/src/main/java/org/w3c/dom/traversal/NodeIterator.java",
+        "luni/src/main/java/org/xml/sax/AttributeList.java",
+        "luni/src/main/java/org/xml/sax/Attributes.java",
+        "luni/src/main/java/org/xml/sax/ContentHandler.java",
+        "luni/src/main/java/org/xml/sax/DTDHandler.java",
+        "luni/src/main/java/org/xml/sax/DocumentHandler.java",
+        "luni/src/main/java/org/xml/sax/EntityResolver.java",
+        "luni/src/main/java/org/xml/sax/ErrorHandler.java",
+        "luni/src/main/java/org/xml/sax/HandlerBase.java",
+        "luni/src/main/java/org/xml/sax/InputSource.java",
+        "luni/src/main/java/org/xml/sax/Locator.java",
+        "luni/src/main/java/org/xml/sax/Parser.java",
+        "luni/src/main/java/org/xml/sax/SAXException.java",
+        "luni/src/main/java/org/xml/sax/SAXNotRecognizedException.java",
+        "luni/src/main/java/org/xml/sax/SAXNotSupportedException.java",
+        "luni/src/main/java/org/xml/sax/SAXParseException.java",
+        "luni/src/main/java/org/xml/sax/XMLFilter.java",
+        "luni/src/main/java/org/xml/sax/XMLReader.java",
+        "luni/src/main/java/org/xml/sax/ext/Attributes2.java",
+        "luni/src/main/java/org/xml/sax/ext/Attributes2Impl.java",
+        "luni/src/main/java/org/xml/sax/ext/DeclHandler.java",
+        "luni/src/main/java/org/xml/sax/ext/DefaultHandler2.java",
+        "luni/src/main/java/org/xml/sax/ext/EntityResolver2.java",
+        "luni/src/main/java/org/xml/sax/ext/LexicalHandler.java",
+        "luni/src/main/java/org/xml/sax/ext/Locator2.java",
+        "luni/src/main/java/org/xml/sax/ext/Locator2Impl.java",
+        "luni/src/main/java/org/xml/sax/helpers/AttributeListImpl.java",
+        "luni/src/main/java/org/xml/sax/helpers/AttributesImpl.java",
+        "luni/src/main/java/org/xml/sax/helpers/DefaultHandler.java",
+        "luni/src/main/java/org/xml/sax/helpers/LocatorImpl.java",
+        "luni/src/main/java/org/xml/sax/helpers/NamespaceSupport.java",
+        "luni/src/main/java/org/xml/sax/helpers/NewInstance.java",
+        "luni/src/main/java/org/xml/sax/helpers/ParserAdapter.java",
+        "luni/src/main/java/org/xml/sax/helpers/ParserFactory.java",
+        "luni/src/main/java/org/xml/sax/helpers/XMLFilterImpl.java",
+        "luni/src/main/java/org/xml/sax/helpers/XMLReaderAdapter.java",
+        "luni/src/main/java/org/xml/sax/helpers/XMLReaderFactory.java",
+        "xml/src/main/java/org/xmlpull/v1/XmlPullParser.java",
+        "xml/src/main/java/org/xmlpull/v1/XmlPullParserException.java",
+        "xml/src/main/java/org/xmlpull/v1/XmlPullParserFactory.java",
+        "xml/src/main/java/org/xmlpull/v1/XmlSerializer.java",
+        "xml/src/main/java/org/xmlpull/v1/sax2/Driver.java",
+    ],
+}
+
+filegroup {
+    name: "non_openjdk_java_files",
+    export_to_make_var: "non_openjdk_java_files",
+    srcs: [
+        "luni/src/main/java/android/system/UnixSocketAddress.java",
+        "luni/src/main/java/java/net/AddressCache.java",
+        "luni/src/main/java/libcore/icu/CollationKeyICU.java",
+        "luni/src/main/java/libcore/icu/DateIntervalFormat.java",
+        "luni/src/main/java/libcore/icu/DateTimeFormat.java",
+        "luni/src/main/java/libcore/icu/DateUtilsBridge.java",
+        "luni/src/main/java/libcore/icu/ICU.java",
+        "luni/src/main/java/libcore/icu/LocaleData.java",
+        "luni/src/main/java/libcore/icu/NativeConverter.java",
+        "luni/src/main/java/libcore/icu/RelativeDateTimeFormatter.java",
+        "luni/src/main/java/libcore/icu/TimeZoneNames.java",
+        "luni/src/main/java/libcore/internal/StringPool.java",
+        "luni/src/main/java/libcore/io/AsynchronousCloseMonitor.java",
+        "luni/src/main/java/libcore/io/ClassPathURLStreamHandler.java",
+        "luni/src/main/java/libcore/io/BlockGuardOs.java",
+        "luni/src/main/java/libcore/io/BufferIterator.java",
+        "luni/src/main/java/libcore/io/DropBox.java",
+        "luni/src/main/java/libcore/io/EventLogger.java",
+        "luni/src/main/java/libcore/io/ForwardingOs.java",
+        "luni/src/main/java/libcore/io/IoBridge.java",
+        "luni/src/main/java/libcore/io/IoTracker.java",
+        "luni/src/main/java/libcore/io/IoUtils.java",
+        "luni/src/main/java/libcore/io/Libcore.java",
+        "luni/src/main/java/libcore/io/Linux.java",
+        "luni/src/main/java/libcore/io/Memory.java",
+        "luni/src/main/java/libcore/io/MemoryMappedFile.java",
+        "luni/src/main/java/libcore/io/NioBufferIterator.java",
+        "luni/src/main/java/libcore/io/Os.java",
+        "luni/src/main/java/libcore/io/SizeOf.java",
+        "luni/src/main/java/libcore/io/Streams.java",
+        "luni/src/main/java/libcore/math/MathUtils.java",
+        "luni/src/main/java/libcore/net/MimeUtils.java",
+        "luni/src/main/java/libcore/net/NetworkSecurityPolicy.java",
+        "luni/src/main/java/libcore/net/UriCodec.java",
+        "luni/src/main/java/libcore/net/event/NetworkEventDispatcher.java",
+        "luni/src/main/java/libcore/net/event/NetworkEventListener.java",
+        "luni/src/main/java/libcore/net/http/HttpDate.java",
+        "luni/src/main/java/libcore/net/http/ResponseUtils.java",
+        "luni/src/main/java/libcore/reflect/AnnotatedElements.java",
+        "luni/src/main/java/libcore/reflect/AnnotationFactory.java",
+        "luni/src/main/java/libcore/reflect/AnnotationMember.java",
+        "luni/src/main/java/libcore/reflect/GenericArrayTypeImpl.java",
+        "luni/src/main/java/libcore/reflect/GenericSignatureParser.java",
+        "luni/src/main/java/libcore/reflect/InternalNames.java",
+        "luni/src/main/java/libcore/reflect/ListOfTypes.java",
+        "luni/src/main/java/libcore/reflect/ListOfVariables.java",
+        "luni/src/main/java/libcore/reflect/ParameterizedTypeImpl.java",
+        "luni/src/main/java/libcore/reflect/TypeVariableImpl.java",
+        "luni/src/main/java/libcore/reflect/Types.java",
+        "luni/src/main/java/libcore/reflect/WildcardTypeImpl.java",
+        "luni/src/main/java/libcore/util/CharsetUtils.java",
+        "luni/src/main/java/libcore/util/EmptyArray.java",
+        "luni/src/main/java/libcore/util/BasicLruCache.java",
+        "luni/src/main/java/libcore/util/CollectionUtils.java",
+        "luni/src/main/java/libcore/util/EmptyArray.java",
+        "luni/src/main/java/libcore/util/NativeAllocationRegistry.java",
+        "luni/src/main/java/libcore/util/NonNull.java",
+        "luni/src/main/java/libcore/util/Objects.java",
+        "luni/src/main/java/libcore/util/RecoverySystem.java",
+        "luni/src/main/java/libcore/util/SneakyThrow.java",
+        "luni/src/main/java/libcore/util/TimeZoneDataFiles.java",
+        "luni/src/main/java/libcore/util/TimeZoneFinder.java",
+        "luni/src/main/java/libcore/util/ZoneInfo.java",
+        "luni/src/main/java/libcore/util/ZoneInfoDB.java",
+        "luni/src/main/java/libcore/util/HexEncoding.java",
+        "dalvik/src/main/java/org/apache/harmony/dalvik/NativeTestTarget.java",
+        "dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/Chunk.java",
+        "dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/ChunkHandler.java",
+        "dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmServer.java",
+        "dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmVmInternal.java",
+        "luni/src/main/java/org/apache/harmony/luni/internal/util/TimezoneGetter.java",
+        "luni/src/main/java/org/apache/harmony/security/PrivateKeyImpl.java",
+        "luni/src/main/java/org/apache/harmony/security/PublicKeyImpl.java",
+        "luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Impl.java",
+        "luni/src/main/java/org/apache/harmony/security/provider/crypto/CryptoProvider.java",
+        "luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java",
+        "luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Constants.java",
+        "luni/src/main/java/org/apache/harmony/xml/ExpatAttributes.java",
+        "luni/src/main/java/org/apache/harmony/xml/ExpatException.java",
+        "luni/src/main/java/org/apache/harmony/xml/ExpatParser.java",
+        "luni/src/main/java/org/apache/harmony/xml/ExpatReader.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/AttrImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/CDATASectionImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/CharacterDataImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/CommentImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/DOMConfigurationImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/DOMErrorImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/DOMImplementationImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/DocumentFragmentImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/DocumentImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/DocumentTypeImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/ElementImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/EntityImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/EntityReferenceImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/InnerNodeImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/LeafNodeImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/NodeImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/NodeListImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/NotationImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/ProcessingInstructionImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/dom/TextImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderFactoryImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/parsers/SAXParserFactoryImpl.java",
+        "luni/src/main/java/org/apache/harmony/xml/parsers/SAXParserImpl.java",
+        "libart/src/main/java/java/lang/CaseMapper.java",
+        "libart/src/main/java/java/lang/StringFactory.java",
+        "xml/src/main/java/org/kxml2/io/KXmlParser.java",
+        "xml/src/main/java/org/kxml2/io/KXmlSerializer.java",
+        ":non_openjdk_javadoc_files",
+    ],
+}
diff --git a/non_openjdk_java_files.mk b/non_openjdk_java_files.mk
deleted file mode 100644
index 7b1d180..0000000
--- a/non_openjdk_java_files.mk
+++ /dev/null
@@ -1,351 +0,0 @@
-non_openjdk_javadoc_files := \
-  luni/src/main/java/android/system/ErrnoException.java \
-  luni/src/main/java/android/system/GaiException.java \
-  luni/src/main/java/android/system/NetlinkSocketAddress.java \
-  luni/src/main/java/android/system/Os.java \
-  luni/src/main/java/android/system/OsConstants.java \
-  luni/src/main/java/android/system/PacketSocketAddress.java \
-  luni/src/main/java/android/system/StructAddrinfo.java \
-  luni/src/main/java/android/system/StructCapUserData.java \
-  luni/src/main/java/android/system/StructCapUserHeader.java \
-  luni/src/main/java/android/system/StructFlock.java \
-  luni/src/main/java/android/system/StructGroupReq.java \
-  luni/src/main/java/android/system/StructGroupSourceReq.java \
-  luni/src/main/java/android/system/StructIcmpHdr.java \
-  luni/src/main/java/android/system/StructIfaddrs.java \
-  luni/src/main/java/android/system/StructLinger.java \
-  luni/src/main/java/android/system/StructPasswd.java \
-  luni/src/main/java/android/system/StructPollfd.java \
-  luni/src/main/java/android/system/StructRlimit.java \
-  luni/src/main/java/android/system/StructStat.java \
-  luni/src/main/java/android/system/StructStatVfs.java \
-  luni/src/main/java/android/system/StructTimeval.java \
-  luni/src/main/java/android/system/StructTimespec.java \
-  luni/src/main/java/android/system/StructUcred.java \
-  luni/src/main/java/android/system/StructUtsname.java \
-  luni/src/main/java/android/util/MutableBoolean.java \
-  luni/src/main/java/android/util/MutableByte.java \
-  luni/src/main/java/android/util/MutableChar.java \
-  luni/src/main/java/android/util/MutableDouble.java \
-  luni/src/main/java/android/util/MutableFloat.java \
-  luni/src/main/java/android/util/MutableInt.java \
-  luni/src/main/java/android/util/MutableLong.java \
-  luni/src/main/java/android/util/MutableShort.java \
-  dalvik/src/main/java/dalvik/annotation/AnnotationDefault.java \
-  dalvik/src/main/java/dalvik/annotation/EnclosingClass.java \
-  dalvik/src/main/java/dalvik/annotation/EnclosingMethod.java \
-  dalvik/src/main/java/dalvik/annotation/InnerClass.java \
-  dalvik/src/main/java/dalvik/annotation/KnownFailure.java \
-  dalvik/src/main/java/dalvik/annotation/MemberClasses.java \
-  dalvik/src/main/java/dalvik/annotation/MethodParameters.java \
-  dalvik/src/main/java/dalvik/annotation/Signature.java \
-  dalvik/src/main/java/dalvik/annotation/TestTarget.java \
-  dalvik/src/main/java/dalvik/annotation/TestTargetClass.java \
-  dalvik/src/main/java/dalvik/annotation/Throws.java \
-  dalvik/src/main/java/dalvik/annotation/optimization/CriticalNative.java \
-  dalvik/src/main/java/dalvik/annotation/optimization/FastNative.java \
-  dalvik/src/main/java/dalvik/bytecode/OpcodeInfo.java \
-  dalvik/src/main/java/dalvik/bytecode/Opcodes.java \
-  dalvik/src/main/java/dalvik/system/AllocationLimitError.java \
-  dalvik/src/main/java/dalvik/system/BaseDexClassLoader.java \
-  dalvik/src/main/java/dalvik/system/BlockGuard.java \
-  libart/src/main/java/dalvik/system/ClassExt.java \
-  dalvik/src/main/java/dalvik/system/CloseGuard.java \
-  dalvik/src/main/java/dalvik/system/DalvikLogHandler.java \
-  dalvik/src/main/java/dalvik/system/DalvikLogging.java \
-  dalvik/src/main/java/dalvik/system/DelegateLastClassLoader.java \
-  dalvik/src/main/java/dalvik/system/DexClassLoader.java \
-  dalvik/src/main/java/dalvik/system/DexFile.java \
-  dalvik/src/main/java/dalvik/system/DexPathList.java \
-  dalvik/src/main/java/dalvik/system/EmulatedStackFrame.java \
-  dalvik/src/main/java/dalvik/system/InMemoryDexClassLoader.java \
-  dalvik/src/main/java/dalvik/system/NativeStart.java \
-  dalvik/src/main/java/dalvik/system/PathClassLoader.java \
-  dalvik/src/main/java/dalvik/system/PotentialDeadlockError.java \
-  dalvik/src/main/java/dalvik/system/SocketTagger.java \
-  dalvik/src/main/java/dalvik/system/TemporaryDirectory.java \
-  libart/src/main/java/dalvik/system/TransactionAbortError.java \
-  dalvik/src/main/java/dalvik/system/VMDebug.java \
-  libart/src/main/java/dalvik/system/VMRuntime.java \
-  libart/src/main/java/dalvik/system/VMStack.java \
-  dalvik/src/main/java/dalvik/system/ZygoteHooks.java \
-  libart/src/main/java/java/lang/AndroidHardcodedSystemProperties.java \
-  libart/src/main/java/java/lang/Daemons.java \
-  libart/src/main/java/java/lang/DexCache.java \
-  luni/src/main/java/java/lang/FindBugsSuppressWarnings.java \
-  libart/src/main/java/java/lang/VMClassLoader.java \
-  luni/src/main/java/java/lang/ref/FinalizerReference.java \
-  luni/src/main/java/java/math/BigDecimal.java \
-  luni/src/main/java/java/math/BigInt.java \
-  luni/src/main/java/java/math/BigInteger.java \
-  luni/src/main/java/java/math/BitLevel.java \
-  luni/src/main/java/java/math/Conversion.java \
-  luni/src/main/java/java/math/Division.java \
-  luni/src/main/java/java/math/Logical.java \
-  luni/src/main/java/java/math/MathContext.java \
-  luni/src/main/java/java/math/Multiplication.java \
-  luni/src/main/java/java/math/NativeBN.java \
-  luni/src/main/java/java/math/Primality.java \
-  luni/src/main/java/java/math/RoundingMode.java \
-  luni/src/main/java/java/net/DefaultFileNameMap.java \
-  luni/src/main/java/java/nio/NIOAccess.java \
-  luni/src/main/java/java/nio/NioUtils.java \
-  luni/src/main/java/java/nio/charset/CharsetDecoderICU.java \
-  luni/src/main/java/java/nio/charset/CharsetEncoderICU.java \
-  luni/src/main/java/java/nio/charset/CharsetICU.java \
-  luni/src/main/java/java/nio/charset/ModifiedUtf8.java \
-  luni/src/main/java/javax/xml/XMLConstants.java \
-  luni/src/main/java/javax/xml/datatype/DatatypeConfigurationException.java \
-  luni/src/main/java/javax/xml/datatype/DatatypeConstants.java \
-  luni/src/main/java/javax/xml/datatype/DatatypeFactory.java \
-  luni/src/main/java/javax/xml/datatype/Duration.java \
-  luni/src/main/java/javax/xml/datatype/FactoryFinder.java \
-  luni/src/main/java/javax/xml/datatype/XMLGregorianCalendar.java \
-  luni/src/main/java/javax/xml/namespace/NamespaceContext.java \
-  luni/src/main/java/javax/xml/namespace/QName.java \
-  luni/src/main/java/javax/xml/parsers/DocumentBuilder.java \
-  luni/src/main/java/javax/xml/parsers/DocumentBuilderFactory.java \
-  luni/src/main/java/javax/xml/parsers/FactoryConfigurationError.java \
-  luni/src/main/java/javax/xml/parsers/FilePathToURI.java \
-  luni/src/main/java/javax/xml/parsers/ParserConfigurationException.java \
-  luni/src/main/java/javax/xml/parsers/SAXParser.java \
-  luni/src/main/java/javax/xml/parsers/SAXParserFactory.java \
-  luni/src/main/java/javax/xml/transform/ErrorListener.java \
-  luni/src/main/java/javax/xml/transform/OutputKeys.java \
-  luni/src/main/java/javax/xml/transform/Result.java \
-  luni/src/main/java/javax/xml/transform/Source.java \
-  luni/src/main/java/javax/xml/transform/SourceLocator.java \
-  luni/src/main/java/javax/xml/transform/Templates.java \
-  luni/src/main/java/javax/xml/transform/Transformer.java \
-  luni/src/main/java/javax/xml/transform/TransformerConfigurationException.java \
-  luni/src/main/java/javax/xml/transform/TransformerException.java \
-  luni/src/main/java/javax/xml/transform/TransformerFactory.java \
-  luni/src/main/java/javax/xml/transform/TransformerFactoryConfigurationError.java \
-  luni/src/main/java/javax/xml/transform/URIResolver.java \
-  luni/src/main/java/javax/xml/transform/dom/DOMLocator.java \
-  luni/src/main/java/javax/xml/transform/dom/DOMResult.java \
-  luni/src/main/java/javax/xml/transform/dom/DOMSource.java \
-  luni/src/main/java/javax/xml/transform/sax/SAXResult.java \
-  luni/src/main/java/javax/xml/transform/sax/SAXSource.java \
-  luni/src/main/java/javax/xml/transform/sax/SAXTransformerFactory.java \
-  luni/src/main/java/javax/xml/transform/sax/TemplatesHandler.java \
-  luni/src/main/java/javax/xml/transform/sax/TransformerHandler.java \
-  luni/src/main/java/javax/xml/transform/stream/FilePathToURI.java \
-  luni/src/main/java/javax/xml/transform/stream/StreamResult.java \
-  luni/src/main/java/javax/xml/transform/stream/StreamSource.java \
-  luni/src/main/java/javax/xml/validation/Schema.java \
-  luni/src/main/java/javax/xml/validation/SchemaFactory.java \
-  luni/src/main/java/javax/xml/validation/SchemaFactoryFinder.java \
-  luni/src/main/java/javax/xml/validation/SchemaFactoryLoader.java \
-  luni/src/main/java/javax/xml/validation/TypeInfoProvider.java \
-  luni/src/main/java/javax/xml/validation/Validator.java \
-  luni/src/main/java/javax/xml/validation/ValidatorHandler.java \
-  luni/src/main/java/javax/xml/xpath/XPath.java \
-  luni/src/main/java/javax/xml/xpath/XPathConstants.java \
-  luni/src/main/java/javax/xml/xpath/XPathException.java \
-  luni/src/main/java/javax/xml/xpath/XPathExpression.java \
-  luni/src/main/java/javax/xml/xpath/XPathExpressionException.java \
-  luni/src/main/java/javax/xml/xpath/XPathFactory.java \
-  luni/src/main/java/javax/xml/xpath/XPathFactoryConfigurationException.java \
-  luni/src/main/java/javax/xml/xpath/XPathFactoryFinder.java \
-  luni/src/main/java/javax/xml/xpath/XPathFunction.java \
-  luni/src/main/java/javax/xml/xpath/XPathFunctionException.java \
-  luni/src/main/java/javax/xml/xpath/XPathFunctionResolver.java \
-  luni/src/main/java/javax/xml/xpath/XPathVariableResolver.java \
-  json/src/main/java/org/json/JSON.java \
-  json/src/main/java/org/json/JSONArray.java \
-  json/src/main/java/org/json/JSONException.java \
-  json/src/main/java/org/json/JSONObject.java \
-  json/src/main/java/org/json/JSONStringer.java \
-  json/src/main/java/org/json/JSONTokener.java \
-  luni/src/main/java/org/w3c/dom/Attr.java \
-  luni/src/main/java/org/w3c/dom/CDATASection.java \
-  luni/src/main/java/org/w3c/dom/CharacterData.java \
-  luni/src/main/java/org/w3c/dom/Comment.java \
-  luni/src/main/java/org/w3c/dom/DOMConfiguration.java \
-  luni/src/main/java/org/w3c/dom/DOMError.java \
-  luni/src/main/java/org/w3c/dom/DOMErrorHandler.java \
-  luni/src/main/java/org/w3c/dom/DOMException.java \
-  luni/src/main/java/org/w3c/dom/DOMImplementation.java \
-  luni/src/main/java/org/w3c/dom/DOMImplementationList.java \
-  luni/src/main/java/org/w3c/dom/DOMImplementationSource.java \
-  luni/src/main/java/org/w3c/dom/DOMLocator.java \
-  luni/src/main/java/org/w3c/dom/DOMStringList.java \
-  luni/src/main/java/org/w3c/dom/Document.java \
-  luni/src/main/java/org/w3c/dom/DocumentFragment.java \
-  luni/src/main/java/org/w3c/dom/DocumentType.java \
-  luni/src/main/java/org/w3c/dom/Element.java \
-  luni/src/main/java/org/w3c/dom/Entity.java \
-  luni/src/main/java/org/w3c/dom/EntityReference.java \
-  luni/src/main/java/org/w3c/dom/NameList.java \
-  luni/src/main/java/org/w3c/dom/NamedNodeMap.java \
-  luni/src/main/java/org/w3c/dom/Node.java \
-  luni/src/main/java/org/w3c/dom/NodeList.java \
-  luni/src/main/java/org/w3c/dom/Notation.java \
-  luni/src/main/java/org/w3c/dom/ProcessingInstruction.java \
-  luni/src/main/java/org/w3c/dom/Text.java \
-  luni/src/main/java/org/w3c/dom/TypeInfo.java \
-  luni/src/main/java/org/w3c/dom/UserDataHandler.java \
-  luni/src/main/java/org/w3c/dom/ls/DOMImplementationLS.java \
-  luni/src/main/java/org/w3c/dom/ls/LSException.java \
-  luni/src/main/java/org/w3c/dom/ls/LSInput.java \
-  luni/src/main/java/org/w3c/dom/ls/LSOutput.java \
-  luni/src/main/java/org/w3c/dom/ls/LSParser.java \
-  luni/src/main/java/org/w3c/dom/ls/LSParserFilter.java \
-  luni/src/main/java/org/w3c/dom/ls/LSResourceResolver.java \
-  luni/src/main/java/org/w3c/dom/ls/LSSerializer.java \
-  luni/src/main/java/org/w3c/dom/ls/LSSerializerFilter.java \
-  luni/src/main/java/org/w3c/dom/traversal/NodeFilter.java \
-  luni/src/main/java/org/w3c/dom/traversal/NodeIterator.java \
-  luni/src/main/java/org/xml/sax/AttributeList.java \
-  luni/src/main/java/org/xml/sax/Attributes.java \
-  luni/src/main/java/org/xml/sax/ContentHandler.java \
-  luni/src/main/java/org/xml/sax/DTDHandler.java \
-  luni/src/main/java/org/xml/sax/DocumentHandler.java \
-  luni/src/main/java/org/xml/sax/EntityResolver.java \
-  luni/src/main/java/org/xml/sax/ErrorHandler.java \
-  luni/src/main/java/org/xml/sax/HandlerBase.java \
-  luni/src/main/java/org/xml/sax/InputSource.java \
-  luni/src/main/java/org/xml/sax/Locator.java \
-  luni/src/main/java/org/xml/sax/Parser.java \
-  luni/src/main/java/org/xml/sax/SAXException.java \
-  luni/src/main/java/org/xml/sax/SAXNotRecognizedException.java \
-  luni/src/main/java/org/xml/sax/SAXNotSupportedException.java \
-  luni/src/main/java/org/xml/sax/SAXParseException.java \
-  luni/src/main/java/org/xml/sax/XMLFilter.java \
-  luni/src/main/java/org/xml/sax/XMLReader.java \
-  luni/src/main/java/org/xml/sax/ext/Attributes2.java \
-  luni/src/main/java/org/xml/sax/ext/Attributes2Impl.java \
-  luni/src/main/java/org/xml/sax/ext/DeclHandler.java \
-  luni/src/main/java/org/xml/sax/ext/DefaultHandler2.java \
-  luni/src/main/java/org/xml/sax/ext/EntityResolver2.java \
-  luni/src/main/java/org/xml/sax/ext/LexicalHandler.java \
-  luni/src/main/java/org/xml/sax/ext/Locator2.java \
-  luni/src/main/java/org/xml/sax/ext/Locator2Impl.java \
-  luni/src/main/java/org/xml/sax/helpers/AttributeListImpl.java \
-  luni/src/main/java/org/xml/sax/helpers/AttributesImpl.java \
-  luni/src/main/java/org/xml/sax/helpers/DefaultHandler.java \
-  luni/src/main/java/org/xml/sax/helpers/LocatorImpl.java \
-  luni/src/main/java/org/xml/sax/helpers/NamespaceSupport.java \
-  luni/src/main/java/org/xml/sax/helpers/NewInstance.java \
-  luni/src/main/java/org/xml/sax/helpers/ParserAdapter.java \
-  luni/src/main/java/org/xml/sax/helpers/ParserFactory.java \
-  luni/src/main/java/org/xml/sax/helpers/XMLFilterImpl.java \
-  luni/src/main/java/org/xml/sax/helpers/XMLReaderAdapter.java \
-  luni/src/main/java/org/xml/sax/helpers/XMLReaderFactory.java \
-  xml/src/main/java/org/xmlpull/v1/XmlPullParser.java \
-  xml/src/main/java/org/xmlpull/v1/XmlPullParserException.java \
-  xml/src/main/java/org/xmlpull/v1/XmlPullParserFactory.java \
-  xml/src/main/java/org/xmlpull/v1/XmlSerializer.java \
-  xml/src/main/java/org/xmlpull/v1/sax2/Driver.java \
-
-non_openjdk_java_files := \
-  luni/src/main/java/android/system/UnixSocketAddress.java \
-  luni/src/main/java/java/net/AddressCache.java \
-  luni/src/main/java/libcore/icu/CollationKeyICU.java \
-  luni/src/main/java/libcore/icu/DateIntervalFormat.java \
-  luni/src/main/java/libcore/icu/DateTimeFormat.java \
-  luni/src/main/java/libcore/icu/DateUtilsBridge.java \
-  luni/src/main/java/libcore/icu/ICU.java \
-  luni/src/main/java/libcore/icu/LocaleData.java \
-  luni/src/main/java/libcore/icu/NativeConverter.java \
-  luni/src/main/java/libcore/icu/RelativeDateTimeFormatter.java \
-  luni/src/main/java/libcore/icu/TimeZoneNames.java \
-  luni/src/main/java/libcore/internal/StringPool.java \
-  luni/src/main/java/libcore/io/AsynchronousCloseMonitor.java \
-  luni/src/main/java/libcore/io/ClassPathURLStreamHandler.java \
-  luni/src/main/java/libcore/io/BlockGuardOs.java \
-  luni/src/main/java/libcore/io/BufferIterator.java \
-  luni/src/main/java/libcore/io/DropBox.java \
-  luni/src/main/java/libcore/io/EventLogger.java \
-  luni/src/main/java/libcore/io/ForwardingOs.java \
-  luni/src/main/java/libcore/io/IoBridge.java \
-  luni/src/main/java/libcore/io/IoTracker.java \
-  luni/src/main/java/libcore/io/IoUtils.java \
-  luni/src/main/java/libcore/io/Libcore.java \
-  luni/src/main/java/libcore/io/Linux.java \
-  luni/src/main/java/libcore/io/Memory.java \
-  luni/src/main/java/libcore/io/MemoryMappedFile.java \
-  luni/src/main/java/libcore/io/NioBufferIterator.java \
-  luni/src/main/java/libcore/io/Os.java \
-  luni/src/main/java/libcore/io/SizeOf.java \
-  luni/src/main/java/libcore/io/Streams.java \
-  luni/src/main/java/libcore/math/MathUtils.java \
-  luni/src/main/java/libcore/net/MimeUtils.java \
-  luni/src/main/java/libcore/net/NetworkSecurityPolicy.java \
-  luni/src/main/java/libcore/net/UriCodec.java \
-  luni/src/main/java/libcore/net/event/NetworkEventDispatcher.java \
-  luni/src/main/java/libcore/net/event/NetworkEventListener.java \
-  luni/src/main/java/libcore/net/http/HttpDate.java \
-  luni/src/main/java/libcore/net/http/ResponseUtils.java \
-  luni/src/main/java/libcore/reflect/AnnotatedElements.java \
-  luni/src/main/java/libcore/reflect/AnnotationFactory.java \
-  luni/src/main/java/libcore/reflect/AnnotationMember.java \
-  luni/src/main/java/libcore/reflect/GenericArrayTypeImpl.java \
-  luni/src/main/java/libcore/reflect/GenericSignatureParser.java \
-  luni/src/main/java/libcore/reflect/InternalNames.java \
-  luni/src/main/java/libcore/reflect/ListOfTypes.java \
-  luni/src/main/java/libcore/reflect/ListOfVariables.java \
-  luni/src/main/java/libcore/reflect/ParameterizedTypeImpl.java \
-  luni/src/main/java/libcore/reflect/TypeVariableImpl.java \
-  luni/src/main/java/libcore/reflect/Types.java \
-  luni/src/main/java/libcore/reflect/WildcardTypeImpl.java \
-  luni/src/main/java/libcore/util/CharsetUtils.java \
-  luni/src/main/java/libcore/util/EmptyArray.java \
-  luni/src/main/java/libcore/util/BasicLruCache.java \
-  luni/src/main/java/libcore/util/CollectionUtils.java \
-  luni/src/main/java/libcore/util/EmptyArray.java \
-  luni/src/main/java/libcore/util/NativeAllocationRegistry.java \
-  luni/src/main/java/libcore/util/Objects.java \
-  luni/src/main/java/libcore/util/RecoverySystem.java \
-  luni/src/main/java/libcore/util/SneakyThrow.java \
-  luni/src/main/java/libcore/util/TimeZoneDataFiles.java \
-  luni/src/main/java/libcore/util/TimeZoneFinder.java \
-  luni/src/main/java/libcore/util/ZoneInfo.java \
-  luni/src/main/java/libcore/util/ZoneInfoDB.java \
-  luni/src/main/java/libcore/util/HexEncoding.java \
-  dalvik/src/main/java/org/apache/harmony/dalvik/NativeTestTarget.java \
-  dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/Chunk.java \
-  dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/ChunkHandler.java \
-  dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmServer.java \
-  dalvik/src/main/java/org/apache/harmony/dalvik/ddmc/DdmVmInternal.java \
-  luni/src/main/java/org/apache/harmony/luni/internal/util/TimezoneGetter.java \
-  luni/src/main/java/org/apache/harmony/security/PrivateKeyImpl.java \
-  luni/src/main/java/org/apache/harmony/security/PublicKeyImpl.java \
-  luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Impl.java \
-  luni/src/main/java/org/apache/harmony/security/provider/crypto/CryptoProvider.java \
-  luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java \
-  luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Constants.java \
-  luni/src/main/java/org/apache/harmony/xml/ExpatAttributes.java \
-  luni/src/main/java/org/apache/harmony/xml/ExpatException.java \
-  luni/src/main/java/org/apache/harmony/xml/ExpatParser.java \
-  luni/src/main/java/org/apache/harmony/xml/ExpatReader.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/AttrImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/CDATASectionImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/CharacterDataImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/CommentImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/DOMConfigurationImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/DOMErrorImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/DOMImplementationImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/DocumentFragmentImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/DocumentImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/DocumentTypeImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/ElementImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/EntityImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/EntityReferenceImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/InnerNodeImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/LeafNodeImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/NodeImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/NodeListImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/NotationImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/ProcessingInstructionImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/dom/TextImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderFactoryImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/parsers/SAXParserFactoryImpl.java \
-  luni/src/main/java/org/apache/harmony/xml/parsers/SAXParserImpl.java \
-  libart/src/main/java/java/lang/CaseMapper.java \
-  libart/src/main/java/java/lang/StringFactory.java \
-  xml/src/main/java/org/kxml2/io/KXmlParser.java \
-  xml/src/main/java/org/kxml2/io/KXmlSerializer.java \
-  $(non_openjdk_javadoc_files)
diff --git a/ojluni/src/main/java/java/lang/invoke/MethodHandles.java b/ojluni/src/main/java/java/lang/invoke/MethodHandles.java
index 94c9917..88ce6e0 100644
--- a/ojluni/src/main/java/java/lang/invoke/MethodHandles.java
+++ b/ojluni/src/main/java/java/lang/invoke/MethodHandles.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 package java.lang.invoke;
 
 import java.lang.reflect.*;
+import java.nio.ByteOrder;
 import java.util.List;
 import java.util.Arrays;
 import java.util.ArrayList;
@@ -52,6 +53,13 @@
 
     private MethodHandles() { }  // do not instantiate
 
+    // BEGIN Android-added: unsupported() helper function.
+    // TODO(b/65872996): Remove when complete.
+    private static void unsupported(String msg) throws UnsupportedOperationException {
+        throw new UnsupportedOperationException(msg);
+    }
+    // END Android-added: unsupported() helper function.
+
     // Android-changed: We do not use MemberName / MethodHandleImpl.
     //
     // private static final MemberName.Factory IMPL_NAMES = MemberName.getFactory();
@@ -887,6 +895,13 @@
                     return mh;
                 }
             }
+            // BEGIN Android-changed: Added VarHandle case here.
+            // Implementation to follow. TODO(b/65872996)
+            if (refc == VarHandle.class) {
+                unsupported("MethodHandles.findVirtual with refc == VarHandle.class");
+                return null;
+            }
+            // END Android-changed: Added VarHandle handling here.
 
             Method method = refc.getInstanceMethod(name, type.ptypes());
             if (method == null) {
@@ -1257,6 +1272,82 @@
             return findAccessor(refc, name, type, MethodHandle.IPUT);
         }
 
+        // BEGIN Android-changed: OpenJDK 9+181 VarHandle API factory method for bring up purposes.
+        /**
+         * Produces a VarHandle giving access to a non-static field {@code name}
+         * of type {@code type} declared in a class of type {@code recv}.
+         * The VarHandle's variable type is {@code type} and it has one
+         * coordinate type, {@code recv}.
+         * <p>
+         * Access checking is performed immediately on behalf of the lookup
+         * class.
+         * <p>
+         * Certain access modes of the returned VarHandle are unsupported under
+         * the following conditions:
+         * <ul>
+         * <li>if the field is declared {@code final}, then the write, atomic
+         *     update, numeric atomic update, and bitwise atomic update access
+         *     modes are unsupported.
+         * <li>if the field type is anything other than {@code byte},
+         *     {@code short}, {@code char}, {@code int}, {@code long},
+         *     {@code float}, or {@code double} then numeric atomic update
+         *     access modes are unsupported.
+         * <li>if the field type is anything other than {@code boolean},
+         *     {@code byte}, {@code short}, {@code char}, {@code int} or
+         *     {@code long} then bitwise atomic update access modes are
+         *     unsupported.
+         * </ul>
+         * <p>
+         * If the field is declared {@code volatile} then the returned VarHandle
+         * will override access to the field (effectively ignore the
+         * {@code volatile} declaration) in accordance to its specified
+         * access modes.
+         * <p>
+         * If the field type is {@code float} or {@code double} then numeric
+         * and atomic update access modes compare values using their bitwise
+         * representation (see {@link Float#floatToRawIntBits} and
+         * {@link Double#doubleToRawLongBits}, respectively).
+         * @apiNote
+         * Bitwise comparison of {@code float} values or {@code double} values,
+         * as performed by the numeric and atomic update access modes, differ
+         * from the primitive {@code ==} operator and the {@link Float#equals}
+         * and {@link Double#equals} methods, specifically with respect to
+         * comparing NaN values or comparing {@code -0.0} with {@code +0.0}.
+         * Care should be taken when performing a compare and set or a compare
+         * and exchange operation with such values since the operation may
+         * unexpectedly fail.
+         * There are many possible NaN values that are considered to be
+         * {@code NaN} in Java, although no IEEE 754 floating-point operation
+         * provided by Java can distinguish between them.  Operation failure can
+         * occur if the expected or witness value is a NaN value and it is
+         * transformed (perhaps in a platform specific manner) into another NaN
+         * value, and thus has a different bitwise representation (see
+         * {@link Float#intBitsToFloat} or {@link Double#longBitsToDouble} for more
+         * details).
+         * The values {@code -0.0} and {@code +0.0} have different bitwise
+         * representations but are considered equal when using the primitive
+         * {@code ==} operator.  Operation failure can occur if, for example, a
+         * numeric algorithm computes an expected value to be say {@code -0.0}
+         * and previously computed the witness value to be say {@code +0.0}.
+         * @param recv the receiver class, of type {@code R}, that declares the
+         * non-static field
+         * @param name the field's name
+         * @param type the field's type, of type {@code T}
+         * @return a VarHandle giving access to non-static fields.
+         * @throws NoSuchFieldException if the field does not exist
+         * @throws IllegalAccessException if access checking fails, or if the field is {@code static}
+         * @exception SecurityException if a security manager is present and it
+         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
+         * @throws NullPointerException if any argument is null
+         * @since 9
+         * @hide
+         */
+        public VarHandle findVarHandle(Class<?> recv, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
+            unsupported("MethodHandles.Lookup.findVarHandle()");  // TODO(b/65872996)
+            return null;
+        }
+        // END Android-changed: OpenJDK 9+181 VarHandle API factory method for bring up purposes.
+
         /**
          * Produces a method handle giving read access to a static field.
          * The type of the method handle will have a return type of the field's
@@ -1303,6 +1394,84 @@
             return findAccessor(refc, name, type, MethodHandle.SPUT);
         }
 
+        // BEGIN Android-changed: OpenJDK 9+181 VarHandle API factory method for bring up purposes.
+        /**
+         * Produces a VarHandle giving access to a static field {@code name} of
+         * type {@code type} declared in a class of type {@code decl}.
+         * The VarHandle's variable type is {@code type} and it has no
+         * coordinate types.
+         * <p>
+         * Access checking is performed immediately on behalf of the lookup
+         * class.
+         * <p>
+         * If the returned VarHandle is operated on, the declaring class will be
+         * initialized, if it has not already been initialized.
+         * <p>
+         * Certain access modes of the returned VarHandle are unsupported under
+         * the following conditions:
+         * <ul>
+         * <li>if the field is declared {@code final}, then the write, atomic
+         *     update, numeric atomic update, and bitwise atomic update access
+         *     modes are unsupported.
+         * <li>if the field type is anything other than {@code byte},
+         *     {@code short}, {@code char}, {@code int}, {@code long},
+         *     {@code float}, or {@code double}, then numeric atomic update
+         *     access modes are unsupported.
+         * <li>if the field type is anything other than {@code boolean},
+         *     {@code byte}, {@code short}, {@code char}, {@code int} or
+         *     {@code long} then bitwise atomic update access modes are
+         *     unsupported.
+         * </ul>
+         * <p>
+         * If the field is declared {@code volatile} then the returned VarHandle
+         * will override access to the field (effectively ignore the
+         * {@code volatile} declaration) in accordance to its specified
+         * access modes.
+         * <p>
+         * If the field type is {@code float} or {@code double} then numeric
+         * and atomic update access modes compare values using their bitwise
+         * representation (see {@link Float#floatToRawIntBits} and
+         * {@link Double#doubleToRawLongBits}, respectively).
+         * @apiNote
+         * Bitwise comparison of {@code float} values or {@code double} values,
+         * as performed by the numeric and atomic update access modes, differ
+         * from the primitive {@code ==} operator and the {@link Float#equals}
+         * and {@link Double#equals} methods, specifically with respect to
+         * comparing NaN values or comparing {@code -0.0} with {@code +0.0}.
+         * Care should be taken when performing a compare and set or a compare
+         * and exchange operation with such values since the operation may
+         * unexpectedly fail.
+         * There are many possible NaN values that are considered to be
+         * {@code NaN} in Java, although no IEEE 754 floating-point operation
+         * provided by Java can distinguish between them.  Operation failure can
+         * occur if the expected or witness value is a NaN value and it is
+         * transformed (perhaps in a platform specific manner) into another NaN
+         * value, and thus has a different bitwise representation (see
+         * {@link Float#intBitsToFloat} or {@link Double#longBitsToDouble} for more
+         * details).
+         * The values {@code -0.0} and {@code +0.0} have different bitwise
+         * representations but are considered equal when using the primitive
+         * {@code ==} operator.  Operation failure can occur if, for example, a
+         * numeric algorithm computes an expected value to be say {@code -0.0}
+         * and previously computed the witness value to be say {@code +0.0}.
+         * @param decl the class that declares the static field
+         * @param name the field's name
+         * @param type the field's type, of type {@code T}
+         * @return a VarHandle giving access to a static field
+         * @throws NoSuchFieldException if the field does not exist
+         * @throws IllegalAccessException if access checking fails, or if the field is not {@code static}
+         * @exception SecurityException if a security manager is present and it
+         *                              <a href="MethodHandles.Lookup.html#secmgr">refuses access</a>
+         * @throws NullPointerException if any argument is null
+         * @since 9
+         * @hide
+         */
+        public VarHandle findStaticVarHandle(Class<?> decl, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException {
+            unsupported("MethodHandles.Lookup.findStaticVarHandle()");  // TODO(b/65872996)
+            return null;
+        }
+        // END Android-changed: OpenJDK 9+181 VarHandle API factory method for bring up purposes.
+
         /**
          * Produces an early-bound method handle for a non-static method.
          * The receiver must have a supertype {@code defc} in which a method
@@ -1543,6 +1712,85 @@
                     f.isAccessible() /* performAccessChecks */);
         }
 
+        // BEGIN Android-changed: OpenJDK 9+181 VarHandle API factory method for bring up purposes.
+        /**
+         * Produces a VarHandle giving access to a reflected field {@code f}
+         * of type {@code T} declared in a class of type {@code R}.
+         * The VarHandle's variable type is {@code T}.
+         * If the field is non-static the VarHandle has one coordinate type,
+         * {@code R}.  Otherwise, the field is static, and the VarHandle has no
+         * coordinate types.
+         * <p>
+         * Access checking is performed immediately on behalf of the lookup
+         * class, regardless of the value of the field's {@code accessible}
+         * flag.
+         * <p>
+         * If the field is static, and if the returned VarHandle is operated
+         * on, the field's declaring class will be initialized, if it has not
+         * already been initialized.
+         * <p>
+         * Certain access modes of the returned VarHandle are unsupported under
+         * the following conditions:
+         * <ul>
+         * <li>if the field is declared {@code final}, then the write, atomic
+         *     update, numeric atomic update, and bitwise atomic update access
+         *     modes are unsupported.
+         * <li>if the field type is anything other than {@code byte},
+         *     {@code short}, {@code char}, {@code int}, {@code long},
+         *     {@code float}, or {@code double} then numeric atomic update
+         *     access modes are unsupported.
+         * <li>if the field type is anything other than {@code boolean},
+         *     {@code byte}, {@code short}, {@code char}, {@code int} or
+         *     {@code long} then bitwise atomic update access modes are
+         *     unsupported.
+         * </ul>
+         * <p>
+         * If the field is declared {@code volatile} then the returned VarHandle
+         * will override access to the field (effectively ignore the
+         * {@code volatile} declaration) in accordance to its specified
+         * access modes.
+         * <p>
+         * If the field type is {@code float} or {@code double} then numeric
+         * and atomic update access modes compare values using their bitwise
+         * representation (see {@link Float#floatToRawIntBits} and
+         * {@link Double#doubleToRawLongBits}, respectively).
+         * @apiNote
+         * Bitwise comparison of {@code float} values or {@code double} values,
+         * as performed by the numeric and atomic update access modes, differ
+         * from the primitive {@code ==} operator and the {@link Float#equals}
+         * and {@link Double#equals} methods, specifically with respect to
+         * comparing NaN values or comparing {@code -0.0} with {@code +0.0}.
+         * Care should be taken when performing a compare and set or a compare
+         * and exchange operation with such values since the operation may
+         * unexpectedly fail.
+         * There are many possible NaN values that are considered to be
+         * {@code NaN} in Java, although no IEEE 754 floating-point operation
+         * provided by Java can distinguish between them.  Operation failure can
+         * occur if the expected or witness value is a NaN value and it is
+         * transformed (perhaps in a platform specific manner) into another NaN
+         * value, and thus has a different bitwise representation (see
+         * {@link Float#intBitsToFloat} or {@link Double#longBitsToDouble} for more
+         * details).
+         * The values {@code -0.0} and {@code +0.0} have different bitwise
+         * representations but are considered equal when using the primitive
+         * {@code ==} operator.  Operation failure can occur if, for example, a
+         * numeric algorithm computes an expected value to be say {@code -0.0}
+         * and previously computed the witness value to be say {@code +0.0}.
+         * @param f the reflected field, with a field of type {@code T}, and
+         * a declaring class of type {@code R}
+         * @return a VarHandle giving access to non-static fields or a static
+         * field
+         * @throws IllegalAccessException if access checking fails
+         * @throws NullPointerException if the argument is null
+         * @since 9
+         * @hide
+         */
+        public VarHandle unreflectVarHandle(Field f) throws IllegalAccessException {
+            unsupported("MethodHandles.Lookup.unreflectVarHandle()");  // TODO(b/65872996)
+            return null;
+        }
+        // END Android-changed: OpenJDK 9+181 VarHandle API factory method for bring up purposes.
+
         /**
          * Cracks a <a href="MethodHandleInfo.html#directmh">direct method handle</a>
          * created by this lookup object or a similar one.
@@ -1787,6 +2035,239 @@
     /** @hide */
     public static void arrayElementSetter(double[] array, int i, double val) { array[i] = val; }
 
+    // BEGIN Android-changed: OpenJDK 9+181 VarHandle API factory methods for bring up purposes.
+    /**
+     * Produces a VarHandle giving access to elements of an array of type
+     * {@code arrayClass}.  The VarHandle's variable type is the component type
+     * of {@code arrayClass} and the list of coordinate types is
+     * {@code (arrayClass, int)}, where the {@code int} coordinate type
+     * corresponds to an argument that is an index into an array.
+     * <p>
+     * Certain access modes of the returned VarHandle are unsupported under
+     * the following conditions:
+     * <ul>
+     * <li>if the component type is anything other than {@code byte},
+     *     {@code short}, {@code char}, {@code int}, {@code long},
+     *     {@code float}, or {@code double} then numeric atomic update access
+     *     modes are unsupported.
+     * <li>if the field type is anything other than {@code boolean},
+     *     {@code byte}, {@code short}, {@code char}, {@code int} or
+     *     {@code long} then bitwise atomic update access modes are
+     *     unsupported.
+     * </ul>
+     * <p>
+     * If the component type is {@code float} or {@code double} then numeric
+     * and atomic update access modes compare values using their bitwise
+     * representation (see {@link Float#floatToRawIntBits} and
+     * {@link Double#doubleToRawLongBits}, respectively).
+     * @apiNote
+     * Bitwise comparison of {@code float} values or {@code double} values,
+     * as performed by the numeric and atomic update access modes, differ
+     * from the primitive {@code ==} operator and the {@link Float#equals}
+     * and {@link Double#equals} methods, specifically with respect to
+     * comparing NaN values or comparing {@code -0.0} with {@code +0.0}.
+     * Care should be taken when performing a compare and set or a compare
+     * and exchange operation with such values since the operation may
+     * unexpectedly fail.
+     * There are many possible NaN values that are considered to be
+     * {@code NaN} in Java, although no IEEE 754 floating-point operation
+     * provided by Java can distinguish between them.  Operation failure can
+     * occur if the expected or witness value is a NaN value and it is
+     * transformed (perhaps in a platform specific manner) into another NaN
+     * value, and thus has a different bitwise representation (see
+     * {@link Float#intBitsToFloat} or {@link Double#longBitsToDouble} for more
+     * details).
+     * The values {@code -0.0} and {@code +0.0} have different bitwise
+     * representations but are considered equal when using the primitive
+     * {@code ==} operator.  Operation failure can occur if, for example, a
+     * numeric algorithm computes an expected value to be say {@code -0.0}
+     * and previously computed the witness value to be say {@code +0.0}.
+     * @param arrayClass the class of an array, of type {@code T[]}
+     * @return a VarHandle giving access to elements of an array
+     * @throws NullPointerException if the arrayClass is null
+     * @throws IllegalArgumentException if arrayClass is not an array type
+     * @since 9
+     * @hide
+     */
+    public static
+    VarHandle arrayElementVarHandle(Class<?> arrayClass) throws IllegalArgumentException {
+        unsupported("MethodHandles.arrayElementVarHandle()");  // TODO(b/65872996)
+        return null;
+    }
+
+    /**
+     * Produces a VarHandle giving access to elements of a {@code byte[]} array
+     * viewed as if it were a different primitive array type, such as
+     * {@code int[]} or {@code long[]}.
+     * The VarHandle's variable type is the component type of
+     * {@code viewArrayClass} and the list of coordinate types is
+     * {@code (byte[], int)}, where the {@code int} coordinate type
+     * corresponds to an argument that is an index into a {@code byte[]} array.
+     * The returned VarHandle accesses bytes at an index in a {@code byte[]}
+     * array, composing bytes to or from a value of the component type of
+     * {@code viewArrayClass} according to the given endianness.
+     * <p>
+     * The supported component types (variables types) are {@code short},
+     * {@code char}, {@code int}, {@code long}, {@code float} and
+     * {@code double}.
+     * <p>
+     * Access of bytes at a given index will result in an
+     * {@code IndexOutOfBoundsException} if the index is less than {@code 0}
+     * or greater than the {@code byte[]} array length minus the size (in bytes)
+     * of {@code T}.
+     * <p>
+     * Access of bytes at an index may be aligned or misaligned for {@code T},
+     * with respect to the underlying memory address, {@code A} say, associated
+     * with the array and index.
+     * If access is misaligned then access for anything other than the
+     * {@code get} and {@code set} access modes will result in an
+     * {@code IllegalStateException}.  In such cases atomic access is only
+     * guaranteed with respect to the largest power of two that divides the GCD
+     * of {@code A} and the size (in bytes) of {@code T}.
+     * If access is aligned then following access modes are supported and are
+     * guaranteed to support atomic access:
+     * <ul>
+     * <li>read write access modes for all {@code T}, with the exception of
+     *     access modes {@code get} and {@code set} for {@code long} and
+     *     {@code double} on 32-bit platforms.
+     * <li>atomic update access modes for {@code int}, {@code long},
+     *     {@code float} or {@code double}.
+     *     (Future major platform releases of the JDK may support additional
+     *     types for certain currently unsupported access modes.)
+     * <li>numeric atomic update access modes for {@code int} and {@code long}.
+     *     (Future major platform releases of the JDK may support additional
+     *     numeric types for certain currently unsupported access modes.)
+     * <li>bitwise atomic update access modes for {@code int} and {@code long}.
+     *     (Future major platform releases of the JDK may support additional
+     *     numeric types for certain currently unsupported access modes.)
+     * </ul>
+     * <p>
+     * Misaligned access, and therefore atomicity guarantees, may be determined
+     * for {@code byte[]} arrays without operating on a specific array.  Given
+     * an {@code index}, {@code T} and it's corresponding boxed type,
+     * {@code T_BOX}, misalignment may be determined as follows:
+     * <pre>{@code
+     * int sizeOfT = T_BOX.BYTES;  // size in bytes of T
+     * int misalignedAtZeroIndex = ByteBuffer.wrap(new byte[0]).
+     *     alignmentOffset(0, sizeOfT);
+     * int misalignedAtIndex = (misalignedAtZeroIndex + index) % sizeOfT;
+     * boolean isMisaligned = misalignedAtIndex != 0;
+     * }</pre>
+     * <p>
+     * If the variable type is {@code float} or {@code double} then atomic
+     * update access modes compare values using their bitwise representation
+     * (see {@link Float#floatToRawIntBits} and
+     * {@link Double#doubleToRawLongBits}, respectively).
+     * @param viewArrayClass the view array class, with a component type of
+     * type {@code T}
+     * @param byteOrder the endianness of the view array elements, as
+     * stored in the underlying {@code byte} array
+     * @return a VarHandle giving access to elements of a {@code byte[]} array
+     * viewed as if elements corresponding to the components type of the view
+     * array class
+     * @throws NullPointerException if viewArrayClass or byteOrder is null
+     * @throws IllegalArgumentException if viewArrayClass is not an array type
+     * @throws UnsupportedOperationException if the component type of
+     * viewArrayClass is not supported as a variable type
+     * @since 9
+     * @hide
+     */
+    public static
+    VarHandle byteArrayViewVarHandle(Class<?> viewArrayClass,
+                                     ByteOrder byteOrder) throws IllegalArgumentException {
+        unsupported("MethodHandles.byteArrayViewVarHandle()");  // TODO(b/65872996)
+        return null;
+    }
+
+    /**
+     * Produces a VarHandle giving access to elements of a {@code ByteBuffer}
+     * viewed as if it were an array of elements of a different primitive
+     * component type to that of {@code byte}, such as {@code int[]} or
+     * {@code long[]}.
+     * The VarHandle's variable type is the component type of
+     * {@code viewArrayClass} and the list of coordinate types is
+     * {@code (ByteBuffer, int)}, where the {@code int} coordinate type
+     * corresponds to an argument that is an index into a {@code byte[]} array.
+     * The returned VarHandle accesses bytes at an index in a
+     * {@code ByteBuffer}, composing bytes to or from a value of the component
+     * type of {@code viewArrayClass} according to the given endianness.
+     * <p>
+     * The supported component types (variables types) are {@code short},
+     * {@code char}, {@code int}, {@code long}, {@code float} and
+     * {@code double}.
+     * <p>
+     * Access will result in a {@code ReadOnlyBufferException} for anything
+     * other than the read access modes if the {@code ByteBuffer} is read-only.
+     * <p>
+     * Access of bytes at a given index will result in an
+     * {@code IndexOutOfBoundsException} if the index is less than {@code 0}
+     * or greater than the {@code ByteBuffer} limit minus the size (in bytes) of
+     * {@code T}.
+     * <p>
+     * Access of bytes at an index may be aligned or misaligned for {@code T},
+     * with respect to the underlying memory address, {@code A} say, associated
+     * with the {@code ByteBuffer} and index.
+     * If access is misaligned then access for anything other than the
+     * {@code get} and {@code set} access modes will result in an
+     * {@code IllegalStateException}.  In such cases atomic access is only
+     * guaranteed with respect to the largest power of two that divides the GCD
+     * of {@code A} and the size (in bytes) of {@code T}.
+     * If access is aligned then following access modes are supported and are
+     * guaranteed to support atomic access:
+     * <ul>
+     * <li>read write access modes for all {@code T}, with the exception of
+     *     access modes {@code get} and {@code set} for {@code long} and
+     *     {@code double} on 32-bit platforms.
+     * <li>atomic update access modes for {@code int}, {@code long},
+     *     {@code float} or {@code double}.
+     *     (Future major platform releases of the JDK may support additional
+     *     types for certain currently unsupported access modes.)
+     * <li>numeric atomic update access modes for {@code int} and {@code long}.
+     *     (Future major platform releases of the JDK may support additional
+     *     numeric types for certain currently unsupported access modes.)
+     * <li>bitwise atomic update access modes for {@code int} and {@code long}.
+     *     (Future major platform releases of the JDK may support additional
+     *     numeric types for certain currently unsupported access modes.)
+     * </ul>
+     * <p>
+     * Misaligned access, and therefore atomicity guarantees, may be determined
+     * for a {@code ByteBuffer}, {@code bb} (direct or otherwise), an
+     * {@code index}, {@code T} and it's corresponding boxed type,
+     * {@code T_BOX}, as follows:
+     * <pre>{@code
+     * int sizeOfT = T_BOX.BYTES;  // size in bytes of T
+     * ByteBuffer bb = ...
+     * int misalignedAtIndex = bb.alignmentOffset(index, sizeOfT);
+     * boolean isMisaligned = misalignedAtIndex != 0;
+     * }</pre>
+     * <p>
+     * If the variable type is {@code float} or {@code double} then atomic
+     * update access modes compare values using their bitwise representation
+     * (see {@link Float#floatToRawIntBits} and
+     * {@link Double#doubleToRawLongBits}, respectively).
+     * @param viewArrayClass the view array class, with a component type of
+     * type {@code T}
+     * @param byteOrder the endianness of the view array elements, as
+     * stored in the underlying {@code ByteBuffer} (Note this overrides the
+     * endianness of a {@code ByteBuffer})
+     * @return a VarHandle giving access to elements of a {@code ByteBuffer}
+     * viewed as if elements corresponding to the components type of the view
+     * array class
+     * @throws NullPointerException if viewArrayClass or byteOrder is null
+     * @throws IllegalArgumentException if viewArrayClass is not an array type
+     * @throws UnsupportedOperationException if the component type of
+     * viewArrayClass is not supported as a variable type
+     * @since 9
+     * @hide
+     */
+    public static
+    VarHandle byteBufferViewVarHandle(Class<?> viewArrayClass,
+                                      ByteOrder byteOrder) throws IllegalArgumentException {
+
+        unsupported("MethodHandles.byteBufferViewVarHandle()");  // TODO(b/65872996)
+        return null;
+    }
+    // END Android-changed: OpenJDK 9+181 VarHandle API factory methods for bring up purposes.
 
     /// method handle invocation (reflective style)
 
@@ -1926,6 +2407,58 @@
         return new Transformers.Invoker(type, false /* isExactInvoker */);
     }
 
+    /**
+     * Produces a special <em>invoker method handle</em> which can be used to
+     * invoke a signature-polymorphic access mode method on any VarHandle whose
+     * associated access mode type is compatible with the given type.
+     * The resulting invoker will have a type which is exactly equal to the
+     * desired given type, except that it will accept an additional leading
+     * argument of type {@code VarHandle}.
+     *
+     * @param accessMode the VarHandle access mode
+     * @param type the desired target type
+     * @return a method handle suitable for invoking an access mode method of
+     *         any VarHandle whose access mode type is of the given type.
+     * @since 9
+     * @hide
+     */
+    static public
+    MethodHandle varHandleExactInvoker(VarHandle.AccessMode accessMode, MethodType type) {
+        unsupported("MethodHandles.varHandleExactInvoker()");  // TODO(b/65872996)
+        return null;
+    }
+
+    /**
+     * Produces a special <em>invoker method handle</em> which can be used to
+     * invoke a signature-polymorphic access mode method on any VarHandle whose
+     * associated access mode type is compatible with the given type.
+     * The resulting invoker will have a type which is exactly equal to the
+     * desired given type, except that it will accept an additional leading
+     * argument of type {@code VarHandle}.
+     * <p>
+     * Before invoking its target, if the access mode type differs from the
+     * desired given type, the invoker will apply reference casts as necessary
+     * and box, unbox, or widen primitive values, as if by
+     * {@link MethodHandle#asType asType}.  Similarly, the return value will be
+     * converted as necessary.
+     * <p>
+     * This method is equivalent to the following code (though it may be more
+     * efficient): {@code publicLookup().findVirtual(VarHandle.class, accessMode.name(), type)}
+     *
+     * @param accessMode the VarHandle access mode
+     * @param type the desired target type
+     * @return a method handle suitable for invoking an access mode method of
+     *         any VarHandle whose access mode type is convertible to the given
+     *         type.
+     * @since 9
+     * @hide
+     */
+    static public
+    MethodHandle varHandleInvoker(VarHandle.AccessMode accessMode, MethodType type) {
+        unsupported("MethodHandles.varHandleInvoker()");  // TODO(b/65872996)
+        return null;
+    }
+
     // Android-changed: Basic invokers are not supported.
     //
     // static /*non-public*/
diff --git a/ojluni/src/main/java/java/lang/invoke/VarHandle.java b/ojluni/src/main/java/java/lang/invoke/VarHandle.java
new file mode 100644
index 0000000..bb93fcf
--- /dev/null
+++ b/ojluni/src/main/java/java/lang/invoke/VarHandle.java
@@ -0,0 +1,2161 @@
+/*
+ * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.lang.invoke;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A VarHandle is a dynamically strongly typed reference to a variable, or to a
+ * parametrically-defined family of variables, including static fields,
+ * non-static fields, array elements, or components of an off-heap data
+ * structure.  Access to such variables is supported under various
+ * <em>access modes</em>, including plain read/write access, volatile
+ * read/write access, and compare-and-swap.
+ *
+ * <p>VarHandles are immutable and have no visible state.  VarHandles cannot be
+ * subclassed by the user.
+ *
+ * <p>A VarHandle has:
+ * <ul>
+ * <li>a {@link #varType variable type} T, the type of every variable referenced
+ * by this VarHandle; and
+ * <li>a list of {@link #coordinateTypes coordinate types}
+ * {@code CT1, CT2, ..., CTn}, the types of <em>coordinate expressions</em> that
+ * jointly locate a variable referenced by this VarHandle.
+ * </ul>
+ * Variable and coordinate types may be primitive or reference, and are
+ * represented by {@code Class} objects.  The list of coordinate types may be
+ * empty.
+ *
+ * <p>Factory methods that produce or {@link java.lang.invoke.MethodHandles.Lookup
+ * lookup} VarHandle instances document the supported variable type and the list
+ * of coordinate types.
+ *
+ * <p>Each access mode is associated with one <em>access mode method</em>, a
+ * <a href="MethodHandle.html#sigpoly">signature polymorphic</a> method named
+ * for the access mode.  When an access mode method is invoked on a VarHandle
+ * instance, the initial arguments to the invocation are coordinate expressions
+ * that indicate in precisely which object the variable is to be accessed.
+ * Trailing arguments to the invocation represent values of importance to the
+ * access mode.  For example, the various compare-and-set or compare-and-exchange
+ * access modes require two trailing arguments for the variable's expected value
+ * and new value.
+ *
+ * <p>The arity and types of arguments to the invocation of an access mode
+ * method are not checked statically.  Instead, each access mode method
+ * specifies an {@link #accessModeType(AccessMode) access mode type},
+ * represented as an instance of {@link MethodType}, that serves as a kind of
+ * method signature against which the arguments are checked dynamically.  An
+ * access mode type gives formal parameter types in terms of the coordinate
+ * types of a VarHandle instance and the types for values of importance to the
+ * access mode.  An access mode type also gives a return type, often in terms of
+ * the variable type of a VarHandle instance.  When an access mode method is
+ * invoked on a VarHandle instance, the symbolic type descriptor at the
+ * call site, the run time types of arguments to the invocation, and the run
+ * time type of the return value, must <a href="#invoke">match</a> the types
+ * given in the access mode type.  A runtime exception will be thrown if the
+ * match fails.
+ *
+ * For example, the access mode method {@link #compareAndSet} specifies that if
+ * its receiver is a VarHandle instance with coordinate types
+ * {@code CT1, ..., CTn} and variable type {@code T}, then its access mode type
+ * is {@code (CT1 c1, ..., CTn cn, T expectedValue, T newValue)boolean}.
+ * Suppose that a VarHandle instance can access array elements, and that its
+ * coordinate types are {@code String[]} and {@code int} while its variable type
+ * is {@code String}.  The access mode type for {@code compareAndSet} on this
+ * VarHandle instance would be
+ * {@code (String[] c1, int c2, String expectedValue, String newValue)boolean}.
+ * Such a VarHandle instance may produced by the
+ * {@link MethodHandles#arrayElementVarHandle(Class) array factory method} and
+ * access array elements as follows:
+ * <pre> {@code
+ * String[] sa = ...
+ * VarHandle avh = MethodHandles.arrayElementVarHandle(String[].class);
+ * boolean r = avh.compareAndSet(sa, 10, "expected", "new");
+ * }</pre>
+ *
+ * <p>Access modes control atomicity and consistency properties.
+ * <em>Plain</em> read ({@code get}) and write ({@code set})
+ * accesses are guaranteed to be bitwise atomic only for references
+ * and for primitive values of at most 32 bits, and impose no observable
+ * ordering constraints with respect to threads other than the
+ * executing thread. <em>Opaque</em> operations are bitwise atomic and
+ * coherently ordered with respect to accesses to the same variable.
+ * In addition to obeying Opaque properties, <em>Acquire</em> mode
+ * reads and their subsequent accesses are ordered after matching
+ * <em>Release</em> mode writes and their previous accesses.  In
+ * addition to obeying Acquire and Release properties, all
+ * <em>Volatile</em> operations are totally ordered with respect to
+ * each other.
+ *
+ * <p>Access modes are grouped into the following categories:
+ * <ul>
+ * <li>read access modes that get the value of a variable under specified
+ * memory ordering effects.
+ * The set of corresponding access mode methods belonging to this group
+ * consists of the methods
+ * {@link #get get},
+ * {@link #getVolatile getVolatile},
+ * {@link #getAcquire getAcquire},
+ * {@link #getOpaque getOpaque}.
+ * <li>write access modes that set the value of a variable under specified
+ * memory ordering effects.
+ * The set of corresponding access mode methods belonging to this group
+ * consists of the methods
+ * {@link #set set},
+ * {@link #setVolatile setVolatile},
+ * {@link #setRelease setRelease},
+ * {@link #setOpaque setOpaque}.
+ * <li>atomic update access modes that, for example, atomically compare and set
+ * the value of a variable under specified memory ordering effects.
+ * The set of corresponding access mode methods belonging to this group
+ * consists of the methods
+ * {@link #compareAndSet compareAndSet},
+ * {@link #weakCompareAndSetPlain weakCompareAndSetPlain},
+ * {@link #weakCompareAndSet weakCompareAndSet},
+ * {@link #weakCompareAndSetAcquire weakCompareAndSetAcquire},
+ * {@link #weakCompareAndSetRelease weakCompareAndSetRelease},
+ * {@link #compareAndExchangeAcquire compareAndExchangeAcquire},
+ * {@link #compareAndExchange compareAndExchange},
+ * {@link #compareAndExchangeRelease compareAndExchangeRelease},
+ * {@link #getAndSet getAndSet},
+ * {@link #getAndSetAcquire getAndSetAcquire},
+ * {@link #getAndSetRelease getAndSetRelease}.
+ * <li>numeric atomic update access modes that, for example, atomically get and
+ * set with addition the value of a variable under specified memory ordering
+ * effects.
+ * The set of corresponding access mode methods belonging to this group
+ * consists of the methods
+ * {@link #getAndAdd getAndAdd},
+ * {@link #getAndAddAcquire getAndAddAcquire},
+ * {@link #getAndAddRelease getAndAddRelease},
+ * <li>bitwise atomic update access modes that, for example, atomically get and
+ * bitwise OR the value of a variable under specified memory ordering
+ * effects.
+ * The set of corresponding access mode methods belonging to this group
+ * consists of the methods
+ * {@link #getAndBitwiseOr getAndBitwiseOr},
+ * {@link #getAndBitwiseOrAcquire getAndBitwiseOrAcquire},
+ * {@link #getAndBitwiseOrRelease getAndBitwiseOrRelease},
+ * {@link #getAndBitwiseAnd getAndBitwiseAnd},
+ * {@link #getAndBitwiseAndAcquire getAndBitwiseAndAcquire},
+ * {@link #getAndBitwiseAndRelease getAndBitwiseAndRelease},
+ * {@link #getAndBitwiseXor getAndBitwiseXor},
+ * {@link #getAndBitwiseXorAcquire getAndBitwiseXorAcquire},
+ * {@link #getAndBitwiseXorRelease getAndBitwiseXorRelease}.
+ * </ul>
+ *
+ * <p>Factory methods that produce or {@link java.lang.invoke.MethodHandles.Lookup
+ * lookup} VarHandle instances document the set of access modes that are
+ * supported, which may also include documenting restrictions based on the
+ * variable type and whether a variable is read-only.  If an access mode is not
+ * supported then the corresponding access mode method will on invocation throw
+ * an {@code UnsupportedOperationException}.  Factory methods should document
+ * any additional undeclared exceptions that may be thrown by access mode
+ * methods.
+ * The {@link #get get} access mode is supported for all
+ * VarHandle instances and the corresponding method never throws
+ * {@code UnsupportedOperationException}.
+ * If a VarHandle references a read-only variable (for example a {@code final}
+ * field) then write, atomic update, numeric atomic update, and bitwise atomic
+ * update access modes are not supported and corresponding methods throw
+ * {@code UnsupportedOperationException}.
+ * Read/write access modes (if supported), with the exception of
+ * {@code get} and {@code set}, provide atomic access for
+ * reference types and all primitive types.
+ * Unless stated otherwise in the documentation of a factory method, the access
+ * modes {@code get} and {@code set} (if supported) provide atomic access for
+ * reference types and all primitives types, with the exception of {@code long}
+ * and {@code double} on 32-bit platforms.
+ *
+ * <p>Access modes will override any memory ordering effects specified at
+ * the declaration site of a variable.  For example, a VarHandle accessing a
+ * a field using the {@code get} access mode will access the field as
+ * specified <em>by its access mode</em> even if that field is declared
+ * {@code volatile}.  When mixed access is performed extreme care should be
+ * taken since the Java Memory Model may permit surprising results.
+ *
+ * <p>In addition to supporting access to variables under various access modes,
+ * a set of static methods, referred to as memory fence methods, is also
+ * provided for fine-grained control of memory ordering.
+ *
+ * The Java Language Specification permits other threads to observe operations
+ * as if they were executed in orders different than are apparent in program
+ * source code, subject to constraints arising, for example, from the use of
+ * locks, {@code volatile} fields or VarHandles.  The static methods,
+ * {@link #fullFence fullFence}, {@link #acquireFence acquireFence},
+ * {@link #releaseFence releaseFence}, {@link #loadLoadFence loadLoadFence} and
+ * {@link #storeStoreFence storeStoreFence}, can also be used to impose
+ * constraints.  Their specifications, as is the case for certain access modes,
+ * are phrased in terms of the lack of "reorderings" -- observable ordering
+ * effects that might otherwise occur if the fence was not present.  More
+ * precise phrasing of the specification of access mode methods and memory fence
+ * methods may accompany future updates of the Java Language Specification.
+ *
+ * <h1>Compiling invocation of access mode methods</h1>
+ * A Java method call expression naming an access mode method can invoke a
+ * VarHandle from Java source code.  From the viewpoint of source code, these
+ * methods can take any arguments and their polymorphic result (if expressed)
+ * can be cast to any return type.  Formally this is accomplished by giving the
+ * access mode methods variable arity {@code Object} arguments and
+ * {@code Object} return types (if the return type is polymorphic), but they
+ * have an additional quality called <em>signature polymorphism</em> which
+ * connects this freedom of invocation directly to the JVM execution stack.
+ * <p>
+ * As is usual with virtual methods, source-level calls to access mode methods
+ * compile to an {@code invokevirtual} instruction.  More unusually, the
+ * compiler must record the actual argument types, and may not perform method
+ * invocation conversions on the arguments.  Instead, it must generate
+ * instructions to push them on the stack according to their own unconverted
+ * types.  The VarHandle object itself will be pushed on the stack before the
+ * arguments.  The compiler then generates an {@code invokevirtual} instruction
+ * that invokes the access mode method with a symbolic type descriptor which
+ * describes the argument and return types.
+ * <p>
+ * To issue a complete symbolic type descriptor, the compiler must also
+ * determine the return type (if polymorphic).  This is based on a cast on the
+ * method invocation expression, if there is one, or else {@code Object} if the
+ * invocation is an expression, or else {@code void} if the invocation is a
+ * statement.  The cast may be to a primitive type (but not {@code void}).
+ * <p>
+ * As a corner case, an uncasted {@code null} argument is given a symbolic type
+ * descriptor of {@code java.lang.Void}.  The ambiguity with the type
+ * {@code Void} is harmless, since there are no references of type {@code Void}
+ * except the null reference.
+ *
+ *
+ * <h1><a id="invoke">Performing invocation of access mode methods</a></h1>
+ * The first time an {@code invokevirtual} instruction is executed it is linked
+ * by symbolically resolving the names in the instruction and verifying that
+ * the method call is statically legal.  This also holds for calls to access mode
+ * methods.  In this case, the symbolic type descriptor emitted by the compiler
+ * is checked for correct syntax, and names it contains are resolved.  Thus, an
+ * {@code invokevirtual} instruction which invokes an access mode method will
+ * always link, as long as the symbolic type descriptor is syntactically
+ * well-formed and the types exist.
+ * <p>
+ * When the {@code invokevirtual} is executed after linking, the receiving
+ * VarHandle's access mode type is first checked by the JVM to ensure that it
+ * matches the symbolic type descriptor.  If the type
+ * match fails, it means that the access mode method which the caller is
+ * invoking is not present on the individual VarHandle being invoked.
+ *
+ * <p>
+ * Invocation of an access mode method behaves as if an invocation of
+ * {@link MethodHandle#invoke}, where the receiving method handle accepts the
+ * VarHandle instance as the leading argument.  More specifically, the
+ * following, where {@code {access-mode}} corresponds to the access mode method
+ * name:
+ * <pre> {@code
+ * VarHandle vh = ..
+ * R r = (R) vh.{access-mode}(p1, p2, ..., pN);
+ * }</pre>
+ * behaves as if:
+ * <pre> {@code
+ * VarHandle vh = ..
+ * VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
+ * MethodHandle mh = MethodHandles.varHandleExactInvoker(
+ *                       am,
+ *                       vh.accessModeType(am));
+ *
+ * R r = (R) mh.invoke(vh, p1, p2, ..., pN)
+ * }</pre>
+ * (modulo access mode methods do not declare throwing of {@code Throwable}).
+ * This is equivalent to:
+ * <pre> {@code
+ * MethodHandle mh = MethodHandles.lookup().findVirtual(
+ *                       VarHandle.class,
+ *                       "{access-mode}",
+ *                       MethodType.methodType(R, p1, p2, ..., pN));
+ *
+ * R r = (R) mh.invokeExact(vh, p1, p2, ..., pN)
+ * }</pre>
+ * where the desired method type is the symbolic type descriptor and a
+ * {@link MethodHandle#invokeExact} is performed, since before invocation of the
+ * target, the handle will apply reference casts as necessary and box, unbox, or
+ * widen primitive values, as if by {@link MethodHandle#asType asType} (see also
+ * {@link MethodHandles#varHandleInvoker}).
+ *
+ * More concisely, such behaviour is equivalent to:
+ * <pre> {@code
+ * VarHandle vh = ..
+ * VarHandle.AccessMode am = VarHandle.AccessMode.valueFromMethodName("{access-mode}");
+ * MethodHandle mh = vh.toMethodHandle(am);
+ *
+ * R r = (R) mh.invoke(p1, p2, ..., pN)
+ * }</pre>
+ * Where, in this case, the method handle is bound to the VarHandle instance.
+ *
+ *
+ * <h1>Invocation checking</h1>
+ * In typical programs, VarHandle access mode type matching will usually
+ * succeed.  But if a match fails, the JVM will throw a
+ * {@link WrongMethodTypeException}.
+ * <p>
+ * Thus, an access mode type mismatch which might show up as a linkage error
+ * in a statically typed program can show up as a dynamic
+ * {@code WrongMethodTypeException} in a program which uses VarHandles.
+ * <p>
+ * Because access mode types contain "live" {@code Class} objects, method type
+ * matching takes into account both type names and class loaders.
+ * Thus, even if a VarHandle {@code VH} is created in one class loader
+ * {@code L1} and used in another {@code L2}, VarHandle access mode method
+ * calls are type-safe, because the caller's symbolic type descriptor, as
+ * resolved in {@code L2}, is matched against the original callee method's
+ * symbolic type descriptor, as resolved in {@code L1}.  The resolution in
+ * {@code L1} happens when {@code VH} is created and its access mode types are
+ * assigned, while the resolution in {@code L2} happens when the
+ * {@code invokevirtual} instruction is linked.
+ * <p>
+ * Apart from type descriptor checks, a VarHandles's capability to
+ * access it's variables is unrestricted.
+ * If a VarHandle is formed on a non-public variable by a class that has access
+ * to that variable, the resulting VarHandle can be used in any place by any
+ * caller who receives a reference to it.
+ * <p>
+ * Unlike with the Core Reflection API, where access is checked every time a
+ * reflective method is invoked, VarHandle access checking is performed
+ * <a href="MethodHandles.Lookup.html#access">when the VarHandle is
+ * created</a>.
+ * Thus, VarHandles to non-public variables, or to variables in non-public
+ * classes, should generally be kept secret.  They should not be passed to
+ * untrusted code unless their use from the untrusted code would be harmless.
+ *
+ *
+ * <h1>VarHandle creation</h1>
+ * Java code can create a VarHandle that directly accesses any field that is
+ * accessible to that code.  This is done via a reflective, capability-based
+ * API called {@link java.lang.invoke.MethodHandles.Lookup
+ * MethodHandles.Lookup}.
+ * For example, a VarHandle for a non-static field can be obtained
+ * from {@link java.lang.invoke.MethodHandles.Lookup#findVarHandle
+ * Lookup.findVarHandle}.
+ * There is also a conversion method from Core Reflection API objects,
+ * {@link java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle
+ * Lookup.unreflectVarHandle}.
+ * <p>
+ * Access to protected field members is restricted to receivers only of the
+ * accessing class, or one of its subclasses, and the accessing class must in
+ * turn be a subclass (or package sibling) of the protected member's defining
+ * class.  If a VarHandle refers to a protected non-static field of a declaring
+ * class outside the current package, the receiver argument will be narrowed to
+ * the type of the accessing class.
+ *
+ * <h1>Interoperation between VarHandles and the Core Reflection API</h1>
+ * Using factory methods in the {@link java.lang.invoke.MethodHandles.Lookup
+ * Lookup} API, any field represented by a Core Reflection API object
+ * can be converted to a behaviorally equivalent VarHandle.
+ * For example, a reflective {@link java.lang.reflect.Field Field} can
+ * be converted to a VarHandle using
+ * {@link java.lang.invoke.MethodHandles.Lookup#unreflectVarHandle
+ * Lookup.unreflectVarHandle}.
+ * The resulting VarHandles generally provide more direct and efficient
+ * access to the underlying fields.
+ * <p>
+ * As a special case, when the Core Reflection API is used to view the
+ * signature polymorphic access mode methods in this class, they appear as
+ * ordinary non-polymorphic methods.  Their reflective appearance, as viewed by
+ * {@link java.lang.Class#getDeclaredMethod Class.getDeclaredMethod},
+ * is unaffected by their special status in this API.
+ * For example, {@link java.lang.reflect.Method#getModifiers
+ * Method.getModifiers}
+ * will report exactly those modifier bits required for any similarly
+ * declared method, including in this case {@code native} and {@code varargs}
+ * bits.
+ * <p>
+ * As with any reflected method, these methods (when reflected) may be invoked
+ * directly via {@link java.lang.reflect.Method#invoke java.lang.reflect.Method.invoke},
+ * via JNI, or indirectly via
+ * {@link java.lang.invoke.MethodHandles.Lookup#unreflect Lookup.unreflect}.
+ * However, such reflective calls do not result in access mode method
+ * invocations.  Such a call, if passed the required argument (a single one, of
+ * type {@code Object[]}), will ignore the argument and will throw an
+ * {@code UnsupportedOperationException}.
+ * <p>
+ * Since {@code invokevirtual} instructions can natively invoke VarHandle
+ * access mode methods under any symbolic type descriptor, this reflective view
+ * conflicts with the normal presentation of these methods via bytecodes.
+ * Thus, these native methods, when reflectively viewed by
+ * {@code Class.getDeclaredMethod}, may be regarded as placeholders only.
+ * <p>
+ * In order to obtain an invoker method for a particular access mode type,
+ * use {@link java.lang.invoke.MethodHandles#varHandleExactInvoker} or
+ * {@link java.lang.invoke.MethodHandles#varHandleInvoker}.  The
+ * {@link java.lang.invoke.MethodHandles.Lookup#findVirtual Lookup.findVirtual}
+ * API is also able to return a method handle to call an access mode method for
+ * any specified access mode type and is equivalent in behaviour to
+ * {@link java.lang.invoke.MethodHandles#varHandleInvoker}.
+ *
+ * <h1>Interoperation between VarHandles and Java generics</h1>
+ * A VarHandle can be obtained for a variable, such as a a field, which is
+ * declared with Java generic types.  As with the Core Reflection API, the
+ * VarHandle's variable type will be constructed from the erasure of the
+ * source-level type.  When a VarHandle access mode method is invoked, the
+ * types
+ * of its arguments or the return value cast type may be generic types or type
+ * instances.  If this occurs, the compiler will replace those types by their
+ * erasures when it constructs the symbolic type descriptor for the
+ * {@code invokevirtual} instruction.
+ *
+ * @see MethodHandle
+ * @see MethodHandles
+ * @see MethodType
+ * @since 9
+ * @hide
+ */
+public abstract class VarHandle {
+    // Android-added: Using sun.misc.Unsafe for fence implementation.
+    private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe();
+
+    // BEGIN Android-removed: No VarForm in Android implementation.
+    /*
+    final VarForm vform;
+
+    VarHandle(VarForm vform) {
+        this.vform = vform;
+    }
+    */
+    // END Android-removed: No VarForm in Android implementation.
+
+    RuntimeException unsupported() {
+        return new UnsupportedOperationException();
+    }
+
+    // Plain accessors
+
+    /**
+     * Returns the value of a variable, with memory semantics of reading as
+     * if the variable was declared non-{@code volatile}.  Commonly referred to
+     * as plain read access.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code get}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET)} on this VarHandle.
+     *
+     * <p>This access mode is supported by all VarHandle instances and never
+     * throws {@code UnsupportedOperationException}.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the value of the
+     * variable
+     * , statically represented using {@code Object}.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object get(Object... args);
+
+    /**
+     * Sets the value of a variable to the {@code newValue}, with memory
+     * semantics of setting as if the variable was declared non-{@code volatile}
+     * and non-{@code final}.  Commonly referred to as plain write access.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)void}
+     *
+     * <p>The symbolic type descriptor at the call site of {@code set}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.SET)} on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    void set(Object... args);
+
+
+    // Volatile accessors
+
+    /**
+     * Returns the value of a variable, with memory semantics of reading as if
+     * the variable was declared {@code volatile}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getVolatile}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_VOLATILE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the value of the
+     * variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getVolatile(Object... args);
+
+    /**
+     * Sets the value of a variable to the {@code newValue}, with memory
+     * semantics of setting as if the variable was declared {@code volatile}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)void}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code setVolatile}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.SET_VOLATILE)} on this
+     * VarHandle.
+     *
+     * @apiNote
+     * Ignoring the many semantic differences from C and C++, this method has
+     * memory ordering effects compatible with {@code memory_order_seq_cst}.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    void setVolatile(Object... args);
+
+
+    /**
+     * Returns the value of a variable, accessed in program order, but with no
+     * assurance of memory ordering effects with respect to other threads.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getOpaque}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_OPAQUE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the value of the
+     * variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getOpaque(Object... args);
+
+    /**
+     * Sets the value of a variable to the {@code newValue}, in program order,
+     * but with no assurance of memory ordering effects with respect to other
+     * threads.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)void}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code setOpaque}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.SET_OPAQUE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    void setOpaque(Object... args);
+
+
+    // Lazy accessors
+
+    /**
+     * Returns the value of a variable, and ensures that subsequent loads and
+     * stores are not reordered before this access.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_ACQUIRE)} on this
+     * VarHandle.
+     *
+     * @apiNote
+     * Ignoring the many semantic differences from C and C++, this method has
+     * memory ordering effects compatible with {@code memory_order_acquire}
+     * ordering.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the value of the
+     * variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAcquire(Object... args);
+
+    /**
+     * Sets the value of a variable to the {@code newValue}, and ensures that
+     * prior loads and stores are not reordered after this access.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)void}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code setRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.SET_RELEASE)} on this
+     * VarHandle.
+     *
+     * @apiNote
+     * Ignoring the many semantic differences from C and C++, this method has
+     * memory ordering effects compatible with {@code memory_order_release}
+     * ordering.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    void setRelease(Object... args);
+
+
+    // Compare and set accessors
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #setVolatile} if the variable's current value,
+     * referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * compareAndSet} must match the access mode type that is the result of
+     * calling {@code accessModeType(VarHandle.AccessMode.COMPARE_AND_SET)} on
+     * this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return {@code true} if successful, otherwise {@code false} if the
+     * witness value was not the same as the {@code expectedValue}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    boolean compareAndSet(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #setVolatile} if the variable's current value,
+     * referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * compareAndExchange}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE)}
+     * on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the witness value, which
+     * will be the same as the {@code expectedValue} if successful
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type is not
+     * compatible with the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type is compatible with the
+     * caller's symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object compareAndExchange(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #set} if the variable's current value,
+     * referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * compareAndExchangeAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_ACQUIRE)} on
+     * this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the witness value, which
+     * will be the same as the {@code expectedValue} if successful
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #set(Object...)
+     * @see #getAcquire(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object compareAndExchangeAcquire(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #setRelease} if the variable's current value,
+     * referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * compareAndExchangeRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.COMPARE_AND_EXCHANGE_RELEASE)}
+     * on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the witness value, which
+     * will be the same as the {@code expectedValue} if successful
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setRelease(Object...)
+     * @see #get(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object compareAndExchangeRelease(Object... args);
+
+    // Weak (spurious failures allowed)
+
+    /**
+     * Possibly atomically sets the value of a variable to the {@code newValue}
+     * with the semantics of {@link #set} if the variable's current value,
+     * referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>This operation may fail spuriously (typically, due to memory
+     * contention) even if the witness value does match the expected value.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * weakCompareAndSetPlain} must match the access mode type that is the result of
+     * calling {@code accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_PLAIN)}
+     * on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return {@code true} if successful, otherwise {@code false} if the
+     * witness value was not the same as the {@code expectedValue} or if this
+     * operation spuriously failed.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #set(Object...)
+     * @see #get(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    boolean weakCompareAndSetPlain(Object... args);
+
+    /**
+     * Possibly atomically sets the value of a variable to the {@code newValue}
+     * with the memory semantics of {@link #setVolatile} if the variable's
+     * current value, referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>This operation may fail spuriously (typically, due to memory
+     * contention) even if the witness value does match the expected value.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * weakCompareAndSet} must match the access mode type that is the
+     * result of calling {@code accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET)}
+     * on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return {@code true} if successful, otherwise {@code false} if the
+     * witness value was not the same as the {@code expectedValue} or if this
+     * operation spuriously failed.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    boolean weakCompareAndSet(Object... args);
+
+    /**
+     * Possibly atomically sets the value of a variable to the {@code newValue}
+     * with the semantics of {@link #set} if the variable's current value,
+     * referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>This operation may fail spuriously (typically, due to memory
+     * contention) even if the witness value does match the expected value.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * weakCompareAndSetAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_ACQUIRE)}
+     * on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return {@code true} if successful, otherwise {@code false} if the
+     * witness value was not the same as the {@code expectedValue} or if this
+     * operation spuriously failed.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #set(Object...)
+     * @see #getAcquire(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    boolean weakCompareAndSetAcquire(Object... args);
+
+    /**
+     * Possibly atomically sets the value of a variable to the {@code newValue}
+     * with the semantics of {@link #setRelease} if the variable's current
+     * value, referred to as the <em>witness value</em>, {@code ==} the
+     * {@code expectedValue}, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>This operation may fail spuriously (typically, due to memory
+     * contention) even if the witness value does match the expected value.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)boolean}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code
+     * weakCompareAndSetRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.WEAK_COMPARE_AND_SET_RELEASE)}
+     * on this VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T expectedValue, T newValue)}
+     * , statically represented using varargs.
+     * @return {@code true} if successful, otherwise {@code false} if the
+     * witness value was not the same as the {@code expectedValue} or if this
+     * operation spuriously failed.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setRelease(Object...)
+     * @see #get(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    boolean weakCompareAndSetRelease(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #setVolatile} and returns the variable's
+     * previous value, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndSet}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_SET)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndSet(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #set} and returns the variable's
+     * previous value, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndSetAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_SET_ACQUIRE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndSetAcquire(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the {@code newValue} with the
+     * memory semantics of {@link #setRelease} and returns the variable's
+     * previous value, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T newValue)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndSetRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_SET_RELEASE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T newValue)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndSetRelease(Object... args);
+
+    // Primitive adders
+    // Throw UnsupportedOperationException for refs
+
+    /**
+     * Atomically adds the {@code value} to the current value of a variable with
+     * the memory semantics of {@link #setVolatile}, and returns the variable's
+     * previous value, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T value)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndAdd}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_ADD)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T value)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndAdd(Object... args);
+
+    /**
+     * Atomically adds the {@code value} to the current value of a variable with
+     * the memory semantics of {@link #set}, and returns the variable's
+     * previous value, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T value)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndAddAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T value)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndAddAcquire(Object... args);
+
+    /**
+     * Atomically adds the {@code value} to the current value of a variable with
+     * the memory semantics of {@link #setRelease}, and returns the variable's
+     * previous value, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T value)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndAddRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_ADD_RELEASE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T value)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndAddRelease(Object... args);
+
+
+    // Bitwise operations
+    // Throw UnsupportedOperationException for refs
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise OR between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #setVolatile} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical OR is performed instead of a bitwise OR.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseOr}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseOr(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise OR between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #set} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical OR is performed instead of a bitwise OR.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseOrAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #set(Object...)
+     * @see #getAcquire(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseOrAcquire(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise OR between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #setRelease} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical OR is performed instead of a bitwise OR.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseOrRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_OR_RELEASE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setRelease(Object...)
+     * @see #get(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseOrRelease(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise AND between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #setVolatile} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical AND is performed instead of a bitwise AND.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseAnd}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseAnd(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise AND between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #set} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical AND is performed instead of a bitwise AND.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseAndAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND_ACQUIRE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #set(Object...)
+     * @see #getAcquire(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseAndAcquire(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise AND between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #setRelease} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical AND is performed instead of a bitwise AND.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseAndRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_AND_RELEASE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setRelease(Object...)
+     * @see #get(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseAndRelease(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise XOR between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #setVolatile} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #getVolatile}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical XOR is performed instead of a bitwise XOR.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseXor}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setVolatile(Object...)
+     * @see #getVolatile(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseXor(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise XOR between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #set} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #getAcquire}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical XOR is performed instead of a bitwise XOR.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseXorAcquire}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR_ACQUIRE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #set(Object...)
+     * @see #getAcquire(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseXorAcquire(Object... args);
+
+    /**
+     * Atomically sets the value of a variable to the result of
+     * bitwise XOR between the variable's current value and the {@code mask}
+     * with the memory semantics of {@link #setRelease} and returns the
+     * variable's previous value, as accessed with the memory semantics of
+     * {@link #get}.
+     *
+     * <p>If the variable type is the non-integral {@code boolean} type then a
+     * logical XOR is performed instead of a bitwise XOR.
+     *
+     * <p>The method signature is of the form {@code (CT1 ct1, ..., CTn ctn, T mask)T}.
+     *
+     * <p>The symbolic type descriptor at the call site of {@code getAndBitwiseXorRelease}
+     * must match the access mode type that is the result of calling
+     * {@code accessModeType(VarHandle.AccessMode.GET_AND_BITWISE_XOR_RELEASE)} on this
+     * VarHandle.
+     *
+     * @param args the signature-polymorphic parameter list of the form
+     * {@code (CT1 ct1, ..., CTn ctn, T mask)}
+     * , statically represented using varargs.
+     * @return the signature-polymorphic result that is the previous value of
+     * the variable
+     * , statically represented using {@code Object}.
+     * @throws UnsupportedOperationException if the access mode is unsupported
+     * for this VarHandle.
+     * @throws WrongMethodTypeException if the access mode type does not
+     * match the caller's symbolic type descriptor.
+     * @throws ClassCastException if the access mode type matches the caller's
+     * symbolic type descriptor, but a reference cast fails.
+     * @see #setRelease(Object...)
+     * @see #get(Object...)
+     */
+    public final native
+    // Android-removed: unsupported annotations.
+    // @MethodHandle.PolymorphicSignature
+    // @HotSpotIntrinsicCandidate
+    Object getAndBitwiseXorRelease(Object... args);
+
+
+    enum AccessType {
+        GET(Object.class),
+        SET(void.class),
+        COMPARE_AND_SWAP(boolean.class),
+        COMPARE_AND_EXCHANGE(Object.class),
+        GET_AND_UPDATE(Object.class);
+
+        final Class<?> returnType;
+        final boolean isMonomorphicInReturnType;
+
+        AccessType(Class<?> returnType) {
+            this.returnType = returnType;
+            isMonomorphicInReturnType = returnType != Object.class;
+        }
+
+        MethodType accessModeType(Class<?> receiver, Class<?> value,
+                                  Class<?>... intermediate) {
+            Class<?>[] ps;
+            int i;
+            switch (this) {
+                case GET:
+                    ps = allocateParameters(0, receiver, intermediate);
+                    fillParameters(ps, receiver, intermediate);
+                    return MethodType.methodType(value, ps);
+                case SET:
+                    ps = allocateParameters(1, receiver, intermediate);
+                    i = fillParameters(ps, receiver, intermediate);
+                    ps[i] = value;
+                    return MethodType.methodType(void.class, ps);
+                case COMPARE_AND_SWAP:
+                    ps = allocateParameters(2, receiver, intermediate);
+                    i = fillParameters(ps, receiver, intermediate);
+                    ps[i++] = value;
+                    ps[i] = value;
+                    return MethodType.methodType(boolean.class, ps);
+                case COMPARE_AND_EXCHANGE:
+                    ps = allocateParameters(2, receiver, intermediate);
+                    i = fillParameters(ps, receiver, intermediate);
+                    ps[i++] = value;
+                    ps[i] = value;
+                    return MethodType.methodType(value, ps);
+                case GET_AND_UPDATE:
+                    ps = allocateParameters(1, receiver, intermediate);
+                    i = fillParameters(ps, receiver, intermediate);
+                    ps[i] = value;
+                    return MethodType.methodType(value, ps);
+                default:
+                    throw new InternalError("Unknown AccessType");
+            }
+        }
+
+        private static Class<?>[] allocateParameters(int values,
+                                                     Class<?> receiver, Class<?>... intermediate) {
+            int size = ((receiver != null) ? 1 : 0) + intermediate.length + values;
+            return new Class<?>[size];
+        }
+
+        private static int fillParameters(Class<?>[] ps,
+                                          Class<?> receiver, Class<?>... intermediate) {
+            int i = 0;
+            if (receiver != null)
+                ps[i++] = receiver;
+            for (int j = 0; j < intermediate.length; j++)
+                ps[i++] = intermediate[j];
+            return i;
+        }
+    }
+
+    /**
+     * The set of access modes that specify how a variable, referenced by a
+     * VarHandle, is accessed.
+     */
+    public enum AccessMode {
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#get VarHandle.get}
+         */
+        GET("get", AccessType.GET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#set VarHandle.set}
+         */
+        SET("set", AccessType.SET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getVolatile VarHandle.getVolatile}
+         */
+        GET_VOLATILE("getVolatile", AccessType.GET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#setVolatile VarHandle.setVolatile}
+         */
+        SET_VOLATILE("setVolatile", AccessType.SET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAcquire VarHandle.getAcquire}
+         */
+        GET_ACQUIRE("getAcquire", AccessType.GET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#setRelease VarHandle.setRelease}
+         */
+        SET_RELEASE("setRelease", AccessType.SET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getOpaque VarHandle.getOpaque}
+         */
+        GET_OPAQUE("getOpaque", AccessType.GET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#setOpaque VarHandle.setOpaque}
+         */
+        SET_OPAQUE("setOpaque", AccessType.SET),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#compareAndSet VarHandle.compareAndSet}
+         */
+        COMPARE_AND_SET("compareAndSet", AccessType.COMPARE_AND_SWAP),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#compareAndExchange VarHandle.compareAndExchange}
+         */
+        COMPARE_AND_EXCHANGE("compareAndExchange", AccessType.COMPARE_AND_EXCHANGE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#compareAndExchangeAcquire VarHandle.compareAndExchangeAcquire}
+         */
+        COMPARE_AND_EXCHANGE_ACQUIRE("compareAndExchangeAcquire", AccessType.COMPARE_AND_EXCHANGE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#compareAndExchangeRelease VarHandle.compareAndExchangeRelease}
+         */
+        COMPARE_AND_EXCHANGE_RELEASE("compareAndExchangeRelease", AccessType.COMPARE_AND_EXCHANGE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#weakCompareAndSetPlain VarHandle.weakCompareAndSetPlain}
+         */
+        WEAK_COMPARE_AND_SET_PLAIN("weakCompareAndSetPlain", AccessType.COMPARE_AND_SWAP),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#weakCompareAndSet VarHandle.weakCompareAndSet}
+         */
+        WEAK_COMPARE_AND_SET("weakCompareAndSet", AccessType.COMPARE_AND_SWAP),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#weakCompareAndSetAcquire VarHandle.weakCompareAndSetAcquire}
+         */
+        WEAK_COMPARE_AND_SET_ACQUIRE("weakCompareAndSetAcquire", AccessType.COMPARE_AND_SWAP),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#weakCompareAndSetRelease VarHandle.weakCompareAndSetRelease}
+         */
+        WEAK_COMPARE_AND_SET_RELEASE("weakCompareAndSetRelease", AccessType.COMPARE_AND_SWAP),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndSet VarHandle.getAndSet}
+         */
+        GET_AND_SET("getAndSet", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndSetAcquire VarHandle.getAndSetAcquire}
+         */
+        GET_AND_SET_ACQUIRE("getAndSetAcquire", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndSetRelease VarHandle.getAndSetRelease}
+         */
+        GET_AND_SET_RELEASE("getAndSetRelease", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndAdd VarHandle.getAndAdd}
+         */
+        GET_AND_ADD("getAndAdd", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndAddAcquire VarHandle.getAndAddAcquire}
+         */
+        GET_AND_ADD_ACQUIRE("getAndAddAcquire", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndAddRelease VarHandle.getAndAddRelease}
+         */
+        GET_AND_ADD_RELEASE("getAndAddRelease", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseOr VarHandle.getAndBitwiseOr}
+         */
+        GET_AND_BITWISE_OR("getAndBitwiseOr", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseOrRelease VarHandle.getAndBitwiseOrRelease}
+         */
+        GET_AND_BITWISE_OR_RELEASE("getAndBitwiseOrRelease", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseOrAcquire VarHandle.getAndBitwiseOrAcquire}
+         */
+        GET_AND_BITWISE_OR_ACQUIRE("getAndBitwiseOrAcquire", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseAnd VarHandle.getAndBitwiseAnd}
+         */
+        GET_AND_BITWISE_AND("getAndBitwiseAnd", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseAndRelease VarHandle.getAndBitwiseAndRelease}
+         */
+        GET_AND_BITWISE_AND_RELEASE("getAndBitwiseAndRelease", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseAndAcquire VarHandle.getAndBitwiseAndAcquire}
+         */
+        GET_AND_BITWISE_AND_ACQUIRE("getAndBitwiseAndAcquire", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseXor VarHandle.getAndBitwiseXor}
+         */
+        GET_AND_BITWISE_XOR("getAndBitwiseXor", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseXorRelease VarHandle.getAndBitwiseXorRelease}
+         */
+        GET_AND_BITWISE_XOR_RELEASE("getAndBitwiseXorRelease", AccessType.GET_AND_UPDATE),
+        /**
+         * The access mode whose access is specified by the corresponding
+         * method
+         * {@link VarHandle#getAndBitwiseXorAcquire VarHandle.getAndBitwiseXorAcquire}
+         */
+        GET_AND_BITWISE_XOR_ACQUIRE("getAndBitwiseXorAcquire", AccessType.GET_AND_UPDATE),
+        ;
+
+        static final Map<String, AccessMode> methodNameToAccessMode;
+        static {
+            // Initial capacity of # values is sufficient to avoid resizes
+            // for the smallest table size (32)
+            methodNameToAccessMode = new HashMap<>(AccessMode.values().length);
+            for (AccessMode am : AccessMode.values()) {
+                methodNameToAccessMode.put(am.methodName, am);
+            }
+        }
+
+        final String methodName;
+        final AccessType at;
+
+        AccessMode(final String methodName, AccessType at) {
+            this.methodName = methodName;
+            this.at = at;
+        }
+
+        /**
+         * Returns the {@code VarHandle} signature-polymorphic method name
+         * associated with this {@code AccessMode} value.
+         *
+         * @return the signature-polymorphic method name
+         * @see #valueFromMethodName
+         */
+        public String methodName() {
+            return methodName;
+        }
+
+        /**
+         * Returns the {@code AccessMode} value associated with the specified
+         * {@code VarHandle} signature-polymorphic method name.
+         *
+         * @param methodName the signature-polymorphic method name
+         * @return the {@code AccessMode} value
+         * @throws IllegalArgumentException if there is no {@code AccessMode}
+         *         value associated with method name (indicating the method
+         *         name does not correspond to a {@code VarHandle}
+         *         signature-polymorphic method name).
+         * @see #methodName
+         */
+        public static AccessMode valueFromMethodName(String methodName) {
+            AccessMode am = methodNameToAccessMode.get(methodName);
+            if (am != null) return am;
+            throw new IllegalArgumentException("No AccessMode value for method name " + methodName);
+        }
+
+        // BEGIN Android-removed: MemberName and VarForm are not used in the Android implementation.
+        /*
+        @ForceInline
+        static MemberName getMemberName(int ordinal, VarForm vform) {
+            return vform.memberName_table[ordinal];
+        }
+        */
+        // END Android-removed: MemberName and VarForm are not used in the Android implementation.
+    }
+
+    // BEGIN Android-removed: AccessDescriptor not used in Android implementation.
+    /*
+    static final class AccessDescriptor {
+        final MethodType symbolicMethodTypeErased;
+        final MethodType symbolicMethodTypeInvoker;
+        final Class<?> returnType;
+        final int type;
+        final int mode;
+
+        public AccessDescriptor(MethodType symbolicMethodType, int type, int mode) {
+            this.symbolicMethodTypeErased = symbolicMethodType.erase();
+            this.symbolicMethodTypeInvoker = symbolicMethodType.insertParameterTypes(0, VarHandle.class);
+            this.returnType = symbolicMethodType.returnType();
+            this.type = type;
+            this.mode = mode;
+        }
+    }
+    */
+    // END Android-removed: AccessDescriptor not used in Android implementation.
+
+    /**
+     * Returns the variable type of variables referenced by this VarHandle.
+     *
+     * @return the variable type of variables referenced by this VarHandle
+     */
+    public final Class<?> varType() {
+        MethodType typeSet = accessModeType(AccessMode.SET);
+        return typeSet.parameterType(typeSet.parameterCount() - 1);
+    }
+
+    /**
+     * Returns the coordinate types for this VarHandle.
+     *
+     * @return the coordinate types for this VarHandle. The returned
+     * list is unmodifiable
+     */
+    public final List<Class<?>> coordinateTypes() {
+        MethodType typeGet = accessModeType(AccessMode.GET);
+        return typeGet.parameterList();
+    }
+
+    /**
+     * Obtains the access mode type for this VarHandle and a given access mode.
+     *
+     * <p>The access mode type's parameter types will consist of a prefix that
+     * is the coordinate types of this VarHandle followed by further
+     * types as defined by the access mode method.
+     * The access mode type's return type is defined by the return type of the
+     * access mode method.
+     *
+     * @param accessMode the access mode, corresponding to the
+     * signature-polymorphic method of the same name
+     * @return the access mode type for the given access mode
+     */
+    public final MethodType accessModeType(AccessMode accessMode) {
+        // BEGIN Android-removed: Relies on internal class that is not part of the
+        // Android implementation.
+        /*
+        TypesAndInvokers tis = getTypesAndInvokers();
+        MethodType mt = tis.methodType_table[accessMode.at.ordinal()];
+        if (mt == null) {
+            mt = tis.methodType_table[accessMode.at.ordinal()] =
+                    accessModeTypeUncached(accessMode);
+        }
+        return mt;
+        */
+        // END Android-removed: Relies on internal class that is not part of the
+        // Android implementation.
+        // Android-added: Throw an exception until implemented.
+        unsupported();  // TODO(b/65872996)
+        return null;
+    }
+
+    // Android-removed: Not part of the Android implementation.
+    // abstract MethodType accessModeTypeUncached(AccessMode accessMode);
+
+    /**
+     * Returns {@code true} if the given access mode is supported, otherwise
+     * {@code false}.
+     *
+     * <p>The return of a {@code false} value for a given access mode indicates
+     * that an {@code UnsupportedOperationException} is thrown on invocation
+     * of the corresponding access mode method.
+     *
+     * @param accessMode the access mode, corresponding to the
+     * signature-polymorphic method of the same name
+     * @return {@code true} if the given access mode is supported, otherwise
+     * {@code false}.
+     */
+    public final boolean isAccessModeSupported(AccessMode accessMode) {
+        // Android-removed: Refers to unused field vform.
+        // return AccessMode.getMemberName(accessMode.ordinal(), vform) != null;
+        // Android-added: Throw an exception until implemented.
+        unsupported();  // TODO(b/65872996)
+        return false;
+    }
+
+    /**
+     * Obtains a method handle bound to this VarHandle and the given access
+     * mode.
+     *
+     * @apiNote This method, for a VarHandle {@code vh} and access mode
+     * {@code {access-mode}}, returns a method handle that is equivalent to
+     * method handle {@code bmh} in the following code (though it may be more
+     * efficient):
+     * <pre>{@code
+     * MethodHandle mh = MethodHandles.varHandleExactInvoker(
+     *                       vh.accessModeType(VarHandle.AccessMode.{access-mode}));
+     *
+     * MethodHandle bmh = mh.bindTo(vh);
+     * }</pre>
+     *
+     * @param accessMode the access mode, corresponding to the
+     * signature-polymorphic method of the same name
+     * @return a method handle bound to this VarHandle and the given access mode
+     */
+    public final MethodHandle toMethodHandle(AccessMode accessMode) {
+        // BEGIN Android-removed: no vform field in Android implementation.
+        /*
+        MemberName mn = AccessMode.getMemberName(accessMode.ordinal(), vform);
+        if (mn != null) {
+            MethodHandle mh = getMethodHandle(accessMode.ordinal());
+            return mh.bindTo(this);
+        }
+        else {
+            // Ensure an UnsupportedOperationException is thrown
+            return MethodHandles.varHandleInvoker(accessMode, accessModeType(accessMode)).
+                    bindTo(this);
+        }
+        */
+        // Android-added: Throw an exception until implemented.
+        unsupported();  // TODO(b/65872996)
+        return null;
+    }
+
+    // BEGIN Android-removed: Not used in Android implementation.
+    /*
+    @Stable
+    TypesAndInvokers typesAndInvokers;
+
+    static class TypesAndInvokers {
+        final @Stable
+        MethodType[] methodType_table =
+                new MethodType[VarHandle.AccessType.values().length];
+
+        final @Stable
+        MethodHandle[] methodHandle_table =
+                new MethodHandle[AccessMode.values().length];
+    }
+
+    @ForceInline
+    private final TypesAndInvokers getTypesAndInvokers() {
+        TypesAndInvokers tis = typesAndInvokers;
+        if (tis == null) {
+            tis = typesAndInvokers = new TypesAndInvokers();
+        }
+        return tis;
+    }
+
+    @ForceInline
+    final MethodHandle getMethodHandle(int mode) {
+        TypesAndInvokers tis = getTypesAndInvokers();
+        MethodHandle mh = tis.methodHandle_table[mode];
+        if (mh == null) {
+            mh = tis.methodHandle_table[mode] = getMethodHandleUncached(mode);
+        }
+        return mh;
+    }
+    private final MethodHandle getMethodHandleUncached(int mode) {
+        MethodType mt = accessModeType(AccessMode.values()[mode]).
+                insertParameterTypes(0, VarHandle.class);
+        MemberName mn = vform.getMemberName(mode);
+        DirectMethodHandle dmh = DirectMethodHandle.make(mn);
+        // Such a method handle must not be publically exposed directly
+        // otherwise it can be cracked, it must be transformed or rebound
+        // before exposure
+        MethodHandle mh = dmh.copyWith(mt, dmh.form);
+        assert mh.type().erase() == mn.getMethodType().erase();
+        return mh;
+    }
+    */
+    // END Android-removed: Not used in Android implementation.
+
+    /*non-public*/
+    // BEGIN Android-removed: No VarForm in Android implementation.
+    /*
+    final void updateVarForm(VarForm newVForm) {
+        if (vform == newVForm) return;
+        UNSAFE.putObject(this, VFORM_OFFSET, newVForm);
+        UNSAFE.fullFence();
+    }
+
+    static final BiFunction<String, List<Integer>, ArrayIndexOutOfBoundsException>
+            AIOOBE_SUPPLIER = Preconditions.outOfBoundsExceptionFormatter(
+            new Function<String, ArrayIndexOutOfBoundsException>() {
+                @Override
+                public ArrayIndexOutOfBoundsException apply(String s) {
+                    return new ArrayIndexOutOfBoundsException(s);
+                }
+            });
+
+    private static final long VFORM_OFFSET;
+
+    static {
+        try {
+            VFORM_OFFSET = UNSAFE.objectFieldOffset(VarHandle.class.getDeclaredField("vform"));
+        }
+        catch (ReflectiveOperationException e) {
+            throw newInternalError(e);
+        }
+
+        // The VarHandleGuards must be initialized to ensure correct
+        // compilation of the guard methods
+        UNSAFE.ensureClassInitialized(VarHandleGuards.class);
+    }
+    */
+    // END Android-removed: No VarForm in Android implementation.
+
+    // Fence methods
+
+    /**
+     * Ensures that loads and stores before the fence will not be reordered
+     * with
+     * loads and stores after the fence.
+     *
+     * @apiNote Ignoring the many semantic differences from C and C++, this
+     * method has memory ordering effects compatible with
+     * {@code atomic_thread_fence(memory_order_seq_cst)}
+     */
+    // Android-removed: @ForceInline is an unsupported attribute.
+    // @ForceInline
+    public static void fullFence() {
+        UNSAFE.fullFence();
+    }
+
+    /**
+     * Ensures that loads before the fence will not be reordered with loads and
+     * stores after the fence.
+     *
+     * @apiNote Ignoring the many semantic differences from C and C++, this
+     * method has memory ordering effects compatible with
+     * {@code atomic_thread_fence(memory_order_acquire)}
+     */
+    // Android-removed: @ForceInline is an unsupported attribute.
+    // @ForceInline
+    public static void acquireFence() {
+        UNSAFE.loadFence();
+    }
+
+    /**
+     * Ensures that loads and stores before the fence will not be
+     * reordered with stores after the fence.
+     *
+     * @apiNote Ignoring the many semantic differences from C and C++, this
+     * method has memory ordering effects compatible with
+     * {@code atomic_thread_fence(memory_order_release)}
+     */
+    // Android-removed: @ForceInline is an unsupported attribute.
+    // @ForceInline
+    public static void releaseFence() {
+        UNSAFE.storeFence();
+    }
+
+    /**
+     * Ensures that loads before the fence will not be reordered with
+     * loads after the fence.
+     */
+    // Android-removed: @ForceInline is an unsupported attribute.
+    // @ForceInline
+    public static void loadLoadFence() {
+        // Android-changed: Not using UNSAFE.loadLoadFence() as not present on Android.
+        // NB The compiler recognizes all the fences here as intrinsics.
+        UNSAFE.loadFence();
+    }
+
+    /**
+     * Ensures that stores before the fence will not be reordered with
+     * stores after the fence.
+     */
+    // Android-removed: @ForceInline is an unsupported attribute.
+    // @ForceInline
+    public static void storeStoreFence() {
+        // Android-changed: Not using UNSAFE.storeStoreFence() as not present on Android.
+        // NB The compiler recognizes all the fences here as intrinsics.
+        UNSAFE.storeFence();
+    }
+}
diff --git a/ojluni/src/main/java/java/net/DatagramSocket.java b/ojluni/src/main/java/java/net/DatagramSocket.java
index 5beab30..3e3faf7 100755
--- a/ojluni/src/main/java/java/net/DatagramSocket.java
+++ b/ojluni/src/main/java/java/net/DatagramSocket.java
@@ -1355,24 +1355,4 @@
         return impl.fd;
     }
 
-    // Android-added: setNetworkInterface() to set the network interface used by this socket.
-    /**
-     * Sets the network interface used by this socket.  Any packets sent
-     * via this socket are transmitted via the specified interface.  Any
-     * packets received by this socket will come from the specified
-     * interface.  Broadcast datagrams received on this interface will
-     * be processed by this socket. This corresponds to Linux's SO_BINDTODEVICE.
-     *
-     * @hide used by GoogleTV for DHCP
-     */
-    public void setNetworkInterface(NetworkInterface netInterface) throws SocketException {
-        if (netInterface == null) {
-            throw new NullPointerException("netInterface == null");
-        }
-        try {
-            Libcore.os.setsockoptIfreq(impl.fd, SOL_SOCKET, SO_BINDTODEVICE, netInterface.getName());
-        } catch (ErrnoException errnoException) {
-            throw errnoException.rethrowAsSocketException();
-        }
-    }
 }
diff --git a/ojluni/src/main/java/java/net/HttpURLConnection.java b/ojluni/src/main/java/java/net/HttpURLConnection.java
index db05c5f..b72168b 100644
--- a/ojluni/src/main/java/java/net/HttpURLConnection.java
+++ b/ojluni/src/main/java/java/net/HttpURLConnection.java
@@ -315,7 +315,7 @@
      * server. In this case, {@link #getHeaderField(int) getHeaderField(0)} returns the status
      * line, but {@code getHeaderFieldKey(0)} returns null.
      *
-     * @param   n   an index, where n >=0.
+     * @param   n   an index, where {@code n >=0}.
      * @return  the key for the {@code n}<sup>th</sup> header field,
      *          or {@code null} if the key does not exist.
      */
@@ -466,7 +466,7 @@
      * {@link #getHeaderFieldKey getHeaderFieldKey} method to iterate through all
      * the headers in the message.
      *
-     * @param   n   an index, where n>=0.
+     * @param   n   an index, where {@code n>=0}.
      * @return  the value of the {@code n}<sup>th</sup> header field,
      *          or {@code null} if the value does not exist.
      * @see     java.net.HttpURLConnection#getHeaderFieldKey(int)
diff --git a/ojluni/src/main/java/java/net/IDN.java b/ojluni/src/main/java/java/net/IDN.java
index 8ea32c8..4639c8f 100644
--- a/ojluni/src/main/java/java/net/IDN.java
+++ b/ojluni/src/main/java/java/net/IDN.java
@@ -77,9 +77,6 @@
      */
     public static final int USE_STD3_ASCII_RULES = 0x02;
 
-    private IDN() {
-    }
-
 
     /**
      * Translates a string from Unicode to ASCII Compatible Encoding (ACE),
@@ -106,11 +103,13 @@
      * @throws IllegalArgumentException   if the input string doesn't conform to RFC 3490 specification
      */
     public static String toASCII(String input, int flag) {
+        // BEGIN Android-changed: Use ICU4J implementation
         try {
             return IDNA.convertIDNToASCII(input, flag).toString();
         } catch (android.icu.text.StringPrepParseException e) {
             throw new IllegalArgumentException("Invalid input to toASCII: " + input, e);
         }
+        // END Android-changed: Use ICU4J implementation
     }
 
 
@@ -154,6 +153,7 @@
      * @return          the translated {@code String}
      */
     public static String toUnicode(String input, int flag) {
+        // BEGIN Android-changed: Use ICU4J implementation
         try {
             // ICU only translates separators to ASCII for toASCII.
             // Java expects the translation for toUnicode too.
@@ -163,8 +163,10 @@
             // the original string is returned.
             return input;
         }
+        // END Android-changed: Use ICU4J implementation
     }
 
+    // BEGIN Android-added: Use ICU4J implementation
     private static boolean isLabelSeperator(char c) {
         return (c == '\u3002' || c == '\uff0e' || c == '\uff61');
     }
@@ -177,7 +179,7 @@
         }
         return input;
     }
-
+    // END Android-added: Use ICU4J implementation
 
     /**
      * Translates a string from ASCII Compatible Encoding (ACE) to Unicode,
@@ -196,4 +198,296 @@
     public static String toUnicode(String input) {
         return toUnicode(input, 0);
     }
+
+
+    /* ---------------- Private members -------------- */
+
+    // Android-removed: Private helper methods, unused because we use ICU.
+    /*
+    // ACE Prefix is "xn--"
+    private static final String ACE_PREFIX = "xn--";
+    private static final int ACE_PREFIX_LENGTH = ACE_PREFIX.length();
+
+    private static final int MAX_LABEL_LENGTH   = 63;
+
+    // single instance of nameprep
+    private static StringPrep namePrep = null;
+
+    static {
+        InputStream stream = null;
+
+        try {
+            final String IDN_PROFILE = "uidna.spp";
+            if (System.getSecurityManager() != null) {
+                stream = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
+                    public InputStream run() {
+                        return StringPrep.class.getResourceAsStream(IDN_PROFILE);
+                    }
+                });
+            } else {
+                stream = StringPrep.class.getResourceAsStream(IDN_PROFILE);
+            }
+
+            namePrep = new StringPrep(stream);
+            stream.close();
+        } catch (IOException e) {
+            // should never reach here
+            assert false;
+        }
+    }
+    */
+
+    /* ---------------- Private operations -------------- */
+
+
+    //
+    // to suppress the default zero-argument constructor
+    //
+    private IDN() {}
+
+    // Android-removed: Private helper methods, unused because we use ICU.
+    /*
+    //
+    // toASCII operation; should only apply to a single label
+    //
+    private static String toASCIIInternal(String label, int flag)
+    {
+        // step 1
+        // Check if the string contains code points outside the ASCII range 0..0x7c.
+        boolean isASCII  = isAllASCII(label);
+        StringBuffer dest;
+
+        // step 2
+        // perform the nameprep operation; flag ALLOW_UNASSIGNED is used here
+        if (!isASCII) {
+            UCharacterIterator iter = UCharacterIterator.getInstance(label);
+            try {
+                dest = namePrep.prepare(iter, flag);
+            } catch (java.text.ParseException e) {
+                throw new IllegalArgumentException(e);
+            }
+        } else {
+            dest = new StringBuffer(label);
+        }
+
+        // step 8, move forward to check the smallest number of the code points
+        // the length must be inside 1..63
+        if (dest.length() == 0) {
+            throw new IllegalArgumentException(
+                        "Empty label is not a legal name");
+        }
+
+        // step 3
+        // Verify the absence of non-LDH ASCII code points
+        //   0..0x2c, 0x2e..0x2f, 0x3a..0x40, 0x5b..0x60, 0x7b..0x7f
+        // Verify the absence of leading and trailing hyphen
+        boolean useSTD3ASCIIRules = ((flag & USE_STD3_ASCII_RULES) != 0);
+        if (useSTD3ASCIIRules) {
+            for (int i = 0; i < dest.length(); i++) {
+                int c = dest.charAt(i);
+                if (isNonLDHAsciiCodePoint(c)) {
+                    throw new IllegalArgumentException(
+                        "Contains non-LDH ASCII characters");
+                }
+            }
+
+            if (dest.charAt(0) == '-' ||
+                dest.charAt(dest.length() - 1) == '-') {
+
+                throw new IllegalArgumentException(
+                        "Has leading or trailing hyphen");
+            }
+        }
+
+        if (!isASCII) {
+            // step 4
+            // If all code points are inside 0..0x7f, skip to step 8
+            if (!isAllASCII(dest.toString())) {
+                // step 5
+                // verify the sequence does not begin with ACE prefix
+                if(!startsWithACEPrefix(dest)){
+
+                    // step 6
+                    // encode the sequence with punycode
+                    try {
+                        dest = Punycode.encode(dest, null);
+                    } catch (java.text.ParseException e) {
+                        throw new IllegalArgumentException(e);
+                    }
+
+                    dest = toASCIILower(dest);
+
+                    // step 7
+                    // prepend the ACE prefix
+                    dest.insert(0, ACE_PREFIX);
+                } else {
+                    throw new IllegalArgumentException("The input starts with the ACE Prefix");
+                }
+
+            }
+        }
+
+        // step 8
+        // the length must be inside 1..63
+        if (dest.length() > MAX_LABEL_LENGTH) {
+            throw new IllegalArgumentException("The label in the input is too long");
+        }
+
+        return dest.toString();
+    }
+
+    //
+    // toUnicode operation; should only apply to a single label
+    //
+    private static String toUnicodeInternal(String label, int flag) {
+        boolean[] caseFlags = null;
+        StringBuffer dest;
+
+        // step 1
+        // find out if all the codepoints in input are ASCII
+        boolean isASCII = isAllASCII(label);
+
+        if(!isASCII){
+            // step 2
+            // perform the nameprep operation; flag ALLOW_UNASSIGNED is used here
+            try {
+                UCharacterIterator iter = UCharacterIterator.getInstance(label);
+                dest = namePrep.prepare(iter, flag);
+            } catch (Exception e) {
+                // toUnicode never fails; if any step fails, return the input string
+                return label;
+            }
+        } else {
+            dest = new StringBuffer(label);
+        }
+
+        // step 3
+        // verify ACE Prefix
+        if(startsWithACEPrefix(dest)) {
+
+            // step 4
+            // Remove the ACE Prefix
+            String temp = dest.substring(ACE_PREFIX_LENGTH, dest.length());
+
+            try {
+                // step 5
+                // Decode using punycode
+                StringBuffer decodeOut = Punycode.decode(new StringBuffer(temp), null);
+
+                // step 6
+                // Apply toASCII
+                String toASCIIOut = toASCII(decodeOut.toString(), flag);
+
+                // step 7
+                // verify
+                if (toASCIIOut.equalsIgnoreCase(dest.toString())) {
+                    // step 8
+                    // return output of step 5
+                    return decodeOut.toString();
+                }
+            } catch (Exception ignored) {
+                // no-op
+            }
+        }
+
+        // just return the input
+        return label;
+    }
+
+
+    //
+    // LDH stands for "letter/digit/hyphen", with characters restricted to the
+    // 26-letter Latin alphabet <A-Z a-z>, the digits <0-9>, and the hyphen
+    // <->.
+    // Non LDH refers to characters in the ASCII range, but which are not
+    // letters, digits or the hypen.
+    //
+    // non-LDH = 0..0x2C, 0x2E..0x2F, 0x3A..0x40, 0x5B..0x60, 0x7B..0x7F
+    //
+    private static boolean isNonLDHAsciiCodePoint(int ch){
+        return (0x0000 <= ch && ch <= 0x002C) ||
+               (0x002E <= ch && ch <= 0x002F) ||
+               (0x003A <= ch && ch <= 0x0040) ||
+               (0x005B <= ch && ch <= 0x0060) ||
+               (0x007B <= ch && ch <= 0x007F);
+    }
+
+    //
+    // search dots in a string and return the index of that character;
+    // or if there is no dots, return the length of input string
+    // dots might be: \u002E (full stop), \u3002 (ideographic full stop), \uFF0E (fullwidth full stop),
+    // and \uFF61 (halfwidth ideographic full stop).
+    //
+    private static int searchDots(String s, int start) {
+        int i;
+        for (i = start; i < s.length(); i++) {
+            if (isLabelSeparator(s.charAt(i))) {
+                break;
+            }
+        }
+
+        return i;
+    }
+
+    //
+    // to check if a string is a root label, ".".
+    //
+    private static boolean isRootLabel(String s) {
+        return (s.length() == 1 && isLabelSeparator(s.charAt(0)));
+    }
+
+    //
+    // to check if a character is a label separator, i.e. a dot character.
+    //
+    private static boolean isLabelSeparator(char c) {
+        return (c == '.' || c == '\u3002' || c == '\uFF0E' || c == '\uFF61');
+    }
+
+    //
+    // to check if a string only contains US-ASCII code point
+    //
+    private static boolean isAllASCII(String input) {
+        boolean isASCII = true;
+        for (int i = 0; i < input.length(); i++) {
+            int c = input.charAt(i);
+            if (c > 0x7F) {
+                isASCII = false;
+                break;
+            }
+        }
+        return isASCII;
+    }
+
+    //
+    // to check if a string starts with ACE-prefix
+    //
+    private static boolean startsWithACEPrefix(StringBuffer input){
+        boolean startsWithPrefix = true;
+
+        if(input.length() < ACE_PREFIX_LENGTH){
+            return false;
+        }
+        for(int i = 0; i < ACE_PREFIX_LENGTH; i++){
+            if(toASCIILower(input.charAt(i)) != ACE_PREFIX.charAt(i)){
+                startsWithPrefix = false;
+            }
+        }
+        return startsWithPrefix;
+    }
+
+    private static char toASCIILower(char ch){
+        if('A' <= ch && ch <= 'Z'){
+            return (char)(ch + 'a' - 'A');
+        }
+        return ch;
+    }
+
+    private static StringBuffer toASCIILower(StringBuffer input){
+        StringBuffer dest = new StringBuffer();
+        for(int i = 0; i < input.length();i++){
+            dest.append(toASCIILower(input.charAt(i)));
+        }
+        return dest;
+    }
+    */
 }
diff --git a/ojluni/src/main/java/java/net/InMemoryCookieStore.java b/ojluni/src/main/java/java/net/InMemoryCookieStore.java
index 288dddb..3ee98dc 100644
--- a/ojluni/src/main/java/java/net/InMemoryCookieStore.java
+++ b/ojluni/src/main/java/java/net/InMemoryCookieStore.java
@@ -36,6 +36,13 @@
 import java.util.Iterator;
 import java.util.concurrent.locks.ReentrantLock;
 
+// Android-changed: App compat changes and bug fixes
+// b/26456024 Add targetSdkVersion based compatibility for domain matching
+// b/33034917 Support clearing cookies by adding it with "max-age=0"
+// b/25897688 InMemoryCookieStore ignores scheme (http/https) port and path of the cookie
+// Remove cookieJar and domainIndex. Use urlIndex as single Cookie storage
+// Fix InMemoryCookieStore#remove to verify cookie URI before removal
+// Fix InMemoryCookieStore#removeAll to return false if it's empty.
 /**
  * A simple in-memory java.net.CookieStore implementation
  *
@@ -45,11 +52,23 @@
  */
 public class InMemoryCookieStore implements CookieStore {
     // the in-memory representation of cookies
+    // BEGIN Android-removed: Remove cookieJar and domainIndex
+    /*
+    private List<HttpCookie> cookieJar = null;
+
+    // the cookies are indexed by its domain and associated uri (if present)
+    // CAUTION: when a cookie removed from main data structure (i.e. cookieJar),
+    //          it won't be cleared in domainIndex & uriIndex. Double-check the
+    //          presence of cookie when retrieve one form index store.
+    private Map<String, List<HttpCookie>> domainIndex = null;
+    */
+    // END Android-removed: Remove cookieJar and domainIndex
     private Map<URI, List<HttpCookie>> uriIndex = null;
 
     // use ReentrantLock instead of syncronized for scalability
     private ReentrantLock lock = null;
 
+    // BEGIN Android-changed: Add targetSdkVersion and remove cookieJar and domainIndex
     private final boolean applyMCompatibility;
 
     /**
@@ -64,6 +83,7 @@
         lock = new ReentrantLock(false);
         applyMCompatibility = (targetSdkVersion <= 23);
     }
+    // END Android-changed: Add targetSdkVersion and remove cookieJar and domainIndex
 
     /**
      * Add one cookie into cookie store.
@@ -101,6 +121,7 @@
         }
 
         List<HttpCookie> cookies = new ArrayList<HttpCookie>();
+        // BEGIN Android-changed: b/25897688 InMemoryCookieStore ignores scheme (http/https)
         lock.lock();
         try {
             // check domainIndex first
@@ -110,7 +131,7 @@
         } finally {
             lock.unlock();
         }
-
+        // END Android-changed: b/25897688 InMemoryCookieStore ignores scheme (http/https)
         return cookies;
     }
 
@@ -118,6 +139,7 @@
      * Get all cookies in cookie store, except those have expired
      */
     public List<HttpCookie> getCookies() {
+        // BEGIN Android-changed: Remove cookieJar and domainIndex
         List<HttpCookie> rt = new ArrayList<HttpCookie>();
 
         lock.lock();
@@ -137,6 +159,7 @@
             rt = Collections.unmodifiableList(rt);
             lock.unlock();
         }
+        // END Android-changed: Remove cookieJar and domainIndex
 
         return rt;
     }
@@ -169,6 +192,7 @@
             throw new NullPointerException("cookie is null");
         }
 
+        // BEGIN Android-changed: Fix uri not being removed from uriIndex
         lock.lock();
         try {
             uri = getEffectiveURI(uri);
@@ -185,6 +209,7 @@
         } finally {
             lock.unlock();
         }
+        // END Android-changed: Fix uri not being removed from uriIndex
     }
 
 
@@ -193,6 +218,7 @@
      */
     public boolean removeAll() {
         lock.lock();
+        // BEGIN Android-change: Return false if it's empty.
         boolean result = false;
 
         try {
@@ -203,6 +229,7 @@
         }
 
         return result;
+        // END Android-change: Return false if it's empty.
     }
 
 
@@ -251,6 +278,7 @@
             // need to check H & D component
             String D = host.substring(lengthDiff);
 
+            // Android-changed: b/26456024 targetSdkVersion based compatibility for domain matching
             // Android M and earlier: Cookies with domain "foo.com" would not match "bar.foo.com".
             // The RFC dictates that the user agent must treat those domains as if they had a
             // leading period and must therefore match "bar.foo.com".
@@ -270,6 +298,7 @@
 
     private void getInternal1(List<HttpCookie> cookies, Map<URI, List<HttpCookie>> cookieIndex,
             String host) {
+        // BEGIN Android-changed: b/25897688 InMemoryCookieStore ignores scheme (http/https)
         // Use a separate list to handle cookies that need to be removed so
         // that there is no conflict with iterators.
         ArrayList<HttpCookie> toRemove = new ArrayList<HttpCookie>();
@@ -298,6 +327,7 @@
             }
             toRemove.clear();
         }
+        // END Android-changed: b/25897688 InMemoryCookieStore ignores scheme (http/https)
     }
 
     // @param cookies           [OUT] contains the found cookies
@@ -308,6 +338,7 @@
         void getInternal2(List<HttpCookie> cookies, Map<T, List<HttpCookie>> cookieIndex,
                           T comparator)
     {
+        // BEGIN Android-changed: b/25897688 InMemoryCookieStore ignores scheme (http/https)
         // Removed cookieJar
         for (T index : cookieIndex.keySet()) {
             if ((index == comparator) || (index != null && comparator.compareTo(index) == 0)) {
@@ -329,6 +360,7 @@
                 } // end of indexedCookies != null
             } // end of comparator.compareTo(index) == 0
         } // end of cookieIndex iteration
+        // END Android-changed: b/25897688 InMemoryCookieStore ignores scheme (http/https)
     }
 
     // add 'cookie' indexed by 'index' into 'indexStore'
@@ -339,6 +371,7 @@
         // Android-changed: "index" can be null. We only use the URI based
         // index on Android and we want to support null URIs. The underlying
         // store is a HashMap which will support null keys anyway.
+        // if (index != null) {
         List<HttpCookie> cookies = indexStore.get(index);
         if (cookies != null) {
             // there may already have the same cookie, so remove it first
@@ -359,6 +392,7 @@
     //
     private URI getEffectiveURI(URI uri) {
         URI effectiveURI = null;
+        // Android-added: Fix NullPointerException
         if (uri == null) {
             return null;
         }
diff --git a/ojluni/src/main/java/java/net/Inet4Address.java b/ojluni/src/main/java/java/net/Inet4Address.java
index 9c8e5fb..1fb7b92 100644
--- a/ojluni/src/main/java/java/net/Inet4Address.java
+++ b/ojluni/src/main/java/java/net/Inet4Address.java
@@ -93,6 +93,7 @@
      *  serialized */
     private static final long serialVersionUID = 3286316764910316507L;
 
+    // BEGIN Android-added: Define special-purpose IPv4 address
     /** @hide */
     public static final InetAddress ANY = new Inet4Address(null, new byte[] { 0, 0, 0, 0 });
 
@@ -103,7 +104,18 @@
     /** @hide */
     public static final InetAddress LOOPBACK =
             new Inet4Address("localhost", new byte[] { 127, 0, 0, 1 });
+    // END Android-added: Define special-purpose IPv4 address
 
+
+    // BEGIN Android-removed: Android doesn't need to call native init
+    /*
+     * Perform initializations.
+     *
+    static {
+        init();
+    }
+    */
+    // END Android-removed: Android doesn't need to call native init
     Inet4Address() {
         super();
         holder().hostName = null;
@@ -378,4 +390,12 @@
     {
         return (src[0] & 0xff) + "." + (src[1] & 0xff) + "." + (src[2] & 0xff) + "." + (src[3] & 0xff);
     }
+
+    // BEGIN Android-removed: Android doesn't need to call native init
+    /*
+     * Perform class load-time initializations.
+     *
+    private static native void init();
+    */
+    // END Android-removed: Android doesn't need to call native init
 }
diff --git a/ojluni/src/main/java/java/net/Inet6Address.java b/ojluni/src/main/java/java/net/Inet6Address.java
index ee946ee..c0aadb3 100644
--- a/ojluni/src/main/java/java/net/Inet6Address.java
+++ b/ojluni/src/main/java/java/net/Inet6Address.java
@@ -178,6 +178,15 @@
 class Inet6Address extends InetAddress {
     final static int INADDRSZ = 16;
 
+    // BEGIN Android-removed: Remove special handling for link-local addresses
+    /*
+    * cached scope_id - for link-local address use only.
+    *
+    private transient int cached_scope_id;  // 0
+    */
+    // END Android-removed: Remove special handling for link-local addresses
+
+    // BEGIN Android-added: Define special-purpose IPv6 address
     /** @hide */
     public static final InetAddress ANY =
             new Inet6Address("::", new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0);
@@ -185,6 +194,7 @@
     /** @hide */
     public static final InetAddress LOOPBACK = new Inet6Address("ip6-localhost",
             new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 0);
+    // END Android-added: Define special-purpose IPv6 address
 
     private class Inet6AddressHolder {
 
@@ -379,6 +389,13 @@
 
     private static final long serialVersionUID = 6880410070516793377L;
 
+    // BEGIN Android-removed: Android doesn't need to call native init
+    /*
+    // Perform native initialization
+    static { init(); }
+    // END Android-removed: Android doesn't need to call native init
+    */
+
     Inet6Address() {
         super();
         holder.init(null, AF_INET6);
@@ -401,12 +418,16 @@
         } catch (UnknownHostException e) {} /* cant happen if ifname is null */
     }
 
-    Inet6Address (String hostName, byte addr[], NetworkInterface nif) throws UnknownHostException {
+    Inet6Address (String hostName, byte addr[], NetworkInterface nif)
+        throws UnknownHostException
+    {
         holder6 = new Inet6AddressHolder();
         initif (hostName, addr, nif);
     }
 
-    Inet6Address (String hostName, byte addr[], String ifname) throws UnknownHostException {
+    Inet6Address (String hostName, byte addr[], String ifname)
+        throws UnknownHostException
+    {
         holder6 = new Inet6AddressHolder();
         initstr (hostName, addr, ifname);
     }
@@ -495,8 +516,9 @@
         }
     }
 
-    private void initif(String hostName, byte addr[],NetworkInterface nif) throws UnknownHostException {
-        holder().hostName = hostName;
+    private void initif(String hostName, byte addr[], NetworkInterface nif)
+        throws UnknownHostException
+    {
         int family = -1;
         holder6.init(addr, nif);
 
@@ -948,4 +970,12 @@
         }
         return sb.toString();
     }
+
+    // BEGIN Android-removed: Android doesn't need to call native init
+    /*
+     * Perform class load-time initializations.
+     *
+    private static native void init();
+    */
+    // END Android-removed: Android doesn't need to call native init
 }
diff --git a/ojluni/src/main/java/java/net/Inet6AddressImpl.java b/ojluni/src/main/java/java/net/Inet6AddressImpl.java
index 2a897f7..cfc2d13 100644
--- a/ojluni/src/main/java/java/net/Inet6AddressImpl.java
+++ b/ojluni/src/main/java/java/net/Inet6AddressImpl.java
@@ -48,11 +48,18 @@
 import static android.system.OsConstants.ICMP_ECHOREPLY;
 import static android.system.OsConstants.IPPROTO_ICMP;
 import static android.system.OsConstants.IPPROTO_ICMPV6;
-import static android.system.OsConstants.IPPROTO_IPV6;
-import static android.system.OsConstants.IPV6_UNICAST_HOPS;
 import static android.system.OsConstants.SOCK_DGRAM;
 import static android.system.OsConstants.SOCK_STREAM;
 
+// Android-note: Android-specific behavior and Linux-based implementation
+// http://b/36933260 Implement root-less ICMP for isReachable()
+// http://b/28609551 Rewrite getHostByAddr0 using POSIX library Libcore.os.
+// http://b/25861497 Add BlockGuard checks.
+// http://b/26700324 Fix odd dependency chains of the static InetAddress.
+// anyLocalAddress() Let anyLocalAddress() always return an IPv6 address.
+// Let loopbackAddresses() return both Inet4 and Inet6 loopbacks.
+// Rewrote hostname lookup methods on top of Libcore.os. Merge implementation from InetAddress
+//   and remove native methods in this class
 /*
  * Package private implementation of InetAddressImpl for dual
  * IPv4/IPv6 stack. {@code #anyLocalAddress()} will always return an IPv6 address.
@@ -69,6 +76,14 @@
 
     private static final AddressCache addressCache = new AddressCache();
 
+    // BEGIN Android-changed: Rewrote hostname lookup methods on top of Libcore.os.
+    /*
+    public native String getLocalHostName() throws UnknownHostException;
+    public native InetAddress[]
+        lookupAllHostAddr(String hostname) throws UnknownHostException;
+    public native String getHostByAddr(byte[] addr) throws UnknownHostException;
+    private native boolean isReachable0(byte[] addr, int scope, int timeout, byte[] inf, int ttl, int if_scope) throws IOException;
+    */
     @Override
     public InetAddress[] lookupAllHostAddr(String host, int netId) throws UnknownHostException {
         if (host == null || host.isEmpty()) {
@@ -154,10 +169,11 @@
     public void clearAddressCache() {
         addressCache.clear();
     }
+    // END Android-changed: Rewrote hostname lookup methods on top of Libcore.os.
 
     @Override
     public boolean isReachable(InetAddress addr, int timeout, NetworkInterface netif, int ttl) throws IOException {
-        // Android-changed: rewritten on the top of IoBridge and Libcore.os
+        // Android-changed: rewritten on the top of IoBridge and Libcore.os.
         InetAddress sourceAddr = null;
         if (netif != null) {
             /*
@@ -183,6 +199,12 @@
             }
         }
 
+        // Android-changed: http://b/36933260 Implement root-less ICMP for isReachable().
+        /*
+        if (addr instanceof Inet6Address)
+            scope = ((Inet6Address) addr).getScopeId();
+        return isReachable0(addr.getAddress(), scope, timeout, ifaddr, ttl, netif_scope);
+        */
         // Try ICMP first
         if (icmpEcho(addr, timeout, sourceAddr, ttl)) {
             return true;
@@ -192,6 +214,7 @@
         return tcpEcho(addr, timeout, sourceAddr, ttl);
     }
 
+    // BEGIN Android-added: http://b/36933260 Implement root-less ICMP for isReachable().
     private boolean tcpEcho(InetAddress addr, int timeout, InetAddress sourceAddr, int ttl)
             throws IOException {
         FileDescriptor fd = null;
@@ -274,14 +297,16 @@
 
         return false;
     }
+    // END Android-added: http://b/36933260 Implement root-less ICMP for isReachable().
 
+    // BEGIN Android-changed: Let anyLocalAddress() always return an IPv6 address.
     @Override
     public InetAddress anyLocalAddress() {
         synchronized (Inet6AddressImpl.class) {
             // We avoid initializing anyLocalAddress during <clinit> to avoid issues
             // caused by the dependency chains of these classes. InetAddress depends on
             // InetAddressImpl, but Inet6Address & Inet4Address are its subclasses.
-            // Also see {@code loopbackAddresses).
+            // Also see {@code loopbackAddresses). http://b/26700324
             if (anyLocalAddress == null) {
                 Inet6Address anyAddress = new Inet6Address();
                 anyAddress.holder().hostName = "::";
@@ -291,7 +316,9 @@
             return anyLocalAddress;
         }
     }
+    // END Android-changed: Let anyLocalAddress() always return an IPv6 address.
 
+    // BEGIN Android-changed: Let loopbackAddresses() return both Inet4 and Inet6 loopbacks.
     @Override
     public InetAddress[] loopbackAddresses() {
         synchronized (Inet6AddressImpl.class) {
@@ -306,7 +333,9 @@
             return loopbackAddresses;
         }
     }
+    // END Android-changed: Let loopbackAddresses() return both Inet4 and Inet6 loopbacks.
 
+    // BEGIN Android-changed: b/28609551 Rewrite getHostByAddr0 using POSIX library Libcore.os.
     private String getHostByAddr0(byte[] addr) throws UnknownHostException {
         // Android-changed: Rewritten on the top of Libcore.os
         InetAddress hostaddr = InetAddress.getByAddress(addr);
@@ -318,4 +347,5 @@
             throw uhe;
         }
     }
+    // END Android-changed: b/28609551 Rewrite getHostByAddr0 using POSIX library Libcore.os.
 }
diff --git a/ojluni/src/main/java/java/net/InetAddress.java b/ojluni/src/main/java/java/net/InetAddress.java
index 1468b2d..40b46d2 100644
--- a/ojluni/src/main/java/java/net/InetAddress.java
+++ b/ojluni/src/main/java/java/net/InetAddress.java
@@ -181,6 +181,24 @@
  */
 public
 class InetAddress implements java.io.Serializable {
+    // BEGIN Android-removed: Android uses linux-based OsConstants.
+    /*
+     * Specify the address family: Internet Protocol, Version 4
+     * @since 1.4
+     *
+    static final int IPv4 = 1;
+
+    /**
+     * Specify the address family: Internet Protocol, Version 6
+     * @since 1.4
+     *
+    static final int IPv6 = 2;
+    */
+    // END Android-removed: Android uses linux-based OsConstants.
+
+    // Android-removed: Android doesn't support the preference.
+    // /* Specify address family preference */
+    //static transient boolean preferIPv6Address = false;
 
     static class InetAddressHolder {
         /**
@@ -235,6 +253,7 @@
             return address;
         }
 
+        // Android-changed: Documentation: use Linux-based OsConstants.
         /**
          * Specifies the address family type, for instance, AF_INET for IPv4
          * addresses, and AF_INET6 for IPv6 addresses.
@@ -256,6 +275,9 @@
     static final InetAddressImpl impl = new Inet6AddressImpl();
 
     /* Used to store the name service provider */
+    // Android-changed: Android has only one name service.
+    // Android doesn't allow user to provide custom name services.
+    // private static List<NameService> nameServices = null;
     private static final NameService nameService = new NameService() {
         public InetAddress[] lookupAllHostAddr(String host, int netId)
                 throws UnknownHostException {
@@ -273,6 +295,26 @@
     /** use serialVersionUID from JDK 1.0.2 for interoperability */
     private static final long serialVersionUID = 3286316764910316507L;
 
+
+    // BEGIN Android-removed: Android doesn't need to load native library.
+    /*
+     * Load net library into runtime, and perform initializations.
+     *
+    static {
+        preferIPv6Address = java.security.AccessController.doPrivileged(
+            new GetBooleanAction("java.net.preferIPv6Addresses")).booleanValue();
+        AccessController.doPrivileged(
+            new java.security.PrivilegedAction<Void>() {
+                public Void run() {
+                    System.loadLibrary("net");
+                    return null;
+                }
+            });
+        init();
+    }
+    */
+    // END Android-removed: Android doesn't need to load native library.
+
     /**
      * Constructor for the Socket.accept() method.
      * This creates an empty InetAddress, which is filled in by
@@ -433,9 +475,12 @@
      * @since 1.5
      */
     public boolean isReachable(int timeout) throws IOException {
-        return isReachable(null, 0, timeout);
+        return isReachable(null, 0 , timeout);
     }
 
+    // Android-changed: Document that impl tries ICMP ECHO REQUESTs first.
+    // The sole implementation, Inet6AddressImpl.isReachable(), tries ICMP ECHO REQUESTs before
+    // TCP ECHO REQUESTs on Android. On Android, these are both possible without root access.
     /**
      * Test whether that address is reachable. Best effort is made by the
      * implementation to try to reach the host, but firewalls and server
@@ -478,12 +523,14 @@
         return impl.isReachable(this, timeout, netif, ttl);
     }
 
+    // BEGIN Android-added: isReachableByICMP(timeout).
     /**
      * @hide For testing only
      */
     public boolean isReachableByICMP(int timeout) throws IOException {
         return ((Inet6AddressImpl) impl).icmpEcho(this, timeout, null, 0);
     }
+    // END Android-added: isReachableByICMP(timeout).
 
     /**
      * Gets the host name for this IP address.
@@ -511,12 +558,46 @@
      * @see SecurityManager#checkConnect
      */
     public String getHostName() {
+        // Android-changed: Remove SecurityManager check.
         if (holder().getHostName() == null) {
             holder().hostName = InetAddress.getHostFromNameService(this);
         }
         return holder().getHostName();
     }
 
+    // BEGIN Android-removed: Android doesn't support SecurityManager.
+    /*
+     * Returns the hostname for this address.
+     * If the host is equal to null, then this address refers to any
+     * of the local machine's available network addresses.
+     * this is package private so SocketPermission can make calls into
+     * here without a security check.
+     *
+     * <p>If there is a security manager, this method first
+     * calls its {@code checkConnect} method
+     * with the hostname and {@code -1}
+     * as its arguments to see if the calling code is allowed to know
+     * the hostname for this IP address, i.e., to connect to the host.
+     * If the operation is not allowed, it will return
+     * the textual representation of the IP address.
+     *
+     * @return  the host name for this IP address, or if the operation
+     *    is not allowed by the security check, the textual
+     *    representation of the IP address.
+     *
+     * @param check make security check if true
+     *
+     * @see SecurityManager#checkConnect
+     *
+    String getHostName(boolean check) {
+        if (holder().getHostName() == null) {
+            holder().hostName = InetAddress.getHostFromNameService(this, check);
+        }
+        return holder().getHostName();
+    }
+    */
+    // END Android-removed: Android doesn't support SecurityManager.
+
     /**
      * Gets the fully qualified domain name for this IP address.
      * Best effort method, meaning we may not be able to return
@@ -539,12 +620,15 @@
      * @since 1.4
      */
     public String getCanonicalHostName() {
+        // Android-changed: Remove SecurityManager check.
         if (canonicalHostName == null) {
             canonicalHostName = InetAddress.getHostFromNameService(this);
         }
         return canonicalHostName;
     }
 
+    // Android-changed: Remove SecurityManager check.
+    // * @param check make security check if true
     /**
      * Returns the hostname for this address.
      *
@@ -566,6 +650,7 @@
         String host = null;
         try {
             // first lookup the hostname
+            // Android-changed: Android has only one name service.
             host = nameService.getHostByAddr(addr.getAddress());
 
                 /* now get all the IP addresses for this hostname,
@@ -659,6 +744,280 @@
             + "/" + getHostAddress();
     }
 
+    // BEGIN Android-removed: Resolves a hostname using Libcore.os.
+    /*
+     * Cached addresses - our own litle nis, not!
+     *
+    private static Cache addressCache = new Cache(Cache.Type.Positive);
+
+    private static Cache negativeCache = new Cache(Cache.Type.Negative);
+
+    private static boolean addressCacheInit = false;
+
+    static InetAddress[]    unknown_array; // put THIS in cache
+
+    static InetAddressImpl  impl;
+
+    private static final HashMap<String, Void> lookupTable = new HashMap<>();
+
+    /**
+     * Represents a cache entry
+     *
+    static final class CacheEntry {
+
+        CacheEntry(InetAddress[] addresses, long expiration) {
+            this.addresses = addresses;
+            this.expiration = expiration;
+        }
+
+        InetAddress[] addresses;
+        long expiration;
+    }
+
+    /**
+     * A cache that manages entries based on a policy specified
+     * at creation time.
+     *
+    static final class Cache {
+        private LinkedHashMap<String, CacheEntry> cache;
+        private Type type;
+
+        enum Type {Positive, Negative};
+
+        /**
+         * Create cache
+         *
+        public Cache(Type type) {
+            this.type = type;
+            cache = new LinkedHashMap<String, CacheEntry>();
+        }
+
+        private int getPolicy() {
+            if (type == Type.Positive) {
+                return InetAddressCachePolicy.get();
+            } else {
+                return InetAddressCachePolicy.getNegative();
+            }
+        }
+
+        /**
+         * Add an entry to the cache. If there's already an
+         * entry then for this host then the entry will be
+         * replaced.
+         *
+        public Cache put(String host, InetAddress[] addresses) {
+            int policy = getPolicy();
+            if (policy == InetAddressCachePolicy.NEVER) {
+                return this;
+            }
+
+            // purge any expired entries
+
+            if (policy != InetAddressCachePolicy.FOREVER) {
+
+                // As we iterate in insertion order we can
+                // terminate when a non-expired entry is found.
+                LinkedList<String> expired = new LinkedList<>();
+                long now = System.currentTimeMillis();
+                for (String key : cache.keySet()) {
+                    CacheEntry entry = cache.get(key);
+
+                    if (entry.expiration >= 0 && entry.expiration < now) {
+                        expired.add(key);
+                    } else {
+                        break;
+                    }
+                }
+
+                for (String key : expired) {
+                    cache.remove(key);
+                }
+            }
+
+            // create new entry and add it to the cache
+            // -- as a HashMap replaces existing entries we
+            //    don't need to explicitly check if there is
+            //    already an entry for this host.
+            long expiration;
+            if (policy == InetAddressCachePolicy.FOREVER) {
+                expiration = -1;
+            } else {
+                expiration = System.currentTimeMillis() + (policy * 1000);
+            }
+            CacheEntry entry = new CacheEntry(addresses, expiration);
+            cache.put(host, entry);
+            return this;
+        }
+
+        /**
+         * Query the cache for the specific host. If found then
+         * return its CacheEntry, or null if not found.
+         *
+        public CacheEntry get(String host) {
+            int policy = getPolicy();
+            if (policy == InetAddressCachePolicy.NEVER) {
+                return null;
+            }
+            CacheEntry entry = cache.get(host);
+
+            // check if entry has expired
+            if (entry != null && policy != InetAddressCachePolicy.FOREVER) {
+                if (entry.expiration >= 0 &&
+                        entry.expiration < System.currentTimeMillis()) {
+                    cache.remove(host);
+                    entry = null;
+                }
+            }
+
+            return entry;
+        }
+    }
+
+    /*
+     * Initialize cache and insert anyLocalAddress into the
+     * unknown array with no expiry.
+     *
+    private static void cacheInitIfNeeded() {
+        assert Thread.holdsLock(addressCache);
+        if (addressCacheInit) {
+            return;
+        }
+        unknown_array = new InetAddress[1];
+        unknown_array[0] = impl.anyLocalAddress();
+
+        addressCache.put(impl.anyLocalAddress().getHostName(),
+                         unknown_array);
+
+        addressCacheInit = true;
+    }
+
+    /*
+     * Cache the given hostname and addresses.
+     *
+    private static void cacheAddresses(String hostname,
+                                       InetAddress[] addresses,
+                                       boolean success) {
+        hostname = hostname.toLowerCase();
+        synchronized (addressCache) {
+            cacheInitIfNeeded();
+            if (success) {
+                addressCache.put(hostname, addresses);
+            } else {
+                negativeCache.put(hostname, addresses);
+            }
+        }
+    }
+
+    /*
+     * Lookup hostname in cache (positive & negative cache). If
+     * found return addresses, null if not found.
+     *
+    private static InetAddress[] getCachedAddresses(String hostname) {
+        hostname = hostname.toLowerCase();
+
+        // search both positive & negative caches
+
+        synchronized (addressCache) {
+            cacheInitIfNeeded();
+
+            CacheEntry entry = addressCache.get(hostname);
+            if (entry == null) {
+                entry = negativeCache.get(hostname);
+            }
+
+            if (entry != null) {
+                return entry.addresses;
+            }
+        }
+
+        // not found
+        return null;
+    }
+
+    private static NameService createNSProvider(String provider) {
+        if (provider == null)
+            return null;
+
+        NameService nameService = null;
+        if (provider.equals("default")) {
+            // initialize the default name service
+            nameService = new NameService() {
+                public InetAddress[] lookupAllHostAddr(String host)
+                    throws UnknownHostException {
+                    return impl.lookupAllHostAddr(host);
+                }
+                public String getHostByAddr(byte[] addr)
+                    throws UnknownHostException {
+                    return impl.getHostByAddr(addr);
+                }
+            };
+        } else {
+            final String providerName = provider;
+            try {
+                nameService = java.security.AccessController.doPrivileged(
+                    new java.security.PrivilegedExceptionAction<NameService>() {
+                        public NameService run() {
+                            Iterator<NameServiceDescriptor> itr =
+                                ServiceLoader.load(NameServiceDescriptor.class)
+                                    .iterator();
+                            while (itr.hasNext()) {
+                                NameServiceDescriptor nsd = itr.next();
+                                if (providerName.
+                                    equalsIgnoreCase(nsd.getType()+","
+                                        +nsd.getProviderName())) {
+                                    try {
+                                        return nsd.createNameService();
+                                    } catch (Exception e) {
+                                        e.printStackTrace();
+                                        System.err.println(
+                                            "Cannot create name service:"
+                                             +providerName+": " + e);
+                                    }
+                                }
+                            }
+
+                            return null;
+                        }
+                    }
+                );
+            } catch (java.security.PrivilegedActionException e) {
+            }
+        }
+
+        return nameService;
+    }
+
+    static {
+        // create the impl
+        impl = InetAddressImplFactory.create();
+
+        // get name service if provided and requested
+        String provider = null;;
+        String propPrefix = "sun.net.spi.nameservice.provider.";
+        int n = 1;
+        nameServices = new ArrayList<NameService>();
+        provider = AccessController.doPrivileged(
+                new GetPropertyAction(propPrefix + n));
+        while (provider != null) {
+            NameService ns = createNSProvider(provider);
+            if (ns != null)
+                nameServices.add(ns);
+
+            n++;
+            provider = AccessController.doPrivileged(
+                    new GetPropertyAction(propPrefix + n));
+        }
+
+        // if not designate any name services provider,
+        // create a default one
+        if (nameServices.size() == 0) {
+            NameService ns = createNSProvider("default");
+            nameServices.add(ns);
+        }
+    }
+    */
+    // END Android-removed: Resolves a hostname using Libcore.os.
+
     /**
      * Creates an InetAddress based on the provided host name and IP address.
      * No name service is checked for the validity of the address.
@@ -685,6 +1044,7 @@
         return getByAddress(host, addr, -1 /* scopeId */);
     }
 
+    // Android-added: Called by native code in Libcore.io.
     // Do not delete. Called from native code.
     private static InetAddress getByAddress(String host, byte[] addr, int scopeId)
         throws UnknownHostException {
@@ -740,6 +1100,7 @@
      */
     public static InetAddress getByName(String host)
         throws UnknownHostException {
+        // Android-changed: Rewritten on the top of Libcore.os.
         return impl.lookupAllHostAddr(host, NETID_UNSET)[0];
     }
 
@@ -784,6 +1145,8 @@
      */
     public static InetAddress[] getAllByName(String host)
         throws UnknownHostException {
+        // Android-changed: Resolves a hostname using Libcore.os.
+        // Also, returns both the Inet4 and Inet6 loopback for null/empty host
         return impl.lookupAllHostAddr(host, NETID_UNSET).clone();
     }
 
@@ -799,9 +1162,223 @@
      * @since 1.7
      */
     public static InetAddress getLoopbackAddress() {
+        // Android-changed: Always returns IPv6 loopback address in Android.
         return impl.loopbackAddresses()[0];
     }
 
+    // BEGIN Android-removed: Resolves a hostname using Libcore.os.
+    /*
+     * check if the literal address string has %nn appended
+     * returns -1 if not, or the numeric value otherwise.
+     *
+     * %nn may also be a string that represents the displayName of
+     * a currently available NetworkInterface.
+     *
+    private static int checkNumericZone (String s) throws UnknownHostException {
+        int percent = s.indexOf ('%');
+        int slen = s.length();
+        int digit, zone=0;
+        if (percent == -1) {
+            return -1;
+        }
+        for (int i=percent+1; i<slen; i++) {
+            char c = s.charAt(i);
+            if (c == ']') {
+                if (i == percent+1) {
+                    /* empty per-cent field *
+                    return -1;
+                }
+                break;
+            }
+            if ((digit = Character.digit (c, 10)) < 0) {
+                return -1;
+            }
+            zone = (zone * 10) + digit;
+        }
+        return zone;
+    }
+
+    private static InetAddress[] getAllByName0 (String host)
+        throws UnknownHostException
+    {
+        return getAllByName0(host, true);
+    }
+
+    /**
+     * package private so SocketPermission can call it
+     *
+    static InetAddress[] getAllByName0 (String host, boolean check)
+        throws UnknownHostException  {
+        return getAllByName0 (host, null, check);
+    }
+
+    private static InetAddress[] getAllByName0 (String host, InetAddress reqAddr, boolean check)
+        throws UnknownHostException  {
+
+        /* If it gets here it is presumed to be a hostname */
+        /* Cache.get can return: null, unknownAddress, or InetAddress[] */
+
+        /* make sure the connection to the host is allowed, before we
+         * give out a hostname
+         *
+        if (check) {
+            SecurityManager security = System.getSecurityManager();
+            if (security != null) {
+                security.checkConnect(host, -1);
+            }
+        }
+
+        InetAddress[] addresses = getCachedAddresses(host);
+
+        /* If no entry in cache, then do the host lookup *
+        if (addresses == null) {
+            addresses = getAddressesFromNameService(host, reqAddr);
+        }
+
+        if (addresses == unknown_array)
+            throw new UnknownHostException(host);
+
+        return addresses.clone();
+    }
+
+    private static InetAddress[] getAddressesFromNameService(String host, InetAddress reqAddr)
+        throws UnknownHostException
+    {
+        InetAddress[] addresses = null;
+        boolean success = false;
+        UnknownHostException ex = null;
+
+        // Check whether the host is in the lookupTable.
+        // 1) If the host isn't in the lookupTable when
+        //    checkLookupTable() is called, checkLookupTable()
+        //    would add the host in the lookupTable and
+        //    return null. So we will do the lookup.
+        // 2) If the host is in the lookupTable when
+        //    checkLookupTable() is called, the current thread
+        //    would be blocked until the host is removed
+        //    from the lookupTable. Then this thread
+        //    should try to look up the addressCache.
+        //     i) if it found the addresses in the
+        //        addressCache, checkLookupTable()  would
+        //        return the addresses.
+        //     ii) if it didn't find the addresses in the
+        //         addressCache for any reason,
+        //         it should add the host in the
+        //         lookupTable and return null so the
+        //         following code would do  a lookup itself.
+        if ((addresses = checkLookupTable(host)) == null) {
+            try {
+                // This is the first thread which looks up the addresses
+                // this host or the cache entry for this host has been
+                // expired so this thread should do the lookup.
+                for (NameService nameService : nameServices) {
+                    try {
+                        /*
+                         * Do not put the call to lookup() inside the
+                         * constructor.  if you do you will still be
+                         * allocating space when the lookup fails.
+                         *
+
+                        addresses = nameService.lookupAllHostAddr(host);
+                        success = true;
+                        break;
+                    } catch (UnknownHostException uhe) {
+                        if (host.equalsIgnoreCase("localhost")) {
+                            InetAddress[] local = new InetAddress[] { impl.loopbackAddress() };
+                            addresses = local;
+                            success = true;
+                            break;
+                        }
+                        else {
+                            addresses = unknown_array;
+                            success = false;
+                            ex = uhe;
+                        }
+                    }
+                }
+
+                // More to do?
+                if (reqAddr != null && addresses.length > 1 && !addresses[0].equals(reqAddr)) {
+                    // Find it?
+                    int i = 1;
+                    for (; i < addresses.length; i++) {
+                        if (addresses[i].equals(reqAddr)) {
+                            break;
+                        }
+                    }
+                    // Rotate
+                    if (i < addresses.length) {
+                        InetAddress tmp, tmp2 = reqAddr;
+                        for (int j = 0; j < i; j++) {
+                            tmp = addresses[j];
+                            addresses[j] = tmp2;
+                            tmp2 = tmp;
+                        }
+                        addresses[i] = tmp2;
+                    }
+                }
+                // Cache the address.
+                cacheAddresses(host, addresses, success);
+
+                if (!success && ex != null)
+                    throw ex;
+
+            } finally {
+                // Delete host from the lookupTable and notify
+                // all threads waiting on the lookupTable monitor.
+                updateLookupTable(host);
+            }
+        }
+
+        return addresses;
+    }
+
+
+    private static InetAddress[] checkLookupTable(String host) {
+        synchronized (lookupTable) {
+            // If the host isn't in the lookupTable, add it in the
+            // lookuptable and return null. The caller should do
+            // the lookup.
+            if (lookupTable.containsKey(host) == false) {
+                lookupTable.put(host, null);
+                return null;
+            }
+
+            // If the host is in the lookupTable, it means that another
+            // thread is trying to look up the addresses of this host.
+            // This thread should wait.
+            while (lookupTable.containsKey(host)) {
+                try {
+                    lookupTable.wait();
+                } catch (InterruptedException e) {
+                }
+            }
+        }
+
+        // The other thread has finished looking up the addresses of
+        // the host. This thread should retry to get the addresses
+        // from the addressCache. If it doesn't get the addresses from
+        // the cache, it will try to look up the addresses itself.
+        InetAddress[] addresses = getCachedAddresses(host);
+        if (addresses == null) {
+            synchronized (lookupTable) {
+                lookupTable.put(host, null);
+                return null;
+            }
+        }
+
+        return addresses;
+    }
+
+    private static void updateLookupTable(String host) {
+        synchronized (lookupTable) {
+            lookupTable.remove(host);
+            lookupTable.notifyAll();
+        }
+    }
+    */
+    // END Android-removed: Resolves a hostname using Libcore.os.
+
     /**
      * Returns an {@code InetAddress} object given the raw IP address .
      * The argument is in network byte order: the highest order
@@ -823,6 +1400,15 @@
         return getByAddress(null, addr);
     }
 
+    // BEGIN Android-removed: Resolves a hostname using Libcore.os.
+    /*
+    private static InetAddress cachedLocalHost = null;
+    private static long cacheTime = 0;
+    private static final long maxCacheTime = 5000L;
+    private static final Object cacheLock = new Object();
+    */
+    // END Android-removed: Resolves a hostname using Libcore.os.
+
     /**
      * Returns the address of the local host. This is achieved by retrieving
      * the name of the host from the system, then resolving that name into
@@ -847,10 +1433,68 @@
      * @see java.net.InetAddress#getByName(java.lang.String)
      */
     public static InetAddress getLocalHost() throws UnknownHostException {
+        // BEGIN Android-changed: Resolves a hostname using Libcore.os.
+        /*
+        SecurityManager security = System.getSecurityManager();
+        try {
+            String local = impl.getLocalHostName();
+
+            if (security != null) {
+                security.checkConnect(local, -1);
+            }
+
+            if (local.equals("localhost")) {
+                return impl.loopbackAddress();
+            }
+
+            InetAddress ret = null;
+            synchronized (cacheLock) {
+                long now = System.currentTimeMillis();
+                if (cachedLocalHost != null) {
+                    if ((now - cacheTime) < maxCacheTime) // Less than 5s old?
+                        ret = cachedLocalHost;
+                    else
+                        cachedLocalHost = null;
+                }
+
+                // we are calling getAddressesFromNameService directly
+                // to avoid getting localHost from cache
+                if (ret == null) {
+                    InetAddress[] localAddrs;
+                    try {
+                        localAddrs =
+                            InetAddress.getAddressesFromNameService(local, null);
+                    } catch (UnknownHostException uhe) {
+                        // Rethrow with a more informative error message.
+                        UnknownHostException uhe2 =
+                            new UnknownHostException(local + ": " +
+                                                     uhe.getMessage());
+                        uhe2.initCause(uhe);
+                        throw uhe2;
+                    }
+                    cachedLocalHost = localAddrs[0];
+                    cacheTime = now;
+                    ret = localAddrs[0];
+                }
+            }
+            return ret;
+        } catch (java.lang.SecurityException e) {
+            return impl.loopbackAddress();
+        }
+        */
         String local = Libcore.os.uname().nodename;
         return impl.lookupAllHostAddr(local, NETID_UNSET)[0];
+        // END Android-changed: Resolves a hostname using Libcore.os.
     }
 
+    // BEGIN Android-removed: Android doesn't need to call native init.
+    /**
+     * Perform class load-time initializations.
+     *
+    private static native void init();
+    */
+    // END Android-removed: Android doesn't need to call native init.
+
     /*
      * Returns the InetAddress representing anyLocalAddress
      * (typically 0.0.0.0 or ::0)
@@ -859,6 +1503,51 @@
         return impl.anyLocalAddress();
     }
 
+    // BEGIN Android-removed: Android doesn't load user-provided implementation.
+    /*
+     * Load and instantiate an underlying impl class
+     *
+    static InetAddressImpl loadImpl(String implName) {
+        Object impl = null;
+
+        /*
+         * Property "impl.prefix" will be prepended to the classname
+         * of the implementation object we instantiate, to which we
+         * delegate the real work (like native methods).  This
+         * property can vary across implementations of the java.
+         * classes.  The default is an empty String "".
+         *
+        String prefix = AccessController.doPrivileged(
+                      new GetPropertyAction("impl.prefix", ""));
+        try {
+            impl = Class.forName("java.net." + prefix + implName).newInstance();
+        } catch (ClassNotFoundException e) {
+            System.err.println("Class not found: java.net." + prefix +
+                               implName + ":\ncheck impl.prefix property " +
+                               "in your properties file.");
+        } catch (InstantiationException e) {
+            System.err.println("Could not instantiate: java.net." + prefix +
+                               implName + ":\ncheck impl.prefix property " +
+                               "in your properties file.");
+        } catch (IllegalAccessException e) {
+            System.err.println("Cannot access class: java.net." + prefix +
+                               implName + ":\ncheck impl.prefix property " +
+                               "in your properties file.");
+        }
+
+        if (impl == null) {
+            try {
+                impl = Class.forName(implName).newInstance();
+            } catch (Exception e) {
+                throw new Error("System property impl.prefix incorrect");
+            }
+        }
+
+        return (InetAddressImpl) impl;
+    }
+    */
+    // END Android-removed: Android doesn't load user-provided implementation.
+
     private void readObjectNoData (ObjectInputStream s) throws
                          IOException, ClassNotFoundException {
         // Android-changed: Don't use null to mean the boot classloader.
@@ -912,6 +1601,8 @@
 
     static final int NETID_UNSET = 0;
 
+    // BEGIN Android-added: Add methods required by frameworks/base.
+    // Particularly those required to deal with net-ids and scope ids.
     /**
      * Returns true if the string is a valid numeric IPv4 or IPv6 address (such as "192.168.0.1").
      * This copes with all forms of address that Java supports, detailed in the {@link InetAddress}
@@ -1007,6 +1698,7 @@
     public static InetAddress[] getAllByNameOnNet(String host, int netId) throws UnknownHostException {
         return impl.lookupAllHostAddr(host, netId).clone();
     }
+    // END Android-added: Add methods required by frameworks/base.
 
     // Only called by java.net.SocketPermission.
     static InetAddress[] getAllByName0(String authHost, boolean check) throws UnknownHostException {
@@ -1018,3 +1710,18 @@
         throw new UnsupportedOperationException();
     }
 }
+// BEGIN Android-removed: Android doesn't load user-provided implementation.
+/*
+ * Simple factory to create the impl
+ *
+class InetAddressImplFactory {
+
+    static InetAddressImpl create() {
+        return InetAddress.loadImpl(isIPv6Supported() ?
+                                    "Inet6AddressImpl" : "Inet4AddressImpl");
+    }
+
+    static native boolean isIPv6Supported();
+}
+*/
+// END Android-removed: Android doesn't load user-provided implementation.
diff --git a/ojluni/src/main/java/java/net/InetAddressImpl.java b/ojluni/src/main/java/java/net/InetAddressImpl.java
index e5821a3..a636c1e 100644
--- a/ojluni/src/main/java/java/net/InetAddressImpl.java
+++ b/ojluni/src/main/java/java/net/InetAddressImpl.java
@@ -35,6 +35,13 @@
  * @since 1.4
  */
 interface InetAddressImpl {
+
+    // BEGIN Android-changed: Rewrote hostname lookup methods on top of Libcore.os.
+    /*
+    String getLocalHostName() throws UnknownHostException;
+    InetAddress[]
+        lookupAllHostAddr(String hostname) throws UnknownHostException;
+     */
     /**
      * Lookup all addresses for {@code hostname} on the given {@code netId}.
      */
@@ -49,12 +56,15 @@
      * Clear address caches (if any).
      */
     public void clearAddressCache();
+    // END Android-changed: Rewrote hostname lookup methods on top of Libcore.os.
 
     /**
      * Return the "any" local address.
      */
     InetAddress anyLocalAddress();
 
+    // Android-changed: Let loopbackAddresses() return both Inet4 and Inet6 loopbacks.
+    // InetAddress loopbackAddress();
     /**
      * Return a list of loop back adresses for this implementation.
      */
diff --git a/ojluni/src/main/java/java/net/InetSocketAddress.java b/ojluni/src/main/java/java/net/InetSocketAddress.java
index 407c722..74b559b 100644
--- a/ojluni/src/main/java/java/net/InetSocketAddress.java
+++ b/ojluni/src/main/java/java/net/InetSocketAddress.java
@@ -151,6 +151,7 @@
         return hostname;
     }
 
+    // BEGIN Android-added: InetSocketAddress() ctor used by IoBridge.
     /**
      * @hide internal use only
      */
@@ -158,6 +159,7 @@
         // These will be filled in the native implementation of recvfrom.
         holder = new InetSocketAddressHolder(null, null, 0);
     }
+    // END Android-added: InetSocketAddress() ctor used by IoBridge.
 
     /**
      * Creates a socket address where the IP address is the wildcard address
@@ -172,7 +174,9 @@
      * range of valid port values.
      */
     public InetSocketAddress(int port) {
-      this((InetAddress)null, port);
+        // Android-changed: Defaults to IPv6.
+        // this(InetAddress.anyLocalAddress(), port);
+        this((InetAddress)null, port);
     }
 
     /**
@@ -193,7 +197,7 @@
     public InetSocketAddress(InetAddress addr, int port) {
         holder = new InetSocketAddressHolder(
                         null,
-                        // Android-changed: Return IPv4 address
+                        // Android-changed: Defaults to IPv6 if addr is null.
                         // addr == null ? InetAddress.anyLocalAddress() : addr,
                         addr == null ? Inet6Address.ANY : addr,
                         checkPort(port));
@@ -207,7 +211,7 @@
      * If that attempt fails, the address will be flagged as <I>unresolved</I>.
      * <p>
      * If there is a security manager, its {@code checkConnect} method
-     * is called with the host name as its argument to check the permissiom
+     * is called with the host name as its argument to check the permission
      * to resolve it. This could result in a SecurityException.
      * <P>
      * A valid port value is between 0 and 65535.
@@ -400,7 +404,7 @@
      * Two instances of {@code InetSocketAddress} represent the same
      * address if both the InetAddresses (or hostnames if it is unresolved) and port
      * numbers are equal.
-     * If both addresses are unresolved, then the hostname & the port number
+     * If both addresses are unresolved, then the hostname and the port number
      * are compared.
      *
      * Note: Hostnames are case insensitive. e.g. "FooBar" and "foobar" are
diff --git a/ojluni/src/main/java/java/net/InterfaceAddress.java b/ojluni/src/main/java/java/net/InterfaceAddress.java
index fbd0e48..85f9e58 100644
--- a/ojluni/src/main/java/java/net/InterfaceAddress.java
+++ b/ojluni/src/main/java/java/net/InterfaceAddress.java
@@ -46,6 +46,7 @@
     InterfaceAddress() {
     }
 
+    // BEGIN Android-added: Rewrote NetworkInterface on top of Libcore.io.
     InterfaceAddress(InetAddress address, Inet4Address broadcast, InetAddress netmask) {
         this.address = address;
         this.broadcast = broadcast;
@@ -65,6 +66,7 @@
         }
         return count;
     }
+    // END Android-added: Rewrote NetworkInterface on top of Libcore.io.
 
     /**
      * Returns an {@code InetAddress} for this address.
diff --git a/ojluni/src/main/java/java/net/MulticastSocket.java b/ojluni/src/main/java/java/net/MulticastSocket.java
index d4150a8..d14500a 100644
--- a/ojluni/src/main/java/java/net/MulticastSocket.java
+++ b/ojluni/src/main/java/java/net/MulticastSocket.java
@@ -567,6 +567,7 @@
      * @since 1.4
      */
     public NetworkInterface getNetworkInterface() throws SocketException {
+        // Android-changed: Support Integer IP_MULTICAST_IF2 values for app compat.
         Integer niIndex
             = (Integer)getImpl().getOption(SocketOptions.IP_MULTICAST_IF2);
         if (niIndex == 0) {
diff --git a/ojluni/src/main/java/java/net/NetworkInterface.java b/ojluni/src/main/java/java/net/NetworkInterface.java
index 216094a..e465d0b 100644
--- a/ojluni/src/main/java/java/net/NetworkInterface.java
+++ b/ojluni/src/main/java/java/net/NetworkInterface.java
@@ -45,6 +45,8 @@
 
 import static android.system.OsConstants.*;
 
+// Android-note: NetworkInterface has been rewritten to avoid native code.
+// Fix upstream bug not returning link-down interfaces. http://b/26238832
 /**
  * This class represents a Network Interface made up of a name,
  * and a list of IP addresses assigned to this interface.
@@ -61,14 +63,30 @@
     private int index;
     private InetAddress addrs[];
     private InterfaceAddress bindings[];
+    // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
+    // private NetworkInterface childs[];
     private List<NetworkInterface> childs;
     private NetworkInterface parent = null;
     private boolean virtual = false;
-    private byte[] hardwareAddr;
     private static final NetworkInterface defaultInterface;
     private static final int defaultIndex; /* index of defaultInterface */
 
+    // Android-changed: Fix upstream bug not returning link-down interfaces. http://b/26238832
+    private byte[] hardwareAddr;
+
     static {
+        // Android-removed: Android doesn't need to call native init.
+        /*
+        AccessController.doPrivileged(
+            new java.security.PrivilegedAction<Void>() {
+                public Void run() {
+                    System.loadLibrary("net");
+                    return null;
+                }
+            });
+
+        init();
+        */
         defaultInterface = DefaultInterface.getDefault();
         if (defaultInterface != null) {
             defaultIndex = defaultInterface.getIndex();
@@ -203,6 +221,7 @@
      * @since 1.6
      */
     public Enumeration<NetworkInterface> getSubInterfaces() {
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         return Collections.enumeration(childs);
     }
 
@@ -266,6 +285,7 @@
         if (name == null)
             throw new NullPointerException();
 
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         NetworkInterface[] nis = getAll();
         for (NetworkInterface ni : nis) {
             if (ni.getName().equals(name)) {
@@ -290,6 +310,7 @@
         if (index < 0)
             throw new IllegalArgumentException("Interface index can't be negative");
 
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         NetworkInterface[] nis = getAll();
         for (NetworkInterface ni : nis) {
             if (ni.getIndex() == index) {
@@ -329,6 +350,7 @@
             throw new IllegalArgumentException ("invalid address type");
         }
 
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         NetworkInterface[] nis = getAll();
         for (NetworkInterface ni : nis) {
             for (InetAddress inetAddress : Collections.list(ni.getInetAddresses())) {
@@ -357,6 +379,7 @@
         throws SocketException {
         final NetworkInterface[] netifs = getAll();
 
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         // specified to return null if no network interfaces
         if (netifs.length == 0)
             return null;
@@ -364,6 +387,9 @@
         return Collections.enumeration(Arrays.asList(netifs));
     }
 
+    // BEGIN Android-changed: Rewrote NetworkInterface on top of Libcore.io.
+    // private native static NetworkInterface[] getAll()
+    //    throws SocketException;
     private static NetworkInterface[] getAll() throws SocketException {
         // Group Ifaddrs by interface name.
         Map<String, List<StructIfaddrs>> inetMap = new HashMap<>();
@@ -439,6 +465,7 @@
 
         return nis.values().toArray(new NetworkInterface[nis.size()]);
     }
+    // END Android-changed: Rewrote NetworkInterface on top of Libcore.io.
 
     /**
      * Returns whether a network interface is up and running.
@@ -449,6 +476,7 @@
      */
 
     public boolean isUp() throws SocketException {
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         return (getFlags() & IFF_UP) != 0;
     }
 
@@ -461,6 +489,7 @@
      */
 
     public boolean isLoopback() throws SocketException {
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         return (getFlags() & IFF_LOOPBACK) != 0;
     }
 
@@ -476,6 +505,7 @@
      */
 
     public boolean isPointToPoint() throws SocketException {
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         return (getFlags() & IFF_POINTOPOINT) != 0;
     }
 
@@ -488,6 +518,7 @@
      */
 
     public boolean supportsMulticast() throws SocketException {
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
         return (getFlags() & IFF_MULTICAST) != 0;
     }
 
@@ -506,13 +537,21 @@
      * @since 1.6
      */
     public byte[] getHardwareAddress() throws SocketException {
-        // Android chage - do not use the cached address, fetch
-        // the object again. NI might not be valid anymore.
+        // BEGIN Android-changed: Fix upstream not returning link-down interfaces. http://b/26238832
+        /*
+        for (InetAddress addr : addrs) {
+            if (addr instanceof Inet4Address) {
+                return getMacAddr0(((Inet4Address)addr).getAddress(), name, index);
+            }
+        }
+        return getMacAddr0(null, name, index);
+         */
         NetworkInterface ni = getByName(name);
         if (ni == null) {
             throw new SocketException("NetworkInterface doesn't exist anymore");
         }
         return ni.hardwareAddr;
+        // END Android-changed: Fix upstream not returning link-down interfaces. http://b/26238832
     }
 
     /**
@@ -523,6 +562,8 @@
      * @since 1.6
      */
     public int getMTU() throws SocketException {
+        // Android-changed: Rewrote NetworkInterface on top of Libcore.io.
+        // return getMTU0(name, index);
         FileDescriptor fd = null;
         try {
             fd = Libcore.rawOs.socket(AF_INET, SOCK_DGRAM, 0);
@@ -553,6 +594,18 @@
         return virtual;
     }
 
+    // BEGIN Android-removed: Rewrote NetworkInterface on top of Libcore.io.
+    /*
+    private native static boolean isUp0(String name, int ind) throws SocketException;
+    private native static boolean isLoopback0(String name, int ind) throws SocketException;
+    private native static boolean supportsMulticast0(String name, int ind) throws SocketException;
+    private native static boolean isP2P0(String name, int ind) throws SocketException;
+    private native static byte[] getMacAddr0(byte[] inAddr, String name, int ind) throws SocketException;
+    private native static int getMTU0(String name, int ind) throws SocketException;
+    */
+    // END Android-removed: Rewrote NetworkInterface on top of Libcore.io.
+
+    // BEGIN Android-added: Rewrote NetworkInterface on top of Libcore.io.
     private int getFlags() throws SocketException {
         FileDescriptor fd = null;
         try {
@@ -566,6 +619,7 @@
             IoUtils.closeQuietly(fd);
         }
     }
+    // END Android-added: Rewrote NetworkInterface on top of Libcore.io.
 
     /**
      * Compares this object against the specified object.
@@ -639,6 +693,9 @@
         return result;
     }
 
+    // Android-removed: Android doesn't need to call native init.
+    // private static native void init();
+
     /**
      * Returns the default network interface of this system
      *
diff --git a/ojluni/src/main/java/java/net/PlainDatagramSocketImpl.java b/ojluni/src/main/java/java/net/PlainDatagramSocketImpl.java
index c6a44d5..d4b1f2c 100644
--- a/ojluni/src/main/java/java/net/PlainDatagramSocketImpl.java
+++ b/ojluni/src/main/java/java/net/PlainDatagramSocketImpl.java
@@ -95,6 +95,7 @@
         }
     }
 
+    // BEGIN Android-changed: Rewrote on top of Libcore.io.
     protected synchronized void bind0(int lport, InetAddress laddr) throws SocketException {
         if (isClosed()) {
             throw new SocketException("Socket closed");
@@ -245,6 +246,7 @@
             IoBridge.connect(fd, inetAddressUnspec, 0);
         } catch (SocketException ignored) { }
     }
+    // END Android-changed: Rewrote on top of Libcore.io.
 
     // Android-removed: JNI has been removed
     // /**
diff --git a/ojluni/src/main/java/java/net/PlainSocketImpl.java b/ojluni/src/main/java/java/net/PlainSocketImpl.java
index 656defc..f592398 100644
--- a/ojluni/src/main/java/java/net/PlainSocketImpl.java
+++ b/ojluni/src/main/java/java/net/PlainSocketImpl.java
@@ -61,6 +61,13 @@
 
 class PlainSocketImpl extends AbstractPlainSocketImpl
 {
+    // Android-removed: Android doesn't need to call native initProto.
+    /*
+    static {
+        initProto();
+    }
+    */
+
     /**
      * Constructs an empty instance.
      */
@@ -101,6 +108,7 @@
         return (T)flow;
     }
 
+    // BEGIN Android-changed: Rewrote on top of Libcore.io.
     protected void socketSetOption(int opt, Object val) throws SocketException {
         try {
             socketSetOption0(opt, val);
@@ -293,5 +301,6 @@
             throw errnoException.rethrowAsSocketException();
         }
     }
+    // END Android-changed: Rewrote on top of Libcore.io.
 
 }
diff --git a/ojluni/src/main/java/java/net/PortUnreachableException.java b/ojluni/src/main/java/java/net/PortUnreachableException.java
index c5dae1b..3e7558b 100644
--- a/ojluni/src/main/java/java/net/PortUnreachableException.java
+++ b/ojluni/src/main/java/java/net/PortUnreachableException.java
@@ -51,6 +51,7 @@
      */
     public PortUnreachableException() {}
 
+    // Android-added: PortUnreachableException ctor used by IoBridge.
     /** @hide */
     public PortUnreachableException(String msg, Throwable cause) {
         super(msg, cause);
diff --git a/ojluni/src/main/java/java/net/ProtocolException.java b/ojluni/src/main/java/java/net/ProtocolException.java
index e5e66f7..0368350 100644
--- a/ojluni/src/main/java/java/net/ProtocolException.java
+++ b/ojluni/src/main/java/java/net/ProtocolException.java
@@ -55,6 +55,7 @@
     public ProtocolException() {
     }
 
+    // Android-added: ProtocolException ctor used by frameworks.
     /** @hide */
     public ProtocolException(String msg, Throwable cause) {
         super(msg, cause);
diff --git a/ojluni/src/main/java/java/net/ServerSocket.java b/ojluni/src/main/java/java/net/ServerSocket.java
index 20ae95a..bb495e6 100644
--- a/ojluni/src/main/java/java/net/ServerSocket.java
+++ b/ojluni/src/main/java/java/net/ServerSocket.java
@@ -253,6 +253,7 @@
      * @since 1.4
      * @hide
      */
+    // Android-changed: Make ctor public and @hide, for internal use.
     public SocketImpl getImpl() throws SocketException {
         if (!created)
             createImpl();
@@ -446,8 +447,7 @@
     }
 
     /**
-     * Returns the address of the endpoint this socket is bound to, or
-     * {@code null} if it is not bound yet.
+     * Returns the address of the endpoint this socket is bound to.
      * <p>
      * If the socket was bound prior to being {@link #close closed},
      * then this method will continue to return the address of the endpoint
@@ -922,7 +922,7 @@
         /* Not implemented yet */
     }
 
-    // Android-added: for testing and internal use.
+    // Android-added: getFileDescriptor$(), for testing / internal use.
     /**
      * @hide internal use only
      */
diff --git a/ojluni/src/main/java/java/net/URLConnection.java b/ojluni/src/main/java/java/net/URLConnection.java
index b869c39..1de7b3c 100644
--- a/ojluni/src/main/java/java/net/URLConnection.java
+++ b/ojluni/src/main/java/java/net/URLConnection.java
@@ -288,6 +288,13 @@
     */
     private static FileNameMap fileNameMap;
 
+    // BEGIN Android-removed: Android has its own mime table.
+    /*
+     * @since 1.2.2
+     *
+    private static boolean fileNameMapLoaded = false;
+    */
+    // END Android-removed: Android has its own mime table.
     /**
      * Loads filename map (a mimetable) from a data file. It will
      * first try to load the user-specific table, defined
@@ -299,6 +306,7 @@
      * @see #setFileNameMap(java.net.FileNameMap)
      */
     public static synchronized FileNameMap getFileNameMap() {
+        // Android-changed: Android has its own mime table.
         if (fileNameMap == null) {
             fileNameMap = new DefaultFileNameMap();
         }
@@ -352,6 +360,7 @@
      */
     abstract public void connect() throws IOException;
 
+    // Android-changed: Add javadoc to specify Android's timeout behavior.
     /**
      * Sets a specified timeout value, in milliseconds, to be used
      * when opening a communications link to the resource referenced
@@ -659,7 +668,7 @@
      * Returns the key for the {@code n}<sup>th</sup> header field.
      * It returns {@code null} if there are fewer than {@code n+1} fields.
      *
-     * @param   n   an index, where n>=0
+     * @param   n   an index, where {@code n>=0}
      * @return  the key for the {@code n}<sup>th</sup> header field,
      *          or {@code null} if there are fewer than {@code n+1}
      *          fields.
@@ -677,7 +686,7 @@
      * {@link #getHeaderFieldKey(int) getHeaderFieldKey} method to iterate through all
      * the headers in the message.
      *
-     * @param   n   an index, where n>=0
+     * @param   n   an index, where {@code n>=0}
      * @return  the value of the {@code n}<sup>th</sup> header field
      *          or {@code null} if there are fewer than {@code n+1} fields
      * @see     java.net.URLConnection#getHeaderFieldKey(int)
@@ -1234,6 +1243,7 @@
     {
         String contentType = stripOffParameters(getContentType());
         ContentHandler handler = null;
+        // BEGIN Android-changed: App Compat. Android guesses content type from name and stream.
         if (contentType == null) {
             if ((contentType = guessContentTypeFromName(url.getFile())) == null) {
                 contentType = guessContentTypeFromStream(getInputStream());
@@ -1243,6 +1253,7 @@
         if (contentType == null) {
             return UnknownContentHandler.INSTANCE;
         }
+        // END Android-changed: App Compat. Android guesses content type from name and stream.
         try {
             handler = handlers.get(contentType);
             if (handler != null)
diff --git a/ojluni/src/main/java/java/net/URLDecoder.java b/ojluni/src/main/java/java/net/URLDecoder.java
index cdf0419..8b14eb8 100644
--- a/ojluni/src/main/java/java/net/URLDecoder.java
+++ b/ojluni/src/main/java/java/net/URLDecoder.java
@@ -67,7 +67,7 @@
  * <p>
  * There are two possible ways in which this decoder could deal with
  * illegal strings.  It could either leave illegal characters alone or
- * it could throw an {@code {@link java.lang.IllegalArgumentException}}.
+ * it could throw an {@link java.lang.IllegalArgumentException}.
  * Which approach the decoder takes is left to the
  * implementation.
  *
@@ -172,14 +172,15 @@
 
                     while ( ((i+2) < numChars) &&
                             (c=='%')) {
-                        // BEGIN Android-changed
+                        // BEGIN Android-changed: App compat. Forbid non-hex chars after '%'.
                         if (!isValidHexChar(s.charAt(i+1)) || !isValidHexChar(s.charAt(i+2))) {
                             throw new IllegalArgumentException("URLDecoder: Illegal hex characters in escape (%) pattern : "
                                     + s.substring(i, i + 3));
                         }
-                        // END Android-changed
+                        // END Android-changed: App compat. Forbid non-hex chars after '%'.
                         int v = Integer.parseInt(s.substring(i+1,i+3),16);
                         if (v < 0)
+                            // Android-changed: Improve error message by printing the string value.
                             throw new IllegalArgumentException("URLDecoder: Illegal hex characters in escape (%) pattern - negative value : "
                                     + s.substring(i, i + 3));
                         bytes[pos++] = (byte) v;
@@ -213,9 +214,9 @@
         return (needToChange? sb.toString() : s);
     }
 
-    // BEGIN Android-changed
+    // BEGIN Android-added: App compat. Forbid non-hex chars after '%'.
     private static boolean isValidHexChar(char c) {
         return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
     }
-    // END Android-changed
+    // END Android-added: App compat. Forbid non-hex chars after '%'.
 }
diff --git a/ojluni/src/main/java/java/net/URLStreamHandler.java b/ojluni/src/main/java/java/net/URLStreamHandler.java
index eac8a78..d5380c1 100644
--- a/ojluni/src/main/java/java/net/URLStreamHandler.java
+++ b/ojluni/src/main/java/java/net/URLStreamHandler.java
@@ -134,9 +134,9 @@
 
         boolean isRelPath = false;
         boolean queryOnly = false;
-        // BEGIN Android-changed
+        // BEGIN Android-changed: App compat
         boolean querySet = false;
-        // END Android-changed
+        // END Android-changed: App compat
 
 // FIX: should not assume query if opaque
         // Strip off the query part
@@ -148,22 +148,22 @@
                 if (limit > queryStart)
                     limit = queryStart;
                 spec = spec.substring(0, queryStart);
-                // BEGIN Android-changed
+                // BEGIN Android-changed: App compat
                 querySet = true;
-                // END Android-changed
+                // END Android-changed: App compat
             }
         }
 
         int i = 0;
         // Parse the authority part if any
-        // BEGIN Android-changed
+        // BEGIN Android-changed: App compat
         // boolean isUNCName = (start <= limit - 4) &&
         //                 (spec.charAt(start) == '/') &&
         //                 (spec.charAt(start + 1) == '/') &&
         //                 (spec.charAt(start + 2) == '/') &&
         //                 (spec.charAt(start + 3) == '/');
         boolean isUNCName = false;
-        // END Android-changed
+        // END Android-changed: App compat
         if (!isUNCName && (start <= limit - 2) && (spec.charAt(start) == '/') &&
             (spec.charAt(start + 1) == '/')) {
             start += 2;
@@ -226,7 +226,7 @@
                     if (ind >= 0) {
                         // port can be null according to RFC2396
                         if (host.length() > (ind + 1)) {
-                            // BEGIN Android-changed
+                            // BEGIN Android-changed: App compat
                             // port = Integer.parseInt(host.substring(ind + 1));
                             char firstPortChar = host.charAt(ind+1);
                             if (firstPortChar >= '0' && firstPortChar <= '9') {
@@ -235,7 +235,7 @@
                                 throw new IllegalArgumentException("invalid port: " +
                                                                    host.substring(ind + 1));
                             }
-                            // END Android-changed
+                            // END Android-changed: App compat
                         }
                         host = host.substring(0, ind);
                     }
@@ -248,16 +248,16 @@
                                                    port);
             start = i;
 
-            // BEGIN Android-changed
             // If the authority is defined then the path is defined by the
             // spec only; See RFC 2396 Section 5.2.4.
+            // BEGIN Android-changed: App compat
             // if (authority != null && authority.length() > 0)
             //   path = "";
             path = null;
             if (!querySet) {
                 query = null;
             }
-            // END Android-changed
+            // END Android-changed: App compat
         }
 
         if (host == null) {
@@ -282,14 +282,14 @@
                 path = seperator + spec.substring(start, limit);
             }
         }
-        // BEGIN Android-changed
+        // BEGIN Android-changed: App compat
         //else if (queryOnly && path != null) {
         //    int ind = path.lastIndexOf('/');
         //    if (ind < 0)
         //        ind = 0;
         //    path = path.substring(0, ind) + "/";
         //}
-        // END Android-changed
+        // END Android-changed: App compat
         if (path == null)
             path = "";
 
@@ -304,20 +304,22 @@
             // Remove embedded /../ if possible
             i = 0;
             while ((i = path.indexOf("/../", i)) >= 0) {
-                // BEGIN Android-changed
+                // BEGIN Android-changed: App compat
                 /*
                  * Trailing /../
                  */
                 if (i == 0) {
                     path = path.substring(i + 3);
                     i = 0;
-                // END Android-changed
+                // END Android-changed: App compat
                 /*
                  * A "/../" will cancel the previous segment and itself,
                  * unless that segment is a "/../" itself
                  * i.e. "/a/b/../c" becomes "/a/c"
                  * but "/../../a" should stay unchanged
                  */
+                // Android-changed: App compat
+                // if (i > 0 && (limit = path.lastIndexOf('/', i - 1)) >= 0 &&
                 } else if (i > 0 && (limit = path.lastIndexOf('/', i - 1)) >= 0 &&
                     (path.indexOf("/../", limit) != 0)) {
                     path = path.substring(0, limit) + path.substring(i + 3);
@@ -343,7 +345,7 @@
             if (path.endsWith("/."))
                 path = path.substring(0, path.length() -1);
 
-            // Remove trailing ?
+            // Android-changed: App compat: Remove trailing ?
             if (path.endsWith("?"))
                 path = path.substring(0, path.length() -1);
         }
@@ -374,6 +376,7 @@
      * @since 1.3
      */
     protected boolean equals(URL u1, URL u2) {
+        // Android-changed: Avoid network I/O
         return Objects.equals(u1.getRef(), u2.getRef()) &&
                Objects.equals(u1.getQuery(), u2.getQuery()) &&
                // sameFile compares the protocol, file, port & host components of
@@ -390,6 +393,7 @@
      * @since 1.3
      */
     protected int hashCode(URL u) {
+        // Android-changed: Avoid network I/O
         // Hash on the same set of fields that we compare in equals().
         return Objects.hash(
                 u.getRef(),
@@ -503,6 +507,8 @@
         if (u.getRef() != null)
             len += 1 + u.getRef().length();
 
+        // BEGIN Android-changed: Add a toExternalForm variant that optionally escapes illegal chars
+        // TODO: The variant has been removed. We can potentially revert the change
         StringBuilder result = new StringBuilder(len);
         result.append(u.getProtocol());
         result.append(":");
@@ -514,6 +520,7 @@
         if (fileAndQuery != null) {
             result.append(fileAndQuery);
         }
+        // END Android-changed: Add a toExternalForm variant that optionally escapes illegal chars
         if (u.getRef() != null) {
             result.append("#");
             result.append(u.getRef());
diff --git a/ojluni/src/main/java/java/text/Bidi.java b/ojluni/src/main/java/java/text/Bidi.java
index 21085f2..70e29aa 100644
--- a/ojluni/src/main/java/java/text/Bidi.java
+++ b/ojluni/src/main/java/java/text/Bidi.java
@@ -81,6 +81,13 @@
      */
     public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT = -1;
 
+    // Android-note: Upstream this class delegates to an internal implementation class BidiBase.
+    // For Android that is replaced with android.icu.text.Bidi. BidiBase and ICU Bidi work very
+    // similarly, but differ in some details like level of argument validation and how how exactly
+    // runs are counted. The majority of the changes in this file exist to allow for backwards
+    // compatibility with an earlier ICU4C based Bidi implementation.
+
+    // BEGIN Android-added: translateConstToIcu(int).
     private static int translateConstToIcu(int javaInt) {
         switch (javaInt) {
             case DIRECTION_DEFAULT_LEFT_TO_RIGHT:
@@ -96,8 +103,10 @@
                 return android.icu.text.Bidi.DIRECTION_LEFT_TO_RIGHT;
         }
     }
+    // END Android-added: translateConstToIcu(int).
 
-    private android.icu.text.Bidi bidiBase;
+    // Android-changed: use ICU Bidi class instead of BidiBase.
+    private final android.icu.text.Bidi bidiBase;
 
     /**
      * Create Bidi from the given paragraph of text and base direction.
@@ -108,8 +117,13 @@
      * Other values are reserved.
      */
     public Bidi(String paragraph, int flags) {
-        this((paragraph == null ? null : paragraph.toCharArray()), 0, null, 0,
-                (paragraph == null ? 0 : paragraph.length()), flags);
+        if (paragraph == null) {
+            throw new IllegalArgumentException("paragraph is null");
+        }
+
+        // Android-changed: use ICU Bidi class instead of BidiBase.
+        bidiBase = new android.icu.text.Bidi(paragraph.toCharArray(), 0, null, 0,
+                                             paragraph.length(), translateConstToIcu(flags));
     }
 
     /**
@@ -142,6 +156,7 @@
             throw new IllegalArgumentException("paragraph is null");
         }
 
+        // Android-changed: change from BidiBase to ICU Bidi class.
         this.bidiBase = new android.icu.text.Bidi(paragraph);
     }
 
@@ -180,10 +195,12 @@
                                                " for embeddings of length: " + text.length);
         }
 
+        // Android-changed: use ICU Bidi class instead of BidiBase.
         bidiBase = new android.icu.text.Bidi(text, textStart, embeddings, embStart,
                                              paragraphLength, translateConstToIcu(flags));
     }
 
+    // Android-added: private constructor based on ICU Bidi object.
     private Bidi(android.icu.text.Bidi bidiBase) {
         this.bidiBase = bidiBase;
     }
@@ -198,6 +215,7 @@
      * @return a {@code Bidi} object
      */
     public Bidi createLineBidi(int lineStart, int lineLimit) {
+        // BEGIN Android-changed: add explict argument checks and use ICU Bidi class.
         if (lineStart < 0 || lineLimit < 0 || lineStart > lineLimit || lineLimit > getLength()) {
             throw new IllegalArgumentException("Invalid ranges (start=" + lineStart + ", " +
                                                "limit=" + lineLimit + ", length=" + getLength() + ")");
@@ -214,6 +232,7 @@
          }
 
         return new Bidi(bidiBase.createLineBidi(lineStart, lineLimit));
+        // END Android-changed: add explict argument checks and use ICU Bidi class.
     }
 
     /**
@@ -276,11 +295,13 @@
      * @return the resolved level of the character at offset
      */
     public int getLevelAt(int offset) {
+        // BEGIN Android-changed: return base level on out of range offset argument.
         try {
             return bidiBase.getLevelAt(offset);
         } catch (IllegalArgumentException e) {
             return getBaseLevel();
         }
+        // END Android-changed: return base level on out of range offset argument.
     }
 
     /**
@@ -288,6 +309,7 @@
      * @return the number of level runs
      */
     public int getRunCount() {
+        // Android-changed: ICU treats the empty string as having 0 runs, we see it as 1 empty run.
         int runCount = bidiBase.countRuns();
         return (runCount == 0 ? 1 : runCount);
     }
@@ -298,11 +320,11 @@
      * @return the level of the run
      */
     public int getRunLevel(int run) {
-        // Paper over a the ICU4J behaviour of strictly enforcing run must be strictly less than
-        // the number of runs. Done to maintain compatibility with previous C implementation.
+        // Android-added: Tolerate calls with run == getRunCount() for backwards compatibility.
         if (run == getRunCount()) {
             return getBaseLevel();
         }
+        // Android-changed: ICU treats the empty string as having 0 runs, we see it as 1 empty run.
         return (bidiBase.countRuns() == 0 ? bidiBase.getBaseLevel() : bidiBase.getRunLevel(run));
     }
 
@@ -313,11 +335,11 @@
      * @return the start of the run
      */
     public int getRunStart(int run) {
-        // Paper over a the ICU4J behaviour of strictly enforcing run must be strictly less than
-        // the number of runs. Done to maintain compatibility with previous C implementation.
+        // Android-added: Tolerate calls with run == getRunCount() for backwards compatibility.
         if (run == getRunCount()) {
             return getBaseLevel();
         }
+        // Android-changed: ICU treats the empty string as having 0 runs, we see it as 1 empty run.
         return (bidiBase.countRuns() == 0 ? 0 : bidiBase.getRunStart(run));
     }
 
@@ -329,11 +351,11 @@
      * @return limit the limit of the run
      */
     public int getRunLimit(int run) {
-        // Paper over a the ICU4J behaviour of strictly enforcing run must be strictly less than
-        // the number of runs. Done to maintain compatibility with previous C implementation.
+        // Android-added: Tolerate calls with run == getRunCount() for backwards compatibility.
         if (run == getRunCount()) {
             return getBaseLevel();
         }
+        // Android-changed: ICU treats the empty string as having 0 runs, we see it as 1 empty run.
         return (bidiBase.countRuns() == 0 ? bidiBase.getLength() : bidiBase.getRunLimit(run));
     }
 
@@ -349,6 +371,7 @@
      * @return true if the range of characters requires bidi analysis
      */
     public static boolean requiresBidi(char[] text, int start, int limit) {
+        // Android-added: Check arguments to throw correct exception.
         if (0 > start || start > limit || limit > text.length) {
             throw new IllegalArgumentException("Value start " + start +
                                                " is out of range 0 to " + limit);
@@ -373,6 +396,7 @@
      * @param count the number of objects to reorder
      */
     public static void reorderVisually(byte[] levels, int levelStart, Object[] objects, int objectStart, int count) {
+        // BEGIN Android-added: Check arguments to throw correct exception.
         if (0 > levelStart || levels.length <= levelStart) {
             throw new IllegalArgumentException("Value levelStart " +
                       levelStart + " is out of range 0 to " +
@@ -388,6 +412,9 @@
                       levelStart + " is out of range 0 to " +
                       (objects.length - objectStart));
         }
+        // END Android-added: Check arguments to throw correct exception.
+
+        // Android-changed: use ICU Bidi class instead of BidiBase.
         android.icu.text.Bidi.reorderVisually(levels, levelStart, objects, objectStart, count);
     }
 
@@ -395,8 +422,10 @@
      * Display the bidi internal state, used in debugging.
      */
     public String toString() {
+        // Android-changed: construct String representation from ICU Bidi object values.
         return getClass().getName()
             + "[direction: " + bidiBase.getDirection() + " baseLevel: " + bidiBase.getBaseLevel()
             + " length: " + bidiBase.getLength() + " runs: " + bidiBase.getRunCount() + "]";
     }
+
 }
diff --git a/ojluni/src/main/java/java/text/BreakIterator.java b/ojluni/src/main/java/java/text/BreakIterator.java
index 6e7e053..e9adafa 100644
--- a/ojluni/src/main/java/java/text/BreakIterator.java
+++ b/ojluni/src/main/java/java/text/BreakIterator.java
@@ -424,6 +424,8 @@
      */
     public abstract void setText(CharacterIterator newText);
 
+    // Android-removed: Removed code related to BreakIteratorProvider support.
+
     /**
      * Returns a new <code>BreakIterator</code> instance
      * for <a href="BreakIterator.html#word">word breaks</a>
@@ -528,7 +530,9 @@
                 android.icu.text.BreakIterator.getSentenceInstance(locale));
     }
 
-    // Android-changed: Removed references to BreakIteratorProvider.
+    // Android-removed: Removed code related to BreakIteratorProvider support.
+
+    // Android-changed: Removed references to BreakIteratorProvider from JavaDoc.
     /**
      * Returns an array of all locales for which the
      * <code>get*Instance</code> methods of this class can return
diff --git a/ojluni/src/main/java/java/text/ChoiceFormat.java b/ojluni/src/main/java/java/text/ChoiceFormat.java
index 1ac8627..3baaa90 100644
--- a/ojluni/src/main/java/java/text/ChoiceFormat.java
+++ b/ojluni/src/main/java/java/text/ChoiceFormat.java
@@ -208,6 +208,7 @@
                     } else if (tempBuffer.equals("-\u221E")) {
                         startValue = Double.NEGATIVE_INFINITY;
                     } else {
+                        // Android-changed: avoid object instantiation followed by unboxing.
                         startValue = Double.parseDouble(segments[0].toString());
                     }
                 } catch (Exception e) {
@@ -349,6 +350,7 @@
         choiceFormats = Arrays.copyOf(formats, formats.length);
     }
 
+    // Android-changed: Clarify that calling setChoices() changes what is returned here.
     /**
      * @return a copy of the {@code double[]} array supplied to the constructor or the most recent
      * call to {@link #setChoices(double[], String[])}.
@@ -358,6 +360,7 @@
         return newLimits;
     }
 
+    // Android-changed: Clarify that calling setChoices() changes what is returned here.
     /**
      * @return a copy of the {@code String[]} array supplied to the constructor or the most recent
      * call to {@link #setChoices(double[], String[])}.
diff --git a/ojluni/src/main/java/java/text/CollationElementIterator.java b/ojluni/src/main/java/java/text/CollationElementIterator.java
index ad31f4a..fede747 100644
--- a/ojluni/src/main/java/java/text/CollationElementIterator.java
+++ b/ojluni/src/main/java/java/text/CollationElementIterator.java
@@ -107,10 +107,15 @@
      * Null order which indicates the end of string is reached by the
      * cursor.
      */
+    // Android-changed: use ICU CollationElementIterator constant.
     public final static int NULLORDER = android.icu.text.CollationElementIterator.NULLORDER;
 
+    // Android-removed: internal constructors.
+
+    // Android-added: ICU iterator to delegate to.
     private android.icu.text.CollationElementIterator icuIterator;
 
+   // Android-added: internal constructor taking an ICU CollationElementIterator.
     CollationElementIterator(android.icu.text.CollationElementIterator iterator) {
         icuIterator = iterator;
     }
@@ -121,6 +126,7 @@
      */
     public void reset()
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         icuIterator.reset();
     }
 
@@ -142,6 +148,7 @@
      */
     public int next()
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         return icuIterator.next();
     }
 
@@ -164,6 +171,7 @@
      */
     public int previous()
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         return icuIterator.previous();
     }
 
@@ -174,6 +182,7 @@
      */
     public final static int primaryOrder(int order)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         return android.icu.text.CollationElementIterator.primaryOrder(order);
     }
     /**
@@ -183,6 +192,7 @@
      */
     public final static short secondaryOrder(int order)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
        return (short) android.icu.text.CollationElementIterator.secondaryOrder(order);
     }
     /**
@@ -192,6 +202,7 @@
      */
     public final static short tertiaryOrder(int order)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         return (short) android.icu.text.CollationElementIterator.tertiaryOrder(order);
     }
 
@@ -213,6 +224,7 @@
     @SuppressWarnings("deprecation") // getBeginIndex, getEndIndex and setIndex are deprecated
     public void setOffset(int newOffset)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         icuIterator.setOffset(newOffset);
     }
 
@@ -232,9 +244,11 @@
      */
     public int getOffset()
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         return icuIterator.getOffset();
     }
 
+
     /**
      * Return the maximum length of any expansion sequences that end
      * with the specified comparison order.
@@ -245,6 +259,7 @@
      */
     public int getMaxExpansion(int order)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         return icuIterator.getMaxExpansion(order);
     }
 
@@ -256,6 +271,7 @@
      */
     public void setText(String source)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         icuIterator.setText(source);
     }
 
@@ -267,6 +283,9 @@
      */
     public void setText(CharacterIterator source)
     {
+        // Android-changed: delegate to ICU CollationElementIterator.
         icuIterator.setText(source);
     }
+
+    // Android-removed: private helper methods and fields.
 }
diff --git a/ojluni/src/main/java/java/text/Collator.java b/ojluni/src/main/java/java/text/Collator.java
index 01e7dc9..ca3a220 100644
--- a/ojluni/src/main/java/java/text/Collator.java
+++ b/ojluni/src/main/java/java/text/Collator.java
@@ -226,10 +226,9 @@
      * @see java.util.Locale
      * @see java.util.ResourceBundle
      */
-    public static synchronized
-    Collator getInstance(Locale desiredLocale)
+    // Android-changed: Switched to ICU.
+    public static synchronized Collator getInstance(Locale desiredLocale)
     {
-        // Android-changed: Switched to ICU.
         if (desiredLocale == null) {
             throw new NullPointerException("locale == null");
         }
@@ -302,6 +301,7 @@
      */
     public boolean equals(String source, String target)
     {
+        // Android-changed: remove use of unnecessary EQUAL constant.
         return (compare(source, target) == 0);
     }
 
@@ -400,6 +400,7 @@
         return ICU.getAvailableCollatorLocales();
     }
 
+    // BEGIN Android-added: conversion method for decompositionMode constants.
     private int decompositionMode_Java_ICU(int mode) {
         switch (mode) {
             case Collator.CANONICAL_DECOMPOSITION:
@@ -422,7 +423,9 @@
         }
         return javaMode;
     }
+    // END Android-added: conversion method for decompositionMode constants.
 
+    // Android-changed: improve documentation.
     /**
      * Returns a new collator with the same decomposition mode and
      * strength value as this collator.
@@ -484,9 +487,13 @@
         icuColl = android.icu.text.RuleBasedCollator.getInstance(Locale.getDefault());
     }
 
+    // Android-added: ICU Collator this delegates to.
     android.icu.text.Collator icuColl;
 
+    // Android-added: protected constructor taking a Collator.
     Collator(android.icu.text.Collator icuColl) {
         this.icuColl = icuColl;
     }
+
+    // Android-removed: Fields and constants.
 }
diff --git a/ojluni/src/main/java/java/text/DateFormatSymbols.java b/ojluni/src/main/java/java/text/DateFormatSymbols.java
index 96a966c..305f6f2 100644
--- a/ojluni/src/main/java/java/text/DateFormatSymbols.java
+++ b/ojluni/src/main/java/java/text/DateFormatSymbols.java
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2014 The Android Open Source Project
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,6 @@
 import java.util.Arrays;
 import java.util.Locale;
 import java.util.Objects;
-import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
@@ -142,6 +141,8 @@
         initializeData(locale);
     }
 
+    // Android-removed: unused private DateFormatSymbols(boolean) constructor.
+
     /**
      * Era strings. For example: "AD" and "BC".  An array of 2 strings,
      * indexed by <code>Calendar.BC</code> and <code>Calendar.AD</code>.
@@ -227,10 +228,8 @@
     /**
      * Unlocalized date-time pattern characters. For example: 'y', 'd', etc.
      * All locales use the same these unlocalized pattern characters.
-     *
-     * Pretend to support 'L' and 'c' for now. It's meant for standalone weekday and
-     * month names, but we just use the non-standalone versions for now.
      */
+    // Android-changed: Add 'c' (standalone day of week).
     static final String  patternChars = "GyMdkHmsSEDFwWahKzZYuXLc";
 
     static final int PATTERN_ERA                  =  0; // G
@@ -256,6 +255,7 @@
     static final int PATTERN_ISO_DAY_OF_WEEK      = 20; // u
     static final int PATTERN_ISO_ZONE             = 21; // X
     static final int PATTERN_MONTH_STANDALONE     = 22; // L
+    // Android-added: Constant for standalone day of week.
     static final int PATTERN_STANDALONE_DAY_OF_WEEK = 23; // c
 
     /**
@@ -281,6 +281,7 @@
     /* use serialVersionUID from JDK 1.1.4 for interoperability */
     static final long serialVersionUID = -5987973545549424702L;
 
+    // BEGIN Android-added: Android specific serialization code.
     // the internal serial version which says which version was written
     // - 0 (default) for version up to JDK 1.1.4
     // - 1 Android version that contains a whole bunch of new fields.
@@ -299,7 +300,9 @@
      * @since JDK1.1.4
      */
     private int serialVersionOnStream = currentSerialVersion;
+    // END Android-added: Android specific serialization code.
 
+    // BEGIN Android-added: Support for tiny and standalone field names.
     /**
      * Tiny month strings; "J", "F", "M" etc.
      *
@@ -355,6 +358,7 @@
      * @serial
      */
     private String[] tinyStandAloneWeekdays;
+    // END Android-added: Support for tiny and standalone field names.
 
     // Android-changed: Removed reference to DateFormatSymbolsProvider.
     /**
@@ -411,6 +415,8 @@
         return getCachedInstance(locale);
     }
 
+    // BEGIN Android-changed: Replace getProviderInstance() with getCachedInstance().
+    // Android removed support for DateFormatSymbolsProviders, but still caches DFS.
     /**
      * Returns a cached DateFormatSymbols if it's found in the
      * cache. Otherwise, this method returns a newly cached instance
@@ -418,10 +424,10 @@
      */
     private static DateFormatSymbols getCachedInstance(Locale locale) {
         SoftReference<DateFormatSymbols> ref = cachedInstances.get(locale);
-        DateFormatSymbols dfs = null;
+        DateFormatSymbols dfs;
         if (ref == null || (dfs = ref.get()) == null) {
             dfs = new DateFormatSymbols(locale);
-            ref = new SoftReference<DateFormatSymbols>(dfs);
+            ref = new SoftReference<>(dfs);
             SoftReference<DateFormatSymbols> x = cachedInstances.putIfAbsent(locale, ref);
             if (x != null) {
                 DateFormatSymbols y = x.get();
@@ -435,6 +441,7 @@
         }
         return dfs;
     }
+    // END Android-changed: Replace getProviderInstance() with getCachedInstance().
 
     /**
      * Gets era strings. For example: "AD" and "BC".
@@ -455,6 +462,17 @@
 
     /**
      * Gets month strings. For example: "January", "February", etc.
+     *
+     * <p>If the language requires different forms for formatting and
+     * stand-alone usages, this method returns month names in the
+     * formatting form. For example, the preferred month name for
+     * January in the Czech language is <em>ledna</em> in the
+     * formatting form, while it is <em>leden</em> in the stand-alone
+     * form. This method returns {@code "ledna"} in this case. Refer
+     * to the <a href="http://unicode.org/reports/tr35/#Calendar_Elements">
+     * Calendar Elements in the Unicode Locale Data Markup Language
+     * (LDML) specification</a> for more details.
+     *
      * @return the month strings.
      */
     public String[] getMonths() {
@@ -472,6 +490,17 @@
 
     /**
      * Gets short month strings. For example: "Jan", "Feb", etc.
+     *
+     * <p>If the language requires different forms for formatting and
+     * stand-alone usages, This method returns short month names in
+     * the formatting form. For example, the preferred abbreviation
+     * for January in the Catalan language is <em>de gen.</em> in the
+     * formatting form, while it is <em>gen.</em> in the stand-alone
+     * form. This method returns {@code "de gen."} in this case. Refer
+     * to the <a href="http://unicode.org/reports/tr35/#Calendar_Elements">
+     * Calendar Elements in the Unicode Locale Data Markup Language
+     * (LDML) specification</a> for more details.
+     *
      * @return the short month strings.
      */
     public String[] getShortMonths() {
@@ -648,6 +677,7 @@
         cachedHashCode = 0;
     }
 
+    // BEGIN Android-added: Support for tiny and standalone field names.
     String[] getTinyMonths() {
         return tinyMonths;
     }
@@ -679,6 +709,7 @@
     String[] getTinyStandAloneWeekdays() {
         return tinyStandAloneWeekdays;
     }
+    // END Android-added: Support for tiny and standalone field names.
 
     /**
      * Overrides Cloneable
@@ -727,6 +758,7 @@
         if (this == obj) return true;
         if (obj == null || getClass() != obj.getClass()) return false;
         DateFormatSymbols that = (DateFormatSymbols) obj;
+        // BEGIN Android-changed: Avoid populating zoneStrings just for the comparison, add fields.
         if (!(Arrays.equals(eras, that.eras)
                 && Arrays.equals(months, that.months)
                 && Arrays.equals(shortMonths, that.shortMonths)
@@ -747,11 +779,11 @@
                   && that.localPatternChars == null)))) {
             return false;
         }
-        // Android-changed: Avoid populating zoneStrings just for the comparison.
         if (!isZoneStringsSet && !that.isZoneStringsSet && Objects.equals(locale, that.locale)) {
             return true;
         }
         return Arrays.deepEquals(getZoneStringsWrapper(), that.getZoneStringsWrapper());
+        // END Android-changed: Avoid populating zoneStrings just for the comparison.
     }
 
     // =======================privates===============================
@@ -765,7 +797,7 @@
      * Cache to hold DateFormatSymbols instances per Locale.
      */
     private static final ConcurrentMap<Locale, SoftReference<DateFormatSymbols>> cachedInstances
-        = new ConcurrentHashMap<Locale, SoftReference<DateFormatSymbols>>(3);
+        = new ConcurrentHashMap<>(3);
 
     private transient int lastZoneIndex = 0;
 
@@ -774,35 +806,43 @@
      */
     transient volatile int cachedHashCode = 0;
 
-    private void initializeData(Locale desiredLocale) {
-        locale = desiredLocale;
-
-        // Copy values of a cached instance if any.
+    // Android-changed: update comment to describe local modification.
+    /**
+     * Initializes this DateFormatSymbols with the locale data. This method uses
+     * a cached DateFormatSymbols instance for the given locale if available. If
+     * there's no cached one, this method populates this objects fields from an
+     * appropriate LocaleData object. Note: zoneStrings isn't initialized in this method.
+     */
+    private void initializeData(Locale locale) {
         SoftReference<DateFormatSymbols> ref = cachedInstances.get(locale);
         DateFormatSymbols dfs;
+        // Android-changed: invert cache presence check to simplify code flow.
         if (ref != null && (dfs = ref.get()) != null) {
             copyMembers(dfs, this);
             return;
         }
+
+        // BEGIN Android-changed: Use ICU data and move cache handling to getCachedInstance().
         locale = LocaleData.mapInvalidAndNullLocales(locale);
         LocaleData localeData = LocaleData.get(locale);
 
+        this.locale = locale;
         eras = localeData.eras;
-
-        // Month names.
         months = localeData.longMonthNames;
         shortMonths = localeData.shortMonthNames;
-
         ampms = localeData.amPm;
         localPatternChars = patternChars;
 
-        // Weekdays.
         weekdays = localeData.longWeekdayNames;
         shortWeekdays = localeData.shortWeekdayNames;
 
         initializeSupplementaryData(localeData);
+        // END Android-changed: Use ICU data and move cache handling to getCachedInstance().
     }
 
+    // Android-removed: toOneBasedArray(String[])
+
+    // BEGIN Android-added: initializeSupplementaryData(LocaleData) for tiny and standalone fields.
     private void initializeSupplementaryData(LocaleData localeData) {
         // Tiny weekdays and months.
         tinyMonths = localeData.tinyMonthNames;
@@ -818,6 +858,7 @@
         shortStandAloneWeekdays = localeData.shortStandAloneWeekdayNames;
         tinyStandAloneWeekdays = localeData.tinyStandAloneWeekdayNames;
     }
+    // END Android-added: initializeSupplementaryData(LocaleData) for tiny and standalone fields.
 
     /**
      * Package private: used by SimpleDateFormat
@@ -866,14 +907,14 @@
     }
 
     // BEGIN Android-changed: extract initialization of zoneStrings to separate method.
-    private final synchronized String[][] internalZoneStrings() {
+    private synchronized String[][] internalZoneStrings() {
         if (zoneStrings == null) {
             zoneStrings = TimeZoneNames.getZoneStrings(locale);
         }
         return zoneStrings;
     }
 
-    private final String[][] getZoneStringsImpl(boolean needsCopy) {
+    private String[][] getZoneStringsImpl(boolean needsCopy) {
         String[][] zoneStrings = internalZoneStrings();
         // END Android-changed: extract initialization of zoneStrings to separate method.
 
@@ -895,12 +936,14 @@
 
     /**
      * Clones all the data members from the source DateFormatSymbols to
-     * the target DateFormatSymbols. This is only for subclasses.
+     * the target DateFormatSymbols.
+     *
      * @param src the source DateFormatSymbols.
      * @param dst the target DateFormatSymbols.
      */
     private void copyMembers(DateFormatSymbols src, DateFormatSymbols dst)
     {
+        dst.locale = src.locale;
         dst.eras = Arrays.copyOf(src.eras, src.eras.length);
         dst.months = Arrays.copyOf(src.months, src.months.length);
         dst.shortMonths = Arrays.copyOf(src.shortMonths, src.shortMonths.length);
@@ -915,6 +958,7 @@
         dst.localPatternChars = src.localPatternChars;
         dst.cachedHashCode = 0;
 
+        // BEGIN Android-added: Support for tiny and standalone field names.
         dst.tinyMonths = src.tinyMonths;
         dst.tinyWeekdays = src.tinyWeekdays;
 
@@ -925,8 +969,10 @@
         dst.standAloneWeekdays = src.standAloneWeekdays;
         dst.shortStandAloneWeekdays = src.shortStandAloneWeekdays;
         dst.tinyStandAloneWeekdays = src.tinyStandAloneWeekdays;
+        // END Android-added: Support for tiny and standalone field names.
     }
 
+    // BEGIN Android-added: support reading non-Android serialized DFS.
     private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
         stream.defaultReadObject();
 
@@ -937,6 +983,7 @@
 
         serialVersionOnStream = currentSerialVersion;
     }
+    // END Android-added: support reading non-Android serialized DFS.
 
     /**
      * Write out the default serializable data, after ensuring the
diff --git a/ojluni/src/main/java/java/text/DecimalFormat.java b/ojluni/src/main/java/java/text/DecimalFormat.java
index 17d5d41..d2e8530 100644
--- a/ojluni/src/main/java/java/text/DecimalFormat.java
+++ b/ojluni/src/main/java/java/text/DecimalFormat.java
@@ -381,6 +381,12 @@
  */
 public class DecimalFormat extends NumberFormat {
 
+    // Android-note: This class is heavily modified from upstream OpenJDK.
+    // Android's version delegates most of its work to android.icu.text.DecimalFormat. This is done
+    // to avoid code duplication and to stay compatible with earlier releases that used ICU4C/ICU4J
+    // to implement DecimalFormat.
+
+    // Android-added: ICU DecimalFormat to delegate to.
     private transient android.icu.text.DecimalFormat icuDecimalFormat;
 
     /**
@@ -402,6 +408,7 @@
     public DecimalFormat() {
         // Get the pattern for the default locale.
         Locale def = Locale.getDefault(Locale.Category.FORMAT);
+        // BEGIN Android-changed: Use ICU LocaleData.
         // try to get the pattern from the cache
         String pattern = cachedLocaleData.get(def);
         if (pattern == null) {  /* cache miss */
@@ -410,8 +417,11 @@
             /* update cache */
             cachedLocaleData.putIfAbsent(def, pattern);
         }
-        this.symbols = new DecimalFormatSymbols(def);
-        init(pattern);
+        // END Android-changed: Use ICU LocaleData.
+        // Always applyPattern after the symbols are set
+        this.symbols = DecimalFormatSymbols.getInstance(def);
+        // Android-changed: use initPattern() instead of removed applyPattern(String, boolean).
+        initPattern(pattern);
     }
 
 
@@ -435,8 +445,10 @@
      * @see java.text.NumberFormat#getPercentInstance
      */
     public DecimalFormat(String pattern) {
-        this.symbols = new DecimalFormatSymbols(Locale.getDefault(Locale.Category.FORMAT));
-        init(pattern);
+        // Always applyPattern after the symbols are set
+        this.symbols = DecimalFormatSymbols.getInstance(Locale.getDefault(Locale.Category.FORMAT));
+        // Android-changed: use initPattern() instead of removed applyPattern(String, boolean).
+        initPattern(pattern);
     }
 
 
@@ -464,45 +476,69 @@
     public DecimalFormat (String pattern, DecimalFormatSymbols symbols) {
         // Always applyPattern after the symbols are set
         this.symbols = (DecimalFormatSymbols)symbols.clone();
-        init(pattern);
+        // Android-changed: use initPattern() instead of removed applyPattern(String, boolean).
+        initPattern(pattern);
     }
 
-    private void init(String pattern) {
+    // BEGIN Android-added: initPattern() and conversion methods between ICU and Java values.
+    /**
+     * Applies the pattern similarly to {@link #applyPattern(String)}, except it initializes
+     * {@link #icuDecimalFormat} in the process. This should only be called from constructors.
+     */
+    private void initPattern(String pattern) {
         this.icuDecimalFormat =  new android.icu.text.DecimalFormat(pattern,
                 symbols.getIcuDecimalFormatSymbols());
         updateFieldsFromIcu();
     }
 
     /**
+     * Update local fields indicating maximum/minimum integer/fraction digit count from the ICU
+     * DecimalFormat. This needs to be called whenever a new pattern is applied.
+     */
+    private void updateFieldsFromIcu() {
+        // Imitate behaviour of ICU4C NumberFormat that Android used up to M.
+        // If the pattern doesn't enforce a different value (some exponential
+        // patterns do), then set the maximum integer digits to 2 billion.
+        if (icuDecimalFormat.getMaximumIntegerDigits() == DOUBLE_INTEGER_DIGITS) {
+            icuDecimalFormat.setMaximumIntegerDigits(2000000000);
+        }
+        maximumIntegerDigits = icuDecimalFormat.getMaximumIntegerDigits();
+        minimumIntegerDigits = icuDecimalFormat.getMinimumIntegerDigits();
+        maximumFractionDigits = icuDecimalFormat.getMaximumFractionDigits();
+        minimumFractionDigits = icuDecimalFormat.getMinimumFractionDigits();
+    }
+
+    /**
      * Converts between field positions used by Java/ICU.
      * @param fp The java.text.NumberFormat.Field field position
      * @return The android.icu.text.NumberFormat.Field field position
      */
     private static FieldPosition getIcuFieldPosition(FieldPosition fp) {
-        if (fp.getFieldAttribute() == null) return fp;
+        Format.Field fieldAttribute = fp.getFieldAttribute();
+        if (fieldAttribute == null) return fp;
 
         android.icu.text.NumberFormat.Field attribute;
-        if (fp.getFieldAttribute() == Field.INTEGER) {
+        if (fieldAttribute == Field.INTEGER) {
             attribute = android.icu.text.NumberFormat.Field.INTEGER;
-        } else if (fp.getFieldAttribute() == Field.FRACTION) {
+        } else if (fieldAttribute == Field.FRACTION) {
             attribute = android.icu.text.NumberFormat.Field.FRACTION;
-        } else if (fp.getFieldAttribute() == Field.DECIMAL_SEPARATOR) {
+        } else if (fieldAttribute == Field.DECIMAL_SEPARATOR) {
             attribute = android.icu.text.NumberFormat.Field.DECIMAL_SEPARATOR;
-        } else if (fp.getFieldAttribute() == Field.EXPONENT_SYMBOL) {
+        } else if (fieldAttribute == Field.EXPONENT_SYMBOL) {
             attribute = android.icu.text.NumberFormat.Field.EXPONENT_SYMBOL;
-        } else if (fp.getFieldAttribute() == Field.EXPONENT_SIGN) {
+        } else if (fieldAttribute == Field.EXPONENT_SIGN) {
             attribute = android.icu.text.NumberFormat.Field.EXPONENT_SIGN;
-        } else if (fp.getFieldAttribute() == Field.EXPONENT) {
+        } else if (fieldAttribute == Field.EXPONENT) {
             attribute = android.icu.text.NumberFormat.Field.EXPONENT;
-        } else if (fp.getFieldAttribute() == Field.GROUPING_SEPARATOR) {
+        } else if (fieldAttribute == Field.GROUPING_SEPARATOR) {
             attribute = android.icu.text.NumberFormat.Field.GROUPING_SEPARATOR;
-        } else if (fp.getFieldAttribute() == Field.CURRENCY) {
+        } else if (fieldAttribute == Field.CURRENCY) {
             attribute = android.icu.text.NumberFormat.Field.CURRENCY;
-        } else if (fp.getFieldAttribute() == Field.PERCENT) {
+        } else if (fieldAttribute == Field.PERCENT) {
             attribute = android.icu.text.NumberFormat.Field.PERCENT;
-        } else if (fp.getFieldAttribute() == Field.PERMILLE) {
+        } else if (fieldAttribute == Field.PERMILLE) {
             attribute = android.icu.text.NumberFormat.Field.PERMILLE;
-        } else if (fp.getFieldAttribute() == Field.SIGN) {
+        } else if (fieldAttribute == Field.SIGN) {
             attribute = android.icu.text.NumberFormat.Field.SIGN;
         } else {
             throw new IllegalArgumentException("Unexpected field position attribute type.");
@@ -521,41 +557,43 @@
      * @return Field converted to a java.text.NumberFormat.Field field.
      */
     private static Field toJavaFieldAttribute(AttributedCharacterIterator.Attribute icuAttribute) {
-        if (icuAttribute.getName().equals(Field.INTEGER.getName())) {
+        String name = icuAttribute.getName();
+        if (name.equals(Field.INTEGER.getName())) {
             return Field.INTEGER;
         }
-        if (icuAttribute.getName().equals(Field.CURRENCY.getName())) {
+        if (name.equals(Field.CURRENCY.getName())) {
             return Field.CURRENCY;
         }
-        if (icuAttribute.getName().equals(Field.DECIMAL_SEPARATOR.getName())) {
+        if (name.equals(Field.DECIMAL_SEPARATOR.getName())) {
             return Field.DECIMAL_SEPARATOR;
         }
-        if (icuAttribute.getName().equals(Field.EXPONENT.getName())) {
+        if (name.equals(Field.EXPONENT.getName())) {
             return Field.EXPONENT;
         }
-        if (icuAttribute.getName().equals(Field.EXPONENT_SIGN.getName())) {
+        if (name.equals(Field.EXPONENT_SIGN.getName())) {
             return Field.EXPONENT_SIGN;
         }
-        if (icuAttribute.getName().equals(Field.EXPONENT_SYMBOL.getName())) {
+        if (name.equals(Field.EXPONENT_SYMBOL.getName())) {
             return Field.EXPONENT_SYMBOL;
         }
-        if (icuAttribute.getName().equals(Field.FRACTION.getName())) {
+        if (name.equals(Field.FRACTION.getName())) {
             return Field.FRACTION;
         }
-        if (icuAttribute.getName().equals(Field.GROUPING_SEPARATOR.getName())) {
+        if (name.equals(Field.GROUPING_SEPARATOR.getName())) {
             return Field.GROUPING_SEPARATOR;
         }
-        if (icuAttribute.getName().equals(Field.SIGN.getName())) {
+        if (name.equals(Field.SIGN.getName())) {
             return Field.SIGN;
         }
-        if (icuAttribute.getName().equals(Field.PERCENT.getName())) {
+        if (name.equals(Field.PERCENT.getName())) {
             return Field.PERCENT;
         }
-        if (icuAttribute.getName().equals(Field.PERMILLE.getName())) {
+        if (name.equals(Field.PERMILLE.getName())) {
             return Field.PERMILLE;
         }
-        throw new IllegalArgumentException("Unrecognized attribute: " + icuAttribute.getName());
-   }
+        throw new IllegalArgumentException("Unrecognized attribute: " + name);
+    }
+    // END Android-added: initPattern() and conversion methods between ICU and Java values.
 
     // Overrides
     /**
@@ -614,13 +652,17 @@
     @Override
     public StringBuffer format(double number, StringBuffer result,
                                FieldPosition fieldPosition) {
+        // BEGIN Android-changed: Use ICU.
         FieldPosition icuFieldPosition = getIcuFieldPosition(fieldPosition);
         icuDecimalFormat.format(number, result, icuFieldPosition);
         fieldPosition.setBeginIndex(icuFieldPosition.getBeginIndex());
         fieldPosition.setEndIndex(icuFieldPosition.getEndIndex());
         return result;
+        // END Android-changed: Use ICU.
     }
 
+    // Android-removed: private StringBuffer format(double, StringBuffer, FieldDelegate).
+
     /**
      * Format a long to produce a string.
      * @param number    The long to format
@@ -635,13 +677,17 @@
     @Override
     public StringBuffer format(long number, StringBuffer result,
                                FieldPosition fieldPosition) {
+        // BEGIN Android-changed: Use ICU.
         FieldPosition icuFieldPosition = getIcuFieldPosition(fieldPosition);
         icuDecimalFormat.format(number, result, icuFieldPosition);
         fieldPosition.setBeginIndex(icuFieldPosition.getBeginIndex());
         fieldPosition.setEndIndex(icuFieldPosition.getEndIndex());
         return result;
+        // END Android-changed: Use ICU.
     }
 
+    // Android-removed: private StringBuffer format(long, StringBuffer, FieldDelegate).
+
     /**
      * Formats a BigDecimal to produce a string.
      * @param number    The BigDecimal to format
@@ -655,13 +701,17 @@
      */
     private StringBuffer format(BigDecimal number, StringBuffer result,
                                 FieldPosition fieldPosition) {
+        // BEGIN Android-changed: Use ICU.
         FieldPosition icuFieldPosition = getIcuFieldPosition(fieldPosition);
         icuDecimalFormat.format(number, result, fieldPosition);
         fieldPosition.setBeginIndex(icuFieldPosition.getBeginIndex());
         fieldPosition.setEndIndex(icuFieldPosition.getEndIndex());
         return result;
+        // END Android-changed: Use ICU.
     }
 
+    // Android-removed: private StringBuffer format(BigDecimal, StringBuffer, FieldDelegate).
+
     /**
      * Format a BigInteger to produce a string.
      * @param number    The BigInteger to format
@@ -675,13 +725,17 @@
      */
     private StringBuffer format(BigInteger number, StringBuffer result,
                                FieldPosition fieldPosition) {
+        // BEGIN Android-changed: Use ICU.
         FieldPosition icuFieldPosition = getIcuFieldPosition(fieldPosition);
         icuDecimalFormat.format(number, result, fieldPosition);
         fieldPosition.setBeginIndex(icuFieldPosition.getBeginIndex());
         fieldPosition.setEndIndex(icuFieldPosition.getEndIndex());
         return result;
+        // END Android-changed: Use ICU.
     }
 
+    // Android-removed: private StringBuffer format(BigInteger, StringBuffer, FieldDelegate).
+
     /**
      * Formats an Object producing an <code>AttributedCharacterIterator</code>.
      * You can use the returned <code>AttributedCharacterIterator</code>
@@ -703,6 +757,7 @@
      */
     @Override
     public AttributedCharacterIterator formatToCharacterIterator(Object obj) {
+        // BEGIN Android-changed: Use ICU.
         if (obj == null) {
             throw new NullPointerException("object == null");
         }
@@ -736,8 +791,13 @@
         }
 
         return result.getIterator();
+        // END Android-changed: Use ICU.
     }
 
+    // Android-removed: "fast-path formating logic for double" (sic).
+
+    // Android-removed: subformat(), append().
+
     /**
      * Parses text from a string to produce a <code>Number</code>.
      * <p>
@@ -796,6 +856,7 @@
      */
     @Override
     public Number parse(String text, ParsePosition pos) {
+        // BEGIN Android-changed: Use ICU.
         // Return early if the parse position is bogus.
         if (pos.index < 0 || pos.index >= text.length()) {
             return null;
@@ -829,8 +890,11 @@
             return 0L;
         }
         return number;
+        // END Android-changed: Use ICU.
     }
 
+    // Android-removed: STATUS_* constants, multiplier fields and methods and subparse(String, ...).
+
     /**
      * Returns a copy of the decimal format symbols, which is generally not
      * changed by the programmer or user.
@@ -838,6 +902,7 @@
      * @see java.text.DecimalFormatSymbols
      */
     public DecimalFormatSymbols getDecimalFormatSymbols() {
+        // Android-changed: Use ICU.
         return DecimalFormatSymbols.fromIcuInstance(icuDecimalFormat.getDecimalFormatSymbols());
     }
 
@@ -852,6 +917,7 @@
         try {
             // don't allow multiple references
             symbols = (DecimalFormatSymbols) newSymbols.clone();
+            // Android-changed: Use ICU.
             icuDecimalFormat.setDecimalFormatSymbols(symbols.getIcuDecimalFormatSymbols());
         } catch (Exception foo) {
             // should never happen
@@ -865,6 +931,7 @@
      * @return the positive prefix
      */
     public String getPositivePrefix () {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.getPositivePrefix();
     }
 
@@ -875,9 +942,12 @@
      * @param newValue the new positive prefix
      */
     public void setPositivePrefix (String newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setPositivePrefix(newValue);
     }
 
+    // Android-removed: private helper getPositivePrefixFieldPositions().
+
     /**
      * Get the  prefix.
      * <P>Examples: -123, ($123) (with negative suffix), sFr-123
@@ -885,6 +955,7 @@
      * @return the negative prefix
      */
     public String getNegativePrefix () {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.getNegativePrefix();
     }
 
@@ -895,9 +966,12 @@
      * @param newValue the new negative prefix
      */
     public void setNegativePrefix (String newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setNegativePrefix(newValue);
     }
 
+    // Android-removed: private helper getNegativePrefixFieldPositions().
+
     /**
      * Get the positive suffix.
      * <P>Example: 123%
@@ -905,6 +979,7 @@
      * @return the positive suffix
      */
     public String getPositiveSuffix () {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.getPositiveSuffix();
     }
 
@@ -915,9 +990,12 @@
      * @param newValue the new positive suffix
      */
     public void setPositiveSuffix (String newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setPositiveSuffix(newValue);
     }
 
+    // Android-removed: private helper getPositiveSuffixFieldPositions().
+
     /**
      * Get the negative suffix.
      * <P>Examples: -123%, ($123) (with positive suffixes)
@@ -925,6 +1003,7 @@
      * @return the negative suffix
      */
     public String getNegativeSuffix () {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.getNegativeSuffix();
     }
 
@@ -935,9 +1014,12 @@
      * @param newValue the new negative suffix
      */
     public void setNegativeSuffix (String newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setNegativeSuffix(newValue);
     }
 
+    // Android-removed: private helper getNegativeSuffixFieldPositions().
+
     /**
      * Gets the multiplier for use in percent, per mille, and similar
      * formats.
@@ -946,6 +1028,7 @@
      * @see #setMultiplier(int)
      */
     public int getMultiplier () {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.getMultiplier();
     }
 
@@ -968,6 +1051,27 @@
     }
 
     /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setGroupingUsed(boolean newValue) {
+        // Android-changed: Use ICU.
+        icuDecimalFormat.setGroupingUsed(newValue);
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
+    }
+
+    // BEGIN Android-added: isGroupingUsed() override delegating to ICU.
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public boolean isGroupingUsed() {
+        return icuDecimalFormat.isGroupingUsed();
+    }
+    // END Android-added: isGroupingUsed() override delegating to ICU.
+
+    /**
      * Return the grouping size. Grouping size is the number of digits between
      * grouping separators in the integer portion of a number.  For example,
      * in the number "123,456.78", the grouping size is 3.
@@ -978,6 +1082,7 @@
      * @see java.text.DecimalFormatSymbols#getGroupingSeparator
      */
     public int getGroupingSize () {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.getGroupingSize();
     }
 
@@ -994,26 +1099,10 @@
      * @see java.text.DecimalFormatSymbols#setGroupingSeparator
      */
     public void setGroupingSize (int newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setGroupingSize(newValue);
-    }
-
-    /**
-     * Returns true if grouping is used in this format. For example, in the
-     * English locale, with grouping on, the number 1234567 might be formatted
-     * as "1,234,567". The grouping separator as well as the size of each group
-     * is locale dependant and is determined by sub-classes of NumberFormat.
-     * @see #setGroupingUsed
-     */
-    public boolean isGroupingUsed() {
-        return icuDecimalFormat.isGroupingUsed();
-    }
-
-    /**
-     * Set whether or not grouping will be used in this format.
-     * @see #isGroupingUsed
-     */
-    public void setGroupingUsed(boolean newValue) {
-        icuDecimalFormat.setGroupingUsed(newValue);
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
     /**
@@ -1025,6 +1114,7 @@
      *         {@code false} otherwise
      */
     public boolean isDecimalSeparatorAlwaysShown() {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.isDecimalSeparatorAlwaysShown();
     }
 
@@ -1037,6 +1127,7 @@
      *                 {@code false} otherwise
      */
     public void setDecimalSeparatorAlwaysShown(boolean newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setDecimalSeparatorAlwaysShown(newValue);
     }
 
@@ -1050,6 +1141,7 @@
      * @since 1.5
      */
     public boolean isParseBigDecimal() {
+        // Android-changed: Use ICU.
         return icuDecimalFormat.isParseBigDecimal();
     }
 
@@ -1063,35 +1155,35 @@
      * @since 1.5
      */
     public void setParseBigDecimal(boolean newValue) {
+        // Android-changed: Use ICU.
         icuDecimalFormat.setParseBigDecimal(newValue);
     }
 
+    // BEGIN Android-added: setParseIntegerOnly()/isParseIntegerOnly() overrides delegating to ICU.
     /**
-     * Sets whether or not numbers should be parsed as integers only.
-     * @see #isParseIntegerOnly
+     * {@inheritDoc}
      */
+    @Override
+    public boolean isParseIntegerOnly() {
+        return icuDecimalFormat.isParseIntegerOnly();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
     public void setParseIntegerOnly(boolean value) {
         super.setParseIntegerOnly(value);
         icuDecimalFormat.setParseIntegerOnly(value);
     }
-
-    /**
-     * 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.  Of course, the exact format accepted
-     * by the parse operation is locale dependant and determined by sub-classes
-     * of NumberFormat.
-     */
-    public boolean isParseIntegerOnly() {
-        return icuDecimalFormat.isParseIntegerOnly();
-    }
+    // END Android-added: setParseIntegerOnly()/isParseIntegerOnly() overrides delegating to ICU.
 
     /**
      * Standard override; no change in semantics.
      */
     @Override
     public Object clone() {
+        // BEGIN Android-changed: Use ICU, remove fast path related code.
         try {
             DecimalFormat other = (DecimalFormat) super.clone();
             other.icuDecimalFormat = (android.icu.text.DecimalFormat) icuDecimalFormat.clone();
@@ -1100,8 +1192,10 @@
         } catch (Exception e) {
             throw new InternalError();
         }
+        // END Android-changed: Use ICU, remove fast path related code.
     }
 
+    // BEGIN Android-changed: re-implement equals() using ICU fields.
     /**
      * Overrides equals
      */
@@ -1130,12 +1224,14 @@
         }
         return other.getRoundingIncrement() == null;
     }
+    // END Android-changed: re-implement equals() using ICU fields.
 
     /**
      * Overrides hashCode
      */
     @Override
     public int hashCode() {
+        // Android-changed: use getPositivePrefix() instead of positivePrefix field.
         return super.hashCode() * 37 + getPositivePrefix().hashCode();
         // just enough fields for a reasonable distribution
     }
@@ -1148,6 +1244,7 @@
      * @see #applyPattern
      */
     public String toPattern() {
+        // Android-changed: use ICU.
         return icuDecimalFormat.toPattern();
     }
 
@@ -1159,9 +1256,12 @@
      * @see #applyPattern
      */
     public String toLocalizedPattern() {
+        // Android-changed: use ICU.
         return icuDecimalFormat.toLocalizedPattern();
     }
 
+    // Android-removed: private helper methods expandAffixes(), expandAffix(), toPattern(boolean).
+
     /**
      * Apply the given pattern to this Format object.  A pattern is a
      * short-hand specification for the various formatting properties.
@@ -1185,11 +1285,11 @@
      * @exception IllegalArgumentException if the given pattern is invalid.
      */
     public void applyPattern(String pattern) {
+        // Android-changed: use ICU.
         icuDecimalFormat.applyPattern(pattern);
         updateFieldsFromIcu();
     }
 
-
     /**
      * Apply the given pattern to this Format object.  The pattern
      * is assumed to be in a localized notation. A pattern is a
@@ -1214,22 +1314,12 @@
      * @exception IllegalArgumentException if the given pattern is invalid.
      */
     public void applyLocalizedPattern(String pattern) {
+        // Android-changed: use ICU.
         icuDecimalFormat.applyLocalizedPattern(pattern);
         updateFieldsFromIcu();
     }
 
-    private void updateFieldsFromIcu() {
-        // Imitate behaviour of ICU4C NumberFormat that Android used up to M.
-        // If the pattern doesn't enforce a different value (some exponential
-        // patterns do), then set the maximum integer digits to 2 billion.
-        if (icuDecimalFormat.getMaximumIntegerDigits() == DOUBLE_INTEGER_DIGITS) {
-            icuDecimalFormat.setMaximumIntegerDigits(2000000000);
-        }
-        maximumIntegerDigits = icuDecimalFormat.getMaximumIntegerDigits();
-        minimumIntegerDigits = icuDecimalFormat.getMinimumIntegerDigits();
-        maximumFractionDigits = icuDecimalFormat.getMaximumFractionDigits();
-        minimumFractionDigits = icuDecimalFormat.getMinimumFractionDigits();
-    }
+    // Android-removed: applyPattern(String, boolean) as apply[Localized]Pattern calls ICU directly.
 
     /**
      * Sets the maximum number of digits allowed in the integer portion of a
@@ -1249,7 +1339,10 @@
             super.setMinimumIntegerDigits((minimumIntegerDigits > DOUBLE_INTEGER_DIGITS) ?
                 DOUBLE_INTEGER_DIGITS : minimumIntegerDigits);
         }
+        // Android-changed: use ICU.
         icuDecimalFormat.setMaximumIntegerDigits(getMaximumIntegerDigits());
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
     /**
@@ -1270,7 +1363,10 @@
             super.setMaximumIntegerDigits((maximumIntegerDigits > DOUBLE_INTEGER_DIGITS) ?
                 DOUBLE_INTEGER_DIGITS : maximumIntegerDigits);
         }
+        // Android-changed: use ICU.
         icuDecimalFormat.setMinimumIntegerDigits(getMinimumIntegerDigits());
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
     /**
@@ -1291,7 +1387,10 @@
             super.setMinimumFractionDigits((minimumFractionDigits > DOUBLE_FRACTION_DIGITS) ?
                 DOUBLE_FRACTION_DIGITS : minimumFractionDigits);
         }
+        // Android-changed: use ICU.
         icuDecimalFormat.setMaximumFractionDigits(getMaximumFractionDigits());
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
     /**
@@ -1312,7 +1411,10 @@
             super.setMaximumFractionDigits((maximumFractionDigits > DOUBLE_FRACTION_DIGITS) ?
                 DOUBLE_FRACTION_DIGITS : maximumFractionDigits);
         }
+        // Android-changed: use ICU.
         icuDecimalFormat.setMinimumFractionDigits(getMinimumFractionDigits());
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
     /**
@@ -1396,6 +1498,7 @@
      */
     @Override
     public void setCurrency(Currency currency) {
+        // BEGIN Android-changed: use ICU.
         // Set the international currency symbol, and currency symbol on the DecimalFormatSymbols
         // object and tell ICU to use that.
         if (currency != symbols.getCurrency()
@@ -1407,6 +1510,9 @@
             icuDecimalFormat.setMinimumFractionDigits(minimumFractionDigits);
             icuDecimalFormat.setMaximumFractionDigits(maximumFractionDigits);
         }
+        // END Android-changed: use ICU.
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
     /**
@@ -1421,6 +1527,7 @@
         return roundingMode;
     }
 
+    // Android-added: convertRoundingMode() to convert between Java and ICU RoundingMode enums.
     private static int convertRoundingMode(RoundingMode rm) {
         switch (rm) {
         case UP:
@@ -1458,10 +1565,16 @@
         }
 
         this.roundingMode = roundingMode;
-
+        // Android-changed: use ICU.
         icuDecimalFormat.setRoundingMode(convertRoundingMode(roundingMode));
+        // Android-removed: fast path related code.
+        // fastPathCheckNeeded = true;
     }
 
+    // BEGIN Android-added: 7u40 version of adjustForCurrencyDefaultFractionDigits().
+    // This method was removed in OpenJDK 8 in favor of doing equivalent work in the provider. Since
+    // Android removed support for providers for NumberFormat we keep this method around as an
+    // "Android addition".
     /**
      * Adjusts the minimum and maximum fraction digits to values that
      * are reasonable for the currency's default fraction digits.
@@ -1490,9 +1603,9 @@
             }
         }
     }
+    // END Android-added: Upstream code from earlier OpenJDK release.
 
-    private static final int currentSerialVersion = 4;
-
+    // BEGIN Android-added: Custom serialization code for compatibility with RI serialization.
     // the fields list to be serialized
     private static final ObjectStreamField[] serialPersistentFields = {
             new ObjectStreamField("positivePrefix", String.class),
@@ -1545,6 +1658,7 @@
         fields.put("serialVersionOnStream", currentSerialVersion);
         stream.writeFields();
     }
+    // BEGIN Android-added: Custom serialization code for compatibility with RI serialization.
 
     /**
      * Reads the default serializable fields from the stream and performs
@@ -1589,12 +1703,13 @@
      * literal values.  This is exactly what we want, since that corresponds to
      * the pre-version-2 behavior.
      */
+    // BEGIN Android-added: Custom serialization code for compatibility with RI serialization.
     private void readObject(ObjectInputStream stream)
             throws IOException, ClassNotFoundException {
         ObjectInputStream.GetField fields = stream.readFields();
         this.symbols = (DecimalFormatSymbols) fields.get("symbols", null);
 
-        init("#");
+        initPattern("#");
 
         // Calling a setter method on an ICU DecimalFormat object will change the object's internal
         // state, even if the value set is the same as the default value (ICU Ticket #13266).
@@ -1683,11 +1798,14 @@
             setMinimumFractionDigits(super.getMinimumFractionDigits());
         }
     }
+    // END Android-added: Custom serialization code for compatibility with RI serialization.
 
     //----------------------------------------------------------------------
     // INSTANCE VARIABLES
     //----------------------------------------------------------------------
 
+    // Android-removed: various fields now stored in icuDecimalFormat.
+
     /**
      * The <code>DecimalFormatSymbols</code> object used by this format.
      * It contains the symbols used to format numbers, e.g. the grouping separator,
@@ -1697,7 +1815,9 @@
      * @see #setDecimalFormatSymbols
      * @see java.text.DecimalFormatSymbols
      */
-    private DecimalFormatSymbols symbols;
+    private DecimalFormatSymbols symbols = null; // LIU new DecimalFormatSymbols();
+
+    // Android-removed: useExponentialNotation, *FieldPositions, minExponentDigits.
 
     /**
      * The maximum number of digits allowed in the integer portion of a
@@ -1709,7 +1829,8 @@
      * @see #getMaximumIntegerDigits
      * @since 1.5
      */
-    private int    maximumIntegerDigits;
+    // Android-changed: removed initialisation.
+    private int    maximumIntegerDigits /* = super.getMaximumIntegerDigits() */;
 
     /**
      * The minimum number of digits allowed in the integer portion of a
@@ -1721,7 +1842,8 @@
      * @see #getMinimumIntegerDigits
      * @since 1.5
      */
-    private int    minimumIntegerDigits;
+    // Android-changed: removed initialisation.
+    private int    minimumIntegerDigits /* = super.getMinimumIntegerDigits() */;
 
     /**
      * The maximum number of digits allowed in the fractional portion of a
@@ -1733,7 +1855,8 @@
      * @see #getMaximumFractionDigits
      * @since 1.5
      */
-    private int    maximumFractionDigits;
+    // Android-changed: removed initialisation.
+    private int    maximumFractionDigits /* = super.getMaximumFractionDigits() */;
 
     /**
      * The minimum number of digits allowed in the fractional portion of a
@@ -1745,7 +1868,8 @@
      * @see #getMinimumFractionDigits
      * @since 1.5
      */
-    private int    minimumFractionDigits;
+    // Android-changed: removed initialisation.
+    private int    minimumFractionDigits /* = super.getMinimumFractionDigits() */;
 
     /**
      * The {@link java.math.RoundingMode} used in this DecimalFormat.
@@ -1755,12 +1879,20 @@
      */
     private RoundingMode roundingMode = RoundingMode.HALF_EVEN;
 
+    // Android-removed: FastPathData, isFastPath, fastPathCheckNeeded and fastPathData.
 
+    //----------------------------------------------------------------------
+
+    static final int currentSerialVersion = 4;
+
+    // Android-removed: serialVersionOnStream.
 
     //----------------------------------------------------------------------
     // CONSTANTS
     //----------------------------------------------------------------------
 
+    // Android-removed: Fast-Path for double Constants, various constants.
+
     // Upper limit on integer and fraction digits for a Java double
     static final int DOUBLE_INTEGER_DIGITS  = 309;
     static final int DOUBLE_FRACTION_DIGITS = 340;
@@ -1772,9 +1904,10 @@
     // Proclaim JDK 1.1 serial compatibility.
     static final long serialVersionUID = 864413376551465018L;
 
+    // Android-added: cachedLocaleData for caching default number format pattern per locale.
     /**
      * Cache to hold the NumberPattern of a Locale.
      */
     private static final ConcurrentMap<Locale, String> cachedLocaleData
-        = new ConcurrentHashMap<Locale, String>(3);
+        = new ConcurrentHashMap<>(3);
 }
diff --git a/ojluni/src/main/java/java/text/DecimalFormatSymbols.java b/ojluni/src/main/java/java/text/DecimalFormatSymbols.java
index 2acb128..3ed15da 100644
--- a/ojluni/src/main/java/java/text/DecimalFormatSymbols.java
+++ b/ojluni/src/main/java/java/text/DecimalFormatSymbols.java
@@ -66,8 +66,7 @@
 
 public class DecimalFormatSymbols implements Cloneable, Serializable {
 
-    // Android-changed: Removed reference to DecimalFormatSymbolsProvider but suggested
-    // getInstance() be used instead in case Android supports it in future.
+    // Android-changed: Removed reference to DecimalFormatSymbolsProvider, suggested getInstance().
     /**
      * Create a DecimalFormatSymbols object for the default
      * {@link java.util.Locale.Category#FORMAT FORMAT} locale.
@@ -83,8 +82,7 @@
         initialize( Locale.getDefault(Locale.Category.FORMAT) );
     }
 
-    // Android-changed: Removed reference to DecimalFormatSymbolsProvider but suggested
-    // getInstance() be used instead in case Android supports it in future.
+    // Android-changed: Removed reference to DecimalFormatSymbolsProvider, suggested getInstance().
     /**
      * Create a DecimalFormatSymbols object for the given locale.
      * It is recommended that the {@link #getInstance(Locale) getInstance} method is used
@@ -175,6 +173,7 @@
      */
     public void setZeroDigit(char zeroDigit) {
         this.zeroDigit = zeroDigit;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -194,6 +193,7 @@
      */
     public void setGroupingSeparator(char groupingSeparator) {
         this.groupingSeparator = groupingSeparator;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -213,6 +213,7 @@
      */
     public void setDecimalSeparator(char decimalSeparator) {
         this.decimalSeparator = decimalSeparator;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -232,6 +233,7 @@
      */
     public void setPerMill(char perMill) {
         this.perMill = perMill;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -244,6 +246,7 @@
         return percent;
     }
 
+    // Android-added: getPercentString() for percent signs longer than one char.
     /**
      * Gets the string used for percent sign. Different for Arabic, etc.
      *
@@ -260,6 +263,7 @@
      */
     public void setPercent(char percent) {
         this.percent = percent;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -279,6 +283,7 @@
      */
     public void setDigit(char digit) {
         this.digit = digit;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -300,6 +305,7 @@
      */
     public void setPatternSeparator(char patternSeparator) {
         this.patternSeparator = patternSeparator;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -321,6 +327,7 @@
      */
     public void setInfinity(String infinity) {
         this.infinity = infinity;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -342,6 +349,7 @@
      */
     public void setNaN(String NaN) {
         this.NaN = NaN;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -357,6 +365,7 @@
     }
 
 
+    // Android-added: getPercentString() for percent signs longer than one char.
     /**
      * Gets the string used to represent minus sign. If no explicit
      * negative format is specified, one is formed by prefixing
@@ -377,6 +386,7 @@
      */
     public void setMinusSign(char minusSign) {
         this.minusSign = minusSign;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -402,6 +412,7 @@
     public void setCurrencySymbol(String currency)
     {
         currencySymbol = currency;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -440,10 +451,12 @@
         if (currencyCode != null) {
             try {
                 currency = Currency.getInstance(currencyCode);
+                // Android-changed: get currencySymbol for locale.
                 currencySymbol = currency.getSymbol(locale);
             } catch (IllegalArgumentException e) {
             }
         }
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -478,6 +491,7 @@
         this.currency = currency;
         intlCurrencySymbol = currency.getCurrencyCode();
         currencySymbol = currency.getSymbol(locale);
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -502,6 +516,7 @@
     public void setMonetaryDecimalSeparator(char sep)
     {
         monetarySeparator = sep;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -535,6 +550,7 @@
     void setExponentialSymbol(char exp)
     {
         exponential = exp;
+        // Android-added: reset cachedIcuDFS.
         cachedIcuDFS = null;
     }
 
@@ -608,6 +624,7 @@
             int result = zeroDigit;
             result = result * 37 + groupingSeparator;
             result = result * 37 + decimalSeparator;
+            // BEGIN Android-added: more fields in hashcode calculation.
             result = result * 37 + percent;
             result = result * 37 + perMill;
             result = result * 37 + digit;
@@ -621,6 +638,7 @@
             result = result * 37 + monetarySeparator;
             result = result * 37 + exponentialSeparator.hashCode();
             result = result * 37 + locale.hashCode();
+           // END Android-added: more fields in hashcode calculation.
             return result;
     }
 
@@ -674,7 +692,7 @@
         // Check for empty country string separately because it's a valid
         // country ID for Locale (and used for the C locale), but not a valid
         // ISO 3166 country code, and exceptions are expensive.
-        if (!"".equals(locale.getCountry())) {
+        if (locale.getCountry().length() > 0) {
             try {
                 currency = Currency.getInstance(locale);
             } catch (IllegalArgumentException e) {
@@ -689,6 +707,7 @@
                 currencySymbol = currency.getSymbol(locale);
                 data[1] = intlCurrencySymbol;
                 data[2] = currencySymbol;
+                // Android-added: update cache when necessary.
                 needCacheUpdate = true;
             }
         } else {
@@ -705,6 +724,7 @@
         // If that changes, add a new entry to NumberElements.
         monetarySeparator = decimalSeparator;
 
+        // Android-added: update cache when necessary.
         if (needCacheUpdate) {
             cachedLocaleData.putIfAbsent(locale, data);
         }
@@ -743,6 +763,7 @@
         return fallback;
     }
 
+    // BEGIN Android-added: getIcuDecimalFormatSymbols() and fromIcuInstance().
     /**
      * Convert an instance of this class to the ICU version so that it can be used with ICU4J.
      * @hide
@@ -816,8 +837,9 @@
         result.setCurrencySymbol(dfs.getCurrencySymbol());
         return result;
     }
+    // END Android-added: getIcuDecimalFormatSymbols() and fromIcuInstance().
 
-
+    // BEGIN Android-added: Android specific serialization code.
     private static final ObjectStreamField[] serialPersistentFields = {
             new ObjectStreamField("currencySymbol", String.class),
             new ObjectStreamField("decimalSeparator", char.class),
@@ -867,6 +889,7 @@
         fields.put("percentStr", getPercentString());
         stream.writeFields();
     }
+    // END Android-added: Android specific serialization code.
 
     /**
      * Reads the default serializable fields, provides default values for objects
@@ -885,7 +908,9 @@
      *
      * @since JDK 1.1.6
      */
-    private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
+    private void readObject(ObjectInputStream stream)
+            throws IOException, ClassNotFoundException {
+        // BEGIN Android-changed: Android specific serialization code.
         ObjectInputStream.GetField fields = stream.readFields();
         final int serialVersionOnStream = fields.get("serialVersionOnStream", 0);
         currencySymbol = (String) fields.get("currencySymbol", "");
@@ -939,6 +964,7 @@
         } catch (IllegalArgumentException e) {
             currency = null;
         }
+        // END Android-changed: Android specific serialization code.
     }
 
     /**
@@ -1109,11 +1135,18 @@
      */
     private int serialVersionOnStream = currentSerialVersion;
 
+    // BEGIN Android-added: cache for locale data and cachedIcuDFS.
     /**
      * cache to hold the NumberElements and the Currency
      * of a Locale.
      */
-    private static final ConcurrentHashMap<Locale, Object[]> cachedLocaleData = new ConcurrentHashMap<Locale, Object[]>(3);
+    private static final ConcurrentHashMap<Locale, Object[]> cachedLocaleData = new ConcurrentHashMap<>(3);
 
+    /**
+     * Lazily created cached instance of an ICU DecimalFormatSymbols that's equivalent to this one.
+     * This field is reset to null whenever any of the relevant fields of this class are modified
+     * and will be re-created by {@link #getIcuDecimalFormatSymbols()} as necessary.
+     */
     private transient android.icu.text.DecimalFormatSymbols cachedIcuDFS = null;
+    // END Android-added: cache for locale data and cachedIcuDFS.
 }
diff --git a/ojluni/src/main/java/java/text/MessageFormat.java b/ojluni/src/main/java/java/text/MessageFormat.java
index d7431ef..b900824 100644
--- a/ojluni/src/main/java/java/text/MessageFormat.java
+++ b/ojluni/src/main/java/java/text/MessageFormat.java
@@ -690,6 +690,7 @@
      *            larger than the number of format elements in the pattern string
      */
     public void setFormat(int formatElementIndex, Format newFormat) {
+        // Android-added: prevent setting unused formatters.
         if (formatElementIndex > maxOffset) {
             throw new ArrayIndexOutOfBoundsException(maxOffset, formatElementIndex);
         }
diff --git a/ojluni/src/main/java/java/text/Normalizer.java b/ojluni/src/main/java/java/text/Normalizer.java
index 4c551c3..8c22547 100644
--- a/ojluni/src/main/java/java/text/Normalizer.java
+++ b/ojluni/src/main/java/java/text/Normalizer.java
@@ -106,8 +106,7 @@
  */
 public final class Normalizer {
 
-    private Normalizer() {
-    }
+   private Normalizer() {};
 
     /**
      * This enum provides constants of the four Unicode normalization forms
@@ -118,6 +117,7 @@
      *
      * @since 1.6
      */
+    // BEGIN Android-changed: remove static modifier and add mapping to equivalent ICU values.
     public enum Form {
 
         /**
@@ -146,41 +146,42 @@
             this.icuMode = icuMode;
         }
     }
+    // END Android-changed: remove static modifier and add mapping to equivalent ICU values.
 
     /**
      * Normalize a sequence of char values.
      * The sequence will be normalized according to the specified normalization
      * from.
-     *
-     * @param src  The sequence of char values to normalize.
-     * @param form The normalization form; one of
-     *             {@link java.text.Normalizer.Form#NFC},
-     *             {@link java.text.Normalizer.Form#NFD},
-     *             {@link java.text.Normalizer.Form#NFKC},
-     *             {@link java.text.Normalizer.Form#NFKD}
+     * @param src        The sequence of char values to normalize.
+     * @param form       The normalization form; one of
+     *                   {@link java.text.Normalizer.Form#NFC},
+     *                   {@link java.text.Normalizer.Form#NFD},
+     *                   {@link java.text.Normalizer.Form#NFKC},
+     *                   {@link java.text.Normalizer.Form#NFKD}
      * @return The normalized String
      * @throws NullPointerException If <code>src</code> or <code>form</code>
-     *                              is null.
+     * is null.
      */
     public static String normalize(CharSequence src, Form form) {
+        // Android-changed: Switched to ICU.
         return android.icu.text.Normalizer.normalize(src.toString(), form.icuMode);
     }
 
     /**
      * Determines if the given sequence of char values is normalized.
-     *
-     * @param src  The sequence of char values to be checked.
-     * @param form The normalization form; one of
-     *             {@link java.text.Normalizer.Form#NFC},
-     *             {@link java.text.Normalizer.Form#NFD},
-     *             {@link java.text.Normalizer.Form#NFKC},
-     *             {@link java.text.Normalizer.Form#NFKD}
+     * @param src        The sequence of char values to be checked.
+     * @param form       The normalization form; one of
+     *                   {@link java.text.Normalizer.Form#NFC},
+     *                   {@link java.text.Normalizer.Form#NFD},
+     *                   {@link java.text.Normalizer.Form#NFKC},
+     *                   {@link java.text.Normalizer.Form#NFKD}
      * @return true if the sequence of char values is normalized;
      * false otherwise.
      * @throws NullPointerException If <code>src</code> or <code>form</code>
-     *                              is null.
+     * is null.
      */
     public static boolean isNormalized(CharSequence src, Form form) {
+        // Android-changed: Switched to ICU.
         return android.icu.text.Normalizer.isNormalized(src.toString(), form.icuMode, 0);
     }
 }
diff --git a/ojluni/src/main/java/java/text/NumberFormat.java b/ojluni/src/main/java/java/text/NumberFormat.java
index 218a668..70a0aa9 100644
--- a/ojluni/src/main/java/java/text/NumberFormat.java
+++ b/ojluni/src/main/java/java/text/NumberFormat.java
@@ -286,10 +286,13 @@
      * @see java.text.Format#format
      */
     public final String format(double number) {
+        // Android-removed: fast-path code.
         return format(number, new StringBuffer(),
                       DontCareFieldPosition.INSTANCE).toString();
     }
 
+    // Android-removed: fastFormat method.
+
    /**
      * Specialization of format.
      *
@@ -545,6 +548,8 @@
         return getInstance(inLocale, PERCENTSTYLE);
     }
 
+    // Android-removed: non-API methods getScientificInstance([Locale]).
+
     // Android-changed: Removed reference to NumberFormatProvider.
     /**
      * Returns an array of all locales for which the
@@ -912,6 +917,7 @@
         stream.defaultWriteObject();
     }
 
+    // Android-added: cachedLocaleData.
     /**
      * Cache to hold the NumberPatterns of a Locale.
      */
@@ -921,6 +927,8 @@
     private static final int NUMBERSTYLE = 0;
     private static final int CURRENCYSTYLE = 1;
     private static final int PERCENTSTYLE = 2;
+    // Android-changed: changed: removed SCIENTIFICSTYLE and pull down INTEGERSTYLE value.
+    //private static final int SCIENTIFICSTYLE = 3;
     private static final int INTEGERSTYLE = 3;
 
     /**
diff --git a/ojluni/src/main/java/java/text/RuleBasedCollator.java b/ojluni/src/main/java/java/text/RuleBasedCollator.java
index a82080b..3f3c5bc0 100644
--- a/ojluni/src/main/java/java/text/RuleBasedCollator.java
+++ b/ojluni/src/main/java/java/text/RuleBasedCollator.java
@@ -242,10 +242,12 @@
  * @see        CollationElementIterator
  * @author     Helena Shih, Laura Werner, Richard Gillam
  */
-public class RuleBasedCollator extends Collator {
+public class RuleBasedCollator extends Collator{
+    // Android-added: protected constructor taking an ICU RuleBasedCollator.
     RuleBasedCollator(android.icu.text.RuleBasedCollator wrapper) {
         super(wrapper);
     }
+
     // IMPLEMENTATION NOTES:  The implementation of the collation algorithm is
     // divided across three classes: RuleBasedCollator, RBCollationTables, and
     // CollationElementIterator.  RuleBasedCollator contains the collator's
@@ -280,6 +282,7 @@
      * throw the ParseException because the '?' is not quoted.
      */
     public RuleBasedCollator(String rules) throws ParseException {
+        // BEGIN Android-changed: Switched to ICU.
         if (rules == null) {
             throw new NullPointerException("rules == null");
         }
@@ -295,8 +298,12 @@
              */
             throw new ParseException(e.getMessage(), -1);
         }
+        // BEGIN Android-changed: Switched to ICU.
     }
 
+    // Android-removed: (String rules, int decomp) constructor and copy constructor.
+
+    // Android-changed: document that getRules() won't return rules in common case.
     /**
      * Gets the table-based rules for the collation object.
      *
@@ -308,6 +315,7 @@
      */
     public String getRules()
     {
+        // Android-changed: Switched to ICU.
         return collAsICU().getRules();
     }
 
@@ -319,6 +327,7 @@
      * @see java.text.CollationElementIterator
      */
     public CollationElementIterator getCollationElementIterator(String source) {
+        // Android-changed: Switch to ICU and check for null value.
         if (source == null) {
             throw new NullPointerException("source == null");
         }
@@ -335,6 +344,7 @@
      */
     public CollationElementIterator getCollationElementIterator(
                                                 CharacterIterator source) {
+        // Android-changed: Switch to ICU and check for null value.
        if (source == null) {
             throw new NullPointerException("source == null");
         }
@@ -354,6 +364,7 @@
         if (source == null || target == null) {
             throw new NullPointerException();
         }
+        // Android-changed: Switched to ICU.
         return icuColl.compare(source, target);
     }
 
@@ -364,6 +375,7 @@
      */
     public synchronized CollationKey getCollationKey(String source)
     {
+        // Android-changed: Switched to ICU.
         if (source == null) {
             return null;
         }
@@ -374,6 +386,7 @@
      * Standard override; no change in semantics.
      */
     public Object clone() {
+        // Android-changed: remove special case for cloning.
         return super.clone();
     }
 
@@ -385,6 +398,7 @@
      */
     public boolean equals(Object obj) {
         if (obj == null) return false;
+        // Android-changed: delegate to super class, as that already compares icuColl.
         return super.equals(obj);
     }
 
@@ -392,10 +406,14 @@
      * Generates the hash code for the table-based collation object
      */
     public int hashCode() {
+        // Android-changed: Switched to ICU.
         return icuColl.hashCode();
     }
 
+    // Android-added: collAsIcu helper method.
     private android.icu.text.RuleBasedCollator collAsICU() {
         return (android.icu.text.RuleBasedCollator) icuColl;
     }
+
+    // Android-removed: private constants and fields.
 }
diff --git a/ojluni/src/main/java/java/text/SimpleDateFormat.java b/ojluni/src/main/java/java/text/SimpleDateFormat.java
index 6ae9057..c294e5a 100644
--- a/ojluni/src/main/java/java/text/SimpleDateFormat.java
+++ b/ojluni/src/main/java/java/text/SimpleDateFormat.java
@@ -128,7 +128,7 @@
  *         <td>Week year
  *         <td><a href="#year">Year</a>
  *         <td><code>2009</code>; <code>09</code>
- *         <td>1+</td>
+ *         <td>24+</td>
  *     <tr style="background-color: rgb(238, 238, 255);">
  *         <td><code>M</code>
  *         <td>Month in year (context sensitive)
@@ -242,7 +242,7 @@
  *         <td>Time zone
  *         <td><a href="#iso8601timezone">ISO 8601 time zone</a>
  *         <td><code>-08</code>; <code>-0800</code>;  <code>-08:00</code>
- *         <td>1+</td>
+ *         <td>24+</td>
  * </table>
  * </blockquote>
  * Pattern letters are usually repeated, as their number determines the
@@ -559,6 +559,7 @@
      */
     transient boolean useDateFormatSymbols;
 
+    // Android-added: ICU TimeZoneNames field.
     /**
      * ICU TimeZoneNames used to format and parse time zone names.
      */
@@ -656,6 +657,7 @@
         // initialize calendar and related fields
         initializeCalendar(loc);
 
+        // BEGIN Android-changed: Use ICU for locale data.
         formatData = DateFormatSymbols.getInstanceRef(loc);
         LocaleData localeData = LocaleData.get(loc);
         if ((timeStyle >= 0) && (dateStyle >= 0)) {
@@ -674,6 +676,7 @@
         else {
             throw new IllegalArgumentException("No date or time style specified");
         }
+        // END Android-changed: Use ICU for locale data.
 
         initialize(loc);
     }
@@ -1072,8 +1075,8 @@
         CalendarBuilder.WEEK_YEAR,         // Pseudo Calendar field
         CalendarBuilder.ISO_DAY_OF_WEEK,   // Pseudo Calendar field
         Calendar.ZONE_OFFSET,
-        // 'L' and 'c',
         Calendar.MONTH,
+        // Android-added: 'c' for standalone day of week.
         Calendar.DAY_OF_WEEK
     };
 
@@ -1101,8 +1104,8 @@
         DateFormat.YEAR_FIELD,
         DateFormat.DAY_OF_WEEK_FIELD,
         DateFormat.TIMEZONE_FIELD,
-        // 'L' and 'c'
         DateFormat.MONTH_FIELD,
+        // Android-added: 'c' for standalone day of week.
         DateFormat.DAY_OF_WEEK_FIELD
     };
 
@@ -1130,11 +1133,12 @@
         Field.YEAR,
         Field.DAY_OF_WEEK,
         Field.TIME_ZONE,
-        // 'L' and 'c'
         Field.MONTH,
+        // Android-added: 'c' for standalone day of week.
         Field.DAY_OF_WEEK
     };
 
+    // BEGIN Android-added: Special handling for UTC time zone.
     private static final String UTC = "UTC";
 
     /**
@@ -1144,6 +1148,7 @@
     private static final Set<String> UTC_ZONE_IDS = Collections.unmodifiableSet(new HashSet<>(
             Arrays.asList("Etc/UCT", "Etc/UTC", "Etc/Universal", "Etc/Zulu", "UCT", "UTC",
                     "Universal", "Zulu")));
+    // END Android-added: Special handling for UTC time zone.
 
     /**
      * Private member function that does the real date/time formatting.
@@ -1238,15 +1243,19 @@
 
         case PATTERN_DAY_OF_WEEK: // 'E'
             if (current == null) {
+                // Android-changed: extract formatWeekday() method.
                 current = formatWeekday(count, value, useDateFormatSymbols, false /* standalone */);
             }
             break;
 
+        // BEGIN Android-added: support for 'c' (standalone day of week).
         case PATTERN_STANDALONE_DAY_OF_WEEK: // 'c'
             if (current == null) {
+                // Android-changed: extract formatWeekday() method.
                 current = formatWeekday(count, value, useDateFormatSymbols, true /* standalone */);
             }
             break;
+        // END Android-added: support for 'c' (standalone day of week).
 
         case PATTERN_AM_PM:    // 'a'
             if (useDateFormatSymbols) {
@@ -1268,6 +1277,7 @@
 
         case PATTERN_ZONE_NAME: // 'z'
             if (current == null) {
+                // BEGIN Android-changed: format time zone name using ICU.
                 TimeZone tz = calendar.getTimeZone();
                 boolean daylight = (calendar.get(Calendar.DST_OFFSET) != 0);
                 String zoneString;
@@ -1279,7 +1289,8 @@
                             formatData.getZoneStringsWrapper(), tz.getID(), daylight, tzstyle);
                 } else {
                     if (UTC_ZONE_IDS.contains(tz.getID())) {
-                        // ICU doesn't have name strings for UTC, explicitly print it as "UTC".
+                        // ICU used to not have name strings UTC, explicitly print it as "UTC".
+                        // TODO: remove special case now that ICU has that data (http://b/36337342).
                         zoneString = UTC;
                     } else {
                         TimeZoneNames.NameType nameType;
@@ -1304,10 +1315,12 @@
                         calendar.get(Calendar.DST_OFFSET);
                     buffer.append(TimeZone.createGmtOffsetString(true, true, offsetMillis));
                 }
+                // END Android-changed: format time zone name using ICU.
             }
             break;
 
         case PATTERN_ZONE_VALUE: // 'Z' ("-/+hhmm" form)
+        // BEGIN Android-Changed: use shared code in TimeZone for zone offset string.
         {
             value = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
             final boolean includeSeparator = (count >= 4);
@@ -1316,6 +1329,7 @@
 
             break;
         }
+        // END Android-Changed: use shared code in TimeZone for zone offset string.
 
         case PATTERN_ISO_ZONE:   // 'X'
             value = calendar.get(Calendar.ZONE_OFFSET)
@@ -1344,6 +1358,7 @@
             }
             CalendarUtils.sprintf0d(buffer, value % 60, 2);
             break;
+        // BEGIN Android-added: Better UTS#35 conformity for fractional seconds.
         case PATTERN_MILLISECOND: // 'S'
             // Fractional seconds must be treated specially. We must always convert the parsed
             // value into a fractional second [0, 1) and then widen it out to the appropriate
@@ -1355,12 +1370,15 @@
                 zeroPaddingNumber(value, count, count, buffer);
             }
             break;
+        // END Android-added: Better UTS#35 conformity for fractional seconds.
 
         default:
      // case PATTERN_DAY_OF_MONTH:         // 'd'
      // case PATTERN_HOUR_OF_DAY0:         // 'H' 0-based.  eg, 23:59 + 1 hour =>> 00:59
      // case PATTERN_MINUTE:               // 'm'
      // case PATTERN_SECOND:               // 's'
+     // Android-removed: PATTERN_MILLISECONDS handled in an explicit case above.
+     //// case PATTERN_MILLISECOND:          // 'S'
      // case PATTERN_DAY_OF_YEAR:          // 'D'
      // case PATTERN_DAY_OF_WEEK_IN_MONTH: // 'F'
      // case PATTERN_WEEK_OF_YEAR:         // 'w'
@@ -1383,6 +1401,7 @@
         delegate.formatted(fieldID, f, f, beginOffset, buffer.length(), buffer);
     }
 
+    // BEGIN Android-added: formatWeekday and formatMonth methods to format using ICU data.
     private String formatWeekday(int count, int value, boolean useDateFormatSymbols,
                                  boolean standalone) {
         if (useDateFormatSymbols) {
@@ -1433,6 +1452,7 @@
 
         return current;
     }
+    // END Android-added: formatWeekday and formatMonth methods to format using ICU data.
 
     /**
      * Formats a number with the specified minimum and maximum number of digits.
@@ -1521,6 +1541,7 @@
      */
     @Override
     public Date parse(String text, ParsePosition pos) {
+        // BEGIN Android-changed: extract parseInternal() and avoid modifying timezone during parse.
         // Make sure the timezone associated with this dateformat instance (set via
         // {@code setTimeZone} isn't change as a side-effect of parsing a date.
         final TimeZone tz = getTimeZone();
@@ -1533,6 +1554,7 @@
 
     private Date parseInternal(String text, ParsePosition pos)
     {
+        // END Android-changed: extract parseInternal() and avoid modifying timezone during parse.
         checkNegativeNumberExpression();
 
         int start = pos.index;
@@ -1685,6 +1707,7 @@
                 bestMatchLength = length;
             }
 
+            // BEGIN Android-changed: Handle abbreviated fields that end with a '.'.
             // When the input option ends with a period (usually an abbreviated form), attempt
             // to match all chars up to that period.
             if ((data[i].charAt(length - 1) == '.') &&
@@ -1693,6 +1716,7 @@
                 bestMatch = i;
                 bestMatchLength = (length - 1);
             }
+            // END Android-changed: Handle abbreviated fields that end with a '.'.
         }
         if (bestMatch >= 0)
         {
@@ -1742,6 +1766,12 @@
         return -1;
     }
 
+    // Android-removed: unused private method matchDSTString.
+
+    // BEGIN Android-changed: Parse time zone strings using ICU TimeZoneNames.
+    // Note that this change falls back to the upstream zone names parsing code if the zoneStrings
+    // for the formatData field has been set by the user. The original code of subParseZoneString
+    // can be found in subParseZoneStringFromSymbols().
     /**
      * Parses the string in {@code text} (starting at {@code start}), interpreting it as a time zone
      * name. If a time zone is found, the internal calendar is set to that timezone and the index of
@@ -1863,6 +1893,7 @@
      * Parses the time zone string using the information in {@link #formatData}.
      */
     private int subParseZoneStringFromSymbols(String text, int start, CalendarBuilder calb) {
+        // END Android-changed: Parse time zone strings using ICU TimeZoneNames.
         boolean useSameName = false; // true if standard and daylight time use the same abbreviation.
         TimeZone currentTimeZone = getTimeZone();
 
@@ -1967,9 +1998,9 @@
             if (count != 1) {
                 // Proceed with parsing mm
                 c = text.charAt(index++);
-                // Intentional change in behavior from OpenJDK. OpenJDK will return an error code
-                // if a : is found and colonRequired is false, this will return an error code if
-                // a : is not found and colonRequired is true.
+                // BEGIN Android-changed: Intentional change in behavior from OpenJDK.
+                // OpenJDK will return an error code if a : is found and colonRequired is false,
+                // this will return an error code if a : is not found and colonRequired is true.
                 //
                 // colonRequired | c == ':' | OpenJDK | this
                 //   false       |  false   |   ok    |  ok
@@ -1981,6 +2012,7 @@
                 } else if (colonRequired) {
                     break parse;
                 }
+                // END Android-changed: Intentional change in behavior from OpenJDK.
                 if (!isDigit(c)) {
                     break parse;
                 }
@@ -2152,6 +2184,7 @@
                 return pos.index;
 
             case PATTERN_MONTH: // 'M'
+            // BEGIN Android-changed: extract parseMonth method.
             {
                 final int idx = parseMonth(text, count, value, start, field, pos,
                         useDateFormatSymbols, false /* isStandalone */, calb);
@@ -2171,6 +2204,7 @@
                 }
                 break parsing;
             }
+            // END Android-changed: extract parseMonth method.
 
             case PATTERN_HOUR_OF_DAY1: // 'k' 1-based.  eg, 23:59 + 1 hour =>> 24:59
                 if (!isLenient()) {
@@ -2187,6 +2221,7 @@
                 return pos.index;
 
             case PATTERN_DAY_OF_WEEK:  // 'E'
+            // BEGIN Android-changed: extract parseWeekday method.
             {
                 final int idx = parseWeekday(text, start, field, useDateFormatSymbols,
                         false /* standalone */, calb);
@@ -2195,7 +2230,9 @@
                 }
                 break parsing;
             }
+            // END Android-changed: extract parseWeekday method.
 
+            // BEGIN Android-added: support for 'c' (standalone day of week).
             case PATTERN_STANDALONE_DAY_OF_WEEK: // 'c'
             {
                 final int idx = parseWeekday(text, start, field, useDateFormatSymbols,
@@ -2206,6 +2243,7 @@
 
                 break parsing;
             }
+            // END Android-added: support for 'c' (standalone day of week).
 
             case PATTERN_AM_PM:    // 'a'
                 if (useDateFormatSymbols) {
@@ -2267,7 +2305,7 @@
                                         .set(Calendar.DST_OFFSET, 0);
                                     return pos.index;
                                 }
-
+                                // Android-changed: tolerate colon in zone offset.
                                 // Parse the rest as "hh[:]?mm"
                                 int i = subParseNumericZone(text, ++pos.index, sign, 0,
                                         false, calb);
@@ -2285,6 +2323,7 @@
                                 pos.index = -i;
                             }
                         } else {
+                            // Android-changed: tolerate colon in zone offset.
                             // Parse the rest as "hh[:]?mm" (RFC 822)
                             int i = subParseNumericZone(text, ++pos.index, sign, 0,
                                     false, calb);
@@ -2353,6 +2392,7 @@
                     number = numberFormat.parse(text, pos);
                 }
                 if (number != null) {
+                    // BEGIN Android-changed: Better UTS#35 conformity for fractional seconds.
                     if (patternCharIndex == PATTERN_MILLISECOND) {
                         // Fractional seconds must be treated specially. We must always
                         // normalize them to their fractional second value [0, 1) before we attempt
@@ -2367,6 +2407,7 @@
                     } else {
                         value = number.intValue();
                     }
+                    // END Android-changed: Better UTS#35 conformity for fractional seconds.
 
                     if (useFollowingMinusSignAsDelimiter && (value < 0) &&
                         (((pos.index < text.length()) &&
@@ -2389,6 +2430,7 @@
         return -1;
     }
 
+    // BEGIN Android-added: parseMonth and parseWeekday methods to parse using ICU data.
     private int parseMonth(String text, int count, int value, int start,
                            int field, ParsePosition pos, boolean useDateFormatSymbols,
                            boolean standalone,
@@ -2464,7 +2506,7 @@
 
         return index;
     }
-
+    // END Android-added: parseMonth and parseWeekday methods to parse using ICU data.
 
     private final String getCalendarName() {
         return calendar.getClass().getName();
diff --git a/ojluni/src/main/java/java/time/format/DateTimeFormatterBuilder.java b/ojluni/src/main/java/java/time/format/DateTimeFormatterBuilder.java
index f9cff0a..69e35d6 100644
--- a/ojluni/src/main/java/java/time/format/DateTimeFormatterBuilder.java
+++ b/ojluni/src/main/java/java/time/format/DateTimeFormatterBuilder.java
@@ -3641,7 +3641,7 @@
         private static final int DST = 1;
         private static final int GENERIC = 2;
 
-        // Android-changed: List of types used by getDisplayName().
+        // BEGIN Android-added: Lists of types used by getDisplayName().
         private static final TimeZoneNames.NameType[] TYPES = new TimeZoneNames.NameType[] {
                 TimeZoneNames.NameType.LONG_STANDARD,
                 TimeZoneNames.NameType.SHORT_STANDARD,
@@ -3662,6 +3662,7 @@
                 TimeZoneNames.NameType.SHORT_DAYLIGHT,
                 TimeZoneNames.NameType.SHORT_GENERIC,
         };
+        // END Android-added: Lists of types used by getDisplayName().
 
         private static final Map<String, SoftReference<Map<Locale, String[]>>> cache =
             new ConcurrentHashMap<>();
@@ -3675,7 +3676,7 @@
             Map<Locale, String[]> perLocale = null;
             if (ref == null || (perLocale = ref.get()) == null ||
                     (names = perLocale.get(locale)) == null) {
-                // Android-changed: use ICU TimeZoneNames instead of TimeZoneNameUtility.
+                // BEGIN Android-changed: use ICU TimeZoneNames instead of TimeZoneNameUtility.
                 TimeZoneNames timeZoneNames = TimeZoneNames.getInstance(locale);
                 names = new String[TYPES.length + 1];
                 // Zeroth index used for id, other indexes based on NameType constant + 1.
@@ -3703,6 +3704,7 @@
                 if (names[5] == null) {
                     names[5] = names[0]; // use the id
                 }
+                // END Android-changed: use ICU TimeZoneNames instead of TimeZoneNameUtility.
                 if (names[6] == null) {
                     names[6] = names[0];
                 }
@@ -3763,12 +3765,12 @@
                 isCaseSensitive ? cachedTree : cachedTreeCI;
 
             Entry<Integer, SoftReference<PrefixTree>> entry;
+            // BEGIN Android-changed: use ICU TimeZoneNames to get Zone names.
             PrefixTree tree;
             if ((entry = cached.get(locale)) == null ||
                 (entry.getKey() != regionIdsSize ||
                 (tree = entry.getValue().get()) == null)) {
                 tree = PrefixTree.newTree(context);
-                // Android-changed: use ICU TimeZoneNames to get Zone names.
                 TimeZoneNames timeZoneNames = TimeZoneNames.getInstance(locale);
                 long now = System.currentTimeMillis();
                 TimeZoneNames.NameType[] types =
@@ -3798,6 +3800,7 @@
                                 tree.add(names[i], zid);
                             }
                         }
+                        // END Android-changed: use ICU TimeZoneNames to get Zone names.
                     }
                 }
                 cached.put(locale, new SimpleImmutableEntry<>(regionIdsSize, new SoftReference<>(tree)));
@@ -3923,7 +3926,7 @@
                 return position;
             }
 
-            // Android-changed: "GMT0" is considered a valid ZoneId.
+            // Android-added: "GMT0" is considered a valid ZoneId.
             if (text.charAt(position) == '0' && prefix.equals("GMT")) {
                 context.setParsed(ZoneId.of("GMT0"));
                 return position + 1;
diff --git a/ojluni/src/main/java/java/time/format/DateTimeTextProvider.java b/ojluni/src/main/java/java/time/format/DateTimeTextProvider.java
index 99ab9b0..2ef9df8 100644
--- a/ojluni/src/main/java/java/time/format/DateTimeTextProvider.java
+++ b/ojluni/src/main/java/java/time/format/DateTimeTextProvider.java
@@ -448,6 +448,7 @@
         return "";  // null marker for map
     }
 
+    // Android-added: extractQuarters to extract Map of quarter names from ICU resource bundle.
     private static Map<Long, String> extractQuarters(ICUResourceBundle rb, String key) {
         String[] names = rb.getWithFallback(key).getStringArray();
         Map<Long, String> map = new HashMap<>();
@@ -468,7 +469,7 @@
         return new SimpleImmutableEntry<>(text, field);
     }
 
-    // Android-changed: removed getLocalizedResource.
+    // Android-removed: unused helper method getLocalizedResource.
 
     /**
      * Stores the text for a single locale.
diff --git a/ojluni/src/main/java/java/time/format/ZoneName.java b/ojluni/src/main/java/java/time/format/ZoneName.java
index c3eb20a..fe4a95a 100644
--- a/ojluni/src/main/java/java/time/format/ZoneName.java
+++ b/ojluni/src/main/java/java/time/format/ZoneName.java
@@ -38,10 +38,10 @@
  * The zid<->metazone mappings are based on CLDR metaZones.xml.
  * The alias mappings are based on Link entries in tzdb data files.
  */
-// Android-changed: delegate to ICU.
 class ZoneName {
 
     public static String toZid(String zid, Locale locale) {
+        // Android-changed: delegate to ICU.
         TimeZoneNames tzNames = TimeZoneNames.getInstance(locale);
         if (tzNames.getAvailableMetaZoneIDs().contains(zid)) {
             // Compare TimeZoneFormat#getTargetRegion.
@@ -64,4 +64,7 @@
         }
         return zid;
     }
+
+    // Android-removed: zidMap and aliasMap containing zone id data.
+    // Android-removed: zidToMzone, mzoneToZid, mzoneToZidL, aliases and their initialization code.
 }
diff --git a/ojluni/src/main/java/sun/util/locale/provider/CalendarDataUtility.java b/ojluni/src/main/java/sun/util/locale/provider/CalendarDataUtility.java
index 30df227..c158391 100644
--- a/ojluni/src/main/java/sun/util/locale/provider/CalendarDataUtility.java
+++ b/ojluni/src/main/java/sun/util/locale/provider/CalendarDataUtility.java
@@ -35,6 +35,7 @@
 import java.util.Locale;
 import java.util.Map;
 
+// Android-changed: remove mention of CalendarDataProvider that's not used on Android.
 /**
  * {@code CalendarDataUtility} is a utility class for getting calendar field name values.
  *
@@ -43,17 +44,32 @@
  */
 public class CalendarDataUtility {
 
+    // Android-note: This class has been rewritten from scratch, keeping its API the same.
+    // Since Android gets its calendar related data from ICU, the implementation of this class is
+    // effectively independent of the upstream class, with the only similarity being is API in
+    // order to keep the necessary modifications outside of this class to a minimum.
+
+    // Android-added: calendar name constants for use in retrievFieldValueName.
     private static final String ISLAMIC_CALENDAR = "islamic";
     private static final String GREGORIAN_CALENDAR = "gregorian";
     private static final String BUDDHIST_CALENDAR = "buddhist";
     private static final String JAPANESE_CALENDAR = "japanese";
 
+    // Android-added: REST_OF_STYLES array for use in retrieveFieldValueNames.
+    // ALL_STYLES implies SHORT_FORMAT and all of these values.
+    private static int[] REST_OF_STYLES = {
+            SHORT_STANDALONE, LONG_FORMAT, LONG_STANDALONE,
+            NARROW_FORMAT, NARROW_STANDALONE
+    };
+
+    // Android-removed: unused FIRST_DAY_OF_WEEK and MINIMAL_DAYS_IN_FIRST_WEEK constants.
+
     // No instantiation
     private CalendarDataUtility() {
     }
 
-    // Android-changed: Removed retrieveFirstDayOfWeek and retrieveMinimalDaysInFirstWeek.
-    // use libcore.icu.LocaleData or android.icu.util.Calendar.WeekData instead
+    // Android-removed: retrieveFirstDayOfWeek and retrieveMinimalDaysInFirstWeek.
+    // Android-note: use libcore.icu.LocaleData or android.icu.util.Calendar.WeekData instead.
 
     public static String retrieveFieldValueName(String id, int field, int value, int style,
             Locale locale) {
@@ -93,12 +109,6 @@
         return retrieveFieldValueName(id, field, value, style, locale);
     }
 
-    // ALL_STYLES implies SHORT_FORMAT and all of these values.
-    private static int[] REST_OF_STYLES = {
-            SHORT_STANDALONE, LONG_FORMAT, LONG_STANDALONE,
-            NARROW_FORMAT, NARROW_STANDALONE
-    };
-
     public static Map<String, Integer> retrieveFieldValueNames(String id, int field, int style,
             Locale locale) {
         // Android-changed: delegate to ICU.
@@ -115,6 +125,27 @@
         return names.isEmpty() ? null : names;
     }
 
+    public static Map<String, Integer> retrieveJavaTimeFieldValueNames(String id, int field,
+            int style, Locale locale) {
+        // Android-changed: don't distinguish between retrieve* and retrieveJavaTime* methods.
+        return retrieveFieldValueNames(id, field, style, locale);
+    }
+
+    private static String normalizeCalendarType(String requestID) {
+        String type;
+        // Android-changed: normalize "gregory" to "gregorian", not the other way around.
+        // See android.icu.text.DateFormatSymbols.CALENDAR_CLASSES for reference.
+        if (requestID.equals("gregory") || requestID.equals("iso8601")) {
+            type = GREGORIAN_CALENDAR;
+        } else if (requestID.startsWith(ISLAMIC_CALENDAR)) {
+            type = ISLAMIC_CALENDAR;
+        } else {
+            type = requestID;
+        }
+        return type;
+    }
+
+    // BEGIN Android-added: various private helper methods.
     private static Map<String, Integer> retrieveFieldValueNamesImpl(String id, int field, int style,
             Locale locale) {
         String[] names = getNames(id, field, style, locale);
@@ -151,12 +182,6 @@
         return result;
     }
 
-    public static Map<String, Integer> retrieveJavaTimeFieldValueNames(String id, int field,
-            int style, Locale locale) {
-        // Android-changed: don't distinguish between retrieve* and retrieveJavaTime* methods.
-        return retrieveFieldValueNames(id, field, style, locale);
-    }
-
     private static String[] getNames(String id, int field, int style, Locale locale) {
         int context = toContext(style);
         int width = toWidth(style);
@@ -225,21 +250,8 @@
                 throw new IllegalArgumentException("Invalid style: " + style);
         }
     }
+    // END Android-added: various private helper methods.
 
-    private static String normalizeCalendarType(String requestID) {
-        String type;
-        // Android-changed: normalize "gregory" to "gregorian", not the other way around.
-        // See android.icu.text.DateFormatSymbols.CALENDAR_CLASSES for reference.
-        if (requestID.equals("gregory") || requestID.equals("iso8601")) {
-            type = GREGORIAN_CALENDAR;
-        } else if (requestID.startsWith(ISLAMIC_CALENDAR)) {
-            type = ISLAMIC_CALENDAR;
-        } else {
-            type = requestID;
-        }
-        return type;
-    }
-
-    // Android-changed: Removed CalendarFieldValueNameGetter, CalendarFieldValueNamesMapGetter
-    // and CalendarWeekParameterGetter
+    // Android-removed: CalendarFieldValueNameGetter, CalendarFieldValueNamesMapGetter
+    // Android-removed: CalendarWeekParameterGetter
 }
diff --git a/openjdk_java_files.bp b/openjdk_java_files.bp
new file mode 100644
index 0000000..ac0103e
--- /dev/null
+++ b/openjdk_java_files.bp
@@ -0,0 +1,1782 @@
+filegroup {
+    name: "openjdk_javadoc_files",
+    export_to_make_var: "openjdk_javadoc_files",
+    path: "ojluni/src/lambda/java",
+    srcs: [
+        "ojluni/src/main/java/java/awt/font/NumericShaper.java",
+        "ojluni/src/main/java/java/awt/font/TextAttribute.java",
+        "ojluni/src/main/java/java/beans/IndexedPropertyChangeEvent.java",
+        "ojluni/src/main/java/java/beans/PropertyChangeEvent.java",
+        "ojluni/src/main/java/java/beans/PropertyChangeListener.java",
+        "ojluni/src/main/java/java/beans/PropertyChangeListenerProxy.java",
+        "ojluni/src/main/java/java/beans/PropertyChangeSupport.java",
+        "ojluni/src/main/java/java/io/Bits.java",
+        "ojluni/src/main/java/java/io/BufferedInputStream.java",
+        "ojluni/src/main/java/java/io/BufferedOutputStream.java",
+        "ojluni/src/main/java/java/io/BufferedReader.java",
+        "ojluni/src/main/java/java/io/BufferedWriter.java",
+        "ojluni/src/main/java/java/io/ByteArrayInputStream.java",
+        "ojluni/src/main/java/java/io/ByteArrayOutputStream.java",
+        "ojluni/src/main/java/java/io/CharArrayReader.java",
+        "ojluni/src/main/java/java/io/CharArrayWriter.java",
+        "ojluni/src/main/java/java/io/CharConversionException.java",
+        "ojluni/src/main/java/java/io/Closeable.java",
+        "ojluni/src/main/java/java/io/Console.java",
+        "ojluni/src/main/java/java/io/DataInput.java",
+        "ojluni/src/main/java/java/io/DataInputStream.java",
+        "ojluni/src/main/java/java/io/DataOutput.java",
+        "ojluni/src/main/java/java/io/DataOutputStream.java",
+        "ojluni/src/main/java/java/io/DefaultFileSystem.java",
+        "ojluni/src/main/java/java/io/DeleteOnExitHook.java",
+        "ojluni/src/main/java/java/io/EOFException.java",
+        "ojluni/src/main/java/java/io/ExpiringCache.java",
+        "ojluni/src/main/java/java/io/Externalizable.java",
+        "ojluni/src/main/java/java/io/FileDescriptor.java",
+        "ojluni/src/main/java/java/io/FileFilter.java",
+        "ojluni/src/main/java/java/io/FileInputStream.java",
+        "ojluni/src/main/java/java/io/File.java",
+        "ojluni/src/main/java/java/io/FilenameFilter.java",
+        "ojluni/src/main/java/java/io/FileNotFoundException.java",
+        "ojluni/src/main/java/java/io/FileOutputStream.java",
+        "ojluni/src/main/java/java/io/FilePermission.java",
+        "ojluni/src/main/java/java/io/FileReader.java",
+        "ojluni/src/main/java/java/io/FileSystem.java",
+        "ojluni/src/main/java/java/io/FileWriter.java",
+        "ojluni/src/main/java/java/io/FilterInputStream.java",
+        "ojluni/src/main/java/java/io/FilterOutputStream.java",
+        "ojluni/src/main/java/java/io/FilterReader.java",
+        "ojluni/src/main/java/java/io/FilterWriter.java",
+        "ojluni/src/main/java/java/io/Flushable.java",
+        "ojluni/src/main/java/java/io/InputStream.java",
+        "ojluni/src/main/java/java/io/InputStreamReader.java",
+        "ojluni/src/main/java/java/io/InterruptedIOException.java",
+        "ojluni/src/main/java/java/io/InvalidClassException.java",
+        "ojluni/src/main/java/java/io/InvalidObjectException.java",
+        "ojluni/src/main/java/java/io/IOError.java",
+        "ojluni/src/main/java/java/io/IOException.java",
+        "ojluni/src/main/java/java/io/LineNumberInputStream.java",
+        "ojluni/src/main/java/java/io/LineNumberReader.java",
+        "ojluni/src/main/java/java/io/NotActiveException.java",
+        "ojluni/src/main/java/java/io/NotSerializableException.java",
+        "ojluni/src/main/java/java/io/ObjectInput.java",
+        "ojluni/src/main/java/java/io/ObjectInputStream.java",
+        "ojluni/src/main/java/java/io/ObjectInputValidation.java",
+        "ojluni/src/main/java/java/io/ObjectOutput.java",
+        "ojluni/src/main/java/java/io/ObjectOutputStream.java",
+        "ojluni/src/main/java/java/io/ObjectStreamClass.java",
+        "ojluni/src/main/java/java/io/ObjectStreamConstants.java",
+        "ojluni/src/main/java/java/io/ObjectStreamException.java",
+        "ojluni/src/main/java/java/io/ObjectStreamField.java",
+        "ojluni/src/main/java/java/io/OptionalDataException.java",
+        "ojluni/src/main/java/java/io/OutputStream.java",
+        "ojluni/src/main/java/java/io/OutputStreamWriter.java",
+        "ojluni/src/main/java/java/io/PipedInputStream.java",
+        "ojluni/src/main/java/java/io/PipedOutputStream.java",
+        "ojluni/src/main/java/java/io/PipedReader.java",
+        "ojluni/src/main/java/java/io/PipedWriter.java",
+        "ojluni/src/main/java/java/io/PrintStream.java",
+        "ojluni/src/main/java/java/io/PrintWriter.java",
+        "ojluni/src/main/java/java/io/PushbackInputStream.java",
+        "ojluni/src/main/java/java/io/PushbackReader.java",
+        "ojluni/src/main/java/java/io/RandomAccessFile.java",
+        "ojluni/src/main/java/java/io/Reader.java",
+        "ojluni/src/main/java/java/io/SequenceInputStream.java",
+        "ojluni/src/main/java/java/io/SerialCallbackContext.java",
+        "ojluni/src/main/java/java/io/Serializable.java",
+        "ojluni/src/main/java/java/io/SerializablePermission.java",
+        "ojluni/src/main/java/java/io/StreamCorruptedException.java",
+        "ojluni/src/main/java/java/io/StreamTokenizer.java",
+        "ojluni/src/main/java/java/io/StringBufferInputStream.java",
+        "ojluni/src/main/java/java/io/StringReader.java",
+        "ojluni/src/main/java/java/io/StringWriter.java",
+        "ojluni/src/main/java/java/io/SyncFailedException.java",
+        "ojluni/src/main/java/java/io/UncheckedIOException.java",
+        "ojluni/src/main/java/java/io/UnixFileSystem.java",
+        "ojluni/src/main/java/java/io/UnsupportedEncodingException.java",
+        "ojluni/src/main/java/java/io/UTFDataFormatException.java",
+        "ojluni/src/main/java/java/io/WriteAbortedException.java",
+        "ojluni/src/main/java/java/io/Writer.java",
+        "ojluni/src/main/java/java/lang/AbstractMethodError.java",
+        "ojluni/src/main/java/java/lang/AbstractStringBuilder.java",
+        "ojluni/src/main/java/java/lang/annotation/AnnotationFormatError.java",
+        "ojluni/src/main/java/java/lang/annotation/Annotation.java",
+        "ojluni/src/main/java/java/lang/annotation/AnnotationTypeMismatchException.java",
+        "ojluni/src/main/java/java/lang/annotation/Documented.java",
+        "ojluni/src/main/java/java/lang/annotation/ElementType.java",
+        "ojluni/src/main/java/java/lang/annotation/IncompleteAnnotationException.java",
+        "ojluni/src/main/java/java/lang/annotation/Inherited.java",
+        "ojluni/src/main/java/java/lang/annotation/Native.java",
+        "ojluni/src/main/java/java/lang/annotation/Retention.java",
+        "ojluni/src/main/java/java/lang/annotation/Repeatable.java",
+        "ojluni/src/main/java/java/lang/annotation/RetentionPolicy.java",
+        "ojluni/src/main/java/java/lang/annotation/Target.java",
+        "ojluni/src/main/java/java/lang/annotation/package-info.java",
+        "ojluni/src/main/java/java/lang/Appendable.java",
+        "ojluni/src/main/java/java/lang/ArithmeticException.java",
+        "ojluni/src/main/java/java/lang/ArrayIndexOutOfBoundsException.java",
+        "ojluni/src/main/java/java/lang/ArrayStoreException.java",
+        "ojluni/src/main/java/java/lang/AssertionError.java",
+        "ojluni/src/main/java/java/lang/AutoCloseable.java",
+        "ojluni/src/main/java/java/lang/Boolean.java",
+        "ojluni/src/main/java/java/lang/BootstrapMethodError.java",
+        "ojluni/src/main/java/java/lang/Byte.java",
+        "ojluni/src/main/java/java/lang/Character.java",
+        "ojluni/src/main/java/java/lang/CharSequence.java",
+        "ojluni/src/main/java/java/lang/ClassCastException.java",
+        "ojluni/src/main/java/java/lang/ClassCircularityError.java",
+        "ojluni/src/main/java/java/lang/ClassFormatError.java",
+        "ojluni/src/main/java/java/lang/Class.java",
+        "ojluni/src/main/java/java/lang/ClassLoader.java",
+        "ojluni/src/main/java/java/lang/ClassNotFoundException.java",
+        "ojluni/src/main/java/java/lang/Cloneable.java",
+        "ojluni/src/main/java/java/lang/CloneNotSupportedException.java",
+        "ojluni/src/main/java/java/lang/Comparable.java",
+        "ojluni/src/main/java/java/lang/Compiler.java",
+        "ojluni/src/main/java/java/lang/Deprecated.java",
+        "ojluni/src/main/java/java/lang/Double.java",
+        "ojluni/src/main/java/java/lang/EnumConstantNotPresentException.java",
+        "ojluni/src/main/java/java/lang/Enum.java",
+        "ojluni/src/main/java/java/lang/Error.java",
+        "ojluni/src/main/java/java/lang/ExceptionInInitializerError.java",
+        "ojluni/src/main/java/java/lang/Exception.java",
+        "ojluni/src/main/java/java/lang/Float.java",
+        "ojluni/src/main/java/java/lang/FunctionalInterface.java",
+        "ojluni/src/main/java/java/lang/IllegalAccessError.java",
+        "ojluni/src/main/java/java/lang/IllegalAccessException.java",
+        "ojluni/src/main/java/java/lang/IllegalArgumentException.java",
+        "ojluni/src/main/java/java/lang/IllegalMonitorStateException.java",
+        "ojluni/src/main/java/java/lang/IllegalStateException.java",
+        "ojluni/src/main/java/java/lang/IllegalThreadStateException.java",
+        "ojluni/src/main/java/java/lang/IncompatibleClassChangeError.java",
+        "ojluni/src/main/java/java/lang/IndexOutOfBoundsException.java",
+        "ojluni/src/main/java/java/lang/InheritableThreadLocal.java",
+        "ojluni/src/main/java/java/lang/InstantiationError.java",
+        "ojluni/src/main/java/java/lang/InstantiationException.java",
+        "ojluni/src/main/java/java/lang/Integer.java",
+        "ojluni/src/main/java/java/lang/InternalError.java",
+        "ojluni/src/main/java/java/lang/InterruptedException.java",
+        "ojluni/src/main/java/java/lang/Iterable.java",
+        "ojluni/src/main/java/java/lang/LinkageError.java",
+        "ojluni/src/main/java/java/lang/Long.java",
+        "ojluni/src/main/java/java/lang/Math.java",
+        "ojluni/src/main/java/java/lang/NegativeArraySizeException.java",
+        "ojluni/src/main/java/java/lang/NoClassDefFoundError.java",
+        "ojluni/src/main/java/java/lang/NoSuchFieldError.java",
+        "ojluni/src/main/java/java/lang/NoSuchFieldException.java",
+        "ojluni/src/main/java/java/lang/NoSuchMethodError.java",
+        "ojluni/src/main/java/java/lang/NoSuchMethodException.java",
+        "ojluni/src/main/java/java/lang/NullPointerException.java",
+        "ojluni/src/main/java/java/lang/NumberFormatException.java",
+        "ojluni/src/main/java/java/lang/Number.java",
+        "ojluni/src/main/java/java/lang/Object.java",
+        "ojluni/src/main/java/java/lang/OutOfMemoryError.java",
+        "ojluni/src/main/java/java/lang/Override.java",
+        "ojluni/src/main/java/java/lang/Package.java",
+        "ojluni/src/main/java/java/lang/ProcessBuilder.java",
+        "ojluni/src/main/java/java/lang/ProcessEnvironment.java",
+        "ojluni/src/main/java/java/lang/ProcessImpl.java",
+        "ojluni/src/main/java/java/lang/Process.java",
+        "ojluni/src/main/java/java/lang/Readable.java",
+        "ojluni/src/main/java/java/lang/package-info.java",
+        "ojluni/src/main/java/java/lang/reflect/AccessibleObject.java",
+        "ojluni/src/main/java/java/lang/reflect/AnnotatedElement.java",
+        "ojluni/src/main/java/java/lang/reflect/Array.java",
+        "ojluni/src/main/java/java/lang/reflect/Constructor.java",
+        "ojluni/src/main/java/java/lang/reflect/Field.java",
+        "ojluni/src/main/java/java/lang/reflect/Executable.java",
+        "ojluni/src/main/java/java/lang/reflect/GenericArrayType.java",
+        "ojluni/src/main/java/java/lang/reflect/GenericDeclaration.java",
+        "ojluni/src/main/java/java/lang/reflect/GenericSignatureFormatError.java",
+        "ojluni/src/main/java/java/lang/reflect/InvocationHandler.java",
+        "ojluni/src/main/java/java/lang/reflect/InvocationTargetException.java",
+        "ojluni/src/main/java/java/lang/ReflectiveOperationException.java",
+        "ojluni/src/main/java/java/lang/reflect/MalformedParameterizedTypeException.java",
+        "ojluni/src/main/java/java/lang/reflect/MalformedParametersException.java",
+        "ojluni/src/main/java/java/lang/reflect/Member.java",
+        "ojluni/src/main/java/java/lang/reflect/Method.java",
+        "ojluni/src/main/java/java/lang/reflect/Modifier.java",
+        "ojluni/src/main/java/java/lang/reflect/Parameter.java",
+        "ojluni/src/main/java/java/lang/reflect/ParameterizedType.java",
+        "ojluni/src/main/java/java/lang/reflect/Proxy.java",
+        "ojluni/src/main/java/java/lang/reflect/ReflectPermission.java",
+        "ojluni/src/main/java/java/lang/reflect/Type.java",
+        "ojluni/src/main/java/java/lang/reflect/TypeVariable.java",
+        "ojluni/src/main/java/java/lang/reflect/UndeclaredThrowableException.java",
+        "ojluni/src/main/java/java/lang/reflect/WeakCache.java",
+        "ojluni/src/main/java/java/lang/reflect/WildcardType.java",
+        "ojluni/src/main/java/java/lang/reflect/package-info.java",
+        "ojluni/src/main/java/java/lang/ref/PhantomReference.java",
+        "ojluni/src/main/java/java/lang/ref/Reference.java",
+        "ojluni/src/main/java/java/lang/ref/ReferenceQueue.java",
+        "ojluni/src/main/java/java/lang/ref/SoftReference.java",
+        "ojluni/src/main/java/java/lang/ref/WeakReference.java",
+        "ojluni/src/main/java/java/lang/ref/package-info.java",
+        "ojluni/src/main/java/java/lang/Runnable.java",
+        "ojluni/src/main/java/java/lang/RuntimeException.java",
+        "ojluni/src/main/java/java/lang/Runtime.java",
+        "ojluni/src/main/java/java/lang/RuntimePermission.java",
+        "ojluni/src/main/java/java/lang/SafeVarargs.java",
+        "ojluni/src/main/java/java/lang/SecurityException.java",
+        "ojluni/src/main/java/java/lang/SecurityManager.java",
+        "ojluni/src/main/java/java/lang/Short.java",
+        "ojluni/src/main/java/java/lang/StackOverflowError.java",
+        "ojluni/src/main/java/java/lang/StackTraceElement.java",
+        "ojluni/src/main/java/java/lang/StrictMath.java",
+        "ojluni/src/main/java/java/lang/StringBuffer.java",
+        "ojluni/src/main/java/java/lang/StringBuilder.java",
+        "ojluni/src/main/java/java/lang/StringCoding.java",
+        "ojluni/src/main/java/java/lang/StringIndexOutOfBoundsException.java",
+        "ojluni/src/main/java/java/lang/String.java",
+        "ojluni/src/main/java/java/lang/SuppressWarnings.java",
+        "ojluni/src/main/java/java/lang/System.java",
+        "ojluni/src/main/java/java/lang/ThreadDeath.java",
+        "ojluni/src/main/java/java/lang/ThreadGroup.java",
+        "ojluni/src/main/java/java/lang/Thread.java",
+        "ojluni/src/main/java/java/lang/ThreadLocal.java",
+        "ojluni/src/main/java/java/lang/Throwable.java",
+        "ojluni/src/main/java/java/lang/TypeNotPresentException.java",
+        "ojluni/src/main/java/java/lang/UNIXProcess.java",
+        "ojluni/src/main/java/java/lang/UnknownError.java",
+        "ojluni/src/main/java/java/lang/UnsatisfiedLinkError.java",
+        "ojluni/src/main/java/java/lang/UnsupportedClassVersionError.java",
+        "ojluni/src/main/java/java/lang/UnsupportedOperationException.java",
+        "ojluni/src/main/java/java/lang/VerifyError.java",
+        "ojluni/src/main/java/java/lang/VirtualMachineError.java",
+        "ojluni/src/main/java/java/lang/Void.java",
+        "ojluni/src/main/java/java/lang/invoke/LambdaConversionException.java",
+        "ojluni/src/main/java/java/lang/invoke/CallSite.java",
+        "ojluni/src/main/java/java/lang/invoke/ConstantCallSite.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodHandle.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodHandles.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodHandleImpl.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodType.java",
+        "ojluni/src/main/java/java/lang/invoke/MethodTypeForm.java",
+        "ojluni/src/main/java/java/lang/invoke/MutableCallSite.java",
+        "ojluni/src/main/java/java/lang/invoke/Stable.java",
+        "ojluni/src/main/java/java/lang/invoke/Transformers.java",
+        "ojluni/src/main/java/java/lang/invoke/VarHandle.java",
+        "ojluni/src/main/java/java/lang/invoke/VolatileCallSite.java",
+        "ojluni/src/main/java/java/lang/invoke/WrongMethodTypeException.java",
+        "ojluni/src/main/java/java/net/AbstractPlainDatagramSocketImpl.java",
+        "ojluni/src/main/java/java/net/AbstractPlainSocketImpl.java",
+        "ojluni/src/main/java/java/net/Authenticator.java",
+        "ojluni/src/main/java/java/net/BindException.java",
+        "ojluni/src/main/java/java/net/CacheRequest.java",
+        "ojluni/src/main/java/java/net/CacheResponse.java",
+        "ojluni/src/main/java/java/net/ConnectException.java",
+        "ojluni/src/main/java/java/net/ContentHandlerFactory.java",
+        "ojluni/src/main/java/java/net/ContentHandler.java",
+        "ojluni/src/main/java/java/net/CookieHandler.java",
+        "ojluni/src/main/java/java/net/CookieManager.java",
+        "ojluni/src/main/java/java/net/CookiePolicy.java",
+        "ojluni/src/main/java/java/net/CookieStore.java",
+        "ojluni/src/main/java/java/net/DatagramPacket.java",
+        "ojluni/src/main/java/java/net/DatagramSocketImplFactory.java",
+        "ojluni/src/main/java/java/net/DatagramSocketImpl.java",
+        "ojluni/src/main/java/java/net/DatagramSocket.java",
+        "ojluni/src/main/java/java/net/DefaultDatagramSocketImplFactory.java",
+        "ojluni/src/main/java/java/net/DefaultInterface.java",
+        "ojluni/src/main/java/java/net/FileNameMap.java",
+        "ojluni/src/main/java/java/net/HttpCookie.java",
+        "ojluni/src/main/java/java/net/HttpRetryException.java",
+        "ojluni/src/main/java/java/net/HttpURLConnection.java",
+        "ojluni/src/main/java/java/net/IDN.java",
+        "ojluni/src/main/java/java/net/Inet4Address.java",
+        "ojluni/src/main/java/java/net/Inet6AddressImpl.java",
+        "ojluni/src/main/java/java/net/Inet6Address.java",
+        "ojluni/src/main/java/java/net/InetAddressContainer.java",
+        "ojluni/src/main/java/java/net/InetAddressImpl.java",
+        "ojluni/src/main/java/java/net/InetAddress.java",
+        "ojluni/src/main/java/java/net/InetSocketAddress.java",
+        "ojluni/src/main/java/java/net/InMemoryCookieStore.java",
+        "ojluni/src/main/java/java/net/InterfaceAddress.java",
+        "ojluni/src/main/java/java/net/JarURLConnection.java",
+        "ojluni/src/main/java/java/net/MalformedURLException.java",
+        "ojluni/src/main/java/java/net/MulticastSocket.java",
+        "ojluni/src/main/java/java/net/NetPermission.java",
+        "ojluni/src/main/java/java/net/NetworkInterface.java",
+        "ojluni/src/main/java/java/net/NoRouteToHostException.java",
+        "ojluni/src/main/java/java/net/PasswordAuthentication.java",
+        "ojluni/src/main/java/java/net/PlainDatagramSocketImpl.java",
+        "ojluni/src/main/java/java/net/PlainSocketImpl.java",
+        "ojluni/src/main/java/java/net/PortUnreachableException.java",
+        "ojluni/src/main/java/java/net/ProtocolException.java",
+        "ojluni/src/main/java/java/net/ProtocolFamily.java",
+        "ojluni/src/main/java/java/net/Proxy.java",
+        "ojluni/src/main/java/java/net/ProxySelector.java",
+        "ojluni/src/main/java/java/net/ResponseCache.java",
+        "ojluni/src/main/java/java/net/SecureCacheResponse.java",
+        "ojluni/src/main/java/java/net/ServerSocket.java",
+        "ojluni/src/main/java/java/net/SocketAddress.java",
+        "ojluni/src/main/java/java/net/SocketException.java",
+        "ojluni/src/main/java/java/net/SocketImplFactory.java",
+        "ojluni/src/main/java/java/net/SocketImpl.java",
+        "ojluni/src/main/java/java/net/SocketInputStream.java",
+        "ojluni/src/main/java/java/net/Socket.java",
+        "ojluni/src/main/java/java/net/SocketOption.java",
+        "ojluni/src/main/java/java/net/SocketOptions.java",
+        "ojluni/src/main/java/java/net/SocketOutputStream.java",
+        "ojluni/src/main/java/java/net/SocketPermission.java",
+        "ojluni/src/main/java/java/net/SocketSecrets.java",
+        "ojluni/src/main/java/java/net/SocketTimeoutException.java",
+        "ojluni/src/main/java/java/net/SocksConsts.java",
+        "ojluni/src/main/java/java/net/SocksSocketImpl.java",
+        "ojluni/src/main/java/java/net/StandardProtocolFamily.java",
+        "ojluni/src/main/java/java/net/StandardSocketOptions.java",
+        "ojluni/src/main/java/java/net/UnknownHostException.java",
+        "ojluni/src/main/java/java/net/UnknownServiceException.java",
+        "ojluni/src/main/java/java/net/URI.java",
+        "ojluni/src/main/java/java/net/URISyntaxException.java",
+        "ojluni/src/main/java/java/net/URLClassLoader.java",
+        "ojluni/src/main/java/java/net/URLConnection.java",
+        "ojluni/src/main/java/java/net/URLDecoder.java",
+        "ojluni/src/main/java/java/net/URLEncoder.java",
+        "ojluni/src/main/java/java/net/URL.java",
+        "ojluni/src/main/java/java/net/URLStreamHandlerFactory.java",
+        "ojluni/src/main/java/java/net/URLStreamHandler.java",
+        "ojluni/src/main/java/java/net/package-info.java",
+        "ojluni/src/main/java/java/nio/Bits.java",
+        "ojluni/src/main/java/java/nio/Buffer.java",
+        "ojluni/src/main/java/java/nio/BufferOverflowException.java",
+        "ojluni/src/main/java/java/nio/BufferUnderflowException.java",
+        "ojluni/src/main/java/java/nio/ByteBufferAsCharBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteBufferAsDoubleBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteBufferAsFloatBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteBufferAsIntBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteBufferAsLongBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteBufferAsShortBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteBuffer.java",
+        "ojluni/src/main/java/java/nio/ByteOrder.java",
+        "ojluni/src/main/java/java/nio/channels/AcceptPendingException.java",
+        "ojluni/src/main/java/java/nio/channels/AlreadyBoundException.java",
+        "ojluni/src/main/java/java/nio/channels/AlreadyConnectedException.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousChannelGroup.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousChannel.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousCloseException.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousFileChannel.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousServerSocketChannel.java",
+        "ojluni/src/main/java/java/nio/channels/AsynchronousSocketChannel.java",
+        "ojluni/src/main/java/java/nio/channels/ByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/CancelledKeyException.java",
+        "ojluni/src/main/java/java/nio/channels/Channel.java",
+        "ojluni/src/main/java/java/nio/channels/Channels.java",
+        "ojluni/src/main/java/java/nio/channels/ClosedByInterruptException.java",
+        "ojluni/src/main/java/java/nio/channels/ClosedChannelException.java",
+        "ojluni/src/main/java/java/nio/channels/ClosedSelectorException.java",
+        "ojluni/src/main/java/java/nio/channels/CompletionHandler.java",
+        "ojluni/src/main/java/java/nio/channels/ConnectionPendingException.java",
+        "ojluni/src/main/java/java/nio/channels/DatagramChannel.java",
+        "ojluni/src/main/java/java/nio/channels/FileChannel.java",
+        "ojluni/src/main/java/java/nio/channels/FileLockInterruptionException.java",
+        "ojluni/src/main/java/java/nio/channels/FileLock.java",
+        "ojluni/src/main/java/java/nio/channels/GatheringByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/IllegalBlockingModeException.java",
+        "ojluni/src/main/java/java/nio/channels/IllegalChannelGroupException.java",
+        "ojluni/src/main/java/java/nio/channels/IllegalSelectorException.java",
+        "ojluni/src/main/java/java/nio/channels/InterruptedByTimeoutException.java",
+        "ojluni/src/main/java/java/nio/channels/InterruptibleChannel.java",
+        "ojluni/src/main/java/java/nio/channels/MembershipKey.java",
+        "ojluni/src/main/java/java/nio/channels/package-info.java",
+        "ojluni/src/main/java/java/nio/CharBuffer.java",
+        "ojluni/src/main/java/java/nio/CharBufferSpliterator.java",
+        "ojluni/src/main/java/java/nio/DirectByteBuffer.java",
+        "ojluni/src/main/java/java/nio/DoubleBuffer.java",
+        "ojluni/src/main/java/java/nio/FloatBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapByteBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapCharBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapDoubleBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapFloatBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapIntBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapLongBuffer.java",
+        "ojluni/src/main/java/java/nio/HeapShortBuffer.java",
+        "ojluni/src/main/java/java/nio/IntBuffer.java",
+        "ojluni/src/main/java/java/nio/InvalidMarkException.java",
+        "ojluni/src/main/java/java/nio/LongBuffer.java",
+        "ojluni/src/main/java/java/nio/MappedByteBuffer.java",
+        "ojluni/src/main/java/java/nio/ReadOnlyBufferException.java",
+        "ojluni/src/main/java/java/nio/ShortBuffer.java",
+        "ojluni/src/main/java/java/nio/StringCharBuffer.java",
+        "ojluni/src/main/java/java/nio/channels/MulticastChannel.java",
+        "ojluni/src/main/java/java/nio/channels/NetworkChannel.java",
+        "ojluni/src/main/java/java/nio/channels/NoConnectionPendingException.java",
+        "ojluni/src/main/java/java/nio/channels/NonReadableChannelException.java",
+        "ojluni/src/main/java/java/nio/channels/NonWritableChannelException.java",
+        "ojluni/src/main/java/java/nio/channels/NotYetBoundException.java",
+        "ojluni/src/main/java/java/nio/channels/NotYetConnectedException.java",
+        "ojluni/src/main/java/java/nio/channels/OverlappingFileLockException.java",
+        "ojluni/src/main/java/java/nio/channels/Pipe.java",
+        "ojluni/src/main/java/java/nio/channels/ReadPendingException.java",
+        "ojluni/src/main/java/java/nio/channels/ReadableByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/ScatteringByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/SeekableByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/SelectableChannel.java",
+        "ojluni/src/main/java/java/nio/channels/SelectionKey.java",
+        "ojluni/src/main/java/java/nio/channels/Selector.java",
+        "ojluni/src/main/java/java/nio/channels/ServerSocketChannel.java",
+        "ojluni/src/main/java/java/nio/channels/ShutdownChannelGroupException.java",
+        "ojluni/src/main/java/java/nio/channels/SocketChannel.java",
+        "ojluni/src/main/java/java/nio/channels/UnresolvedAddressException.java",
+        "ojluni/src/main/java/java/nio/channels/UnsupportedAddressTypeException.java",
+        "ojluni/src/main/java/java/nio/channels/WritableByteChannel.java",
+        "ojluni/src/main/java/java/nio/channels/WritePendingException.java",
+        "ojluni/src/main/java/java/nio/channels/spi/AbstractInterruptibleChannel.java",
+        "ojluni/src/main/java/java/nio/channels/spi/AbstractSelectableChannel.java",
+        "ojluni/src/main/java/java/nio/channels/spi/AbstractSelectionKey.java",
+        "ojluni/src/main/java/java/nio/channels/spi/AbstractSelector.java",
+        "ojluni/src/main/java/java/nio/channels/spi/AsynchronousChannelProvider.java",
+        "ojluni/src/main/java/java/nio/channels/spi/SelectorProvider.java",
+        "ojluni/src/main/java/java/nio/charset/CharacterCodingException.java",
+        "ojluni/src/main/java/java/nio/charset/Charset.java",
+        "ojluni/src/main/java/java/nio/charset/CharsetDecoder.java",
+        "ojluni/src/main/java/java/nio/charset/CharsetEncoder.java",
+        "ojluni/src/main/java/java/nio/charset/CoderMalfunctionError.java",
+        "ojluni/src/main/java/java/nio/charset/CoderResult.java",
+        "ojluni/src/main/java/java/nio/charset/CodingErrorAction.java",
+        "ojluni/src/main/java/java/nio/charset/IllegalCharsetNameException.java",
+        "ojluni/src/main/java/java/nio/charset/MalformedInputException.java",
+        "ojluni/src/main/java/java/nio/charset/StandardCharsets.java",
+        "ojluni/src/main/java/java/nio/charset/UnmappableCharacterException.java",
+        "ojluni/src/main/java/java/nio/charset/UnsupportedCharsetException.java",
+        "ojluni/src/main/java/java/nio/charset/package-info.java",
+        "ojluni/src/main/java/java/nio/charset/spi/CharsetProvider.java",
+        "ojluni/src/main/java/java/nio/file/AccessDeniedException.java",
+        "ojluni/src/main/java/java/nio/file/AccessMode.java",
+        "ojluni/src/main/java/java/nio/file/AtomicMoveNotSupportedException.java",
+        "ojluni/src/main/java/java/nio/file/ClosedDirectoryStreamException.java",
+        "ojluni/src/main/java/java/nio/file/ClosedFileSystemException.java",
+        "ojluni/src/main/java/java/nio/file/ClosedWatchServiceException.java",
+        "ojluni/src/main/java/java/nio/file/CopyMoveHelper.java",
+        "ojluni/src/main/java/java/nio/file/CopyOption.java",
+        "ojluni/src/main/java/java/nio/file/DirectoryIteratorException.java",
+        "ojluni/src/main/java/java/nio/file/DirectoryNotEmptyException.java",
+        "ojluni/src/main/java/java/nio/file/DirectoryStream.java",
+        "ojluni/src/main/java/java/nio/file/FileAlreadyExistsException.java",
+        "ojluni/src/main/java/java/nio/file/FileStore.java",
+        "ojluni/src/main/java/java/nio/file/FileSystem.java",
+        "ojluni/src/main/java/java/nio/file/FileSystemAlreadyExistsException.java",
+        "ojluni/src/main/java/java/nio/file/FileSystemException.java",
+        "ojluni/src/main/java/java/nio/file/FileSystemLoopException.java",
+        "ojluni/src/main/java/java/nio/file/FileSystemNotFoundException.java",
+        "ojluni/src/main/java/java/nio/file/FileSystems.java",
+        "ojluni/src/main/java/java/nio/file/FileTreeIterator.java",
+        "ojluni/src/main/java/java/nio/file/FileTreeWalker.java",
+        "ojluni/src/main/java/java/nio/file/FileVisitOption.java",
+        "ojluni/src/main/java/java/nio/file/FileVisitResult.java",
+        "ojluni/src/main/java/java/nio/file/FileVisitor.java",
+        "ojluni/src/main/java/java/nio/file/Files.java",
+        "ojluni/src/main/java/java/nio/file/InvalidPathException.java",
+        "ojluni/src/main/java/java/nio/file/LinkOption.java",
+        "ojluni/src/main/java/java/nio/file/LinkPermission.java",
+        "ojluni/src/main/java/java/nio/file/NoSuchFileException.java",
+        "ojluni/src/main/java/java/nio/file/NotDirectoryException.java",
+        "ojluni/src/main/java/java/nio/file/NotLinkException.java",
+        "ojluni/src/main/java/java/nio/file/OpenOption.java",
+        "ojluni/src/main/java/java/nio/file/Path.java",
+        "ojluni/src/main/java/java/nio/file/PathMatcher.java",
+        "ojluni/src/main/java/java/nio/file/Paths.java",
+        "ojluni/src/main/java/java/nio/file/ProviderMismatchException.java",
+        "ojluni/src/main/java/java/nio/file/ProviderNotFoundException.java",
+        "ojluni/src/main/java/java/nio/file/ReadOnlyFileSystemException.java",
+        "ojluni/src/main/java/java/nio/file/SecureDirectoryStream.java",
+        "ojluni/src/main/java/java/nio/file/SimpleFileVisitor.java",
+        "ojluni/src/main/java/java/nio/file/StandardCopyOption.java",
+        "ojluni/src/main/java/java/nio/file/StandardOpenOption.java",
+        "ojluni/src/main/java/java/nio/file/StandardWatchEventKinds.java",
+        "ojluni/src/main/java/java/nio/file/TempFileHelper.java",
+        "ojluni/src/main/java/java/nio/file/WatchEvent.java",
+        "ojluni/src/main/java/java/nio/file/WatchKey.java",
+        "ojluni/src/main/java/java/nio/file/WatchService.java",
+        "ojluni/src/main/java/java/nio/file/Watchable.java",
+        "ojluni/src/main/java/java/nio/file/attribute/AclEntry.java",
+        "ojluni/src/main/java/java/nio/file/attribute/AclEntryFlag.java",
+        "ojluni/src/main/java/java/nio/file/attribute/AclEntryPermission.java",
+        "ojluni/src/main/java/java/nio/file/attribute/AclEntryType.java",
+        "ojluni/src/main/java/java/nio/file/attribute/AclFileAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/AttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/BasicFileAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/BasicFileAttributes.java",
+        "ojluni/src/main/java/java/nio/file/attribute/DosFileAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/DosFileAttributes.java",
+        "ojluni/src/main/java/java/nio/file/attribute/FileAttribute.java",
+        "ojluni/src/main/java/java/nio/file/attribute/FileAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/FileOwnerAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/FileStoreAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/FileTime.java",
+        "ojluni/src/main/java/java/nio/file/attribute/GroupPrincipal.java",
+        "ojluni/src/main/java/java/nio/file/attribute/PosixFileAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/PosixFileAttributes.java",
+        "ojluni/src/main/java/java/nio/file/attribute/PosixFilePermission.java",
+        "ojluni/src/main/java/java/nio/file/attribute/PosixFilePermissions.java",
+        "ojluni/src/main/java/java/nio/file/attribute/UserDefinedFileAttributeView.java",
+        "ojluni/src/main/java/java/nio/file/attribute/UserPrincipal.java",
+        "ojluni/src/main/java/java/nio/file/attribute/UserPrincipalLookupService.java",
+        "ojluni/src/main/java/java/nio/file/attribute/UserPrincipalNotFoundException.java",
+        "ojluni/src/main/java/java/nio/file/spi/FileSystemProvider.java",
+        "ojluni/src/main/java/java/nio/file/spi/FileTypeDetector.java",
+        "ojluni/src/main/java/java/nio/package-info.java",
+        "ojluni/src/main/java/java/security/package-info.java",
+        "ojluni/src/main/java/java/security/AccessControlContext.java",
+        "ojluni/src/main/java/java/security/AccessControlException.java",
+        "ojluni/src/main/java/java/security/AccessController.java",
+        "ojluni/src/main/java/java/security/acl/AclEntry.java",
+        "ojluni/src/main/java/java/security/acl/Acl.java",
+        "ojluni/src/main/java/java/security/acl/AclNotFoundException.java",
+        "ojluni/src/main/java/java/security/acl/Group.java",
+        "ojluni/src/main/java/java/security/acl/LastOwnerException.java",
+        "ojluni/src/main/java/java/security/acl/NotOwnerException.java",
+        "ojluni/src/main/java/java/security/acl/Owner.java",
+        "ojluni/src/main/java/java/security/acl/Permission.java",
+        "ojluni/src/main/java/java/security/acl/package-info.java",
+        "ojluni/src/main/java/java/security/AlgorithmConstraints.java",
+        "ojluni/src/main/java/java/security/AlgorithmParameterGenerator.java",
+        "ojluni/src/main/java/java/security/AlgorithmParameterGeneratorSpi.java",
+        "ojluni/src/main/java/java/security/AlgorithmParameters.java",
+        "ojluni/src/main/java/java/security/AlgorithmParametersSpi.java",
+        "ojluni/src/main/java/java/security/AllPermission.java",
+        "ojluni/src/main/java/java/security/AuthProvider.java",
+        "ojluni/src/main/java/java/security/BasicPermission.java",
+        "ojluni/src/main/java/java/security/cert/CertificateEncodingException.java",
+        "ojluni/src/main/java/java/security/cert/CertificateException.java",
+        "ojluni/src/main/java/java/security/cert/CertificateExpiredException.java",
+        "ojluni/src/main/java/java/security/cert/CertificateFactory.java",
+        "ojluni/src/main/java/java/security/cert/CertificateFactorySpi.java",
+        "ojluni/src/main/java/java/security/cert/Certificate.java",
+        "ojluni/src/main/java/java/security/cert/CertificateNotYetValidException.java",
+        "ojluni/src/main/java/java/security/cert/CertificateParsingException.java",
+        "ojluni/src/main/java/java/security/cert/CertificateRevokedException.java",
+        "ojluni/src/main/java/java/security/cert/CertPathBuilderException.java",
+        "ojluni/src/main/java/java/security/cert/CertPathBuilder.java",
+        "ojluni/src/main/java/java/security/cert/CertPathBuilderResult.java",
+        "ojluni/src/main/java/java/security/cert/CertPathBuilderSpi.java",
+        "ojluni/src/main/java/java/security/cert/CertPathHelperImpl.java",
+        "ojluni/src/main/java/java/security/cert/CertPath.java",
+        "ojluni/src/main/java/java/security/cert/CertPathChecker.java",
+        "ojluni/src/main/java/java/security/cert/CertPathParameters.java",
+        "ojluni/src/main/java/java/security/cert/CertPathValidatorException.java",
+        "ojluni/src/main/java/java/security/cert/CertPathValidator.java",
+        "ojluni/src/main/java/java/security/cert/CertPathValidatorResult.java",
+        "ojluni/src/main/java/java/security/cert/CertPathValidatorSpi.java",
+        "ojluni/src/main/java/java/security/cert/CertSelector.java",
+        "ojluni/src/main/java/java/security/cert/CertStoreException.java",
+        "ojluni/src/main/java/java/security/cert/CertStore.java",
+        "ojluni/src/main/java/java/security/cert/CertStoreParameters.java",
+        "ojluni/src/main/java/java/security/cert/CertStoreSpi.java",
+        "ojluni/src/main/java/java/security/cert/CollectionCertStoreParameters.java",
+        "ojluni/src/main/java/java/security/cert/CRLException.java",
+        "ojluni/src/main/java/java/security/cert/CRL.java",
+        "ojluni/src/main/java/java/security/cert/CRLSelector.java",
+        "ojluni/src/main/java/java/security/cert/CRLReason.java",
+        "ojluni/src/main/java/java/security/cert/Extension.java",
+        "ojluni/src/main/java/java/security/Certificate.java",
+        "ojluni/src/main/java/java/security/cert/LDAPCertStoreParameters.java",
+        "ojluni/src/main/java/java/security/cert/PKIXBuilderParameters.java",
+        "ojluni/src/main/java/java/security/cert/PKIXCertPathBuilderResult.java",
+        "ojluni/src/main/java/java/security/cert/PKIXCertPathChecker.java",
+        "ojluni/src/main/java/java/security/cert/PKIXCertPathValidatorResult.java",
+        "ojluni/src/main/java/java/security/cert/PKIXParameters.java",
+        "ojluni/src/main/java/java/security/cert/PKIXReason.java",
+        "ojluni/src/main/java/java/security/cert/PKIXRevocationChecker.java",
+        "ojluni/src/main/java/java/security/cert/PolicyNode.java",
+        "ojluni/src/main/java/java/security/cert/PolicyQualifierInfo.java",
+        "ojluni/src/main/java/java/security/cert/TrustAnchor.java",
+        "ojluni/src/main/java/java/security/cert/X509Certificate.java",
+        "ojluni/src/main/java/java/security/cert/X509CertSelector.java",
+        "ojluni/src/main/java/java/security/cert/X509CRLEntry.java",
+        "ojluni/src/main/java/java/security/cert/X509CRL.java",
+        "ojluni/src/main/java/java/security/cert/X509CRLSelector.java",
+        "ojluni/src/main/java/java/security/cert/X509Extension.java",
+        "ojluni/src/main/java/java/security/cert/package-info.java",
+        "ojluni/src/main/java/java/security/CodeSigner.java",
+        "ojluni/src/main/java/java/security/CodeSource.java",
+        "ojluni/src/main/java/java/security/CryptoPrimitive.java",
+        "ojluni/src/main/java/java/security/DigestException.java",
+        "ojluni/src/main/java/java/security/DigestInputStream.java",
+        "ojluni/src/main/java/java/security/DigestOutputStream.java",
+        "ojluni/src/main/java/java/security/DomainCombiner.java",
+        "ojluni/src/main/java/java/security/DomainLoadStoreParameter.java",
+        "ojluni/src/main/java/java/security/GeneralSecurityException.java",
+        "ojluni/src/main/java/java/security/GuardedObject.java",
+        "ojluni/src/main/java/java/security/Guard.java",
+        "ojluni/src/main/java/java/security/Identity.java",
+        "ojluni/src/main/java/java/security/IdentityScope.java",
+        "ojluni/src/main/java/java/security/interfaces/DSAKey.java",
+        "ojluni/src/main/java/java/security/interfaces/DSAKeyPairGenerator.java",
+        "ojluni/src/main/java/java/security/interfaces/DSAParams.java",
+        "ojluni/src/main/java/java/security/interfaces/DSAPrivateKey.java",
+        "ojluni/src/main/java/java/security/interfaces/DSAPublicKey.java",
+        "ojluni/src/main/java/java/security/interfaces/ECKey.java",
+        "ojluni/src/main/java/java/security/interfaces/ECPrivateKey.java",
+        "ojluni/src/main/java/java/security/interfaces/ECPublicKey.java",
+        "ojluni/src/main/java/java/security/interfaces/RSAKey.java",
+        "ojluni/src/main/java/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java",
+        "ojluni/src/main/java/java/security/interfaces/RSAPrivateCrtKey.java",
+        "ojluni/src/main/java/java/security/interfaces/RSAPrivateKey.java",
+        "ojluni/src/main/java/java/security/interfaces/RSAPublicKey.java",
+        "ojluni/src/main/java/java/security/interfaces/package-info.java",
+        "ojluni/src/main/java/java/security/InvalidAlgorithmParameterException.java",
+        "ojluni/src/main/java/java/security/InvalidKeyException.java",
+        "ojluni/src/main/java/java/security/InvalidParameterException.java",
+        "ojluni/src/main/java/java/security/KeyException.java",
+        "ojluni/src/main/java/java/security/KeyFactory.java",
+        "ojluni/src/main/java/java/security/KeyFactorySpi.java",
+        "ojluni/src/main/java/java/security/Key.java",
+        "ojluni/src/main/java/java/security/KeyManagementException.java",
+        "ojluni/src/main/java/java/security/KeyPairGenerator.java",
+        "ojluni/src/main/java/java/security/KeyPairGeneratorSpi.java",
+        "ojluni/src/main/java/java/security/KeyPair.java",
+        "ojluni/src/main/java/java/security/KeyRep.java",
+        "ojluni/src/main/java/java/security/KeyStoreException.java",
+        "ojluni/src/main/java/java/security/KeyStore.java",
+        "ojluni/src/main/java/java/security/KeyStoreSpi.java",
+        "ojluni/src/main/java/java/security/MessageDigest.java",
+        "ojluni/src/main/java/java/security/MessageDigestSpi.java",
+        "ojluni/src/main/java/java/security/NoSuchAlgorithmException.java",
+        "ojluni/src/main/java/java/security/NoSuchProviderException.java",
+        "ojluni/src/main/java/java/security/PKCS12Attribute.java",
+        "ojluni/src/main/java/java/security/PermissionCollection.java",
+        "ojluni/src/main/java/java/security/Permission.java",
+        "ojluni/src/main/java/java/security/Permissions.java",
+        "ojluni/src/main/java/java/security/Policy.java",
+        "ojluni/src/main/java/java/security/PolicySpi.java",
+        "ojluni/src/main/java/java/security/Principal.java",
+        "ojluni/src/main/java/java/security/PrivateKey.java",
+        "ojluni/src/main/java/java/security/PrivilegedActionException.java",
+        "ojluni/src/main/java/java/security/PrivilegedAction.java",
+        "ojluni/src/main/java/java/security/PrivilegedExceptionAction.java",
+        "ojluni/src/main/java/java/security/ProtectionDomain.java",
+        "ojluni/src/main/java/java/security/ProviderException.java",
+        "ojluni/src/main/java/java/security/Provider.java",
+        "ojluni/src/main/java/java/security/PublicKey.java",
+        "ojluni/src/main/java/java/security/SecureClassLoader.java",
+        "ojluni/src/main/java/java/security/SecureRandom.java",
+        "ojluni/src/main/java/java/security/SecureRandomSpi.java",
+        "ojluni/src/main/java/java/security/Security.java",
+        "ojluni/src/main/java/java/security/SecurityPermission.java",
+        "ojluni/src/main/java/java/security/SignatureException.java",
+        "ojluni/src/main/java/java/security/Signature.java",
+        "ojluni/src/main/java/java/security/SignatureSpi.java",
+        "ojluni/src/main/java/java/security/SignedObject.java",
+        "ojluni/src/main/java/java/security/Signer.java",
+        "ojluni/src/main/java/java/security/spec/AlgorithmParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/DSAParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/DSAPrivateKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/DSAPublicKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/ECFieldF2m.java",
+        "ojluni/src/main/java/java/security/spec/ECFieldFp.java",
+        "ojluni/src/main/java/java/security/spec/ECField.java",
+        "ojluni/src/main/java/java/security/spec/ECGenParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/ECParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/ECPoint.java",
+        "ojluni/src/main/java/java/security/spec/ECPrivateKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/ECPublicKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/EllipticCurve.java",
+        "ojluni/src/main/java/java/security/spec/EncodedKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/InvalidKeySpecException.java",
+        "ojluni/src/main/java/java/security/spec/InvalidParameterSpecException.java",
+        "ojluni/src/main/java/java/security/spec/KeySpec.java",
+        "ojluni/src/main/java/java/security/spec/MGF1ParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/PKCS8EncodedKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/PSSParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/RSAKeyGenParameterSpec.java",
+        "ojluni/src/main/java/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/RSAOtherPrimeInfo.java",
+        "ojluni/src/main/java/java/security/spec/RSAPrivateCrtKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/RSAPrivateKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/RSAPublicKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/X509EncodedKeySpec.java",
+        "ojluni/src/main/java/java/security/spec/package-info.java",
+        "ojluni/src/main/java/java/security/Timestamp.java",
+        "ojluni/src/main/java/java/security/UnrecoverableEntryException.java",
+        "ojluni/src/main/java/java/security/UnrecoverableKeyException.java",
+        "ojluni/src/main/java/java/security/UnresolvedPermissionCollection.java",
+        "ojluni/src/main/java/java/security/UnresolvedPermission.java",
+        "ojluni/src/main/java/java/sql/Array.java",
+        "ojluni/src/main/java/java/sql/BatchUpdateException.java",
+        "ojluni/src/main/java/java/sql/Blob.java",
+        "ojluni/src/main/java/java/sql/CallableStatement.java",
+        "ojluni/src/main/java/java/sql/ClientInfoStatus.java",
+        "ojluni/src/main/java/java/sql/Clob.java",
+        "ojluni/src/main/java/java/sql/Connection.java",
+        "ojluni/src/main/java/java/sql/DatabaseMetaData.java",
+        "ojluni/src/main/java/java/sql/DataTruncation.java",
+        "ojluni/src/main/java/java/sql/Date.java",
+        "ojluni/src/main/java/java/sql/Driver.java",
+        "ojluni/src/main/java/java/sql/DriverManager.java",
+        "ojluni/src/main/java/java/sql/DriverPropertyInfo.java",
+        "ojluni/src/main/java/java/sql/NClob.java",
+        "ojluni/src/main/java/java/sql/ParameterMetaData.java",
+        "ojluni/src/main/java/java/sql/PreparedStatement.java",
+        "ojluni/src/main/java/java/sql/Ref.java",
+        "ojluni/src/main/java/java/sql/ResultSet.java",
+        "ojluni/src/main/java/java/sql/ResultSetMetaData.java",
+        "ojluni/src/main/java/java/sql/RowId.java",
+        "ojluni/src/main/java/java/sql/RowIdLifetime.java",
+        "ojluni/src/main/java/java/sql/Savepoint.java",
+        "ojluni/src/main/java/java/sql/SQLClientInfoException.java",
+        "ojluni/src/main/java/java/sql/SQLDataException.java",
+        "ojluni/src/main/java/java/sql/SQLData.java",
+        "ojluni/src/main/java/java/sql/SQLException.java",
+        "ojluni/src/main/java/java/sql/SQLFeatureNotSupportedException.java",
+        "ojluni/src/main/java/java/sql/SQLInput.java",
+        "ojluni/src/main/java/java/sql/SQLIntegrityConstraintViolationException.java",
+        "ojluni/src/main/java/java/sql/SQLInvalidAuthorizationSpecException.java",
+        "ojluni/src/main/java/java/sql/SQLNonTransientConnectionException.java",
+        "ojluni/src/main/java/java/sql/SQLNonTransientException.java",
+        "ojluni/src/main/java/java/sql/SQLOutput.java",
+        "ojluni/src/main/java/java/sql/SQLPermission.java",
+        "ojluni/src/main/java/java/sql/SQLRecoverableException.java",
+        "ojluni/src/main/java/java/sql/SQLSyntaxErrorException.java",
+        "ojluni/src/main/java/java/sql/SQLTimeoutException.java",
+        "ojluni/src/main/java/java/sql/SQLTransactionRollbackException.java",
+        "ojluni/src/main/java/java/sql/SQLTransientConnectionException.java",
+        "ojluni/src/main/java/java/sql/SQLTransientException.java",
+        "ojluni/src/main/java/java/sql/SQLWarning.java",
+        "ojluni/src/main/java/java/sql/SQLXML.java",
+        "ojluni/src/main/java/java/sql/Statement.java",
+        "ojluni/src/main/java/java/sql/Struct.java",
+        "ojluni/src/main/java/java/sql/Time.java",
+        "ojluni/src/main/java/java/sql/Timestamp.java",
+        "ojluni/src/main/java/java/sql/Types.java",
+        "ojluni/src/main/java/java/sql/Wrapper.java",
+        "ojluni/src/main/java/java/text/Annotation.java",
+        "ojluni/src/main/java/java/text/AttributedCharacterIterator.java",
+        "ojluni/src/main/java/java/text/AttributedString.java",
+        "ojluni/src/main/java/java/text/Bidi.java",
+        "ojluni/src/main/java/java/text/BreakIterator.java",
+        "ojluni/src/main/java/java/text/CalendarBuilder.java",
+        "ojluni/src/main/java/java/text/CharacterIteratorFieldDelegate.java",
+        "ojluni/src/main/java/java/text/CharacterIterator.java",
+        "ojluni/src/main/java/java/text/ChoiceFormat.java",
+        "ojluni/src/main/java/java/text/CollationElementIterator.java",
+        "ojluni/src/main/java/java/text/CollationKey.java",
+        "ojluni/src/main/java/java/text/Collator.java",
+        "ojluni/src/main/java/java/text/DateFormat.java",
+        "ojluni/src/main/java/java/text/DateFormatSymbols.java",
+        "ojluni/src/main/java/java/text/DecimalFormat.java",
+        "ojluni/src/main/java/java/text/DecimalFormatSymbols.java",
+        "ojluni/src/main/java/java/text/DontCareFieldPosition.java",
+        "ojluni/src/main/java/java/text/EntryPair.java",
+        "ojluni/src/main/java/java/text/FieldPosition.java",
+        "ojluni/src/main/java/java/text/Format.java",
+        "ojluni/src/main/java/java/text/MergeCollation.java",
+        "ojluni/src/main/java/java/text/MessageFormat.java",
+        "ojluni/src/main/java/java/text/Normalizer.java",
+        "ojluni/src/main/java/java/text/NumberFormat.java",
+        "ojluni/src/main/java/java/text/ParseException.java",
+        "ojluni/src/main/java/java/text/ParsePosition.java",
+        "ojluni/src/main/java/java/text/PatternEntry.java",
+        "ojluni/src/main/java/java/text/IcuIteratorWrapper.java",
+        "ojluni/src/main/java/java/text/RuleBasedCollator.java",
+        "ojluni/src/main/java/java/text/SimpleDateFormat.java",
+        "ojluni/src/main/java/java/text/StringCharacterIterator.java",
+        "ojluni/src/main/java/java/time/YearMonth.java",
+        "ojluni/src/main/java/java/time/LocalDate.java",
+        "ojluni/src/main/java/java/time/Ser.java",
+        "ojluni/src/main/java/java/time/DayOfWeek.java",
+        "ojluni/src/main/java/java/time/chrono/HijrahChronology.java",
+        "ojluni/src/main/java/java/time/chrono/Ser.java",
+        "ojluni/src/main/java/java/time/chrono/IsoEra.java",
+        "ojluni/src/main/java/java/time/chrono/JapaneseEra.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoPeriodImpl.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoLocalDate.java",
+        "ojluni/src/main/java/java/time/chrono/Chronology.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoLocalDateTimeImpl.java",
+        "ojluni/src/main/java/java/time/chrono/ThaiBuddhistChronology.java",
+        "ojluni/src/main/java/java/time/chrono/MinguoChronology.java",
+        "ojluni/src/main/java/java/time/chrono/JapaneseChronology.java",
+        "ojluni/src/main/java/java/time/chrono/Era.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoZonedDateTimeImpl.java",
+        "ojluni/src/main/java/java/time/chrono/JapaneseDate.java",
+        "ojluni/src/main/java/java/time/chrono/AbstractChronology.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoLocalDateImpl.java",
+        "ojluni/src/main/java/java/time/chrono/HijrahEra.java",
+        "ojluni/src/main/java/java/time/chrono/HijrahDate.java",
+        "ojluni/src/main/java/java/time/chrono/ThaiBuddhistDate.java",
+        "ojluni/src/main/java/java/time/chrono/IsoChronology.java",
+        "ojluni/src/main/java/java/time/chrono/MinguoEra.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoZonedDateTime.java",
+        "ojluni/src/main/java/java/time/chrono/package-info.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoPeriod.java",
+        "ojluni/src/main/java/java/time/chrono/ThaiBuddhistEra.java",
+        "ojluni/src/main/java/java/time/chrono/ChronoLocalDateTime.java",
+        "ojluni/src/main/java/java/time/chrono/MinguoDate.java",
+        "ojluni/src/main/java/java/time/DateTimeException.java",
+        "ojluni/src/main/java/java/time/ZoneRegion.java",
+        "ojluni/src/main/java/java/time/LocalTime.java",
+        "ojluni/src/main/java/java/time/Duration.java",
+        "ojluni/src/main/java/java/time/LocalDateTime.java",
+        "ojluni/src/main/java/java/time/OffsetDateTime.java",
+        "ojluni/src/main/java/java/time/Instant.java",
+        "ojluni/src/main/java/java/time/temporal/ValueRange.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalAmount.java",
+        "ojluni/src/main/java/java/time/temporal/ChronoField.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalAccessor.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalAdjusters.java",
+        "ojluni/src/main/java/java/time/temporal/ChronoUnit.java",
+        "ojluni/src/main/java/java/time/temporal/UnsupportedTemporalTypeException.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalQueries.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalAdjuster.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalField.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalQuery.java",
+        "ojluni/src/main/java/java/time/temporal/Temporal.java",
+        "ojluni/src/main/java/java/time/temporal/TemporalUnit.java",
+        "ojluni/src/main/java/java/time/temporal/package-info.java",
+        "ojluni/src/main/java/java/time/temporal/JulianFields.java",
+        "ojluni/src/main/java/java/time/temporal/WeekFields.java",
+        "ojluni/src/main/java/java/time/temporal/IsoFields.java",
+        "ojluni/src/main/java/java/time/ZoneOffset.java",
+        "ojluni/src/main/java/java/time/zone/Ser.java",
+        "ojluni/src/main/java/java/time/zone/ZoneOffsetTransition.java",
+        "ojluni/src/main/java/java/time/zone/ZoneRulesException.java",
+        "ojluni/src/main/java/java/time/zone/ZoneOffsetTransitionRule.java",
+        "ojluni/src/main/java/java/time/zone/ZoneRules.java",
+        "ojluni/src/main/java/java/time/zone/package-info.java",
+        "ojluni/src/main/java/java/time/OffsetTime.java",
+        "ojluni/src/main/java/java/time/Year.java",
+        "ojluni/src/main/java/java/time/Clock.java",
+        "ojluni/src/main/java/java/time/format/Parsed.java",
+        "ojluni/src/main/java/java/time/format/DateTimeTextProvider.java",
+        "ojluni/src/main/java/java/time/format/DateTimeParseException.java",
+        "ojluni/src/main/java/java/time/format/DateTimeFormatterBuilder.java",
+        "ojluni/src/main/java/java/time/format/ResolverStyle.java",
+        "ojluni/src/main/java/java/time/format/FormatStyle.java",
+        "ojluni/src/main/java/java/time/format/DecimalStyle.java",
+        "ojluni/src/main/java/java/time/format/DateTimePrintContext.java",
+        "ojluni/src/main/java/java/time/format/package-info.java",
+        "ojluni/src/main/java/java/time/format/ZoneName.java",
+        "ojluni/src/main/java/java/time/format/TextStyle.java",
+        "ojluni/src/main/java/java/time/format/DateTimeFormatter.java",
+        "ojluni/src/main/java/java/time/format/DateTimeParseContext.java",
+        "ojluni/src/main/java/java/time/format/SignStyle.java",
+        "ojluni/src/main/java/java/time/Period.java",
+        "ojluni/src/main/java/java/time/ZonedDateTime.java",
+        "ojluni/src/main/java/java/time/package-info.java",
+        "ojluni/src/main/java/java/time/Month.java",
+        "ojluni/src/main/java/java/time/ZoneId.java",
+        "ojluni/src/main/java/java/time/MonthDay.java",
+        "ojluni/src/main/java/java/util/AbstractCollection.java",
+        "ojluni/src/main/java/java/util/AbstractList.java",
+        "ojluni/src/main/java/java/util/AbstractMap.java",
+        "ojluni/src/main/java/java/util/AbstractQueue.java",
+        "ojluni/src/main/java/java/util/AbstractSequentialList.java",
+        "ojluni/src/main/java/java/util/AbstractSet.java",
+        "ojluni/src/main/java/java/util/ArrayDeque.java",
+        "ojluni/src/main/java/java/util/ArrayList.java",
+        "ojluni/src/main/java/java/util/ArrayPrefixHelpers.java",
+        "ojluni/src/main/java/java/util/Arrays.java",
+        "ojluni/src/main/java/java/util/ArraysParallelSortHelpers.java",
+        "ojluni/src/main/java/java/util/Base64.java",
+        "ojluni/src/main/java/java/util/BitSet.java",
+        "ojluni/src/main/java/java/util/Calendar.java",
+        "ojluni/src/main/java/java/util/Collection.java",
+        "ojluni/src/main/java/java/util/Collections.java",
+        "ojluni/src/main/java/java/util/ComparableTimSort.java",
+        "ojluni/src/main/java/java/util/Comparator.java",
+        "ojluni/src/main/java/java/util/Comparators.java",
+        "ojluni/src/main/java/java/util/ConcurrentModificationException.java",
+        "ojluni/src/main/java/java/util/Currency.java",
+        "ojluni/src/main/java/java/util/Date.java",
+        "ojluni/src/main/java/java/util/Deque.java",
+        "ojluni/src/main/java/java/util/Dictionary.java",
+        "ojluni/src/main/java/java/util/DualPivotQuicksort.java",
+        "ojluni/src/main/java/java/util/DuplicateFormatFlagsException.java",
+        "ojluni/src/main/java/java/util/EmptyStackException.java",
+        "ojluni/src/main/java/java/util/Enumeration.java",
+        "ojluni/src/main/java/java/util/EnumMap.java",
+        "ojluni/src/main/java/java/util/EnumSet.java",
+        "ojluni/src/main/java/java/util/EventListener.java",
+        "ojluni/src/main/java/java/util/EventListenerProxy.java",
+        "ojluni/src/main/java/java/util/EventObject.java",
+        "ojluni/src/main/java/java/util/FormatFlagsConversionMismatchException.java",
+        "ojluni/src/main/java/java/util/FormattableFlags.java",
+        "ojluni/src/main/java/java/util/Formattable.java",
+        "ojluni/src/main/java/java/util/FormatterClosedException.java",
+        "ojluni/src/main/java/java/util/Formatter.java",
+        "ojluni/src/main/java/java/util/GregorianCalendar.java",
+        "ojluni/src/main/java/java/util/HashMap.java",
+        "ojluni/src/main/java/java/util/HashSet.java",
+        "ojluni/src/main/java/java/util/Hashtable.java",
+        "ojluni/src/main/java/java/util/IdentityHashMap.java",
+        "ojluni/src/main/java/java/util/IllegalFormatCodePointException.java",
+        "ojluni/src/main/java/java/util/IllegalFormatConversionException.java",
+        "ojluni/src/main/java/java/util/IllegalFormatException.java",
+        "ojluni/src/main/java/java/util/IllegalFormatFlagsException.java",
+        "ojluni/src/main/java/java/util/IllegalFormatPrecisionException.java",
+        "ojluni/src/main/java/java/util/IllegalFormatWidthException.java",
+        "ojluni/src/main/java/java/util/IllformedLocaleException.java",
+        "ojluni/src/main/java/java/util/InputMismatchException.java",
+        "ojluni/src/main/java/java/util/InvalidPropertiesFormatException.java",
+        "ojluni/src/main/java/java/util/Iterator.java",
+        "ojluni/src/main/java/java/util/Optional.java",
+        "ojluni/src/main/java/java/util/OptionalInt.java",
+        "ojluni/src/main/java/java/util/OptionalLong.java",
+        "ojluni/src/main/java/java/util/OptionalDouble.java",
+        "ojluni/src/main/java/java/util/PrimitiveIterator.java",
+        "ojluni/src/main/java/java/util/StringJoiner.java",
+        "ojluni/src/main/java/java/util/Tripwire.java",
+        "ojluni/src/main/java/java/util/DoubleSummaryStatistics.java",
+        "ojluni/src/main/java/java/util/IntSummaryStatistics.java",
+        "ojluni/src/main/java/java/util/LongSummaryStatistics.java",
+        "ojluni/src/main/java/java/util/concurrent/AbstractExecutorService.java",
+        "ojluni/src/main/java/java/util/concurrent/ArrayBlockingQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/BlockingDeque.java",
+        "ojluni/src/main/java/java/util/concurrent/BlockingQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/BrokenBarrierException.java",
+        "ojluni/src/main/java/java/util/concurrent/Callable.java",
+        "ojluni/src/main/java/java/util/concurrent/CancellationException.java",
+        "ojluni/src/main/java/java/util/concurrent/CompletableFuture.java",
+        "ojluni/src/main/java/java/util/concurrent/CompletionException.java",
+        "ojluni/src/main/java/java/util/concurrent/CompletionService.java",
+        "ojluni/src/main/java/java/util/concurrent/CompletionStage.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedDeque.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentMap.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentNavigableMap.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListMap.java",
+        "ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListSet.java",
+        "ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java",
+        "ojluni/src/main/java/java/util/concurrent/CopyOnWriteArraySet.java",
+        "ojluni/src/main/java/java/util/concurrent/CountDownLatch.java",
+        "ojluni/src/main/java/java/util/concurrent/CountedCompleter.java",
+        "ojluni/src/main/java/java/util/concurrent/CyclicBarrier.java",
+        "ojluni/src/main/java/java/util/concurrent/DelayQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/Delayed.java",
+        "ojluni/src/main/java/java/util/concurrent/Exchanger.java",
+        "ojluni/src/main/java/java/util/concurrent/ExecutionException.java",
+        "ojluni/src/main/java/java/util/concurrent/Executor.java",
+        "ojluni/src/main/java/java/util/concurrent/ExecutorCompletionService.java",
+        "ojluni/src/main/java/java/util/concurrent/ExecutorService.java",
+        "ojluni/src/main/java/java/util/concurrent/Executors.java",
+        "ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java",
+        "ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java",
+        "ojluni/src/main/java/java/util/concurrent/ForkJoinWorkerThread.java",
+        "ojluni/src/main/java/java/util/concurrent/Future.java",
+        "ojluni/src/main/java/java/util/concurrent/FutureTask.java",
+        "ojluni/src/main/java/java/util/concurrent/Helpers.java",
+        "ojluni/src/main/java/java/util/concurrent/LinkedBlockingDeque.java",
+        "ojluni/src/main/java/java/util/concurrent/LinkedBlockingQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/LinkedTransferQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/Phaser.java",
+        "ojluni/src/main/java/java/util/concurrent/PriorityBlockingQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/RecursiveAction.java",
+        "ojluni/src/main/java/java/util/concurrent/RecursiveTask.java",
+        "ojluni/src/main/java/java/util/concurrent/RejectedExecutionException.java",
+        "ojluni/src/main/java/java/util/concurrent/RejectedExecutionHandler.java",
+        "ojluni/src/main/java/java/util/concurrent/RunnableFuture.java",
+        "ojluni/src/main/java/java/util/concurrent/RunnableScheduledFuture.java",
+        "ojluni/src/main/java/java/util/concurrent/ScheduledExecutorService.java",
+        "ojluni/src/main/java/java/util/concurrent/ScheduledFuture.java",
+        "ojluni/src/main/java/java/util/concurrent/ScheduledThreadPoolExecutor.java",
+        "ojluni/src/main/java/java/util/concurrent/Semaphore.java",
+        "ojluni/src/main/java/java/util/concurrent/SynchronousQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/ThreadFactory.java",
+        "ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java",
+        "ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java",
+        "ojluni/src/main/java/java/util/concurrent/TimeUnit.java",
+        "ojluni/src/main/java/java/util/concurrent/TimeoutException.java",
+        "ojluni/src/main/java/java/util/concurrent/TransferQueue.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicBoolean.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicInteger.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerArray.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicLong.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongArray.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongFieldUpdater.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicMarkableReference.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicReference.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceArray.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/AtomicStampedReference.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/DoubleAccumulator.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/DoubleAdder.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/LongAccumulator.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/LongAdder.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/Striped64.java",
+        "ojluni/src/main/java/java/util/concurrent/atomic/package-info.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/AbstractOwnableSynchronizer.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/Condition.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/Lock.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/LockSupport.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/ReadWriteLock.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/ReentrantReadWriteLock.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/StampedLock.java",
+        "ojluni/src/main/java/java/util/concurrent/locks/package-info.java",
+        "ojluni/src/main/java/java/util/concurrent/package-info.java",
+        "ojluni/src/main/java/java/util/function/BiConsumer.java",
+        "ojluni/src/main/java/java/util/function/BiFunction.java",
+        "ojluni/src/main/java/java/util/function/BinaryOperator.java",
+        "ojluni/src/main/java/java/util/function/BiPredicate.java",
+        "ojluni/src/main/java/java/util/function/BooleanSupplier.java",
+        "ojluni/src/main/java/java/util/function/Consumer.java",
+        "ojluni/src/main/java/java/util/function/DoubleBinaryOperator.java",
+        "ojluni/src/main/java/java/util/function/DoubleConsumer.java",
+        "ojluni/src/main/java/java/util/function/DoubleFunction.java",
+        "ojluni/src/main/java/java/util/function/DoublePredicate.java",
+        "ojluni/src/main/java/java/util/function/DoubleSupplier.java",
+        "ojluni/src/main/java/java/util/function/DoubleToIntFunction.java",
+        "ojluni/src/main/java/java/util/function/DoubleToLongFunction.java",
+        "ojluni/src/main/java/java/util/function/DoubleUnaryOperator.java",
+        "ojluni/src/main/java/java/util/function/Function.java",
+        "ojluni/src/main/java/java/util/function/IntBinaryOperator.java",
+        "ojluni/src/main/java/java/util/function/IntConsumer.java",
+        "ojluni/src/main/java/java/util/function/IntFunction.java",
+        "ojluni/src/main/java/java/util/function/IntPredicate.java",
+        "ojluni/src/main/java/java/util/function/IntSupplier.java",
+        "ojluni/src/main/java/java/util/function/IntToDoubleFunction.java",
+        "ojluni/src/main/java/java/util/function/IntToLongFunction.java",
+        "ojluni/src/main/java/java/util/function/IntUnaryOperator.java",
+        "ojluni/src/main/java/java/util/function/LongBinaryOperator.java",
+        "ojluni/src/main/java/java/util/function/LongConsumer.java",
+        "ojluni/src/main/java/java/util/function/LongFunction.java",
+        "ojluni/src/main/java/java/util/function/LongPredicate.java",
+        "ojluni/src/main/java/java/util/function/LongSupplier.java",
+        "ojluni/src/main/java/java/util/function/LongToDoubleFunction.java",
+        "ojluni/src/main/java/java/util/function/LongToIntFunction.java",
+        "ojluni/src/main/java/java/util/function/LongUnaryOperator.java",
+        "ojluni/src/main/java/java/util/function/ObjDoubleConsumer.java",
+        "ojluni/src/main/java/java/util/function/ObjIntConsumer.java",
+        "ojluni/src/main/java/java/util/function/ObjLongConsumer.java",
+        "ojluni/src/main/java/java/util/function/Predicate.java",
+        "ojluni/src/main/java/java/util/function/Supplier.java",
+        "ojluni/src/main/java/java/util/function/ToDoubleBiFunction.java",
+        "ojluni/src/main/java/java/util/function/ToDoubleFunction.java",
+        "ojluni/src/main/java/java/util/function/ToIntBiFunction.java",
+        "ojluni/src/main/java/java/util/function/ToIntFunction.java",
+        "ojluni/src/main/java/java/util/function/ToLongBiFunction.java",
+        "ojluni/src/main/java/java/util/function/ToLongFunction.java",
+        "ojluni/src/main/java/java/util/function/UnaryOperator.java",
+        "ojluni/src/main/java/java/util/function/package-info.java",
+        "ojluni/src/main/java/java/util/jar/Attributes.java",
+        "ojluni/src/main/java/java/util/jar/JarEntry.java",
+        "ojluni/src/main/java/java/util/jar/JarException.java",
+        "ojluni/src/main/java/java/util/jar/JarFile.java",
+        "ojluni/src/main/java/java/util/jar/JarInputStream.java",
+        "ojluni/src/main/java/java/util/jar/JarOutputStream.java",
+        "ojluni/src/main/java/java/util/jar/JarVerifier.java",
+        "ojluni/src/main/java/java/util/jar/Manifest.java",
+        "ojluni/src/main/java/java/util/jar/Pack200.java",
+        "ojluni/src/main/java/java/util/stream/AbstractPipeline.java",
+        "ojluni/src/main/java/java/util/stream/AbstractShortCircuitTask.java",
+        "ojluni/src/main/java/java/util/stream/AbstractSpinedBuffer.java",
+        "ojluni/src/main/java/java/util/stream/AbstractTask.java",
+        "ojluni/src/main/java/java/util/stream/BaseStream.java",
+        "ojluni/src/main/java/java/util/stream/Collector.java",
+        "ojluni/src/main/java/java/util/stream/Collectors.java",
+        "ojluni/src/main/java/java/util/stream/DistinctOps.java",
+        "ojluni/src/main/java/java/util/stream/DoublePipeline.java",
+        "ojluni/src/main/java/java/util/stream/DoubleStream.java",
+        "ojluni/src/main/java/java/util/stream/FindOps.java",
+        "ojluni/src/main/java/java/util/stream/ForEachOps.java",
+        "ojluni/src/main/java/java/util/stream/IntPipeline.java",
+        "ojluni/src/main/java/java/util/stream/IntStream.java",
+        "ojluni/src/main/java/java/util/stream/LongPipeline.java",
+        "ojluni/src/main/java/java/util/stream/LongStream.java",
+        "ojluni/src/main/java/java/util/stream/MatchOps.java",
+        "ojluni/src/main/java/java/util/stream/Node.java",
+        "ojluni/src/main/java/java/util/stream/Nodes.java",
+        "ojluni/src/main/java/java/util/stream/PipelineHelper.java",
+        "ojluni/src/main/java/java/util/stream/ReduceOps.java",
+        "ojluni/src/main/java/java/util/stream/ReferencePipeline.java",
+        "ojluni/src/main/java/java/util/stream/Sink.java",
+        "ojluni/src/main/java/java/util/stream/SliceOps.java",
+        "ojluni/src/main/java/java/util/stream/SortedOps.java",
+        "ojluni/src/main/java/java/util/stream/SpinedBuffer.java",
+        "ojluni/src/main/java/java/util/stream/Stream.java",
+        "ojluni/src/main/java/java/util/stream/StreamOpFlag.java",
+        "ojluni/src/main/java/java/util/stream/StreamShape.java",
+        "ojluni/src/main/java/java/util/stream/Streams.java",
+        "ojluni/src/main/java/java/util/stream/StreamSpliterators.java",
+        "ojluni/src/main/java/java/util/stream/StreamSupport.java",
+        "ojluni/src/main/java/java/util/stream/TerminalOp.java",
+        "ojluni/src/main/java/java/util/stream/TerminalSink.java",
+        "ojluni/src/main/java/java/util/stream/Tripwire.java",
+        "ojluni/src/main/java/java/util/stream/package-info.java",
+        "ojluni/src/main/java/java/util/JumboEnumSet.java",
+        "ojluni/src/main/java/java/util/LinkedHashMap.java",
+        "ojluni/src/main/java/java/util/LinkedHashSet.java",
+        "ojluni/src/main/java/java/util/LinkedList.java",
+        "ojluni/src/main/java/java/util/ListIterator.java",
+        "ojluni/src/main/java/java/util/List.java",
+        "ojluni/src/main/java/java/util/ListResourceBundle.java",
+        "ojluni/src/main/java/java/util/Locale.java",
+        "ojluni/src/main/java/java/util/logging/ConsoleHandler.java",
+        "ojluni/src/main/java/java/util/logging/ErrorManager.java",
+        "ojluni/src/main/java/java/util/logging/FileHandler.java",
+        "ojluni/src/main/java/java/util/logging/Filter.java",
+        "ojluni/src/main/java/java/util/logging/Formatter.java",
+        "ojluni/src/main/java/java/util/logging/Handler.java",
+        "ojluni/src/main/java/java/util/logging/Level.java",
+        "ojluni/src/main/java/java/util/logging/Logger.java",
+        "ojluni/src/main/java/java/util/logging/Logging.java",
+        "ojluni/src/main/java/java/util/logging/LoggingMXBean.java",
+        "ojluni/src/main/java/java/util/logging/LoggingPermission.java",
+        "ojluni/src/main/java/java/util/logging/LoggingProxyImpl.java",
+        "ojluni/src/main/java/java/util/logging/LogManager.java",
+        "ojluni/src/main/java/java/util/logging/LogRecord.java",
+        "ojluni/src/main/java/java/util/logging/MemoryHandler.java",
+        "ojluni/src/main/java/java/util/logging/SimpleFormatter.java",
+        "ojluni/src/main/java/java/util/logging/SocketHandler.java",
+        "ojluni/src/main/java/java/util/logging/StreamHandler.java",
+        "ojluni/src/main/java/java/util/logging/XMLFormatter.java",
+        "ojluni/src/main/java/java/util/Map.java",
+        "ojluni/src/main/java/java/util/MissingFormatArgumentException.java",
+        "ojluni/src/main/java/java/util/MissingFormatWidthException.java",
+        "ojluni/src/main/java/java/util/MissingResourceException.java",
+        "ojluni/src/main/java/java/util/NavigableMap.java",
+        "ojluni/src/main/java/java/util/NavigableSet.java",
+        "ojluni/src/main/java/java/util/NoSuchElementException.java",
+        "ojluni/src/main/java/java/util/Objects.java",
+        "ojluni/src/main/java/java/util/Observable.java",
+        "ojluni/src/main/java/java/util/Observer.java",
+        "ojluni/src/main/java/java/util/prefs/AbstractPreferences.java",
+        "ojluni/src/main/java/java/util/prefs/BackingStoreException.java",
+        "ojluni/src/main/java/java/util/prefs/Base64.java",
+        "ojluni/src/main/java/java/util/prefs/FileSystemPreferencesFactory.java",
+        "ojluni/src/main/java/java/util/prefs/FileSystemPreferences.java",
+        "ojluni/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java",
+        "ojluni/src/main/java/java/util/prefs/NodeChangeEvent.java",
+        "ojluni/src/main/java/java/util/prefs/NodeChangeListener.java",
+        "ojluni/src/main/java/java/util/prefs/PreferenceChangeEvent.java",
+        "ojluni/src/main/java/java/util/prefs/PreferenceChangeListener.java",
+        "ojluni/src/main/java/java/util/prefs/PreferencesFactory.java",
+        "ojluni/src/main/java/java/util/prefs/Preferences.java",
+        "ojluni/src/main/java/java/util/prefs/XmlSupport.java",
+        "ojluni/src/main/java/java/util/PriorityQueue.java",
+        "ojluni/src/main/java/java/util/Properties.java",
+        "ojluni/src/main/java/java/util/PropertyPermission.java",
+        "ojluni/src/main/java/java/util/PropertyResourceBundle.java",
+        "ojluni/src/main/java/java/util/Queue.java",
+        "ojluni/src/main/java/java/util/RandomAccess.java",
+        "ojluni/src/main/java/java/util/Random.java",
+        "ojluni/src/main/java/java/util/RegularEnumSet.java",
+        "ojluni/src/main/java/java/util/ResourceBundle.java",
+        "ojluni/src/main/java/java/util/Scanner.java",
+        "ojluni/src/main/java/java/util/ServiceConfigurationError.java",
+        "ojluni/src/main/java/java/util/ServiceLoader.java",
+        "ojluni/src/main/java/java/util/Set.java",
+        "ojluni/src/main/java/java/util/SimpleTimeZone.java",
+        "ojluni/src/main/java/java/util/SortedMap.java",
+        "ojluni/src/main/java/java/util/SortedSet.java",
+        "ojluni/src/main/java/java/util/Spliterator.java",
+        "ojluni/src/main/java/java/util/Spliterators.java",
+        "ojluni/src/main/java/java/util/SplittableRandom.java",
+        "ojluni/src/main/java/java/util/Stack.java",
+        "ojluni/src/main/java/java/util/StringTokenizer.java",
+        "ojluni/src/main/java/java/util/Timer.java",
+        "ojluni/src/main/java/java/util/TimerTask.java",
+        "ojluni/src/main/java/java/util/TimeZone.java",
+        "ojluni/src/main/java/java/util/TimSort.java",
+        "ojluni/src/main/java/java/util/TooManyListenersException.java",
+        "ojluni/src/main/java/java/util/TreeMap.java",
+        "ojluni/src/main/java/java/util/TreeSet.java",
+        "ojluni/src/main/java/java/util/UnknownFormatConversionException.java",
+        "ojluni/src/main/java/java/util/UnknownFormatFlagsException.java",
+        "ojluni/src/main/java/java/util/UUID.java",
+        "ojluni/src/main/java/java/util/Vector.java",
+        "ojluni/src/main/java/java/util/WeakHashMap.java",
+        "ojluni/src/main/java/java/util/XMLUtils.java",
+        "ojluni/src/main/java/java/util/regex/PatternSyntaxException.java",
+        "ojluni/src/main/java/java/util/regex/Pattern.java",
+        "ojluni/src/main/java/java/util/regex/Matcher.java",
+        "ojluni/src/main/java/java/util/regex/MatchResult.java",
+        "ojluni/src/main/java/java/util/zip/Adler32.java",
+        "ojluni/src/main/java/java/util/zip/CheckedInputStream.java",
+        "ojluni/src/main/java/java/util/zip/CheckedOutputStream.java",
+        "ojluni/src/main/java/java/util/zip/Checksum.java",
+        "ojluni/src/main/java/java/util/zip/CRC32.java",
+        "ojluni/src/main/java/java/util/zip/DataFormatException.java",
+        "ojluni/src/main/java/java/util/zip/DeflaterInputStream.java",
+        "ojluni/src/main/java/java/util/zip/Deflater.java",
+        "ojluni/src/main/java/java/util/zip/DeflaterOutputStream.java",
+        "ojluni/src/main/java/java/util/zip/GZIPInputStream.java",
+        "ojluni/src/main/java/java/util/zip/GZIPOutputStream.java",
+        "ojluni/src/main/java/java/util/zip/InflaterInputStream.java",
+        "ojluni/src/main/java/java/util/zip/Inflater.java",
+        "ojluni/src/main/java/java/util/zip/InflaterOutputStream.java",
+        "ojluni/src/main/java/java/util/zip/ZipCoder.java",
+        "ojluni/src/main/java/java/util/zip/ZipConstants.java",
+        "ojluni/src/main/java/java/util/zip/ZipConstants64.java",
+        "ojluni/src/main/java/java/util/zip/ZipEntry.java",
+        "ojluni/src/main/java/java/util/zip/ZipError.java",
+        "ojluni/src/main/java/java/util/zip/ZipException.java",
+        "ojluni/src/main/java/java/util/zip/ZipFile.java",
+        "ojluni/src/main/java/java/util/zip/ZipInputStream.java",
+        "ojluni/src/main/java/java/util/zip/ZipOutputStream.java",
+        "ojluni/src/main/java/java/util/zip/ZipUtils.java",
+        "ojluni/src/main/java/java/util/zip/ZStreamRef.java",
+        "ojluni/src/main/java/javax/crypto/AEADBadTagException.java",
+        "ojluni/src/main/java/javax/crypto/BadPaddingException.java",
+        "ojluni/src/main/java/javax/crypto/CipherInputStream.java",
+        "ojluni/src/main/java/javax/crypto/Cipher.java",
+        "ojluni/src/main/java/javax/crypto/CipherOutputStream.java",
+        "ojluni/src/main/java/javax/crypto/CipherSpi.java",
+        "ojluni/src/main/java/javax/crypto/CryptoAllPermission.java",
+        "ojluni/src/main/java/javax/crypto/CryptoPermission.java",
+        "ojluni/src/main/java/javax/crypto/CryptoPermissions.java",
+        "ojluni/src/main/java/javax/crypto/CryptoPolicyParser.java",
+        "ojluni/src/main/java/javax/crypto/EncryptedPrivateKeyInfo.java",
+        "ojluni/src/main/java/javax/crypto/ExemptionMechanismException.java",
+        "ojluni/src/main/java/javax/crypto/ExemptionMechanism.java",
+        "ojluni/src/main/java/javax/crypto/ExemptionMechanismSpi.java",
+        "ojluni/src/main/java/javax/crypto/IllegalBlockSizeException.java",
+        "ojluni/src/main/java/javax/crypto/interfaces/DHKey.java",
+        "ojluni/src/main/java/javax/crypto/interfaces/DHPrivateKey.java",
+        "ojluni/src/main/java/javax/crypto/interfaces/DHPublicKey.java",
+        "ojluni/src/main/java/javax/crypto/interfaces/PBEKey.java",
+        "ojluni/src/main/java/javax/crypto/JarVerifier.java",
+        "ojluni/src/main/java/javax/crypto/JceSecurity.java",
+        "ojluni/src/main/java/javax/crypto/JceSecurityManager.java",
+        "ojluni/src/main/java/javax/crypto/KeyAgreement.java",
+        "ojluni/src/main/java/javax/crypto/KeyAgreementSpi.java",
+        "ojluni/src/main/java/javax/crypto/KeyGenerator.java",
+        "ojluni/src/main/java/javax/crypto/KeyGeneratorSpi.java",
+        "ojluni/src/main/java/javax/crypto/Mac.java",
+        "ojluni/src/main/java/javax/crypto/MacSpi.java",
+        "ojluni/src/main/java/javax/crypto/NoSuchPaddingException.java",
+        "ojluni/src/main/java/javax/crypto/NullCipher.java",
+        "ojluni/src/main/java/javax/crypto/NullCipherSpi.java",
+        "ojluni/src/main/java/javax/crypto/SealedObject.java",
+        "ojluni/src/main/java/javax/crypto/SecretKeyFactory.java",
+        "ojluni/src/main/java/javax/crypto/SecretKeyFactorySpi.java",
+        "ojluni/src/main/java/javax/crypto/SecretKey.java",
+        "ojluni/src/main/java/javax/crypto/ShortBufferException.java",
+        "ojluni/src/main/java/javax/crypto/spec/DESedeKeySpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/DESKeySpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/DHGenParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/DHParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/DHPrivateKeySpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/DHPublicKeySpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/GCMParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/IvParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/OAEPParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/PBEKeySpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/PBEParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/PSource.java",
+        "ojluni/src/main/java/javax/crypto/spec/RC2ParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/RC5ParameterSpec.java",
+        "ojluni/src/main/java/javax/crypto/spec/SecretKeySpec.java",
+        "ojluni/src/main/java/javax/net/ServerSocketFactory.java",
+        "ojluni/src/main/java/javax/net/SocketFactory.java",
+        "ojluni/src/main/java/javax/net/ssl/CertPathTrustManagerParameters.java",
+        "ojluni/src/main/java/javax/net/ssl/ExtendedSSLSession.java",
+        "ojluni/src/main/java/javax/net/ssl/HandshakeCompletedEvent.java",
+        "ojluni/src/main/java/javax/net/ssl/HandshakeCompletedListener.java",
+        "ojluni/src/main/java/javax/net/ssl/HostnameVerifier.java",
+        "ojluni/src/main/java/javax/net/ssl/HttpsURLConnection.java",
+        "ojluni/src/main/java/javax/net/ssl/KeyManagerFactory.java",
+        "ojluni/src/main/java/javax/net/ssl/KeyManagerFactorySpi.java",
+        "ojluni/src/main/java/javax/net/ssl/KeyManager.java",
+        "ojluni/src/main/java/javax/net/ssl/KeyStoreBuilderParameters.java",
+        "ojluni/src/main/java/javax/net/ssl/ManagerFactoryParameters.java",
+        "ojluni/src/main/java/javax/net/ssl/SNIHostName.java",
+        "ojluni/src/main/java/javax/net/ssl/SNIMatcher.java",
+        "ojluni/src/main/java/javax/net/ssl/SNIServerName.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLContext.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLContextSpi.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLEngine.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLEngineResult.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLException.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLHandshakeException.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLKeyException.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLParameters.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLPeerUnverifiedException.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLPermission.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLProtocolException.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLServerSocketFactory.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLServerSocket.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLSessionBindingEvent.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLSessionBindingListener.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLSessionContext.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLSession.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLSocketFactory.java",
+        "ojluni/src/main/java/javax/net/ssl/SSLSocket.java",
+        "ojluni/src/main/java/javax/net/ssl/StandardConstants.java",
+        "ojluni/src/main/java/javax/net/ssl/TrustManagerFactory.java",
+        "ojluni/src/main/java/javax/net/ssl/TrustManagerFactorySpi.java",
+        "ojluni/src/main/java/javax/net/ssl/TrustManager.java",
+        "ojluni/src/main/java/javax/net/ssl/X509ExtendedKeyManager.java",
+        "ojluni/src/main/java/javax/net/ssl/X509ExtendedTrustManager.java",
+        "ojluni/src/main/java/javax/net/ssl/X509KeyManager.java",
+        "ojluni/src/main/java/javax/net/ssl/X509TrustManager.java",
+        "ojluni/src/main/java/javax/security/auth/AuthPermission.java",
+        "ojluni/src/main/java/javax/security/auth/callback/CallbackHandler.java",
+        "ojluni/src/main/java/javax/security/auth/callback/Callback.java",
+        "ojluni/src/main/java/javax/security/auth/callback/PasswordCallback.java",
+        "ojluni/src/main/java/javax/security/auth/callback/UnsupportedCallbackException.java",
+        "ojluni/src/main/java/javax/security/auth/callback/package-info.java",
+        "ojluni/src/main/java/javax/security/auth/Destroyable.java",
+        "ojluni/src/main/java/javax/security/auth/DestroyFailedException.java",
+        "ojluni/src/main/java/javax/security/auth/login/LoginException.java",
+        "ojluni/src/main/java/javax/security/auth/login/package-info.java",
+        "ojluni/src/main/java/javax/security/auth/PrivateCredentialPermission.java",
+        "ojluni/src/main/java/javax/security/auth/SubjectDomainCombiner.java",
+        "ojluni/src/main/java/javax/security/auth/Subject.java",
+        "ojluni/src/main/java/javax/security/auth/x500/X500Principal.java",
+        "ojluni/src/main/java/javax/security/auth/x500/package-info.java",
+        "ojluni/src/main/java/javax/security/auth/package-info.java",
+        "ojluni/src/main/java/javax/security/cert/CertificateEncodingException.java",
+        "ojluni/src/main/java/javax/security/cert/CertificateException.java",
+        "ojluni/src/main/java/javax/security/cert/CertificateExpiredException.java",
+        "ojluni/src/main/java/javax/security/cert/Certificate.java",
+        "ojluni/src/main/java/javax/security/cert/CertificateNotYetValidException.java",
+        "ojluni/src/main/java/javax/security/cert/CertificateParsingException.java",
+        "ojluni/src/main/java/javax/security/cert/X509Certificate.java",
+        "ojluni/src/main/java/javax/security/cert/package-info.java",
+        "ojluni/src/main/java/javax/sql/CommonDataSource.java",
+        "ojluni/src/main/java/javax/sql/ConnectionEvent.java",
+        "ojluni/src/main/java/javax/sql/ConnectionEventListener.java",
+        "ojluni/src/main/java/javax/sql/ConnectionPoolDataSource.java",
+        "ojluni/src/main/java/javax/sql/DataSource.java",
+        "ojluni/src/main/java/javax/sql/PooledConnection.java",
+        "ojluni/src/main/java/javax/sql/RowSetEvent.java",
+        "ojluni/src/main/java/javax/sql/RowSetInternal.java",
+        "ojluni/src/main/java/javax/sql/RowSet.java",
+        "ojluni/src/main/java/javax/sql/RowSetListener.java",
+        "ojluni/src/main/java/javax/sql/RowSetMetaData.java",
+        "ojluni/src/main/java/javax/sql/RowSetReader.java",
+        "ojluni/src/main/java/javax/sql/RowSetWriter.java",
+        "ojluni/src/main/java/javax/sql/StatementEvent.java",
+        "ojluni/src/main/java/javax/sql/StatementEventListener.java",
+        "ojluni/src/main/java/sun/reflect/CallerSensitive.java",
+    ],
+
+}
+// Stubs needed to satisfy javac's dependencies when compiling lambda code. These are
+// not used on Android devices or required by the Jack compiler.
+//
+// On aosp/master:
+// openjdk_lambda_stub_files : These are included in core-oj as stubs
+// openjdk_lambda_duplicate_stub_files : These contain complete implementations in core-oj.
+//
+// On older platforms : Both sets of stub files are used and core-oj does not contain
+// any of these classes.
+filegroup {
+    name: "openjdk_lambda_stub_files",
+    export_to_make_var: "openjdk_lambda_stub_files",
+    path: "ojluni/src/lambda/java",
+    srcs: [
+        "ojluni/src/lambda/java/java/lang/invoke/LambdaMetafactory.java",
+        "ojluni/src/lambda/java/java/lang/invoke/SerializedLambda.java",
+    ],
+}
+
+filegroup {
+    name: "openjdk_lambda_duplicate_stub_files",
+    export_to_make_var: "openjdk_lambda_duplicate_stub_files",
+    path: "ojluni/src/lambda/java",
+    srcs: [
+        "ojluni/src/lambda/java/java/lang/invoke/CallSite.java",
+        "ojluni/src/lambda/java/java/lang/invoke/MethodHandles.java",
+        "ojluni/src/lambda/java/java/lang/invoke/LambdaConversionException.java",
+        "ojluni/src/lambda/java/java/lang/invoke/MethodHandle.java",
+        "ojluni/src/lambda/java/java/lang/invoke/MethodType.java",
+    ],
+}
+
+// NOTE: Files in java/lang/invoke are listed here because they're not being made public
+// until the entire package is available for use.
+filegroup {
+    name: "openjdk_java_files",
+    export_to_make_var: "openjdk_java_files",
+    path: "ojluni/src/lambda/java",
+    srcs: [
+        "ojluni/src/main/java/com/sun/net/ssl/internal/ssl/X509ExtendedTrustManager.java",
+        "ojluni/src/main/java/com/sun/security/cert/internal/x509/X509V1CertImpl.java",
+        "ojluni/src/main/java/com/sun/nio/file/ExtendedCopyOption.java",
+        "ojluni/src/main/java/com/sun/nio/file/ExtendedOpenOption.java",
+        "ojluni/src/main/java/com/sun/nio/file/ExtendedWatchEventModifier.java",
+        "ojluni/src/main/java/com/sun/nio/file/SensitivityWatchEventModifier.java",
+        "ojluni/src/main/java/java/beans/ChangeListenerMap.java",
+        "ojluni/src/main/java/java/time/zone/IcuZoneRulesProvider.java",
+        "ojluni/src/main/java/java/time/zone/ZoneRulesProvider.java",
+        "ojluni/src/main/java/java/util/JapaneseImperialCalendar.java",
+        "ojluni/src/main/java/sun/misc/FDBigInteger.java",
+        "ojluni/src/main/java/sun/misc/FloatingDecimal.java",
+        "ojluni/src/main/java/jdk/net/ExtendedSocketOptions.java",
+        "ojluni/src/main/java/jdk/net/NetworkPermission.java",
+        "ojluni/src/main/java/jdk/net/SocketFlow.java",
+        "ojluni/src/main/java/jdk/net/Sockets.java",
+        "ojluni/src/main/java/sun/invoke/util/BytecodeDescriptor.java",
+        "ojluni/src/main/java/sun/invoke/util/Wrapper.java",
+        "ojluni/src/main/java/sun/invoke/util/VerifyAccess.java",
+        "ojluni/src/main/java/sun/misc/ASCIICaseInsensitiveComparator.java",
+        "ojluni/src/main/java/sun/misc/BASE64Decoder.java",
+        "ojluni/src/main/java/sun/misc/BASE64Encoder.java",
+        "ojluni/src/main/java/sun/misc/CEFormatException.java",
+        "ojluni/src/main/java/sun/misc/CEStreamExhausted.java",
+        "ojluni/src/main/java/sun/misc/CharacterDecoder.java",
+        "ojluni/src/main/java/sun/misc/CharacterEncoder.java",
+        "ojluni/src/main/java/sun/misc/Cleaner.java",
+        "ojluni/src/main/java/sun/misc/CompoundEnumeration.java",
+        "ojluni/src/main/java/sun/misc/DoubleConsts.java",
+        "ojluni/src/main/java/sun/misc/FileURLMapper.java",
+        "ojluni/src/main/java/sun/misc/FloatConsts.java",
+        "ojluni/src/main/java/sun/misc/FormattedFloatingDecimal.java",
+        "ojluni/src/main/java/sun/misc/FpUtils.java",
+        "ojluni/src/main/java/sun/misc/HexDumpEncoder.java",
+        "ojluni/src/main/java/sun/misc/InvalidJarIndexException.java",
+        "ojluni/src/main/java/sun/misc/IOUtils.java",
+        "ojluni/src/main/java/sun/misc/JarIndex.java",
+        "ojluni/src/main/java/sun/misc/JavaIOFileDescriptorAccess.java",
+        "ojluni/src/main/java/sun/misc/LRUCache.java",
+        "ojluni/src/main/java/sun/misc/MessageUtils.java",
+        "ojluni/src/main/java/sun/misc/MetaIndex.java",
+        "ojluni/src/main/java/sun/misc/REException.java",
+        "ojluni/src/main/java/sun/misc/RegexpPool.java",
+        "ojluni/src/main/java/sun/misc/RegexpTarget.java",
+        "ojluni/src/main/java/sun/misc/Resource.java",
+        "ojluni/src/main/java/sun/misc/SharedSecrets.java",
+        "ojluni/src/main/java/sun/misc/URLClassPath.java",
+        "ojluni/src/main/java/sun/misc/Unsafe.java",
+        "ojluni/src/main/java/sun/misc/Version.java",
+        "ojluni/src/main/java/sun/misc/VM.java",
+        "ojluni/src/main/java/sun/net/ApplicationProxy.java",
+        "ojluni/src/main/java/sun/net/ConnectionResetException.java",
+        "ojluni/src/main/java/sun/net/ExtendedOptionsImpl.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpClient.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpClientProvider.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpDirEntry.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpDirParser.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpLoginException.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpProtocolException.java",
+        "ojluni/src/main/java/sun/net/ftp/FtpReplyCode.java",
+        "ojluni/src/main/java/sun/net/ftp/impl/DefaultFtpClientProvider.java",
+        "ojluni/src/main/java/sun/net/ftp/impl/FtpClient.java",
+        "ojluni/src/main/java/sun/net/NetHooks.java",
+        "ojluni/src/main/java/sun/net/NetProperties.java",
+        "ojluni/src/main/java/sun/net/NetworkClient.java",
+        "ojluni/src/main/java/sun/net/ProgressEvent.java",
+        "ojluni/src/main/java/sun/net/ProgressListener.java",
+        "ojluni/src/main/java/sun/net/ProgressMeteringPolicy.java",
+        "ojluni/src/main/java/sun/net/ProgressMonitor.java",
+        "ojluni/src/main/java/sun/net/ProgressSource.java",
+        "ojluni/src/main/java/sun/net/ResourceManager.java",
+        "ojluni/src/main/java/sun/net/SocksProxy.java",
+        "ojluni/src/main/java/sun/net/spi/DefaultProxySelector.java",
+        "ojluni/src/main/java/sun/net/spi/nameservice/NameService.java",
+        "ojluni/src/main/java/sun/net/TelnetInputStream.java",
+        "ojluni/src/main/java/sun/net/TelnetOutputStream.java",
+        "ojluni/src/main/java/sun/net/TelnetProtocolException.java",
+        "ojluni/src/main/java/sun/net/util/IPAddressUtil.java",
+        "ojluni/src/main/java/sun/net/util/URLUtil.java",
+        "ojluni/src/main/java/sun/net/www/MessageHeader.java",
+        "ojluni/src/main/java/sun/net/www/MeteredStream.java",
+        "ojluni/src/main/java/sun/net/www/ParseUtil.java",
+        "ojluni/src/main/java/sun/net/www/URLConnection.java",
+        "ojluni/src/main/java/sun/net/www/protocol/file/FileURLConnection.java",
+        "ojluni/src/main/java/sun/net/www/protocol/file/Handler.java",
+        "ojluni/src/main/java/sun/net/www/protocol/ftp/FtpURLConnection.java",
+        "ojluni/src/main/java/sun/net/www/protocol/ftp/Handler.java",
+        "ojluni/src/main/java/sun/net/www/protocol/jar/Handler.java",
+        "ojluni/src/main/java/sun/net/www/protocol/jar/JarFileFactory.java",
+        "ojluni/src/main/java/sun/net/www/protocol/jar/JarURLConnection.java",
+        "ojluni/src/main/java/sun/net/www/protocol/jar/URLJarFile.java",
+        "ojluni/src/main/java/sun/nio/ByteBuffered.java",
+        "ojluni/src/main/java/sun/nio/ch/AbstractPollArrayWrapper.java",
+        "ojluni/src/main/java/sun/nio/ch/AbstractPollSelectorImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/AllocatedNativeObject.java",
+        "ojluni/src/main/java/sun/nio/ch/AsynchronousChannelGroupImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/AsynchronousFileChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/AsynchronousServerSocketChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/AsynchronousSocketChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/Cancellable.java",
+        "ojluni/src/main/java/sun/nio/ch/ChannelInputStream.java",
+        "ojluni/src/main/java/sun/nio/ch/CompletedFuture.java",
+        "ojluni/src/main/java/sun/nio/ch/DatagramChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/DatagramDispatcher.java",
+        "ojluni/src/main/java/sun/nio/ch/DatagramSocketAdaptor.java",
+        "ojluni/src/main/java/sun/nio/ch/DefaultAsynchronousChannelProvider.java",
+        "ojluni/src/main/java/sun/nio/ch/DefaultSelectorProvider.java",
+        "ojluni/src/main/java/sun/nio/ch/DirectBuffer.java",
+        "ojluni/src/main/java/sun/nio/ch/EPoll.java",
+        "ojluni/src/main/java/sun/nio/ch/EPollPort.java",
+        "ojluni/src/main/java/sun/nio/ch/ExtendedSocketOption.java",
+        "ojluni/src/main/java/sun/nio/ch/FileChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/FileDescriptorHolderSocketImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/FileDispatcherImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/FileDispatcher.java",
+        "ojluni/src/main/java/sun/nio/ch/FileKey.java",
+        "ojluni/src/main/java/sun/nio/ch/FileLockImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/FileLockTable.java",
+        "ojluni/src/main/java/sun/nio/ch/Groupable.java",
+        "ojluni/src/main/java/sun/nio/ch/Interruptible.java",
+        "ojluni/src/main/java/sun/nio/ch/Invoker.java",
+        "ojluni/src/main/java/sun/nio/ch/IOStatus.java",
+        "ojluni/src/main/java/sun/nio/ch/IOUtil.java",
+        "ojluni/src/main/java/sun/nio/ch/IOVecWrapper.java",
+        "ojluni/src/main/java/sun/nio/ch/LinuxAsynchronousChannelProvider.java",
+        "ojluni/src/main/java/sun/nio/ch/MembershipKeyImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/MembershipRegistry.java",
+        "ojluni/src/main/java/sun/nio/ch/NativeDispatcher.java",
+        "ojluni/src/main/java/sun/nio/ch/NativeObject.java",
+        "ojluni/src/main/java/sun/nio/ch/NativeThread.java",
+        "ojluni/src/main/java/sun/nio/ch/NativeThreadSet.java",
+        "ojluni/src/main/java/sun/nio/ch/Net.java",
+        "ojluni/src/main/java/sun/nio/ch/OptionKey.java",
+        "ojluni/src/main/java/sun/nio/ch/PendingFuture.java",
+        "ojluni/src/main/java/sun/nio/ch/PipeImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/PollArrayWrapper.java",
+        "ojluni/src/main/java/sun/nio/ch/PollSelectorImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/PollSelectorProvider.java",
+        "ojluni/src/main/java/sun/nio/ch/Port.java",
+        "ojluni/src/main/java/sun/nio/ch/SelChImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SelectionKeyImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SelectorImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SelectorProviderImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/ServerSocketAdaptor.java",
+        "ojluni/src/main/java/sun/nio/ch/ServerSocketChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SinkChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SocketAdaptor.java",
+        "ojluni/src/main/java/sun/nio/ch/SocketChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/SocketDispatcher.java",
+        "ojluni/src/main/java/sun/nio/ch/SocketOptionRegistry.java",
+        "ojluni/src/main/java/sun/nio/ch/SourceChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/ThreadPool.java",
+        "ojluni/src/main/java/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java",
+        "ojluni/src/main/java/sun/nio/ch/Util.java",
+        "ojluni/src/main/java/sun/nio/cs/ArrayDecoder.java",
+        "ojluni/src/main/java/sun/nio/cs/ArrayEncoder.java",
+        "ojluni/src/main/java/sun/nio/cs/StreamDecoder.java",
+        "ojluni/src/main/java/sun/nio/cs/StreamEncoder.java",
+        "ojluni/src/main/java/sun/nio/cs/HistoricallyNamedCharset.java",
+        "ojluni/src/main/java/sun/nio/cs/ThreadLocalCoders.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractBasicFileAttributeView.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractFileSystemProvider.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractFileTypeDetector.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractPath.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractPoller.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractUserDefinedFileAttributeView.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractWatchKey.java",
+        "ojluni/src/main/java/sun/nio/fs/AbstractWatchService.java",
+        "ojluni/src/main/java/sun/nio/fs/BasicFileAttributesHolder.java",
+        "ojluni/src/main/java/sun/nio/fs/Cancellable.java",
+        "ojluni/src/main/java/sun/nio/fs/DefaultFileSystemProvider.java",
+        "ojluni/src/main/java/sun/nio/fs/DefaultFileTypeDetector.java",
+        "ojluni/src/main/java/sun/nio/fs/DynamicFileAttributeView.java",
+        "ojluni/src/main/java/sun/nio/fs/FileOwnerAttributeViewImpl.java",
+        "ojluni/src/main/java/sun/nio/fs/Globs.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxDosFileAttributeView.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxFileStore.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxFileSystem.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxFileSystemProvider.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxUserDefinedFileAttributeView.java",
+        "ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java",
+        "ojluni/src/main/java/sun/nio/fs/MimeTypesFileTypeDetector.java",
+        "ojluni/src/main/java/sun/nio/fs/NativeBuffer.java",
+        "ojluni/src/main/java/sun/nio/fs/NativeBuffers.java",
+        "ojluni/src/main/java/sun/nio/fs/PollingWatchService.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixChannelFactory.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixConstants.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixCopyFile.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixDirectoryStream.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixException.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileAttributeViews.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileAttributes.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileKey.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileModeAttribute.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileStore.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileStoreAttributes.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileSystem.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixFileSystemProvider.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixMountEntry.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixNativeDispatcher.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixPath.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixSecureDirectoryStream.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixUriUtils.java",
+        "ojluni/src/main/java/sun/nio/fs/UnixUserPrincipals.java",
+        "ojluni/src/main/java/sun/nio/fs/Util.java",
+        "ojluni/src/main/java/sun/reflect/misc/ReflectUtil.java",
+        "ojluni/src/main/java/sun/reflect/Reflection.java",
+        "ojluni/src/main/java/sun/security/action/GetBooleanAction.java",
+        "ojluni/src/main/java/sun/security/action/GetIntegerAction.java",
+        "ojluni/src/main/java/sun/security/action/GetPropertyAction.java",
+        "ojluni/src/main/java/sun/security/jca/GetInstance.java",
+        "ojluni/src/main/java/sun/security/jca/JCAUtil.java",
+        "ojluni/src/main/java/sun/security/jca/ProviderConfig.java",
+        "ojluni/src/main/java/sun/security/jca/ProviderList.java",
+        "ojluni/src/main/java/sun/security/jca/Providers.java",
+        "ojluni/src/main/java/sun/security/jca/ServiceId.java",
+        "ojluni/src/main/java/sun/security/pkcs/ContentInfo.java",
+        "ojluni/src/main/java/sun/security/pkcs/ParsingException.java",
+        "ojluni/src/main/java/sun/security/pkcs/PKCS7.java",
+        "ojluni/src/main/java/sun/security/pkcs/PKCS8Key.java",
+        "ojluni/src/main/java/sun/security/pkcs/PKCS9Attribute.java",
+        "ojluni/src/main/java/sun/security/pkcs/PKCS9Attributes.java",
+        "ojluni/src/main/java/sun/security/pkcs/SignerInfo.java",
+        "ojluni/src/main/java/sun/security/pkcs/SigningCertificateInfo.java",
+        "ojluni/src/main/java/sun/security/provider/CertPathProvider.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/AdaptableX509CertSelector.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/AdjacencyList.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/AlgorithmChecker.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/BasicChecker.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/BuildStep.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/Builder.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/CertId.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/CertPathHelper.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/CertStoreHelper.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/ConstraintsChecker.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/DistributionPointFetcher.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/ForwardBuilder.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/ForwardState.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/KeyChecker.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/OCSP.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/OCSPRequest.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/OCSPResponse.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/PKIX.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/PKIXCertPathValidator.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/PKIXMasterCertPathValidator.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/PolicyChecker.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/PolicyNodeImpl.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/RevocationChecker.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/State.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilder.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderException.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderResult.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/URICertStore.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/Vertex.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/X509CertPath.java",
+        "ojluni/src/main/java/sun/security/provider/certpath/X509CertificatePair.java",
+        "ojluni/src/main/java/sun/security/provider/X509Factory.java",
+        "ojluni/src/main/java/sun/security/timestamp/TimestampToken.java",
+        "ojluni/src/main/java/sun/security/util/AnchorCertificates.java",
+        "ojluni/src/main/java/sun/security/util/CertConstraintParameters.java",
+        "ojluni/src/main/java/sun/security/util/AbstractAlgorithmConstraints.java",
+        "ojluni/src/main/java/sun/security/util/AlgorithmDecomposer.java",
+        "ojluni/src/main/java/sun/security/util/BitArray.java",
+        "ojluni/src/main/java/sun/security/util/ByteArrayLexOrder.java",
+        "ojluni/src/main/java/sun/security/util/ByteArrayTagOrder.java",
+        "ojluni/src/main/java/sun/security/util/Cache.java",
+        "ojluni/src/main/java/sun/security/util/Debug.java",
+        "ojluni/src/main/java/sun/security/util/DerEncoder.java",
+        "ojluni/src/main/java/sun/security/util/DerIndefLenConverter.java",
+        "ojluni/src/main/java/sun/security/util/DerInputBuffer.java",
+        "ojluni/src/main/java/sun/security/util/DerInputStream.java",
+        "ojluni/src/main/java/sun/security/util/DerOutputStream.java",
+        "ojluni/src/main/java/sun/security/util/DerValue.java",
+        "ojluni/src/main/java/sun/security/util/DisabledAlgorithmConstraints.java",
+        "ojluni/src/main/java/sun/security/util/KeyUtil.java",
+        "ojluni/src/main/java/sun/security/util/Length.java",
+        "ojluni/src/main/java/sun/security/util/ManifestDigester.java",
+        "ojluni/src/main/java/sun/security/util/ManifestEntryVerifier.java",
+        "ojluni/src/main/java/sun/security/util/ObjectIdentifier.java",
+        "ojluni/src/main/java/sun/security/util/PropertyExpander.java",
+        "ojluni/src/main/java/sun/security/util/Resources.java",
+        "ojluni/src/main/java/sun/security/util/ResourcesMgr.java",
+        "ojluni/src/main/java/sun/security/util/SecurityConstants.java",
+        "ojluni/src/main/java/sun/security/util/SignatureFileVerifier.java",
+        "ojluni/src/main/java/sun/security/x509/AccessDescription.java",
+        "ojluni/src/main/java/sun/security/x509/AlgorithmId.java",
+        "ojluni/src/main/java/sun/security/x509/AttributeNameEnumeration.java",
+        "ojluni/src/main/java/sun/security/x509/AuthorityInfoAccessExtension.java",
+        "ojluni/src/main/java/sun/security/x509/AuthorityKeyIdentifierExtension.java",
+        "ojluni/src/main/java/sun/security/x509/AVA.java",
+        "ojluni/src/main/java/sun/security/x509/BasicConstraintsExtension.java",
+        "ojluni/src/main/java/sun/security/x509/CertAttrSet.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateAlgorithmId.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateExtensions.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateIssuerExtension.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateIssuerName.java",
+        "ojluni/src/main/java/sun/security/x509/CertificatePoliciesExtension.java",
+        "ojluni/src/main/java/sun/security/x509/CertificatePolicyId.java",
+        "ojluni/src/main/java/sun/security/x509/CertificatePolicyMap.java",
+        "ojluni/src/main/java/sun/security/x509/CertificatePolicySet.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateSerialNumber.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateSubjectName.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateValidity.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateVersion.java",
+        "ojluni/src/main/java/sun/security/x509/CertificateX509Key.java",
+        "ojluni/src/main/java/sun/security/x509/CRLDistributionPointsExtension.java",
+        "ojluni/src/main/java/sun/security/x509/CRLExtensions.java",
+        "ojluni/src/main/java/sun/security/x509/CRLNumberExtension.java",
+        "ojluni/src/main/java/sun/security/x509/CRLReasonCodeExtension.java",
+        "ojluni/src/main/java/sun/security/x509/DeltaCRLIndicatorExtension.java",
+        "ojluni/src/main/java/sun/security/x509/DistributionPoint.java",
+        "ojluni/src/main/java/sun/security/x509/DistributionPointName.java",
+        "ojluni/src/main/java/sun/security/x509/DNSName.java",
+        "ojluni/src/main/java/sun/security/x509/EDIPartyName.java",
+        "ojluni/src/main/java/sun/security/x509/ExtendedKeyUsageExtension.java",
+        "ojluni/src/main/java/sun/security/x509/Extension.java",
+        "ojluni/src/main/java/sun/security/x509/FreshestCRLExtension.java",
+        "ojluni/src/main/java/sun/security/x509/GeneralNameInterface.java",
+        "ojluni/src/main/java/sun/security/x509/GeneralName.java",
+        "ojluni/src/main/java/sun/security/x509/GeneralNames.java",
+        "ojluni/src/main/java/sun/security/x509/GeneralSubtree.java",
+        "ojluni/src/main/java/sun/security/x509/GeneralSubtrees.java",
+        "ojluni/src/main/java/sun/security/x509/InhibitAnyPolicyExtension.java",
+        "ojluni/src/main/java/sun/security/x509/InvalidityDateExtension.java",
+        "ojluni/src/main/java/sun/security/x509/IPAddressName.java",
+        "ojluni/src/main/java/sun/security/x509/IssuerAlternativeNameExtension.java",
+        "ojluni/src/main/java/sun/security/x509/IssuingDistributionPointExtension.java",
+        "ojluni/src/main/java/sun/security/x509/KeyIdentifier.java",
+        "ojluni/src/main/java/sun/security/x509/KeyUsageExtension.java",
+        "ojluni/src/main/java/sun/security/x509/NameConstraintsExtension.java",
+        "ojluni/src/main/java/sun/security/x509/NetscapeCertTypeExtension.java",
+        "ojluni/src/main/java/sun/security/x509/OCSPNoCheckExtension.java",
+        "ojluni/src/main/java/sun/security/x509/OIDMap.java",
+        "ojluni/src/main/java/sun/security/x509/OIDName.java",
+        "ojluni/src/main/java/sun/security/x509/OtherName.java",
+        "ojluni/src/main/java/sun/security/x509/PKIXExtensions.java",
+        "ojluni/src/main/java/sun/security/x509/PolicyConstraintsExtension.java",
+        "ojluni/src/main/java/sun/security/x509/PolicyInformation.java",
+        "ojluni/src/main/java/sun/security/x509/PolicyMappingsExtension.java",
+        "ojluni/src/main/java/sun/security/x509/PrivateKeyUsageExtension.java",
+        "ojluni/src/main/java/sun/security/x509/RDN.java",
+        "ojluni/src/main/java/sun/security/x509/ReasonFlags.java",
+        "ojluni/src/main/java/sun/security/x509/RFC822Name.java",
+        "ojluni/src/main/java/sun/security/x509/SerialNumber.java",
+        "ojluni/src/main/java/sun/security/x509/SubjectAlternativeNameExtension.java",
+        "ojluni/src/main/java/sun/security/x509/SubjectInfoAccessExtension.java",
+        "ojluni/src/main/java/sun/security/x509/SubjectKeyIdentifierExtension.java",
+        "ojluni/src/main/java/sun/security/x509/UniqueIdentity.java",
+        "ojluni/src/main/java/sun/security/x509/URIName.java",
+        "ojluni/src/main/java/sun/security/x509/X400Address.java",
+        "ojluni/src/main/java/sun/security/x509/X500Name.java",
+        "ojluni/src/main/java/sun/security/x509/X509AttributeName.java",
+        "ojluni/src/main/java/sun/security/x509/X509CertImpl.java",
+        "ojluni/src/main/java/sun/security/x509/X509CertInfo.java",
+        "ojluni/src/main/java/sun/security/x509/X509CRLEntryImpl.java",
+        "ojluni/src/main/java/sun/security/x509/X509CRLImpl.java",
+        "ojluni/src/main/java/sun/security/x509/X509Key.java",
+        "ojluni/src/main/java/sun/util/calendar/AbstractCalendar.java",
+        "ojluni/src/main/java/sun/util/calendar/BaseCalendar.java",
+        "ojluni/src/main/java/sun/util/calendar/CalendarDate.java",
+        "ojluni/src/main/java/sun/util/calendar/CalendarSystem.java",
+        "ojluni/src/main/java/sun/util/calendar/CalendarUtils.java",
+        "ojluni/src/main/java/sun/util/calendar/Era.java",
+        "ojluni/src/main/java/sun/util/calendar/Gregorian.java",
+        "ojluni/src/main/java/sun/util/calendar/ImmutableGregorianDate.java",
+        "ojluni/src/main/java/sun/util/calendar/JulianCalendar.java",
+        "ojluni/src/main/java/sun/util/calendar/LocalGregorianCalendar.java",
+        "ojluni/src/main/java/sun/util/locale/BaseLocale.java",
+        "ojluni/src/main/java/sun/util/locale/Extension.java",
+        "ojluni/src/main/java/sun/util/locale/InternalLocaleBuilder.java",
+        "ojluni/src/main/java/sun/util/locale/LanguageTag.java",
+        "ojluni/src/main/java/sun/util/locale/LocaleEquivalentMaps.java",
+        "ojluni/src/main/java/sun/util/locale/LocaleExtensions.java",
+        "ojluni/src/main/java/sun/util/locale/LocaleMatcher.java",
+        "ojluni/src/main/java/sun/util/locale/LocaleObjectCache.java",
+        "ojluni/src/main/java/sun/util/locale/LocaleSyntaxException.java",
+        "ojluni/src/main/java/sun/util/locale/LocaleUtils.java",
+        "ojluni/src/main/java/sun/util/locale/ParseStatus.java",
+        "ojluni/src/main/java/sun/util/locale/StringTokenIterator.java",
+        "ojluni/src/main/java/sun/util/locale/UnicodeLocaleExtension.java",
+        "ojluni/src/main/java/sun/util/locale/provider/CalendarDataUtility.java",
+        "ojluni/src/main/java/sun/util/logging/LoggingProxy.java",
+        "ojluni/src/main/java/sun/util/logging/LoggingSupport.java",
+        "ojluni/src/main/java/sun/util/logging/PlatformLogger.java",
+        "ojluni/src/main/java/sun/util/ResourceBundleEnumeration.java",
+        "ojluni/src/main/java/sun/util/resources/OpenListResourceBundle.java",
+        ":openjdk_javadoc_files",
+        ":openjdk_lambda_stub_files",
+    ],
+}
diff --git a/openjdk_java_files.mk b/openjdk_java_files.mk
deleted file mode 100644
index 81110ab..0000000
--- a/openjdk_java_files.mk
+++ /dev/null
@@ -1,1758 +0,0 @@
-openjdk_javadoc_files := \
-    ojluni/src/main/java/java/awt/font/NumericShaper.java \
-    ojluni/src/main/java/java/awt/font/TextAttribute.java \
-    ojluni/src/main/java/java/beans/IndexedPropertyChangeEvent.java \
-    ojluni/src/main/java/java/beans/PropertyChangeEvent.java \
-    ojluni/src/main/java/java/beans/PropertyChangeListener.java \
-    ojluni/src/main/java/java/beans/PropertyChangeListenerProxy.java \
-    ojluni/src/main/java/java/beans/PropertyChangeSupport.java \
-    ojluni/src/main/java/java/io/Bits.java \
-    ojluni/src/main/java/java/io/BufferedInputStream.java \
-    ojluni/src/main/java/java/io/BufferedOutputStream.java \
-    ojluni/src/main/java/java/io/BufferedReader.java \
-    ojluni/src/main/java/java/io/BufferedWriter.java \
-    ojluni/src/main/java/java/io/ByteArrayInputStream.java \
-    ojluni/src/main/java/java/io/ByteArrayOutputStream.java \
-    ojluni/src/main/java/java/io/CharArrayReader.java \
-    ojluni/src/main/java/java/io/CharArrayWriter.java \
-    ojluni/src/main/java/java/io/CharConversionException.java \
-    ojluni/src/main/java/java/io/Closeable.java \
-    ojluni/src/main/java/java/io/Console.java \
-    ojluni/src/main/java/java/io/DataInput.java \
-    ojluni/src/main/java/java/io/DataInputStream.java \
-    ojluni/src/main/java/java/io/DataOutput.java \
-    ojluni/src/main/java/java/io/DataOutputStream.java \
-    ojluni/src/main/java/java/io/DefaultFileSystem.java \
-    ojluni/src/main/java/java/io/DeleteOnExitHook.java \
-    ojluni/src/main/java/java/io/EOFException.java \
-    ojluni/src/main/java/java/io/ExpiringCache.java \
-    ojluni/src/main/java/java/io/Externalizable.java \
-    ojluni/src/main/java/java/io/FileDescriptor.java \
-    ojluni/src/main/java/java/io/FileFilter.java \
-    ojluni/src/main/java/java/io/FileInputStream.java \
-    ojluni/src/main/java/java/io/File.java \
-    ojluni/src/main/java/java/io/FilenameFilter.java \
-    ojluni/src/main/java/java/io/FileNotFoundException.java \
-    ojluni/src/main/java/java/io/FileOutputStream.java \
-    ojluni/src/main/java/java/io/FilePermission.java \
-    ojluni/src/main/java/java/io/FileReader.java \
-    ojluni/src/main/java/java/io/FileSystem.java \
-    ojluni/src/main/java/java/io/FileWriter.java \
-    ojluni/src/main/java/java/io/FilterInputStream.java \
-    ojluni/src/main/java/java/io/FilterOutputStream.java \
-    ojluni/src/main/java/java/io/FilterReader.java \
-    ojluni/src/main/java/java/io/FilterWriter.java \
-    ojluni/src/main/java/java/io/Flushable.java \
-    ojluni/src/main/java/java/io/InputStream.java \
-    ojluni/src/main/java/java/io/InputStreamReader.java \
-    ojluni/src/main/java/java/io/InterruptedIOException.java \
-    ojluni/src/main/java/java/io/InvalidClassException.java \
-    ojluni/src/main/java/java/io/InvalidObjectException.java \
-    ojluni/src/main/java/java/io/IOError.java \
-    ojluni/src/main/java/java/io/IOException.java \
-    ojluni/src/main/java/java/io/LineNumberInputStream.java \
-    ojluni/src/main/java/java/io/LineNumberReader.java \
-    ojluni/src/main/java/java/io/NotActiveException.java \
-    ojluni/src/main/java/java/io/NotSerializableException.java \
-    ojluni/src/main/java/java/io/ObjectInput.java \
-    ojluni/src/main/java/java/io/ObjectInputStream.java \
-    ojluni/src/main/java/java/io/ObjectInputValidation.java \
-    ojluni/src/main/java/java/io/ObjectOutput.java \
-    ojluni/src/main/java/java/io/ObjectOutputStream.java \
-    ojluni/src/main/java/java/io/ObjectStreamClass.java \
-    ojluni/src/main/java/java/io/ObjectStreamConstants.java \
-    ojluni/src/main/java/java/io/ObjectStreamException.java \
-    ojluni/src/main/java/java/io/ObjectStreamField.java \
-    ojluni/src/main/java/java/io/OptionalDataException.java \
-    ojluni/src/main/java/java/io/OutputStream.java \
-    ojluni/src/main/java/java/io/OutputStreamWriter.java \
-    ojluni/src/main/java/java/io/PipedInputStream.java \
-    ojluni/src/main/java/java/io/PipedOutputStream.java \
-    ojluni/src/main/java/java/io/PipedReader.java \
-    ojluni/src/main/java/java/io/PipedWriter.java \
-    ojluni/src/main/java/java/io/PrintStream.java \
-    ojluni/src/main/java/java/io/PrintWriter.java \
-    ojluni/src/main/java/java/io/PushbackInputStream.java \
-    ojluni/src/main/java/java/io/PushbackReader.java \
-    ojluni/src/main/java/java/io/RandomAccessFile.java \
-    ojluni/src/main/java/java/io/Reader.java \
-    ojluni/src/main/java/java/io/SequenceInputStream.java \
-    ojluni/src/main/java/java/io/SerialCallbackContext.java \
-    ojluni/src/main/java/java/io/Serializable.java \
-    ojluni/src/main/java/java/io/SerializablePermission.java \
-    ojluni/src/main/java/java/io/StreamCorruptedException.java \
-    ojluni/src/main/java/java/io/StreamTokenizer.java \
-    ojluni/src/main/java/java/io/StringBufferInputStream.java \
-    ojluni/src/main/java/java/io/StringReader.java \
-    ojluni/src/main/java/java/io/StringWriter.java \
-    ojluni/src/main/java/java/io/SyncFailedException.java \
-    ojluni/src/main/java/java/io/UncheckedIOException.java \
-    ojluni/src/main/java/java/io/UnixFileSystem.java \
-    ojluni/src/main/java/java/io/UnsupportedEncodingException.java \
-    ojluni/src/main/java/java/io/UTFDataFormatException.java \
-    ojluni/src/main/java/java/io/WriteAbortedException.java \
-    ojluni/src/main/java/java/io/Writer.java \
-    ojluni/src/main/java/java/lang/AbstractMethodError.java \
-    ojluni/src/main/java/java/lang/AbstractStringBuilder.java \
-    ojluni/src/main/java/java/lang/annotation/AnnotationFormatError.java \
-    ojluni/src/main/java/java/lang/annotation/Annotation.java \
-    ojluni/src/main/java/java/lang/annotation/AnnotationTypeMismatchException.java \
-    ojluni/src/main/java/java/lang/annotation/Documented.java \
-    ojluni/src/main/java/java/lang/annotation/ElementType.java \
-    ojluni/src/main/java/java/lang/annotation/IncompleteAnnotationException.java \
-    ojluni/src/main/java/java/lang/annotation/Inherited.java \
-    ojluni/src/main/java/java/lang/annotation/Native.java \
-    ojluni/src/main/java/java/lang/annotation/Retention.java \
-    ojluni/src/main/java/java/lang/annotation/Repeatable.java \
-    ojluni/src/main/java/java/lang/annotation/RetentionPolicy.java \
-    ojluni/src/main/java/java/lang/annotation/Target.java \
-    ojluni/src/main/java/java/lang/annotation/package-info.java \
-    ojluni/src/main/java/java/lang/Appendable.java \
-    ojluni/src/main/java/java/lang/ArithmeticException.java \
-    ojluni/src/main/java/java/lang/ArrayIndexOutOfBoundsException.java \
-    ojluni/src/main/java/java/lang/ArrayStoreException.java \
-    ojluni/src/main/java/java/lang/AssertionError.java \
-    ojluni/src/main/java/java/lang/AutoCloseable.java \
-    ojluni/src/main/java/java/lang/Boolean.java \
-    ojluni/src/main/java/java/lang/BootstrapMethodError.java \
-    ojluni/src/main/java/java/lang/Byte.java \
-    ojluni/src/main/java/java/lang/Character.java \
-    ojluni/src/main/java/java/lang/CharSequence.java \
-    ojluni/src/main/java/java/lang/ClassCastException.java \
-    ojluni/src/main/java/java/lang/ClassCircularityError.java \
-    ojluni/src/main/java/java/lang/ClassFormatError.java \
-    ojluni/src/main/java/java/lang/Class.java \
-    ojluni/src/main/java/java/lang/ClassLoader.java \
-    ojluni/src/main/java/java/lang/ClassNotFoundException.java \
-    ojluni/src/main/java/java/lang/Cloneable.java \
-    ojluni/src/main/java/java/lang/CloneNotSupportedException.java \
-    ojluni/src/main/java/java/lang/Comparable.java \
-    ojluni/src/main/java/java/lang/Compiler.java \
-    ojluni/src/main/java/java/lang/Deprecated.java \
-    ojluni/src/main/java/java/lang/Double.java \
-    ojluni/src/main/java/java/lang/EnumConstantNotPresentException.java \
-    ojluni/src/main/java/java/lang/Enum.java \
-    ojluni/src/main/java/java/lang/Error.java \
-    ojluni/src/main/java/java/lang/ExceptionInInitializerError.java \
-    ojluni/src/main/java/java/lang/Exception.java \
-    ojluni/src/main/java/java/lang/Float.java \
-    ojluni/src/main/java/java/lang/FunctionalInterface.java \
-    ojluni/src/main/java/java/lang/IllegalAccessError.java \
-    ojluni/src/main/java/java/lang/IllegalAccessException.java \
-    ojluni/src/main/java/java/lang/IllegalArgumentException.java \
-    ojluni/src/main/java/java/lang/IllegalMonitorStateException.java \
-    ojluni/src/main/java/java/lang/IllegalStateException.java \
-    ojluni/src/main/java/java/lang/IllegalThreadStateException.java \
-    ojluni/src/main/java/java/lang/IncompatibleClassChangeError.java \
-    ojluni/src/main/java/java/lang/IndexOutOfBoundsException.java \
-    ojluni/src/main/java/java/lang/InheritableThreadLocal.java \
-    ojluni/src/main/java/java/lang/InstantiationError.java \
-    ojluni/src/main/java/java/lang/InstantiationException.java \
-    ojluni/src/main/java/java/lang/Integer.java \
-    ojluni/src/main/java/java/lang/InternalError.java \
-    ojluni/src/main/java/java/lang/InterruptedException.java \
-    ojluni/src/main/java/java/lang/Iterable.java \
-    ojluni/src/main/java/java/lang/LinkageError.java \
-    ojluni/src/main/java/java/lang/Long.java \
-    ojluni/src/main/java/java/lang/Math.java \
-    ojluni/src/main/java/java/lang/NegativeArraySizeException.java \
-    ojluni/src/main/java/java/lang/NoClassDefFoundError.java \
-    ojluni/src/main/java/java/lang/NoSuchFieldError.java \
-    ojluni/src/main/java/java/lang/NoSuchFieldException.java \
-    ojluni/src/main/java/java/lang/NoSuchMethodError.java \
-    ojluni/src/main/java/java/lang/NoSuchMethodException.java \
-    ojluni/src/main/java/java/lang/NullPointerException.java \
-    ojluni/src/main/java/java/lang/NumberFormatException.java \
-    ojluni/src/main/java/java/lang/Number.java \
-    ojluni/src/main/java/java/lang/Object.java \
-    ojluni/src/main/java/java/lang/OutOfMemoryError.java \
-    ojluni/src/main/java/java/lang/Override.java \
-    ojluni/src/main/java/java/lang/Package.java \
-    ojluni/src/main/java/java/lang/ProcessBuilder.java \
-    ojluni/src/main/java/java/lang/ProcessEnvironment.java \
-    ojluni/src/main/java/java/lang/ProcessImpl.java \
-    ojluni/src/main/java/java/lang/Process.java \
-    ojluni/src/main/java/java/lang/Readable.java \
-    ojluni/src/main/java/java/lang/package-info.java \
-    ojluni/src/main/java/java/lang/reflect/AccessibleObject.java \
-    ojluni/src/main/java/java/lang/reflect/AnnotatedElement.java \
-    ojluni/src/main/java/java/lang/reflect/Array.java \
-    ojluni/src/main/java/java/lang/reflect/Constructor.java \
-    ojluni/src/main/java/java/lang/reflect/Field.java \
-    ojluni/src/main/java/java/lang/reflect/Executable.java \
-    ojluni/src/main/java/java/lang/reflect/GenericArrayType.java \
-    ojluni/src/main/java/java/lang/reflect/GenericDeclaration.java \
-    ojluni/src/main/java/java/lang/reflect/GenericSignatureFormatError.java \
-    ojluni/src/main/java/java/lang/reflect/InvocationHandler.java \
-    ojluni/src/main/java/java/lang/reflect/InvocationTargetException.java \
-    ojluni/src/main/java/java/lang/ReflectiveOperationException.java \
-    ojluni/src/main/java/java/lang/reflect/MalformedParameterizedTypeException.java \
-    ojluni/src/main/java/java/lang/reflect/MalformedParametersException.java \
-    ojluni/src/main/java/java/lang/reflect/Member.java \
-    ojluni/src/main/java/java/lang/reflect/Method.java \
-    ojluni/src/main/java/java/lang/reflect/Modifier.java \
-    ojluni/src/main/java/java/lang/reflect/Parameter.java \
-    ojluni/src/main/java/java/lang/reflect/ParameterizedType.java \
-    ojluni/src/main/java/java/lang/reflect/Proxy.java \
-    ojluni/src/main/java/java/lang/reflect/ReflectPermission.java \
-    ojluni/src/main/java/java/lang/reflect/Type.java \
-    ojluni/src/main/java/java/lang/reflect/TypeVariable.java \
-    ojluni/src/main/java/java/lang/reflect/UndeclaredThrowableException.java \
-    ojluni/src/main/java/java/lang/reflect/WeakCache.java \
-    ojluni/src/main/java/java/lang/reflect/WildcardType.java \
-    ojluni/src/main/java/java/lang/reflect/package-info.java \
-    ojluni/src/main/java/java/lang/ref/PhantomReference.java \
-    ojluni/src/main/java/java/lang/ref/Reference.java \
-    ojluni/src/main/java/java/lang/ref/ReferenceQueue.java \
-    ojluni/src/main/java/java/lang/ref/SoftReference.java \
-    ojluni/src/main/java/java/lang/ref/WeakReference.java \
-    ojluni/src/main/java/java/lang/ref/package-info.java \
-    ojluni/src/main/java/java/lang/Runnable.java \
-    ojluni/src/main/java/java/lang/RuntimeException.java \
-    ojluni/src/main/java/java/lang/Runtime.java \
-    ojluni/src/main/java/java/lang/RuntimePermission.java \
-    ojluni/src/main/java/java/lang/SafeVarargs.java \
-    ojluni/src/main/java/java/lang/SecurityException.java \
-    ojluni/src/main/java/java/lang/SecurityManager.java \
-    ojluni/src/main/java/java/lang/Short.java \
-    ojluni/src/main/java/java/lang/StackOverflowError.java \
-    ojluni/src/main/java/java/lang/StackTraceElement.java \
-    ojluni/src/main/java/java/lang/StrictMath.java \
-    ojluni/src/main/java/java/lang/StringBuffer.java \
-    ojluni/src/main/java/java/lang/StringBuilder.java \
-    ojluni/src/main/java/java/lang/StringCoding.java \
-    ojluni/src/main/java/java/lang/StringIndexOutOfBoundsException.java \
-    ojluni/src/main/java/java/lang/String.java \
-    ojluni/src/main/java/java/lang/SuppressWarnings.java \
-    ojluni/src/main/java/java/lang/System.java \
-    ojluni/src/main/java/java/lang/ThreadDeath.java \
-    ojluni/src/main/java/java/lang/ThreadGroup.java \
-    ojluni/src/main/java/java/lang/Thread.java \
-    ojluni/src/main/java/java/lang/ThreadLocal.java \
-    ojluni/src/main/java/java/lang/Throwable.java \
-    ojluni/src/main/java/java/lang/TypeNotPresentException.java \
-    ojluni/src/main/java/java/lang/UNIXProcess.java \
-    ojluni/src/main/java/java/lang/UnknownError.java \
-    ojluni/src/main/java/java/lang/UnsatisfiedLinkError.java \
-    ojluni/src/main/java/java/lang/UnsupportedClassVersionError.java \
-    ojluni/src/main/java/java/lang/UnsupportedOperationException.java \
-    ojluni/src/main/java/java/lang/VerifyError.java \
-    ojluni/src/main/java/java/lang/VirtualMachineError.java \
-    ojluni/src/main/java/java/lang/Void.java \
-    ojluni/src/main/java/java/lang/invoke/LambdaConversionException.java \
-    ojluni/src/main/java/java/lang/invoke/CallSite.java \
-    ojluni/src/main/java/java/lang/invoke/ConstantCallSite.java \
-    ojluni/src/main/java/java/lang/invoke/MethodHandle.java \
-    ojluni/src/main/java/java/lang/invoke/MethodHandles.java \
-    ojluni/src/main/java/java/lang/invoke/MethodHandleImpl.java \
-    ojluni/src/main/java/java/lang/invoke/MethodHandleInfo.java \
-    ojluni/src/main/java/java/lang/invoke/MethodHandleStatics.java \
-    ojluni/src/main/java/java/lang/invoke/MethodType.java \
-    ojluni/src/main/java/java/lang/invoke/MethodTypeForm.java \
-    ojluni/src/main/java/java/lang/invoke/MutableCallSite.java \
-    ojluni/src/main/java/java/lang/invoke/Stable.java \
-    ojluni/src/main/java/java/lang/invoke/Transformers.java \
-    ojluni/src/main/java/java/lang/invoke/VolatileCallSite.java \
-    ojluni/src/main/java/java/lang/invoke/WrongMethodTypeException.java \
-    ojluni/src/main/java/java/net/AbstractPlainDatagramSocketImpl.java \
-    ojluni/src/main/java/java/net/AbstractPlainSocketImpl.java \
-    ojluni/src/main/java/java/net/Authenticator.java \
-    ojluni/src/main/java/java/net/BindException.java \
-    ojluni/src/main/java/java/net/CacheRequest.java \
-    ojluni/src/main/java/java/net/CacheResponse.java \
-    ojluni/src/main/java/java/net/ConnectException.java \
-    ojluni/src/main/java/java/net/ContentHandlerFactory.java \
-    ojluni/src/main/java/java/net/ContentHandler.java \
-    ojluni/src/main/java/java/net/CookieHandler.java \
-    ojluni/src/main/java/java/net/CookieManager.java \
-    ojluni/src/main/java/java/net/CookiePolicy.java \
-    ojluni/src/main/java/java/net/CookieStore.java \
-    ojluni/src/main/java/java/net/DatagramPacket.java \
-    ojluni/src/main/java/java/net/DatagramSocketImplFactory.java \
-    ojluni/src/main/java/java/net/DatagramSocketImpl.java \
-    ojluni/src/main/java/java/net/DatagramSocket.java \
-    ojluni/src/main/java/java/net/DefaultDatagramSocketImplFactory.java \
-    ojluni/src/main/java/java/net/DefaultInterface.java \
-    ojluni/src/main/java/java/net/FileNameMap.java \
-    ojluni/src/main/java/java/net/HttpCookie.java \
-    ojluni/src/main/java/java/net/HttpRetryException.java \
-    ojluni/src/main/java/java/net/HttpURLConnection.java \
-    ojluni/src/main/java/java/net/IDN.java \
-    ojluni/src/main/java/java/net/Inet4Address.java \
-    ojluni/src/main/java/java/net/Inet6AddressImpl.java \
-    ojluni/src/main/java/java/net/Inet6Address.java \
-    ojluni/src/main/java/java/net/InetAddressContainer.java \
-    ojluni/src/main/java/java/net/InetAddressImpl.java \
-    ojluni/src/main/java/java/net/InetAddress.java \
-    ojluni/src/main/java/java/net/InetSocketAddress.java \
-    ojluni/src/main/java/java/net/InMemoryCookieStore.java \
-    ojluni/src/main/java/java/net/InterfaceAddress.java \
-    ojluni/src/main/java/java/net/JarURLConnection.java \
-    ojluni/src/main/java/java/net/MalformedURLException.java \
-    ojluni/src/main/java/java/net/MulticastSocket.java \
-    ojluni/src/main/java/java/net/NetPermission.java \
-    ojluni/src/main/java/java/net/NetworkInterface.java \
-    ojluni/src/main/java/java/net/NoRouteToHostException.java \
-    ojluni/src/main/java/java/net/PasswordAuthentication.java \
-    ojluni/src/main/java/java/net/PlainDatagramSocketImpl.java \
-    ojluni/src/main/java/java/net/PlainSocketImpl.java \
-    ojluni/src/main/java/java/net/PortUnreachableException.java \
-    ojluni/src/main/java/java/net/ProtocolException.java \
-    ojluni/src/main/java/java/net/ProtocolFamily.java \
-    ojluni/src/main/java/java/net/Proxy.java \
-    ojluni/src/main/java/java/net/ProxySelector.java \
-    ojluni/src/main/java/java/net/ResponseCache.java \
-    ojluni/src/main/java/java/net/SecureCacheResponse.java \
-    ojluni/src/main/java/java/net/ServerSocket.java \
-    ojluni/src/main/java/java/net/SocketAddress.java \
-    ojluni/src/main/java/java/net/SocketException.java \
-    ojluni/src/main/java/java/net/SocketImplFactory.java \
-    ojluni/src/main/java/java/net/SocketImpl.java \
-    ojluni/src/main/java/java/net/SocketInputStream.java \
-    ojluni/src/main/java/java/net/Socket.java \
-    ojluni/src/main/java/java/net/SocketOption.java \
-    ojluni/src/main/java/java/net/SocketOptions.java \
-    ojluni/src/main/java/java/net/SocketOutputStream.java \
-    ojluni/src/main/java/java/net/SocketPermission.java \
-    ojluni/src/main/java/java/net/SocketSecrets.java \
-    ojluni/src/main/java/java/net/SocketTimeoutException.java \
-    ojluni/src/main/java/java/net/SocksConsts.java \
-    ojluni/src/main/java/java/net/SocksSocketImpl.java \
-    ojluni/src/main/java/java/net/StandardProtocolFamily.java \
-    ojluni/src/main/java/java/net/StandardSocketOptions.java \
-    ojluni/src/main/java/java/net/UnknownHostException.java \
-    ojluni/src/main/java/java/net/UnknownServiceException.java \
-    ojluni/src/main/java/java/net/URI.java \
-    ojluni/src/main/java/java/net/URISyntaxException.java \
-    ojluni/src/main/java/java/net/URLClassLoader.java \
-    ojluni/src/main/java/java/net/URLConnection.java \
-    ojluni/src/main/java/java/net/URLDecoder.java \
-    ojluni/src/main/java/java/net/URLEncoder.java \
-    ojluni/src/main/java/java/net/URL.java \
-    ojluni/src/main/java/java/net/URLStreamHandlerFactory.java \
-    ojluni/src/main/java/java/net/URLStreamHandler.java \
-    ojluni/src/main/java/java/net/package-info.java \
-    ojluni/src/main/java/java/nio/Bits.java \
-    ojluni/src/main/java/java/nio/Buffer.java \
-    ojluni/src/main/java/java/nio/BufferOverflowException.java \
-    ojluni/src/main/java/java/nio/BufferUnderflowException.java \
-    ojluni/src/main/java/java/nio/ByteBufferAsCharBuffer.java \
-    ojluni/src/main/java/java/nio/ByteBufferAsDoubleBuffer.java \
-    ojluni/src/main/java/java/nio/ByteBufferAsFloatBuffer.java \
-    ojluni/src/main/java/java/nio/ByteBufferAsIntBuffer.java \
-    ojluni/src/main/java/java/nio/ByteBufferAsLongBuffer.java \
-    ojluni/src/main/java/java/nio/ByteBufferAsShortBuffer.java \
-    ojluni/src/main/java/java/nio/ByteBuffer.java \
-    ojluni/src/main/java/java/nio/ByteOrder.java \
-    ojluni/src/main/java/java/nio/channels/AcceptPendingException.java \
-    ojluni/src/main/java/java/nio/channels/AlreadyBoundException.java \
-    ojluni/src/main/java/java/nio/channels/AlreadyConnectedException.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousChannelGroup.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousChannel.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousCloseException.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousFileChannel.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousServerSocketChannel.java \
-    ojluni/src/main/java/java/nio/channels/AsynchronousSocketChannel.java \
-    ojluni/src/main/java/java/nio/channels/ByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/CancelledKeyException.java \
-    ojluni/src/main/java/java/nio/channels/Channel.java \
-    ojluni/src/main/java/java/nio/channels/Channels.java \
-    ojluni/src/main/java/java/nio/channels/ClosedByInterruptException.java \
-    ojluni/src/main/java/java/nio/channels/ClosedChannelException.java \
-    ojluni/src/main/java/java/nio/channels/ClosedSelectorException.java \
-    ojluni/src/main/java/java/nio/channels/CompletionHandler.java \
-    ojluni/src/main/java/java/nio/channels/ConnectionPendingException.java \
-    ojluni/src/main/java/java/nio/channels/DatagramChannel.java \
-    ojluni/src/main/java/java/nio/channels/FileChannel.java \
-    ojluni/src/main/java/java/nio/channels/FileLockInterruptionException.java \
-    ojluni/src/main/java/java/nio/channels/FileLock.java \
-    ojluni/src/main/java/java/nio/channels/GatheringByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/IllegalBlockingModeException.java \
-    ojluni/src/main/java/java/nio/channels/IllegalChannelGroupException.java \
-    ojluni/src/main/java/java/nio/channels/IllegalSelectorException.java \
-    ojluni/src/main/java/java/nio/channels/InterruptedByTimeoutException.java \
-    ojluni/src/main/java/java/nio/channels/InterruptibleChannel.java \
-    ojluni/src/main/java/java/nio/channels/MembershipKey.java \
-    ojluni/src/main/java/java/nio/channels/package-info.java \
-    ojluni/src/main/java/java/nio/CharBuffer.java \
-    ojluni/src/main/java/java/nio/CharBufferSpliterator.java \
-    ojluni/src/main/java/java/nio/DirectByteBuffer.java \
-    ojluni/src/main/java/java/nio/DoubleBuffer.java \
-    ojluni/src/main/java/java/nio/FloatBuffer.java \
-    ojluni/src/main/java/java/nio/HeapByteBuffer.java \
-    ojluni/src/main/java/java/nio/HeapCharBuffer.java \
-    ojluni/src/main/java/java/nio/HeapDoubleBuffer.java \
-    ojluni/src/main/java/java/nio/HeapFloatBuffer.java \
-    ojluni/src/main/java/java/nio/HeapIntBuffer.java \
-    ojluni/src/main/java/java/nio/HeapLongBuffer.java \
-    ojluni/src/main/java/java/nio/HeapShortBuffer.java \
-    ojluni/src/main/java/java/nio/IntBuffer.java \
-    ojluni/src/main/java/java/nio/InvalidMarkException.java \
-    ojluni/src/main/java/java/nio/LongBuffer.java \
-    ojluni/src/main/java/java/nio/MappedByteBuffer.java \
-    ojluni/src/main/java/java/nio/ReadOnlyBufferException.java \
-    ojluni/src/main/java/java/nio/ShortBuffer.java \
-    ojluni/src/main/java/java/nio/StringCharBuffer.java \
-    ojluni/src/main/java/java/nio/channels/MulticastChannel.java \
-    ojluni/src/main/java/java/nio/channels/NetworkChannel.java \
-    ojluni/src/main/java/java/nio/channels/NoConnectionPendingException.java \
-    ojluni/src/main/java/java/nio/channels/NonReadableChannelException.java \
-    ojluni/src/main/java/java/nio/channels/NonWritableChannelException.java \
-    ojluni/src/main/java/java/nio/channels/NotYetBoundException.java \
-    ojluni/src/main/java/java/nio/channels/NotYetConnectedException.java \
-    ojluni/src/main/java/java/nio/channels/OverlappingFileLockException.java \
-    ojluni/src/main/java/java/nio/channels/Pipe.java \
-    ojluni/src/main/java/java/nio/channels/ReadPendingException.java \
-    ojluni/src/main/java/java/nio/channels/ReadableByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/ScatteringByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/SeekableByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/SelectableChannel.java \
-    ojluni/src/main/java/java/nio/channels/SelectionKey.java \
-    ojluni/src/main/java/java/nio/channels/Selector.java \
-    ojluni/src/main/java/java/nio/channels/ServerSocketChannel.java \
-    ojluni/src/main/java/java/nio/channels/ShutdownChannelGroupException.java \
-    ojluni/src/main/java/java/nio/channels/SocketChannel.java \
-    ojluni/src/main/java/java/nio/channels/UnresolvedAddressException.java \
-    ojluni/src/main/java/java/nio/channels/UnsupportedAddressTypeException.java \
-    ojluni/src/main/java/java/nio/channels/WritableByteChannel.java \
-    ojluni/src/main/java/java/nio/channels/WritePendingException.java \
-    ojluni/src/main/java/java/nio/channels/spi/AbstractInterruptibleChannel.java \
-    ojluni/src/main/java/java/nio/channels/spi/AbstractSelectableChannel.java \
-    ojluni/src/main/java/java/nio/channels/spi/AbstractSelectionKey.java \
-    ojluni/src/main/java/java/nio/channels/spi/AbstractSelector.java \
-    ojluni/src/main/java/java/nio/channels/spi/AsynchronousChannelProvider.java \
-    ojluni/src/main/java/java/nio/channels/spi/SelectorProvider.java \
-    ojluni/src/main/java/java/nio/charset/CharacterCodingException.java \
-    ojluni/src/main/java/java/nio/charset/Charset.java \
-    ojluni/src/main/java/java/nio/charset/CharsetDecoder.java \
-    ojluni/src/main/java/java/nio/charset/CharsetEncoder.java \
-    ojluni/src/main/java/java/nio/charset/CoderMalfunctionError.java \
-    ojluni/src/main/java/java/nio/charset/CoderResult.java \
-    ojluni/src/main/java/java/nio/charset/CodingErrorAction.java \
-    ojluni/src/main/java/java/nio/charset/IllegalCharsetNameException.java \
-    ojluni/src/main/java/java/nio/charset/MalformedInputException.java \
-    ojluni/src/main/java/java/nio/charset/StandardCharsets.java \
-    ojluni/src/main/java/java/nio/charset/UnmappableCharacterException.java \
-    ojluni/src/main/java/java/nio/charset/UnsupportedCharsetException.java \
-    ojluni/src/main/java/java/nio/charset/package-info.java \
-    ojluni/src/main/java/java/nio/charset/spi/CharsetProvider.java \
-    ojluni/src/main/java/java/nio/file/AccessDeniedException.java \
-    ojluni/src/main/java/java/nio/file/AccessMode.java \
-    ojluni/src/main/java/java/nio/file/AtomicMoveNotSupportedException.java \
-    ojluni/src/main/java/java/nio/file/ClosedDirectoryStreamException.java \
-    ojluni/src/main/java/java/nio/file/ClosedFileSystemException.java \
-    ojluni/src/main/java/java/nio/file/ClosedWatchServiceException.java \
-    ojluni/src/main/java/java/nio/file/CopyMoveHelper.java \
-    ojluni/src/main/java/java/nio/file/CopyOption.java \
-    ojluni/src/main/java/java/nio/file/DirectoryIteratorException.java \
-    ojluni/src/main/java/java/nio/file/DirectoryNotEmptyException.java \
-    ojluni/src/main/java/java/nio/file/DirectoryStream.java \
-    ojluni/src/main/java/java/nio/file/FileAlreadyExistsException.java \
-    ojluni/src/main/java/java/nio/file/FileStore.java \
-    ojluni/src/main/java/java/nio/file/FileSystem.java \
-    ojluni/src/main/java/java/nio/file/FileSystemAlreadyExistsException.java \
-    ojluni/src/main/java/java/nio/file/FileSystemException.java \
-    ojluni/src/main/java/java/nio/file/FileSystemLoopException.java \
-    ojluni/src/main/java/java/nio/file/FileSystemNotFoundException.java \
-    ojluni/src/main/java/java/nio/file/FileSystems.java \
-    ojluni/src/main/java/java/nio/file/FileTreeIterator.java \
-    ojluni/src/main/java/java/nio/file/FileTreeWalker.java \
-    ojluni/src/main/java/java/nio/file/FileVisitOption.java \
-    ojluni/src/main/java/java/nio/file/FileVisitResult.java \
-    ojluni/src/main/java/java/nio/file/FileVisitor.java \
-    ojluni/src/main/java/java/nio/file/Files.java \
-    ojluni/src/main/java/java/nio/file/InvalidPathException.java \
-    ojluni/src/main/java/java/nio/file/LinkOption.java \
-    ojluni/src/main/java/java/nio/file/LinkPermission.java \
-    ojluni/src/main/java/java/nio/file/NoSuchFileException.java \
-    ojluni/src/main/java/java/nio/file/NotDirectoryException.java \
-    ojluni/src/main/java/java/nio/file/NotLinkException.java \
-    ojluni/src/main/java/java/nio/file/OpenOption.java \
-    ojluni/src/main/java/java/nio/file/Path.java \
-    ojluni/src/main/java/java/nio/file/PathMatcher.java \
-    ojluni/src/main/java/java/nio/file/Paths.java \
-    ojluni/src/main/java/java/nio/file/ProviderMismatchException.java \
-    ojluni/src/main/java/java/nio/file/ProviderNotFoundException.java \
-    ojluni/src/main/java/java/nio/file/ReadOnlyFileSystemException.java \
-    ojluni/src/main/java/java/nio/file/SecureDirectoryStream.java \
-    ojluni/src/main/java/java/nio/file/SimpleFileVisitor.java \
-    ojluni/src/main/java/java/nio/file/StandardCopyOption.java \
-    ojluni/src/main/java/java/nio/file/StandardOpenOption.java \
-    ojluni/src/main/java/java/nio/file/StandardWatchEventKinds.java \
-    ojluni/src/main/java/java/nio/file/TempFileHelper.java \
-    ojluni/src/main/java/java/nio/file/WatchEvent.java \
-    ojluni/src/main/java/java/nio/file/WatchKey.java \
-    ojluni/src/main/java/java/nio/file/WatchService.java \
-    ojluni/src/main/java/java/nio/file/Watchable.java \
-    ojluni/src/main/java/java/nio/file/attribute/AclEntry.java \
-    ojluni/src/main/java/java/nio/file/attribute/AclEntryFlag.java \
-    ojluni/src/main/java/java/nio/file/attribute/AclEntryPermission.java \
-    ojluni/src/main/java/java/nio/file/attribute/AclEntryType.java \
-    ojluni/src/main/java/java/nio/file/attribute/AclFileAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/AttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/BasicFileAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/BasicFileAttributes.java \
-    ojluni/src/main/java/java/nio/file/attribute/DosFileAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/DosFileAttributes.java \
-    ojluni/src/main/java/java/nio/file/attribute/FileAttribute.java \
-    ojluni/src/main/java/java/nio/file/attribute/FileAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/FileOwnerAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/FileStoreAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/FileTime.java \
-    ojluni/src/main/java/java/nio/file/attribute/GroupPrincipal.java \
-    ojluni/src/main/java/java/nio/file/attribute/PosixFileAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/PosixFileAttributes.java \
-    ojluni/src/main/java/java/nio/file/attribute/PosixFilePermission.java \
-    ojluni/src/main/java/java/nio/file/attribute/PosixFilePermissions.java \
-    ojluni/src/main/java/java/nio/file/attribute/UserDefinedFileAttributeView.java \
-    ojluni/src/main/java/java/nio/file/attribute/UserPrincipal.java \
-    ojluni/src/main/java/java/nio/file/attribute/UserPrincipalLookupService.java \
-    ojluni/src/main/java/java/nio/file/attribute/UserPrincipalNotFoundException.java \
-    ojluni/src/main/java/java/nio/file/spi/FileSystemProvider.java \
-    ojluni/src/main/java/java/nio/file/spi/FileTypeDetector.java \
-    ojluni/src/main/java/java/nio/package-info.java \
-    ojluni/src/main/java/java/security/package-info.java \
-    ojluni/src/main/java/java/security/AccessControlContext.java \
-    ojluni/src/main/java/java/security/AccessControlException.java \
-    ojluni/src/main/java/java/security/AccessController.java \
-    ojluni/src/main/java/java/security/acl/AclEntry.java \
-    ojluni/src/main/java/java/security/acl/Acl.java \
-    ojluni/src/main/java/java/security/acl/AclNotFoundException.java \
-    ojluni/src/main/java/java/security/acl/Group.java \
-    ojluni/src/main/java/java/security/acl/LastOwnerException.java \
-    ojluni/src/main/java/java/security/acl/NotOwnerException.java \
-    ojluni/src/main/java/java/security/acl/Owner.java \
-    ojluni/src/main/java/java/security/acl/Permission.java \
-    ojluni/src/main/java/java/security/acl/package-info.java \
-    ojluni/src/main/java/java/security/AlgorithmConstraints.java \
-    ojluni/src/main/java/java/security/AlgorithmParameterGenerator.java \
-    ojluni/src/main/java/java/security/AlgorithmParameterGeneratorSpi.java \
-    ojluni/src/main/java/java/security/AlgorithmParameters.java \
-    ojluni/src/main/java/java/security/AlgorithmParametersSpi.java \
-    ojluni/src/main/java/java/security/AllPermission.java \
-    ojluni/src/main/java/java/security/AuthProvider.java \
-    ojluni/src/main/java/java/security/BasicPermission.java \
-    ojluni/src/main/java/java/security/cert/CertificateEncodingException.java \
-    ojluni/src/main/java/java/security/cert/CertificateException.java \
-    ojluni/src/main/java/java/security/cert/CertificateExpiredException.java \
-    ojluni/src/main/java/java/security/cert/CertificateFactory.java \
-    ojluni/src/main/java/java/security/cert/CertificateFactorySpi.java \
-    ojluni/src/main/java/java/security/cert/Certificate.java \
-    ojluni/src/main/java/java/security/cert/CertificateNotYetValidException.java \
-    ojluni/src/main/java/java/security/cert/CertificateParsingException.java \
-    ojluni/src/main/java/java/security/cert/CertificateRevokedException.java \
-    ojluni/src/main/java/java/security/cert/CertPathBuilderException.java \
-    ojluni/src/main/java/java/security/cert/CertPathBuilder.java \
-    ojluni/src/main/java/java/security/cert/CertPathBuilderResult.java \
-    ojluni/src/main/java/java/security/cert/CertPathBuilderSpi.java \
-    ojluni/src/main/java/java/security/cert/CertPathHelperImpl.java \
-    ojluni/src/main/java/java/security/cert/CertPath.java \
-    ojluni/src/main/java/java/security/cert/CertPathChecker.java \
-    ojluni/src/main/java/java/security/cert/CertPathParameters.java \
-    ojluni/src/main/java/java/security/cert/CertPathValidatorException.java \
-    ojluni/src/main/java/java/security/cert/CertPathValidator.java \
-    ojluni/src/main/java/java/security/cert/CertPathValidatorResult.java \
-    ojluni/src/main/java/java/security/cert/CertPathValidatorSpi.java \
-    ojluni/src/main/java/java/security/cert/CertSelector.java \
-    ojluni/src/main/java/java/security/cert/CertStoreException.java \
-    ojluni/src/main/java/java/security/cert/CertStore.java \
-    ojluni/src/main/java/java/security/cert/CertStoreParameters.java \
-    ojluni/src/main/java/java/security/cert/CertStoreSpi.java \
-    ojluni/src/main/java/java/security/cert/CollectionCertStoreParameters.java \
-    ojluni/src/main/java/java/security/cert/CRLException.java \
-    ojluni/src/main/java/java/security/cert/CRL.java \
-    ojluni/src/main/java/java/security/cert/CRLSelector.java \
-    ojluni/src/main/java/java/security/cert/CRLReason.java \
-    ojluni/src/main/java/java/security/cert/Extension.java \
-    ojluni/src/main/java/java/security/Certificate.java \
-    ojluni/src/main/java/java/security/cert/LDAPCertStoreParameters.java \
-    ojluni/src/main/java/java/security/cert/PKIXBuilderParameters.java \
-    ojluni/src/main/java/java/security/cert/PKIXCertPathBuilderResult.java \
-    ojluni/src/main/java/java/security/cert/PKIXCertPathChecker.java \
-    ojluni/src/main/java/java/security/cert/PKIXCertPathValidatorResult.java \
-    ojluni/src/main/java/java/security/cert/PKIXParameters.java \
-    ojluni/src/main/java/java/security/cert/PKIXReason.java \
-    ojluni/src/main/java/java/security/cert/PKIXRevocationChecker.java \
-    ojluni/src/main/java/java/security/cert/PolicyNode.java \
-    ojluni/src/main/java/java/security/cert/PolicyQualifierInfo.java \
-    ojluni/src/main/java/java/security/cert/TrustAnchor.java \
-    ojluni/src/main/java/java/security/cert/X509Certificate.java \
-    ojluni/src/main/java/java/security/cert/X509CertSelector.java \
-    ojluni/src/main/java/java/security/cert/X509CRLEntry.java \
-    ojluni/src/main/java/java/security/cert/X509CRL.java \
-    ojluni/src/main/java/java/security/cert/X509CRLSelector.java \
-    ojluni/src/main/java/java/security/cert/X509Extension.java \
-    ojluni/src/main/java/java/security/cert/package-info.java \
-    ojluni/src/main/java/java/security/CodeSigner.java \
-    ojluni/src/main/java/java/security/CodeSource.java \
-    ojluni/src/main/java/java/security/CryptoPrimitive.java \
-    ojluni/src/main/java/java/security/DigestException.java \
-    ojluni/src/main/java/java/security/DigestInputStream.java \
-    ojluni/src/main/java/java/security/DigestOutputStream.java \
-    ojluni/src/main/java/java/security/DomainCombiner.java \
-    ojluni/src/main/java/java/security/DomainLoadStoreParameter.java \
-    ojluni/src/main/java/java/security/GeneralSecurityException.java \
-    ojluni/src/main/java/java/security/GuardedObject.java \
-    ojluni/src/main/java/java/security/Guard.java \
-    ojluni/src/main/java/java/security/Identity.java \
-    ojluni/src/main/java/java/security/IdentityScope.java \
-    ojluni/src/main/java/java/security/interfaces/DSAKey.java \
-    ojluni/src/main/java/java/security/interfaces/DSAKeyPairGenerator.java \
-    ojluni/src/main/java/java/security/interfaces/DSAParams.java \
-    ojluni/src/main/java/java/security/interfaces/DSAPrivateKey.java \
-    ojluni/src/main/java/java/security/interfaces/DSAPublicKey.java \
-    ojluni/src/main/java/java/security/interfaces/ECKey.java \
-    ojluni/src/main/java/java/security/interfaces/ECPrivateKey.java \
-    ojluni/src/main/java/java/security/interfaces/ECPublicKey.java \
-    ojluni/src/main/java/java/security/interfaces/RSAKey.java \
-    ojluni/src/main/java/java/security/interfaces/RSAMultiPrimePrivateCrtKey.java \
-    ojluni/src/main/java/java/security/interfaces/RSAPrivateCrtKey.java \
-    ojluni/src/main/java/java/security/interfaces/RSAPrivateKey.java \
-    ojluni/src/main/java/java/security/interfaces/RSAPublicKey.java \
-    ojluni/src/main/java/java/security/interfaces/package-info.java \
-    ojluni/src/main/java/java/security/InvalidAlgorithmParameterException.java \
-    ojluni/src/main/java/java/security/InvalidKeyException.java \
-    ojluni/src/main/java/java/security/InvalidParameterException.java \
-    ojluni/src/main/java/java/security/KeyException.java \
-    ojluni/src/main/java/java/security/KeyFactory.java \
-    ojluni/src/main/java/java/security/KeyFactorySpi.java \
-    ojluni/src/main/java/java/security/Key.java \
-    ojluni/src/main/java/java/security/KeyManagementException.java \
-    ojluni/src/main/java/java/security/KeyPairGenerator.java \
-    ojluni/src/main/java/java/security/KeyPairGeneratorSpi.java \
-    ojluni/src/main/java/java/security/KeyPair.java \
-    ojluni/src/main/java/java/security/KeyRep.java \
-    ojluni/src/main/java/java/security/KeyStoreException.java \
-    ojluni/src/main/java/java/security/KeyStore.java \
-    ojluni/src/main/java/java/security/KeyStoreSpi.java \
-    ojluni/src/main/java/java/security/MessageDigest.java \
-    ojluni/src/main/java/java/security/MessageDigestSpi.java \
-    ojluni/src/main/java/java/security/NoSuchAlgorithmException.java \
-    ojluni/src/main/java/java/security/NoSuchProviderException.java \
-    ojluni/src/main/java/java/security/PKCS12Attribute.java \
-    ojluni/src/main/java/java/security/PermissionCollection.java \
-    ojluni/src/main/java/java/security/Permission.java \
-    ojluni/src/main/java/java/security/Permissions.java \
-    ojluni/src/main/java/java/security/Policy.java \
-    ojluni/src/main/java/java/security/PolicySpi.java \
-    ojluni/src/main/java/java/security/Principal.java \
-    ojluni/src/main/java/java/security/PrivateKey.java \
-    ojluni/src/main/java/java/security/PrivilegedActionException.java \
-    ojluni/src/main/java/java/security/PrivilegedAction.java \
-    ojluni/src/main/java/java/security/PrivilegedExceptionAction.java \
-    ojluni/src/main/java/java/security/ProtectionDomain.java \
-    ojluni/src/main/java/java/security/ProviderException.java \
-    ojluni/src/main/java/java/security/Provider.java \
-    ojluni/src/main/java/java/security/PublicKey.java \
-    ojluni/src/main/java/java/security/SecureClassLoader.java \
-    ojluni/src/main/java/java/security/SecureRandom.java \
-    ojluni/src/main/java/java/security/SecureRandomSpi.java \
-    ojluni/src/main/java/java/security/Security.java \
-    ojluni/src/main/java/java/security/SecurityPermission.java \
-    ojluni/src/main/java/java/security/SignatureException.java \
-    ojluni/src/main/java/java/security/Signature.java \
-    ojluni/src/main/java/java/security/SignatureSpi.java \
-    ojluni/src/main/java/java/security/SignedObject.java \
-    ojluni/src/main/java/java/security/Signer.java \
-    ojluni/src/main/java/java/security/spec/AlgorithmParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/DSAParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/DSAPrivateKeySpec.java \
-    ojluni/src/main/java/java/security/spec/DSAPublicKeySpec.java \
-    ojluni/src/main/java/java/security/spec/ECFieldF2m.java \
-    ojluni/src/main/java/java/security/spec/ECFieldFp.java \
-    ojluni/src/main/java/java/security/spec/ECField.java \
-    ojluni/src/main/java/java/security/spec/ECGenParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/ECParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/ECPoint.java \
-    ojluni/src/main/java/java/security/spec/ECPrivateKeySpec.java \
-    ojluni/src/main/java/java/security/spec/ECPublicKeySpec.java \
-    ojluni/src/main/java/java/security/spec/EllipticCurve.java \
-    ojluni/src/main/java/java/security/spec/EncodedKeySpec.java \
-    ojluni/src/main/java/java/security/spec/InvalidKeySpecException.java \
-    ojluni/src/main/java/java/security/spec/InvalidParameterSpecException.java \
-    ojluni/src/main/java/java/security/spec/KeySpec.java \
-    ojluni/src/main/java/java/security/spec/MGF1ParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/PKCS8EncodedKeySpec.java \
-    ojluni/src/main/java/java/security/spec/PSSParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/RSAKeyGenParameterSpec.java \
-    ojluni/src/main/java/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.java \
-    ojluni/src/main/java/java/security/spec/RSAOtherPrimeInfo.java \
-    ojluni/src/main/java/java/security/spec/RSAPrivateCrtKeySpec.java \
-    ojluni/src/main/java/java/security/spec/RSAPrivateKeySpec.java \
-    ojluni/src/main/java/java/security/spec/RSAPublicKeySpec.java \
-    ojluni/src/main/java/java/security/spec/X509EncodedKeySpec.java \
-    ojluni/src/main/java/java/security/spec/package-info.java \
-    ojluni/src/main/java/java/security/Timestamp.java \
-    ojluni/src/main/java/java/security/UnrecoverableEntryException.java \
-    ojluni/src/main/java/java/security/UnrecoverableKeyException.java \
-    ojluni/src/main/java/java/security/UnresolvedPermissionCollection.java \
-    ojluni/src/main/java/java/security/UnresolvedPermission.java \
-    ojluni/src/main/java/java/sql/Array.java \
-    ojluni/src/main/java/java/sql/BatchUpdateException.java \
-    ojluni/src/main/java/java/sql/Blob.java \
-    ojluni/src/main/java/java/sql/CallableStatement.java \
-    ojluni/src/main/java/java/sql/ClientInfoStatus.java \
-    ojluni/src/main/java/java/sql/Clob.java \
-    ojluni/src/main/java/java/sql/Connection.java \
-    ojluni/src/main/java/java/sql/DatabaseMetaData.java \
-    ojluni/src/main/java/java/sql/DataTruncation.java \
-    ojluni/src/main/java/java/sql/Date.java \
-    ojluni/src/main/java/java/sql/Driver.java \
-    ojluni/src/main/java/java/sql/DriverManager.java \
-    ojluni/src/main/java/java/sql/DriverPropertyInfo.java \
-    ojluni/src/main/java/java/sql/NClob.java \
-    ojluni/src/main/java/java/sql/ParameterMetaData.java \
-    ojluni/src/main/java/java/sql/PreparedStatement.java \
-    ojluni/src/main/java/java/sql/Ref.java \
-    ojluni/src/main/java/java/sql/ResultSet.java \
-    ojluni/src/main/java/java/sql/ResultSetMetaData.java \
-    ojluni/src/main/java/java/sql/RowId.java \
-    ojluni/src/main/java/java/sql/RowIdLifetime.java \
-    ojluni/src/main/java/java/sql/Savepoint.java \
-    ojluni/src/main/java/java/sql/SQLClientInfoException.java \
-    ojluni/src/main/java/java/sql/SQLDataException.java \
-    ojluni/src/main/java/java/sql/SQLData.java \
-    ojluni/src/main/java/java/sql/SQLException.java \
-    ojluni/src/main/java/java/sql/SQLFeatureNotSupportedException.java \
-    ojluni/src/main/java/java/sql/SQLInput.java \
-    ojluni/src/main/java/java/sql/SQLIntegrityConstraintViolationException.java \
-    ojluni/src/main/java/java/sql/SQLInvalidAuthorizationSpecException.java \
-    ojluni/src/main/java/java/sql/SQLNonTransientConnectionException.java \
-    ojluni/src/main/java/java/sql/SQLNonTransientException.java \
-    ojluni/src/main/java/java/sql/SQLOutput.java \
-    ojluni/src/main/java/java/sql/SQLPermission.java \
-    ojluni/src/main/java/java/sql/SQLRecoverableException.java \
-    ojluni/src/main/java/java/sql/SQLSyntaxErrorException.java \
-    ojluni/src/main/java/java/sql/SQLTimeoutException.java \
-    ojluni/src/main/java/java/sql/SQLTransactionRollbackException.java \
-    ojluni/src/main/java/java/sql/SQLTransientConnectionException.java \
-    ojluni/src/main/java/java/sql/SQLTransientException.java \
-    ojluni/src/main/java/java/sql/SQLWarning.java \
-    ojluni/src/main/java/java/sql/SQLXML.java \
-    ojluni/src/main/java/java/sql/Statement.java \
-    ojluni/src/main/java/java/sql/Struct.java \
-    ojluni/src/main/java/java/sql/Time.java \
-    ojluni/src/main/java/java/sql/Timestamp.java \
-    ojluni/src/main/java/java/sql/Types.java \
-    ojluni/src/main/java/java/sql/Wrapper.java \
-    ojluni/src/main/java/java/text/Annotation.java \
-    ojluni/src/main/java/java/text/AttributedCharacterIterator.java \
-    ojluni/src/main/java/java/text/AttributedString.java \
-    ojluni/src/main/java/java/text/Bidi.java \
-    ojluni/src/main/java/java/text/BreakIterator.java \
-    ojluni/src/main/java/java/text/CalendarBuilder.java \
-    ojluni/src/main/java/java/text/CharacterIteratorFieldDelegate.java \
-    ojluni/src/main/java/java/text/CharacterIterator.java \
-    ojluni/src/main/java/java/text/ChoiceFormat.java \
-    ojluni/src/main/java/java/text/CollationElementIterator.java \
-    ojluni/src/main/java/java/text/CollationKey.java \
-    ojluni/src/main/java/java/text/Collator.java \
-    ojluni/src/main/java/java/text/DateFormat.java \
-    ojluni/src/main/java/java/text/DateFormatSymbols.java \
-    ojluni/src/main/java/java/text/DecimalFormat.java \
-    ojluni/src/main/java/java/text/DecimalFormatSymbols.java \
-    ojluni/src/main/java/java/text/DontCareFieldPosition.java \
-    ojluni/src/main/java/java/text/EntryPair.java \
-    ojluni/src/main/java/java/text/FieldPosition.java \
-    ojluni/src/main/java/java/text/Format.java \
-    ojluni/src/main/java/java/text/MergeCollation.java \
-    ojluni/src/main/java/java/text/MessageFormat.java \
-    ojluni/src/main/java/java/text/Normalizer.java \
-    ojluni/src/main/java/java/text/NumberFormat.java \
-    ojluni/src/main/java/java/text/ParseException.java \
-    ojluni/src/main/java/java/text/ParsePosition.java \
-    ojluni/src/main/java/java/text/PatternEntry.java \
-    ojluni/src/main/java/java/text/IcuIteratorWrapper.java \
-    ojluni/src/main/java/java/text/RuleBasedCollator.java \
-    ojluni/src/main/java/java/text/SimpleDateFormat.java \
-    ojluni/src/main/java/java/text/StringCharacterIterator.java \
-    ojluni/src/main/java/java/time/YearMonth.java \
-    ojluni/src/main/java/java/time/LocalDate.java \
-    ojluni/src/main/java/java/time/Ser.java \
-    ojluni/src/main/java/java/time/DayOfWeek.java \
-    ojluni/src/main/java/java/time/chrono/HijrahChronology.java \
-    ojluni/src/main/java/java/time/chrono/Ser.java \
-    ojluni/src/main/java/java/time/chrono/IsoEra.java \
-    ojluni/src/main/java/java/time/chrono/JapaneseEra.java \
-    ojluni/src/main/java/java/time/chrono/ChronoPeriodImpl.java \
-    ojluni/src/main/java/java/time/chrono/ChronoLocalDate.java \
-    ojluni/src/main/java/java/time/chrono/Chronology.java \
-    ojluni/src/main/java/java/time/chrono/ChronoLocalDateTimeImpl.java \
-    ojluni/src/main/java/java/time/chrono/ThaiBuddhistChronology.java \
-    ojluni/src/main/java/java/time/chrono/MinguoChronology.java \
-    ojluni/src/main/java/java/time/chrono/JapaneseChronology.java \
-    ojluni/src/main/java/java/time/chrono/Era.java \
-    ojluni/src/main/java/java/time/chrono/ChronoZonedDateTimeImpl.java \
-    ojluni/src/main/java/java/time/chrono/JapaneseDate.java \
-    ojluni/src/main/java/java/time/chrono/AbstractChronology.java \
-    ojluni/src/main/java/java/time/chrono/ChronoLocalDateImpl.java \
-    ojluni/src/main/java/java/time/chrono/HijrahEra.java \
-    ojluni/src/main/java/java/time/chrono/HijrahDate.java \
-    ojluni/src/main/java/java/time/chrono/ThaiBuddhistDate.java \
-    ojluni/src/main/java/java/time/chrono/IsoChronology.java \
-    ojluni/src/main/java/java/time/chrono/MinguoEra.java \
-    ojluni/src/main/java/java/time/chrono/ChronoZonedDateTime.java \
-    ojluni/src/main/java/java/time/chrono/package-info.java \
-    ojluni/src/main/java/java/time/chrono/ChronoPeriod.java \
-    ojluni/src/main/java/java/time/chrono/ThaiBuddhistEra.java \
-    ojluni/src/main/java/java/time/chrono/ChronoLocalDateTime.java \
-    ojluni/src/main/java/java/time/chrono/MinguoDate.java \
-    ojluni/src/main/java/java/time/DateTimeException.java \
-    ojluni/src/main/java/java/time/ZoneRegion.java \
-    ojluni/src/main/java/java/time/LocalTime.java \
-    ojluni/src/main/java/java/time/Duration.java \
-    ojluni/src/main/java/java/time/LocalDateTime.java \
-    ojluni/src/main/java/java/time/OffsetDateTime.java \
-    ojluni/src/main/java/java/time/Instant.java \
-    ojluni/src/main/java/java/time/temporal/ValueRange.java \
-    ojluni/src/main/java/java/time/temporal/TemporalAmount.java \
-    ojluni/src/main/java/java/time/temporal/ChronoField.java \
-    ojluni/src/main/java/java/time/temporal/TemporalAccessor.java \
-    ojluni/src/main/java/java/time/temporal/TemporalAdjusters.java \
-    ojluni/src/main/java/java/time/temporal/ChronoUnit.java \
-    ojluni/src/main/java/java/time/temporal/UnsupportedTemporalTypeException.java \
-    ojluni/src/main/java/java/time/temporal/TemporalQueries.java \
-    ojluni/src/main/java/java/time/temporal/TemporalAdjuster.java \
-    ojluni/src/main/java/java/time/temporal/TemporalField.java \
-    ojluni/src/main/java/java/time/temporal/TemporalQuery.java \
-    ojluni/src/main/java/java/time/temporal/Temporal.java \
-    ojluni/src/main/java/java/time/temporal/TemporalUnit.java \
-    ojluni/src/main/java/java/time/temporal/package-info.java \
-    ojluni/src/main/java/java/time/temporal/JulianFields.java \
-    ojluni/src/main/java/java/time/temporal/WeekFields.java \
-    ojluni/src/main/java/java/time/temporal/IsoFields.java \
-    ojluni/src/main/java/java/time/ZoneOffset.java \
-    ojluni/src/main/java/java/time/zone/Ser.java \
-    ojluni/src/main/java/java/time/zone/ZoneOffsetTransition.java \
-    ojluni/src/main/java/java/time/zone/ZoneRulesException.java \
-    ojluni/src/main/java/java/time/zone/ZoneOffsetTransitionRule.java \
-    ojluni/src/main/java/java/time/zone/ZoneRules.java \
-    ojluni/src/main/java/java/time/zone/package-info.java \
-    ojluni/src/main/java/java/time/OffsetTime.java \
-    ojluni/src/main/java/java/time/Year.java \
-    ojluni/src/main/java/java/time/Clock.java \
-    ojluni/src/main/java/java/time/format/Parsed.java \
-    ojluni/src/main/java/java/time/format/DateTimeTextProvider.java \
-    ojluni/src/main/java/java/time/format/DateTimeParseException.java \
-    ojluni/src/main/java/java/time/format/DateTimeFormatterBuilder.java \
-    ojluni/src/main/java/java/time/format/ResolverStyle.java \
-    ojluni/src/main/java/java/time/format/FormatStyle.java \
-    ojluni/src/main/java/java/time/format/DecimalStyle.java \
-    ojluni/src/main/java/java/time/format/DateTimePrintContext.java \
-    ojluni/src/main/java/java/time/format/package-info.java \
-    ojluni/src/main/java/java/time/format/ZoneName.java \
-    ojluni/src/main/java/java/time/format/TextStyle.java \
-    ojluni/src/main/java/java/time/format/DateTimeFormatter.java \
-    ojluni/src/main/java/java/time/format/DateTimeParseContext.java \
-    ojluni/src/main/java/java/time/format/SignStyle.java \
-    ojluni/src/main/java/java/time/Period.java \
-    ojluni/src/main/java/java/time/ZonedDateTime.java \
-    ojluni/src/main/java/java/time/package-info.java \
-    ojluni/src/main/java/java/time/Month.java \
-    ojluni/src/main/java/java/time/ZoneId.java \
-    ojluni/src/main/java/java/time/MonthDay.java \
-    ojluni/src/main/java/java/util/AbstractCollection.java \
-    ojluni/src/main/java/java/util/AbstractList.java \
-    ojluni/src/main/java/java/util/AbstractMap.java \
-    ojluni/src/main/java/java/util/AbstractQueue.java \
-    ojluni/src/main/java/java/util/AbstractSequentialList.java \
-    ojluni/src/main/java/java/util/AbstractSet.java \
-    ojluni/src/main/java/java/util/ArrayDeque.java \
-    ojluni/src/main/java/java/util/ArrayList.java \
-    ojluni/src/main/java/java/util/ArrayPrefixHelpers.java \
-    ojluni/src/main/java/java/util/Arrays.java \
-    ojluni/src/main/java/java/util/ArraysParallelSortHelpers.java \
-    ojluni/src/main/java/java/util/Base64.java \
-    ojluni/src/main/java/java/util/BitSet.java \
-    ojluni/src/main/java/java/util/Calendar.java \
-    ojluni/src/main/java/java/util/Collection.java \
-    ojluni/src/main/java/java/util/Collections.java \
-    ojluni/src/main/java/java/util/ComparableTimSort.java \
-    ojluni/src/main/java/java/util/Comparator.java \
-    ojluni/src/main/java/java/util/Comparators.java \
-    ojluni/src/main/java/java/util/ConcurrentModificationException.java \
-    ojluni/src/main/java/java/util/Currency.java \
-    ojluni/src/main/java/java/util/Date.java \
-    ojluni/src/main/java/java/util/Deque.java \
-    ojluni/src/main/java/java/util/Dictionary.java \
-    ojluni/src/main/java/java/util/DualPivotQuicksort.java \
-    ojluni/src/main/java/java/util/DuplicateFormatFlagsException.java \
-    ojluni/src/main/java/java/util/EmptyStackException.java \
-    ojluni/src/main/java/java/util/Enumeration.java \
-    ojluni/src/main/java/java/util/EnumMap.java \
-    ojluni/src/main/java/java/util/EnumSet.java \
-    ojluni/src/main/java/java/util/EventListener.java \
-    ojluni/src/main/java/java/util/EventListenerProxy.java \
-    ojluni/src/main/java/java/util/EventObject.java \
-    ojluni/src/main/java/java/util/FormatFlagsConversionMismatchException.java \
-    ojluni/src/main/java/java/util/FormattableFlags.java \
-    ojluni/src/main/java/java/util/Formattable.java \
-    ojluni/src/main/java/java/util/FormatterClosedException.java \
-    ojluni/src/main/java/java/util/Formatter.java \
-    ojluni/src/main/java/java/util/GregorianCalendar.java \
-    ojluni/src/main/java/java/util/HashMap.java \
-    ojluni/src/main/java/java/util/HashSet.java \
-    ojluni/src/main/java/java/util/Hashtable.java \
-    ojluni/src/main/java/java/util/IdentityHashMap.java \
-    ojluni/src/main/java/java/util/IllegalFormatCodePointException.java \
-    ojluni/src/main/java/java/util/IllegalFormatConversionException.java \
-    ojluni/src/main/java/java/util/IllegalFormatException.java \
-    ojluni/src/main/java/java/util/IllegalFormatFlagsException.java \
-    ojluni/src/main/java/java/util/IllegalFormatPrecisionException.java \
-    ojluni/src/main/java/java/util/IllegalFormatWidthException.java \
-    ojluni/src/main/java/java/util/IllformedLocaleException.java \
-    ojluni/src/main/java/java/util/InputMismatchException.java \
-    ojluni/src/main/java/java/util/InvalidPropertiesFormatException.java \
-    ojluni/src/main/java/java/util/Iterator.java \
-    ojluni/src/main/java/java/util/Optional.java \
-    ojluni/src/main/java/java/util/OptionalInt.java \
-    ojluni/src/main/java/java/util/OptionalLong.java \
-    ojluni/src/main/java/java/util/OptionalDouble.java \
-    ojluni/src/main/java/java/util/PrimitiveIterator.java \
-    ojluni/src/main/java/java/util/StringJoiner.java \
-    ojluni/src/main/java/java/util/Tripwire.java \
-    ojluni/src/main/java/java/util/DoubleSummaryStatistics.java \
-    ojluni/src/main/java/java/util/IntSummaryStatistics.java \
-    ojluni/src/main/java/java/util/LongSummaryStatistics.java \
-    ojluni/src/main/java/java/util/concurrent/AbstractExecutorService.java \
-    ojluni/src/main/java/java/util/concurrent/ArrayBlockingQueue.java \
-    ojluni/src/main/java/java/util/concurrent/BlockingDeque.java \
-    ojluni/src/main/java/java/util/concurrent/BlockingQueue.java \
-    ojluni/src/main/java/java/util/concurrent/BrokenBarrierException.java \
-    ojluni/src/main/java/java/util/concurrent/Callable.java \
-    ojluni/src/main/java/java/util/concurrent/CancellationException.java \
-    ojluni/src/main/java/java/util/concurrent/CompletableFuture.java \
-    ojluni/src/main/java/java/util/concurrent/CompletionException.java \
-    ojluni/src/main/java/java/util/concurrent/CompletionService.java \
-    ojluni/src/main/java/java/util/concurrent/CompletionStage.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedDeque.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentLinkedQueue.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentMap.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentNavigableMap.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListMap.java \
-    ojluni/src/main/java/java/util/concurrent/ConcurrentSkipListSet.java \
-    ojluni/src/main/java/java/util/concurrent/CopyOnWriteArrayList.java \
-    ojluni/src/main/java/java/util/concurrent/CopyOnWriteArraySet.java \
-    ojluni/src/main/java/java/util/concurrent/CountDownLatch.java \
-    ojluni/src/main/java/java/util/concurrent/CountedCompleter.java \
-    ojluni/src/main/java/java/util/concurrent/CyclicBarrier.java \
-    ojluni/src/main/java/java/util/concurrent/DelayQueue.java \
-    ojluni/src/main/java/java/util/concurrent/Delayed.java \
-    ojluni/src/main/java/java/util/concurrent/Exchanger.java \
-    ojluni/src/main/java/java/util/concurrent/ExecutionException.java \
-    ojluni/src/main/java/java/util/concurrent/Executor.java \
-    ojluni/src/main/java/java/util/concurrent/ExecutorCompletionService.java \
-    ojluni/src/main/java/java/util/concurrent/ExecutorService.java \
-    ojluni/src/main/java/java/util/concurrent/Executors.java \
-    ojluni/src/main/java/java/util/concurrent/ForkJoinPool.java \
-    ojluni/src/main/java/java/util/concurrent/ForkJoinTask.java \
-    ojluni/src/main/java/java/util/concurrent/ForkJoinWorkerThread.java \
-    ojluni/src/main/java/java/util/concurrent/Future.java \
-    ojluni/src/main/java/java/util/concurrent/FutureTask.java \
-    ojluni/src/main/java/java/util/concurrent/Helpers.java \
-    ojluni/src/main/java/java/util/concurrent/LinkedBlockingDeque.java \
-    ojluni/src/main/java/java/util/concurrent/LinkedBlockingQueue.java \
-    ojluni/src/main/java/java/util/concurrent/LinkedTransferQueue.java \
-    ojluni/src/main/java/java/util/concurrent/Phaser.java \
-    ojluni/src/main/java/java/util/concurrent/PriorityBlockingQueue.java \
-    ojluni/src/main/java/java/util/concurrent/RecursiveAction.java \
-    ojluni/src/main/java/java/util/concurrent/RecursiveTask.java \
-    ojluni/src/main/java/java/util/concurrent/RejectedExecutionException.java \
-    ojluni/src/main/java/java/util/concurrent/RejectedExecutionHandler.java \
-    ojluni/src/main/java/java/util/concurrent/RunnableFuture.java \
-    ojluni/src/main/java/java/util/concurrent/RunnableScheduledFuture.java \
-    ojluni/src/main/java/java/util/concurrent/ScheduledExecutorService.java \
-    ojluni/src/main/java/java/util/concurrent/ScheduledFuture.java \
-    ojluni/src/main/java/java/util/concurrent/ScheduledThreadPoolExecutor.java \
-    ojluni/src/main/java/java/util/concurrent/Semaphore.java \
-    ojluni/src/main/java/java/util/concurrent/SynchronousQueue.java \
-    ojluni/src/main/java/java/util/concurrent/ThreadFactory.java \
-    ojluni/src/main/java/java/util/concurrent/ThreadLocalRandom.java \
-    ojluni/src/main/java/java/util/concurrent/ThreadPoolExecutor.java \
-    ojluni/src/main/java/java/util/concurrent/TimeUnit.java \
-    ojluni/src/main/java/java/util/concurrent/TimeoutException.java \
-    ojluni/src/main/java/java/util/concurrent/TransferQueue.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicBoolean.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicInteger.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerArray.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicLong.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongArray.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicLongFieldUpdater.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicMarkableReference.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicReference.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceArray.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/AtomicStampedReference.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/DoubleAccumulator.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/DoubleAdder.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/LongAccumulator.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/LongAdder.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/Striped64.java \
-    ojluni/src/main/java/java/util/concurrent/atomic/package-info.java \
-    ojluni/src/main/java/java/util/concurrent/locks/AbstractOwnableSynchronizer.java \
-    ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java \
-    ojluni/src/main/java/java/util/concurrent/locks/AbstractQueuedSynchronizer.java \
-    ojluni/src/main/java/java/util/concurrent/locks/Condition.java \
-    ojluni/src/main/java/java/util/concurrent/locks/Lock.java \
-    ojluni/src/main/java/java/util/concurrent/locks/LockSupport.java \
-    ojluni/src/main/java/java/util/concurrent/locks/ReadWriteLock.java \
-    ojluni/src/main/java/java/util/concurrent/locks/ReentrantLock.java \
-    ojluni/src/main/java/java/util/concurrent/locks/ReentrantReadWriteLock.java \
-    ojluni/src/main/java/java/util/concurrent/locks/StampedLock.java \
-    ojluni/src/main/java/java/util/concurrent/locks/package-info.java \
-    ojluni/src/main/java/java/util/concurrent/package-info.java \
-    ojluni/src/main/java/java/util/function/BiConsumer.java \
-    ojluni/src/main/java/java/util/function/BiFunction.java \
-    ojluni/src/main/java/java/util/function/BinaryOperator.java \
-    ojluni/src/main/java/java/util/function/BiPredicate.java \
-    ojluni/src/main/java/java/util/function/BooleanSupplier.java \
-    ojluni/src/main/java/java/util/function/Consumer.java \
-    ojluni/src/main/java/java/util/function/DoubleBinaryOperator.java \
-    ojluni/src/main/java/java/util/function/DoubleConsumer.java \
-    ojluni/src/main/java/java/util/function/DoubleFunction.java \
-    ojluni/src/main/java/java/util/function/DoublePredicate.java \
-    ojluni/src/main/java/java/util/function/DoubleSupplier.java \
-    ojluni/src/main/java/java/util/function/DoubleToIntFunction.java \
-    ojluni/src/main/java/java/util/function/DoubleToLongFunction.java \
-    ojluni/src/main/java/java/util/function/DoubleUnaryOperator.java \
-    ojluni/src/main/java/java/util/function/Function.java \
-    ojluni/src/main/java/java/util/function/IntBinaryOperator.java \
-    ojluni/src/main/java/java/util/function/IntConsumer.java \
-    ojluni/src/main/java/java/util/function/IntFunction.java \
-    ojluni/src/main/java/java/util/function/IntPredicate.java \
-    ojluni/src/main/java/java/util/function/IntSupplier.java \
-    ojluni/src/main/java/java/util/function/IntToDoubleFunction.java \
-    ojluni/src/main/java/java/util/function/IntToLongFunction.java \
-    ojluni/src/main/java/java/util/function/IntUnaryOperator.java \
-    ojluni/src/main/java/java/util/function/LongBinaryOperator.java \
-    ojluni/src/main/java/java/util/function/LongConsumer.java \
-    ojluni/src/main/java/java/util/function/LongFunction.java \
-    ojluni/src/main/java/java/util/function/LongPredicate.java \
-    ojluni/src/main/java/java/util/function/LongSupplier.java \
-    ojluni/src/main/java/java/util/function/LongToDoubleFunction.java \
-    ojluni/src/main/java/java/util/function/LongToIntFunction.java \
-    ojluni/src/main/java/java/util/function/LongUnaryOperator.java \
-    ojluni/src/main/java/java/util/function/ObjDoubleConsumer.java \
-    ojluni/src/main/java/java/util/function/ObjIntConsumer.java \
-    ojluni/src/main/java/java/util/function/ObjLongConsumer.java \
-    ojluni/src/main/java/java/util/function/Predicate.java \
-    ojluni/src/main/java/java/util/function/Supplier.java \
-    ojluni/src/main/java/java/util/function/ToDoubleBiFunction.java \
-    ojluni/src/main/java/java/util/function/ToDoubleFunction.java \
-    ojluni/src/main/java/java/util/function/ToIntBiFunction.java \
-    ojluni/src/main/java/java/util/function/ToIntFunction.java \
-    ojluni/src/main/java/java/util/function/ToLongBiFunction.java \
-    ojluni/src/main/java/java/util/function/ToLongFunction.java \
-    ojluni/src/main/java/java/util/function/UnaryOperator.java \
-    ojluni/src/main/java/java/util/function/package-info.java \
-    ojluni/src/main/java/java/util/jar/Attributes.java \
-    ojluni/src/main/java/java/util/jar/JarEntry.java \
-    ojluni/src/main/java/java/util/jar/JarException.java \
-    ojluni/src/main/java/java/util/jar/JarFile.java \
-    ojluni/src/main/java/java/util/jar/JarInputStream.java \
-    ojluni/src/main/java/java/util/jar/JarOutputStream.java \
-    ojluni/src/main/java/java/util/jar/JarVerifier.java \
-    ojluni/src/main/java/java/util/jar/Manifest.java \
-    ojluni/src/main/java/java/util/jar/Pack200.java \
-    ojluni/src/main/java/java/util/stream/AbstractPipeline.java \
-    ojluni/src/main/java/java/util/stream/AbstractShortCircuitTask.java \
-    ojluni/src/main/java/java/util/stream/AbstractSpinedBuffer.java \
-    ojluni/src/main/java/java/util/stream/AbstractTask.java \
-    ojluni/src/main/java/java/util/stream/BaseStream.java \
-    ojluni/src/main/java/java/util/stream/Collector.java \
-    ojluni/src/main/java/java/util/stream/Collectors.java \
-    ojluni/src/main/java/java/util/stream/DistinctOps.java \
-    ojluni/src/main/java/java/util/stream/DoublePipeline.java \
-    ojluni/src/main/java/java/util/stream/DoubleStream.java \
-    ojluni/src/main/java/java/util/stream/FindOps.java \
-    ojluni/src/main/java/java/util/stream/ForEachOps.java \
-    ojluni/src/main/java/java/util/stream/IntPipeline.java \
-    ojluni/src/main/java/java/util/stream/IntStream.java \
-    ojluni/src/main/java/java/util/stream/LongPipeline.java \
-    ojluni/src/main/java/java/util/stream/LongStream.java \
-    ojluni/src/main/java/java/util/stream/MatchOps.java \
-    ojluni/src/main/java/java/util/stream/Node.java \
-    ojluni/src/main/java/java/util/stream/Nodes.java \
-    ojluni/src/main/java/java/util/stream/PipelineHelper.java \
-    ojluni/src/main/java/java/util/stream/ReduceOps.java \
-    ojluni/src/main/java/java/util/stream/ReferencePipeline.java \
-    ojluni/src/main/java/java/util/stream/Sink.java \
-    ojluni/src/main/java/java/util/stream/SliceOps.java \
-    ojluni/src/main/java/java/util/stream/SortedOps.java \
-    ojluni/src/main/java/java/util/stream/SpinedBuffer.java \
-    ojluni/src/main/java/java/util/stream/Stream.java \
-    ojluni/src/main/java/java/util/stream/StreamOpFlag.java \
-    ojluni/src/main/java/java/util/stream/StreamShape.java \
-    ojluni/src/main/java/java/util/stream/Streams.java \
-    ojluni/src/main/java/java/util/stream/StreamSpliterators.java \
-    ojluni/src/main/java/java/util/stream/StreamSupport.java \
-    ojluni/src/main/java/java/util/stream/TerminalOp.java \
-    ojluni/src/main/java/java/util/stream/TerminalSink.java \
-    ojluni/src/main/java/java/util/stream/Tripwire.java \
-    ojluni/src/main/java/java/util/stream/package-info.java \
-    ojluni/src/main/java/java/util/JumboEnumSet.java \
-    ojluni/src/main/java/java/util/LinkedHashMap.java \
-    ojluni/src/main/java/java/util/LinkedHashSet.java \
-    ojluni/src/main/java/java/util/LinkedList.java \
-    ojluni/src/main/java/java/util/ListIterator.java \
-    ojluni/src/main/java/java/util/List.java \
-    ojluni/src/main/java/java/util/ListResourceBundle.java \
-    ojluni/src/main/java/java/util/Locale.java \
-    ojluni/src/main/java/java/util/logging/ConsoleHandler.java \
-    ojluni/src/main/java/java/util/logging/ErrorManager.java \
-    ojluni/src/main/java/java/util/logging/FileHandler.java \
-    ojluni/src/main/java/java/util/logging/Filter.java \
-    ojluni/src/main/java/java/util/logging/Formatter.java \
-    ojluni/src/main/java/java/util/logging/Handler.java \
-    ojluni/src/main/java/java/util/logging/Level.java \
-    ojluni/src/main/java/java/util/logging/Logger.java \
-    ojluni/src/main/java/java/util/logging/Logging.java \
-    ojluni/src/main/java/java/util/logging/LoggingMXBean.java \
-    ojluni/src/main/java/java/util/logging/LoggingPermission.java \
-    ojluni/src/main/java/java/util/logging/LoggingProxyImpl.java \
-    ojluni/src/main/java/java/util/logging/LogManager.java \
-    ojluni/src/main/java/java/util/logging/LogRecord.java \
-    ojluni/src/main/java/java/util/logging/MemoryHandler.java \
-    ojluni/src/main/java/java/util/logging/SimpleFormatter.java \
-    ojluni/src/main/java/java/util/logging/SocketHandler.java \
-    ojluni/src/main/java/java/util/logging/StreamHandler.java \
-    ojluni/src/main/java/java/util/logging/XMLFormatter.java \
-    ojluni/src/main/java/java/util/Map.java \
-    ojluni/src/main/java/java/util/MissingFormatArgumentException.java \
-    ojluni/src/main/java/java/util/MissingFormatWidthException.java \
-    ojluni/src/main/java/java/util/MissingResourceException.java \
-    ojluni/src/main/java/java/util/NavigableMap.java \
-    ojluni/src/main/java/java/util/NavigableSet.java \
-    ojluni/src/main/java/java/util/NoSuchElementException.java \
-    ojluni/src/main/java/java/util/Objects.java \
-    ojluni/src/main/java/java/util/Observable.java \
-    ojluni/src/main/java/java/util/Observer.java \
-    ojluni/src/main/java/java/util/prefs/AbstractPreferences.java \
-    ojluni/src/main/java/java/util/prefs/BackingStoreException.java \
-    ojluni/src/main/java/java/util/prefs/Base64.java \
-    ojluni/src/main/java/java/util/prefs/FileSystemPreferencesFactory.java \
-    ojluni/src/main/java/java/util/prefs/FileSystemPreferences.java \
-    ojluni/src/main/java/java/util/prefs/InvalidPreferencesFormatException.java \
-    ojluni/src/main/java/java/util/prefs/NodeChangeEvent.java \
-    ojluni/src/main/java/java/util/prefs/NodeChangeListener.java \
-    ojluni/src/main/java/java/util/prefs/PreferenceChangeEvent.java \
-    ojluni/src/main/java/java/util/prefs/PreferenceChangeListener.java \
-    ojluni/src/main/java/java/util/prefs/PreferencesFactory.java \
-    ojluni/src/main/java/java/util/prefs/Preferences.java \
-    ojluni/src/main/java/java/util/prefs/XmlSupport.java \
-    ojluni/src/main/java/java/util/PriorityQueue.java \
-    ojluni/src/main/java/java/util/Properties.java \
-    ojluni/src/main/java/java/util/PropertyPermission.java \
-    ojluni/src/main/java/java/util/PropertyResourceBundle.java \
-    ojluni/src/main/java/java/util/Queue.java \
-    ojluni/src/main/java/java/util/RandomAccess.java \
-    ojluni/src/main/java/java/util/Random.java \
-    ojluni/src/main/java/java/util/RegularEnumSet.java \
-    ojluni/src/main/java/java/util/ResourceBundle.java \
-    ojluni/src/main/java/java/util/Scanner.java \
-    ojluni/src/main/java/java/util/ServiceConfigurationError.java \
-    ojluni/src/main/java/java/util/ServiceLoader.java \
-    ojluni/src/main/java/java/util/Set.java \
-    ojluni/src/main/java/java/util/SimpleTimeZone.java \
-    ojluni/src/main/java/java/util/SortedMap.java \
-    ojluni/src/main/java/java/util/SortedSet.java \
-    ojluni/src/main/java/java/util/Spliterator.java \
-    ojluni/src/main/java/java/util/Spliterators.java \
-    ojluni/src/main/java/java/util/SplittableRandom.java \
-    ojluni/src/main/java/java/util/Stack.java \
-    ojluni/src/main/java/java/util/StringTokenizer.java \
-    ojluni/src/main/java/java/util/Timer.java \
-    ojluni/src/main/java/java/util/TimerTask.java \
-    ojluni/src/main/java/java/util/TimeZone.java \
-    ojluni/src/main/java/java/util/TimSort.java \
-    ojluni/src/main/java/java/util/TooManyListenersException.java \
-    ojluni/src/main/java/java/util/TreeMap.java \
-    ojluni/src/main/java/java/util/TreeSet.java \
-    ojluni/src/main/java/java/util/UnknownFormatConversionException.java \
-    ojluni/src/main/java/java/util/UnknownFormatFlagsException.java \
-    ojluni/src/main/java/java/util/UUID.java \
-    ojluni/src/main/java/java/util/Vector.java \
-    ojluni/src/main/java/java/util/WeakHashMap.java \
-    ojluni/src/main/java/java/util/XMLUtils.java \
-    ojluni/src/main/java/java/util/regex/PatternSyntaxException.java \
-    ojluni/src/main/java/java/util/regex/Pattern.java \
-    ojluni/src/main/java/java/util/regex/Matcher.java \
-    ojluni/src/main/java/java/util/regex/MatchResult.java \
-    ojluni/src/main/java/java/util/zip/Adler32.java \
-    ojluni/src/main/java/java/util/zip/CheckedInputStream.java \
-    ojluni/src/main/java/java/util/zip/CheckedOutputStream.java \
-    ojluni/src/main/java/java/util/zip/Checksum.java \
-    ojluni/src/main/java/java/util/zip/CRC32.java \
-    ojluni/src/main/java/java/util/zip/DataFormatException.java \
-    ojluni/src/main/java/java/util/zip/DeflaterInputStream.java \
-    ojluni/src/main/java/java/util/zip/Deflater.java \
-    ojluni/src/main/java/java/util/zip/DeflaterOutputStream.java \
-    ojluni/src/main/java/java/util/zip/GZIPInputStream.java \
-    ojluni/src/main/java/java/util/zip/GZIPOutputStream.java \
-    ojluni/src/main/java/java/util/zip/InflaterInputStream.java \
-    ojluni/src/main/java/java/util/zip/Inflater.java \
-    ojluni/src/main/java/java/util/zip/InflaterOutputStream.java \
-    ojluni/src/main/java/java/util/zip/ZipCoder.java \
-    ojluni/src/main/java/java/util/zip/ZipConstants.java \
-    ojluni/src/main/java/java/util/zip/ZipConstants64.java \
-    ojluni/src/main/java/java/util/zip/ZipEntry.java \
-    ojluni/src/main/java/java/util/zip/ZipError.java \
-    ojluni/src/main/java/java/util/zip/ZipException.java \
-    ojluni/src/main/java/java/util/zip/ZipFile.java \
-    ojluni/src/main/java/java/util/zip/ZipInputStream.java \
-    ojluni/src/main/java/java/util/zip/ZipOutputStream.java \
-    ojluni/src/main/java/java/util/zip/ZipUtils.java \
-    ojluni/src/main/java/java/util/zip/ZStreamRef.java \
-    ojluni/src/main/java/javax/crypto/AEADBadTagException.java \
-    ojluni/src/main/java/javax/crypto/BadPaddingException.java \
-    ojluni/src/main/java/javax/crypto/CipherInputStream.java \
-    ojluni/src/main/java/javax/crypto/Cipher.java \
-    ojluni/src/main/java/javax/crypto/CipherOutputStream.java \
-    ojluni/src/main/java/javax/crypto/CipherSpi.java \
-    ojluni/src/main/java/javax/crypto/CryptoAllPermission.java \
-    ojluni/src/main/java/javax/crypto/CryptoPermission.java \
-    ojluni/src/main/java/javax/crypto/CryptoPermissions.java \
-    ojluni/src/main/java/javax/crypto/CryptoPolicyParser.java \
-    ojluni/src/main/java/javax/crypto/EncryptedPrivateKeyInfo.java \
-    ojluni/src/main/java/javax/crypto/ExemptionMechanismException.java \
-    ojluni/src/main/java/javax/crypto/ExemptionMechanism.java \
-    ojluni/src/main/java/javax/crypto/ExemptionMechanismSpi.java \
-    ojluni/src/main/java/javax/crypto/IllegalBlockSizeException.java \
-    ojluni/src/main/java/javax/crypto/interfaces/DHKey.java \
-    ojluni/src/main/java/javax/crypto/interfaces/DHPrivateKey.java \
-    ojluni/src/main/java/javax/crypto/interfaces/DHPublicKey.java \
-    ojluni/src/main/java/javax/crypto/interfaces/PBEKey.java \
-    ojluni/src/main/java/javax/crypto/JarVerifier.java \
-    ojluni/src/main/java/javax/crypto/JceSecurity.java \
-    ojluni/src/main/java/javax/crypto/JceSecurityManager.java \
-    ojluni/src/main/java/javax/crypto/KeyAgreement.java \
-    ojluni/src/main/java/javax/crypto/KeyAgreementSpi.java \
-    ojluni/src/main/java/javax/crypto/KeyGenerator.java \
-    ojluni/src/main/java/javax/crypto/KeyGeneratorSpi.java \
-    ojluni/src/main/java/javax/crypto/Mac.java \
-    ojluni/src/main/java/javax/crypto/MacSpi.java \
-    ojluni/src/main/java/javax/crypto/NoSuchPaddingException.java \
-    ojluni/src/main/java/javax/crypto/NullCipher.java \
-    ojluni/src/main/java/javax/crypto/NullCipherSpi.java \
-    ojluni/src/main/java/javax/crypto/SealedObject.java \
-    ojluni/src/main/java/javax/crypto/SecretKeyFactory.java \
-    ojluni/src/main/java/javax/crypto/SecretKeyFactorySpi.java \
-    ojluni/src/main/java/javax/crypto/SecretKey.java \
-    ojluni/src/main/java/javax/crypto/ShortBufferException.java \
-    ojluni/src/main/java/javax/crypto/spec/DESedeKeySpec.java \
-    ojluni/src/main/java/javax/crypto/spec/DESKeySpec.java \
-    ojluni/src/main/java/javax/crypto/spec/DHGenParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/DHParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/DHPrivateKeySpec.java \
-    ojluni/src/main/java/javax/crypto/spec/DHPublicKeySpec.java \
-    ojluni/src/main/java/javax/crypto/spec/GCMParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/IvParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/OAEPParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/PBEKeySpec.java \
-    ojluni/src/main/java/javax/crypto/spec/PBEParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/PSource.java \
-    ojluni/src/main/java/javax/crypto/spec/RC2ParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/RC5ParameterSpec.java \
-    ojluni/src/main/java/javax/crypto/spec/SecretKeySpec.java \
-    ojluni/src/main/java/javax/net/ServerSocketFactory.java \
-    ojluni/src/main/java/javax/net/SocketFactory.java \
-    ojluni/src/main/java/javax/net/ssl/CertPathTrustManagerParameters.java \
-    ojluni/src/main/java/javax/net/ssl/ExtendedSSLSession.java \
-    ojluni/src/main/java/javax/net/ssl/HandshakeCompletedEvent.java \
-    ojluni/src/main/java/javax/net/ssl/HandshakeCompletedListener.java \
-    ojluni/src/main/java/javax/net/ssl/HostnameVerifier.java \
-    ojluni/src/main/java/javax/net/ssl/HttpsURLConnection.java \
-    ojluni/src/main/java/javax/net/ssl/KeyManagerFactory.java \
-    ojluni/src/main/java/javax/net/ssl/KeyManagerFactorySpi.java \
-    ojluni/src/main/java/javax/net/ssl/KeyManager.java \
-    ojluni/src/main/java/javax/net/ssl/KeyStoreBuilderParameters.java \
-    ojluni/src/main/java/javax/net/ssl/ManagerFactoryParameters.java \
-    ojluni/src/main/java/javax/net/ssl/SNIHostName.java \
-    ojluni/src/main/java/javax/net/ssl/SNIMatcher.java \
-    ojluni/src/main/java/javax/net/ssl/SNIServerName.java \
-    ojluni/src/main/java/javax/net/ssl/SSLContext.java \
-    ojluni/src/main/java/javax/net/ssl/SSLContextSpi.java \
-    ojluni/src/main/java/javax/net/ssl/SSLEngine.java \
-    ojluni/src/main/java/javax/net/ssl/SSLEngineResult.java \
-    ojluni/src/main/java/javax/net/ssl/SSLException.java \
-    ojluni/src/main/java/javax/net/ssl/SSLHandshakeException.java \
-    ojluni/src/main/java/javax/net/ssl/SSLKeyException.java \
-    ojluni/src/main/java/javax/net/ssl/SSLParameters.java \
-    ojluni/src/main/java/javax/net/ssl/SSLPeerUnverifiedException.java \
-    ojluni/src/main/java/javax/net/ssl/SSLPermission.java \
-    ojluni/src/main/java/javax/net/ssl/SSLProtocolException.java \
-    ojluni/src/main/java/javax/net/ssl/SSLServerSocketFactory.java \
-    ojluni/src/main/java/javax/net/ssl/SSLServerSocket.java \
-    ojluni/src/main/java/javax/net/ssl/SSLSessionBindingEvent.java \
-    ojluni/src/main/java/javax/net/ssl/SSLSessionBindingListener.java \
-    ojluni/src/main/java/javax/net/ssl/SSLSessionContext.java \
-    ojluni/src/main/java/javax/net/ssl/SSLSession.java \
-    ojluni/src/main/java/javax/net/ssl/SSLSocketFactory.java \
-    ojluni/src/main/java/javax/net/ssl/SSLSocket.java \
-    ojluni/src/main/java/javax/net/ssl/StandardConstants.java \
-    ojluni/src/main/java/javax/net/ssl/TrustManagerFactory.java \
-    ojluni/src/main/java/javax/net/ssl/TrustManagerFactorySpi.java \
-    ojluni/src/main/java/javax/net/ssl/TrustManager.java \
-    ojluni/src/main/java/javax/net/ssl/X509ExtendedKeyManager.java \
-    ojluni/src/main/java/javax/net/ssl/X509ExtendedTrustManager.java \
-    ojluni/src/main/java/javax/net/ssl/X509KeyManager.java \
-    ojluni/src/main/java/javax/net/ssl/X509TrustManager.java \
-    ojluni/src/main/java/javax/security/auth/AuthPermission.java \
-    ojluni/src/main/java/javax/security/auth/callback/CallbackHandler.java \
-    ojluni/src/main/java/javax/security/auth/callback/Callback.java \
-    ojluni/src/main/java/javax/security/auth/callback/PasswordCallback.java \
-    ojluni/src/main/java/javax/security/auth/callback/UnsupportedCallbackException.java \
-    ojluni/src/main/java/javax/security/auth/callback/package-info.java \
-    ojluni/src/main/java/javax/security/auth/Destroyable.java \
-    ojluni/src/main/java/javax/security/auth/DestroyFailedException.java \
-    ojluni/src/main/java/javax/security/auth/login/LoginException.java \
-    ojluni/src/main/java/javax/security/auth/login/package-info.java \
-    ojluni/src/main/java/javax/security/auth/PrivateCredentialPermission.java \
-    ojluni/src/main/java/javax/security/auth/SubjectDomainCombiner.java \
-    ojluni/src/main/java/javax/security/auth/Subject.java \
-    ojluni/src/main/java/javax/security/auth/x500/X500Principal.java \
-    ojluni/src/main/java/javax/security/auth/x500/package-info.java \
-    ojluni/src/main/java/javax/security/auth/package-info.java \
-    ojluni/src/main/java/javax/security/cert/CertificateEncodingException.java \
-    ojluni/src/main/java/javax/security/cert/CertificateException.java \
-    ojluni/src/main/java/javax/security/cert/CertificateExpiredException.java \
-    ojluni/src/main/java/javax/security/cert/Certificate.java \
-    ojluni/src/main/java/javax/security/cert/CertificateNotYetValidException.java \
-    ojluni/src/main/java/javax/security/cert/CertificateParsingException.java \
-    ojluni/src/main/java/javax/security/cert/X509Certificate.java \
-    ojluni/src/main/java/javax/security/cert/package-info.java \
-    ojluni/src/main/java/javax/sql/CommonDataSource.java \
-    ojluni/src/main/java/javax/sql/ConnectionEvent.java \
-    ojluni/src/main/java/javax/sql/ConnectionEventListener.java \
-    ojluni/src/main/java/javax/sql/ConnectionPoolDataSource.java \
-    ojluni/src/main/java/javax/sql/DataSource.java \
-    ojluni/src/main/java/javax/sql/PooledConnection.java \
-    ojluni/src/main/java/javax/sql/RowSetEvent.java \
-    ojluni/src/main/java/javax/sql/RowSetInternal.java \
-    ojluni/src/main/java/javax/sql/RowSet.java \
-    ojluni/src/main/java/javax/sql/RowSetListener.java \
-    ojluni/src/main/java/javax/sql/RowSetMetaData.java \
-    ojluni/src/main/java/javax/sql/RowSetReader.java \
-    ojluni/src/main/java/javax/sql/RowSetWriter.java \
-    ojluni/src/main/java/javax/sql/StatementEvent.java \
-    ojluni/src/main/java/javax/sql/StatementEventListener.java \
-    ojluni/src/main/java/sun/reflect/CallerSensitive.java \
-
-# Stubs needed to satisfy javac's dependencies when compiling lambda code. These are
-# not used on Android devices or required by the Jack compiler.
-#
-# On aosp/master:
-# openjdk_lambda_stub_files : These are included in core-oj as stubs
-# openjdk_lambda_duplicate_stub_files : These contain complete implementations in core-oj.
-#
-# On older platforms : Both sets of stub files are used and core-oj does not contain
-# any of these classes.
-openjdk_lambda_stub_files := \
-    ojluni/src/lambda/java/java/lang/invoke/LambdaMetafactory.java \
-    ojluni/src/lambda/java/java/lang/invoke/SerializedLambda.java
-openjdk_lambda_duplicate_stub_files := \
-    ojluni/src/lambda/java/java/lang/invoke/CallSite.java \
-    ojluni/src/lambda/java/java/lang/invoke/MethodHandles.java \
-    ojluni/src/lambda/java/java/lang/invoke/LambdaConversionException.java \
-    ojluni/src/lambda/java/java/lang/invoke/MethodHandle.java \
-    ojluni/src/lambda/java/java/lang/invoke/MethodType.java \
-
-
-# NOTE: Files in java/lang/invoke are listed here because they're not being made public
-# until the entire package is available for use.
-openjdk_java_files := \
-    ojluni/src/main/java/com/sun/net/ssl/internal/ssl/X509ExtendedTrustManager.java \
-    ojluni/src/main/java/com/sun/security/cert/internal/x509/X509V1CertImpl.java \
-    ojluni/src/main/java/com/sun/nio/file/ExtendedCopyOption.java \
-    ojluni/src/main/java/com/sun/nio/file/ExtendedOpenOption.java \
-    ojluni/src/main/java/com/sun/nio/file/ExtendedWatchEventModifier.java \
-    ojluni/src/main/java/com/sun/nio/file/SensitivityWatchEventModifier.java \
-    ojluni/src/main/java/java/beans/ChangeListenerMap.java \
-    ojluni/src/main/java/java/time/zone/IcuZoneRulesProvider.java \
-    ojluni/src/main/java/java/time/zone/ZoneRulesProvider.java \
-    ojluni/src/main/java/java/util/JapaneseImperialCalendar.java \
-    ojluni/src/main/java/sun/misc/FDBigInteger.java \
-    ojluni/src/main/java/sun/misc/FloatingDecimal.java \
-    ojluni/src/main/java/jdk/net/ExtendedSocketOptions.java \
-    ojluni/src/main/java/jdk/net/NetworkPermission.java \
-    ojluni/src/main/java/jdk/net/SocketFlow.java \
-    ojluni/src/main/java/jdk/net/Sockets.java \
-    ojluni/src/main/java/sun/invoke/util/BytecodeDescriptor.java \
-    ojluni/src/main/java/sun/invoke/util/Wrapper.java \
-    ojluni/src/main/java/sun/invoke/util/VerifyAccess.java \
-    ojluni/src/main/java/sun/misc/ASCIICaseInsensitiveComparator.java \
-    ojluni/src/main/java/sun/misc/BASE64Decoder.java \
-    ojluni/src/main/java/sun/misc/BASE64Encoder.java \
-    ojluni/src/main/java/sun/misc/CEFormatException.java \
-    ojluni/src/main/java/sun/misc/CEStreamExhausted.java \
-    ojluni/src/main/java/sun/misc/CharacterDecoder.java \
-    ojluni/src/main/java/sun/misc/CharacterEncoder.java \
-    ojluni/src/main/java/sun/misc/Cleaner.java \
-    ojluni/src/main/java/sun/misc/CompoundEnumeration.java \
-    ojluni/src/main/java/sun/misc/DoubleConsts.java \
-    ojluni/src/main/java/sun/misc/FileURLMapper.java \
-    ojluni/src/main/java/sun/misc/FloatConsts.java \
-    ojluni/src/main/java/sun/misc/FormattedFloatingDecimal.java \
-    ojluni/src/main/java/sun/misc/FpUtils.java \
-    ojluni/src/main/java/sun/misc/HexDumpEncoder.java \
-    ojluni/src/main/java/sun/misc/InvalidJarIndexException.java \
-    ojluni/src/main/java/sun/misc/IOUtils.java \
-    ojluni/src/main/java/sun/misc/JarIndex.java \
-    ojluni/src/main/java/sun/misc/JavaIOFileDescriptorAccess.java \
-    ojluni/src/main/java/sun/misc/LRUCache.java \
-    ojluni/src/main/java/sun/misc/MessageUtils.java \
-    ojluni/src/main/java/sun/misc/MetaIndex.java \
-    ojluni/src/main/java/sun/misc/REException.java \
-    ojluni/src/main/java/sun/misc/RegexpPool.java \
-    ojluni/src/main/java/sun/misc/RegexpTarget.java \
-    ojluni/src/main/java/sun/misc/Resource.java \
-    ojluni/src/main/java/sun/misc/SharedSecrets.java \
-    ojluni/src/main/java/sun/misc/URLClassPath.java \
-    ojluni/src/main/java/sun/misc/Unsafe.java \
-    ojluni/src/main/java/sun/misc/Version.java \
-    ojluni/src/main/java/sun/misc/VM.java \
-    ojluni/src/main/java/sun/net/ApplicationProxy.java \
-    ojluni/src/main/java/sun/net/ConnectionResetException.java \
-    ojluni/src/main/java/sun/net/ExtendedOptionsImpl.java \
-    ojluni/src/main/java/sun/net/ftp/FtpClient.java \
-    ojluni/src/main/java/sun/net/ftp/FtpClientProvider.java \
-    ojluni/src/main/java/sun/net/ftp/FtpDirEntry.java \
-    ojluni/src/main/java/sun/net/ftp/FtpDirParser.java \
-    ojluni/src/main/java/sun/net/ftp/FtpLoginException.java \
-    ojluni/src/main/java/sun/net/ftp/FtpProtocolException.java \
-    ojluni/src/main/java/sun/net/ftp/FtpReplyCode.java \
-    ojluni/src/main/java/sun/net/ftp/impl/DefaultFtpClientProvider.java \
-    ojluni/src/main/java/sun/net/ftp/impl/FtpClient.java \
-    ojluni/src/main/java/sun/net/NetHooks.java \
-    ojluni/src/main/java/sun/net/NetProperties.java \
-    ojluni/src/main/java/sun/net/NetworkClient.java \
-    ojluni/src/main/java/sun/net/ProgressEvent.java \
-    ojluni/src/main/java/sun/net/ProgressListener.java \
-    ojluni/src/main/java/sun/net/ProgressMeteringPolicy.java \
-    ojluni/src/main/java/sun/net/ProgressMonitor.java \
-    ojluni/src/main/java/sun/net/ProgressSource.java \
-    ojluni/src/main/java/sun/net/ResourceManager.java \
-    ojluni/src/main/java/sun/net/SocksProxy.java \
-    ojluni/src/main/java/sun/net/spi/DefaultProxySelector.java \
-    ojluni/src/main/java/sun/net/spi/nameservice/NameService.java \
-    ojluni/src/main/java/sun/net/TelnetInputStream.java \
-    ojluni/src/main/java/sun/net/TelnetOutputStream.java \
-    ojluni/src/main/java/sun/net/TelnetProtocolException.java \
-    ojluni/src/main/java/sun/net/util/IPAddressUtil.java \
-    ojluni/src/main/java/sun/net/util/URLUtil.java \
-    ojluni/src/main/java/sun/net/www/MessageHeader.java \
-    ojluni/src/main/java/sun/net/www/MeteredStream.java \
-    ojluni/src/main/java/sun/net/www/ParseUtil.java \
-    ojluni/src/main/java/sun/net/www/URLConnection.java \
-    ojluni/src/main/java/sun/net/www/protocol/file/FileURLConnection.java \
-    ojluni/src/main/java/sun/net/www/protocol/file/Handler.java \
-    ojluni/src/main/java/sun/net/www/protocol/ftp/FtpURLConnection.java \
-    ojluni/src/main/java/sun/net/www/protocol/ftp/Handler.java \
-    ojluni/src/main/java/sun/net/www/protocol/jar/Handler.java \
-    ojluni/src/main/java/sun/net/www/protocol/jar/JarFileFactory.java \
-    ojluni/src/main/java/sun/net/www/protocol/jar/JarURLConnection.java \
-    ojluni/src/main/java/sun/net/www/protocol/jar/URLJarFile.java \
-    ojluni/src/main/java/sun/nio/ByteBuffered.java \
-    ojluni/src/main/java/sun/nio/ch/AbstractPollArrayWrapper.java \
-    ojluni/src/main/java/sun/nio/ch/AbstractPollSelectorImpl.java \
-    ojluni/src/main/java/sun/nio/ch/AllocatedNativeObject.java \
-    ojluni/src/main/java/sun/nio/ch/AsynchronousChannelGroupImpl.java \
-    ojluni/src/main/java/sun/nio/ch/AsynchronousFileChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/AsynchronousServerSocketChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/AsynchronousSocketChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/Cancellable.java \
-    ojluni/src/main/java/sun/nio/ch/ChannelInputStream.java \
-    ojluni/src/main/java/sun/nio/ch/CompletedFuture.java \
-    ojluni/src/main/java/sun/nio/ch/DatagramChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/DatagramDispatcher.java \
-    ojluni/src/main/java/sun/nio/ch/DatagramSocketAdaptor.java \
-    ojluni/src/main/java/sun/nio/ch/DefaultAsynchronousChannelProvider.java \
-    ojluni/src/main/java/sun/nio/ch/DefaultSelectorProvider.java \
-    ojluni/src/main/java/sun/nio/ch/DirectBuffer.java \
-    ojluni/src/main/java/sun/nio/ch/EPoll.java \
-    ojluni/src/main/java/sun/nio/ch/EPollPort.java \
-    ojluni/src/main/java/sun/nio/ch/ExtendedSocketOption.java \
-    ojluni/src/main/java/sun/nio/ch/FileChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/FileDescriptorHolderSocketImpl.java \
-    ojluni/src/main/java/sun/nio/ch/FileDispatcherImpl.java \
-    ojluni/src/main/java/sun/nio/ch/FileDispatcher.java \
-    ojluni/src/main/java/sun/nio/ch/FileKey.java \
-    ojluni/src/main/java/sun/nio/ch/FileLockImpl.java \
-    ojluni/src/main/java/sun/nio/ch/FileLockTable.java \
-    ojluni/src/main/java/sun/nio/ch/Groupable.java \
-    ojluni/src/main/java/sun/nio/ch/Interruptible.java \
-    ojluni/src/main/java/sun/nio/ch/Invoker.java \
-    ojluni/src/main/java/sun/nio/ch/IOStatus.java \
-    ojluni/src/main/java/sun/nio/ch/IOUtil.java \
-    ojluni/src/main/java/sun/nio/ch/IOVecWrapper.java \
-    ojluni/src/main/java/sun/nio/ch/LinuxAsynchronousChannelProvider.java \
-    ojluni/src/main/java/sun/nio/ch/MembershipKeyImpl.java \
-    ojluni/src/main/java/sun/nio/ch/MembershipRegistry.java \
-    ojluni/src/main/java/sun/nio/ch/NativeDispatcher.java \
-    ojluni/src/main/java/sun/nio/ch/NativeObject.java \
-    ojluni/src/main/java/sun/nio/ch/NativeThread.java \
-    ojluni/src/main/java/sun/nio/ch/NativeThreadSet.java \
-    ojluni/src/main/java/sun/nio/ch/Net.java \
-    ojluni/src/main/java/sun/nio/ch/OptionKey.java \
-    ojluni/src/main/java/sun/nio/ch/PendingFuture.java \
-    ojluni/src/main/java/sun/nio/ch/PipeImpl.java \
-    ojluni/src/main/java/sun/nio/ch/PollArrayWrapper.java \
-    ojluni/src/main/java/sun/nio/ch/PollSelectorImpl.java \
-    ojluni/src/main/java/sun/nio/ch/PollSelectorProvider.java \
-    ojluni/src/main/java/sun/nio/ch/Port.java \
-    ojluni/src/main/java/sun/nio/ch/SelChImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SelectionKeyImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SelectorImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SelectorProviderImpl.java \
-    ojluni/src/main/java/sun/nio/ch/ServerSocketAdaptor.java \
-    ojluni/src/main/java/sun/nio/ch/ServerSocketChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SimpleAsynchronousFileChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SinkChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SocketAdaptor.java \
-    ojluni/src/main/java/sun/nio/ch/SocketChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/SocketDispatcher.java \
-    ojluni/src/main/java/sun/nio/ch/SocketOptionRegistry.java \
-    ojluni/src/main/java/sun/nio/ch/SourceChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/ThreadPool.java \
-    ojluni/src/main/java/sun/nio/ch/UnixAsynchronousServerSocketChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java \
-    ojluni/src/main/java/sun/nio/ch/Util.java \
-    ojluni/src/main/java/sun/nio/cs/ArrayDecoder.java \
-    ojluni/src/main/java/sun/nio/cs/ArrayEncoder.java \
-    ojluni/src/main/java/sun/nio/cs/StreamDecoder.java \
-    ojluni/src/main/java/sun/nio/cs/StreamEncoder.java \
-    ojluni/src/main/java/sun/nio/cs/HistoricallyNamedCharset.java \
-    ojluni/src/main/java/sun/nio/cs/ThreadLocalCoders.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractBasicFileAttributeView.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractFileSystemProvider.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractFileTypeDetector.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractPath.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractPoller.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractUserDefinedFileAttributeView.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractWatchKey.java \
-    ojluni/src/main/java/sun/nio/fs/AbstractWatchService.java \
-    ojluni/src/main/java/sun/nio/fs/BasicFileAttributesHolder.java \
-    ojluni/src/main/java/sun/nio/fs/Cancellable.java \
-    ojluni/src/main/java/sun/nio/fs/DefaultFileSystemProvider.java \
-    ojluni/src/main/java/sun/nio/fs/DefaultFileTypeDetector.java \
-    ojluni/src/main/java/sun/nio/fs/DynamicFileAttributeView.java \
-    ojluni/src/main/java/sun/nio/fs/FileOwnerAttributeViewImpl.java \
-    ojluni/src/main/java/sun/nio/fs/Globs.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxDosFileAttributeView.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxFileStore.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxFileSystem.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxFileSystemProvider.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxNativeDispatcher.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxUserDefinedFileAttributeView.java \
-    ojluni/src/main/java/sun/nio/fs/LinuxWatchService.java \
-    ojluni/src/main/java/sun/nio/fs/MimeTypesFileTypeDetector.java \
-    ojluni/src/main/java/sun/nio/fs/NativeBuffer.java \
-    ojluni/src/main/java/sun/nio/fs/NativeBuffers.java \
-    ojluni/src/main/java/sun/nio/fs/PollingWatchService.java \
-    ojluni/src/main/java/sun/nio/fs/UnixChannelFactory.java \
-    ojluni/src/main/java/sun/nio/fs/UnixConstants.java \
-    ojluni/src/main/java/sun/nio/fs/UnixCopyFile.java \
-    ojluni/src/main/java/sun/nio/fs/UnixDirectoryStream.java \
-    ojluni/src/main/java/sun/nio/fs/UnixException.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileAttributeViews.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileAttributes.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileKey.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileModeAttribute.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileStore.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileStoreAttributes.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileSystem.java \
-    ojluni/src/main/java/sun/nio/fs/UnixFileSystemProvider.java \
-    ojluni/src/main/java/sun/nio/fs/UnixMountEntry.java \
-    ojluni/src/main/java/sun/nio/fs/UnixNativeDispatcher.java \
-    ojluni/src/main/java/sun/nio/fs/UnixPath.java \
-    ojluni/src/main/java/sun/nio/fs/UnixSecureDirectoryStream.java \
-    ojluni/src/main/java/sun/nio/fs/UnixUriUtils.java \
-    ojluni/src/main/java/sun/nio/fs/UnixUserPrincipals.java \
-    ojluni/src/main/java/sun/nio/fs/Util.java \
-    ojluni/src/main/java/sun/reflect/misc/ReflectUtil.java \
-    ojluni/src/main/java/sun/reflect/Reflection.java \
-    ojluni/src/main/java/sun/security/action/GetBooleanAction.java \
-    ojluni/src/main/java/sun/security/action/GetIntegerAction.java \
-    ojluni/src/main/java/sun/security/action/GetPropertyAction.java \
-    ojluni/src/main/java/sun/security/jca/GetInstance.java \
-    ojluni/src/main/java/sun/security/jca/JCAUtil.java \
-    ojluni/src/main/java/sun/security/jca/ProviderConfig.java \
-    ojluni/src/main/java/sun/security/jca/ProviderList.java \
-    ojluni/src/main/java/sun/security/jca/Providers.java \
-    ojluni/src/main/java/sun/security/jca/ServiceId.java \
-    ojluni/src/main/java/sun/security/pkcs/ContentInfo.java \
-    ojluni/src/main/java/sun/security/pkcs/ParsingException.java \
-    ojluni/src/main/java/sun/security/pkcs/PKCS7.java \
-    ojluni/src/main/java/sun/security/pkcs/PKCS8Key.java \
-    ojluni/src/main/java/sun/security/pkcs/PKCS9Attribute.java \
-    ojluni/src/main/java/sun/security/pkcs/PKCS9Attributes.java \
-    ojluni/src/main/java/sun/security/pkcs/SignerInfo.java \
-    ojluni/src/main/java/sun/security/pkcs/SigningCertificateInfo.java \
-    ojluni/src/main/java/sun/security/provider/CertPathProvider.java \
-    ojluni/src/main/java/sun/security/provider/certpath/AdaptableX509CertSelector.java \
-    ojluni/src/main/java/sun/security/provider/certpath/AdjacencyList.java \
-    ojluni/src/main/java/sun/security/provider/certpath/AlgorithmChecker.java \
-    ojluni/src/main/java/sun/security/provider/certpath/BasicChecker.java \
-    ojluni/src/main/java/sun/security/provider/certpath/BuildStep.java \
-    ojluni/src/main/java/sun/security/provider/certpath/Builder.java \
-    ojluni/src/main/java/sun/security/provider/certpath/CertId.java \
-    ojluni/src/main/java/sun/security/provider/certpath/CertPathHelper.java \
-    ojluni/src/main/java/sun/security/provider/certpath/CertStoreHelper.java \
-    ojluni/src/main/java/sun/security/provider/certpath/ConstraintsChecker.java \
-    ojluni/src/main/java/sun/security/provider/certpath/DistributionPointFetcher.java \
-    ojluni/src/main/java/sun/security/provider/certpath/ForwardBuilder.java \
-    ojluni/src/main/java/sun/security/provider/certpath/ForwardState.java \
-    ojluni/src/main/java/sun/security/provider/certpath/KeyChecker.java \
-    ojluni/src/main/java/sun/security/provider/certpath/OCSP.java \
-    ojluni/src/main/java/sun/security/provider/certpath/OCSPRequest.java \
-    ojluni/src/main/java/sun/security/provider/certpath/OCSPResponse.java \
-    ojluni/src/main/java/sun/security/provider/certpath/PKIX.java \
-    ojluni/src/main/java/sun/security/provider/certpath/PKIXCertPathValidator.java \
-    ojluni/src/main/java/sun/security/provider/certpath/PKIXMasterCertPathValidator.java \
-    ojluni/src/main/java/sun/security/provider/certpath/PolicyChecker.java \
-    ojluni/src/main/java/sun/security/provider/certpath/PolicyNodeImpl.java \
-    ojluni/src/main/java/sun/security/provider/certpath/RevocationChecker.java \
-    ojluni/src/main/java/sun/security/provider/certpath/State.java \
-    ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilder.java \
-    ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderException.java \
-    ojluni/src/main/java/sun/security/provider/certpath/SunCertPathBuilderResult.java \
-    ojluni/src/main/java/sun/security/provider/certpath/URICertStore.java \
-    ojluni/src/main/java/sun/security/provider/certpath/Vertex.java \
-    ojluni/src/main/java/sun/security/provider/certpath/X509CertPath.java \
-    ojluni/src/main/java/sun/security/provider/certpath/X509CertificatePair.java \
-    ojluni/src/main/java/sun/security/provider/X509Factory.java \
-    ojluni/src/main/java/sun/security/timestamp/TimestampToken.java \
-    ojluni/src/main/java/sun/security/util/AnchorCertificates.java \
-    ojluni/src/main/java/sun/security/util/CertConstraintParameters.java \
-    ojluni/src/main/java/sun/security/util/AbstractAlgorithmConstraints.java \
-    ojluni/src/main/java/sun/security/util/AlgorithmDecomposer.java \
-    ojluni/src/main/java/sun/security/util/BitArray.java \
-    ojluni/src/main/java/sun/security/util/ByteArrayLexOrder.java \
-    ojluni/src/main/java/sun/security/util/ByteArrayTagOrder.java \
-    ojluni/src/main/java/sun/security/util/Cache.java \
-    ojluni/src/main/java/sun/security/util/Debug.java \
-    ojluni/src/main/java/sun/security/util/DerEncoder.java \
-    ojluni/src/main/java/sun/security/util/DerIndefLenConverter.java \
-    ojluni/src/main/java/sun/security/util/DerInputBuffer.java \
-    ojluni/src/main/java/sun/security/util/DerInputStream.java \
-    ojluni/src/main/java/sun/security/util/DerOutputStream.java \
-    ojluni/src/main/java/sun/security/util/DerValue.java \
-    ojluni/src/main/java/sun/security/util/DisabledAlgorithmConstraints.java \
-    ojluni/src/main/java/sun/security/util/KeyUtil.java \
-    ojluni/src/main/java/sun/security/util/Length.java \
-    ojluni/src/main/java/sun/security/util/ManifestDigester.java \
-    ojluni/src/main/java/sun/security/util/ManifestEntryVerifier.java \
-    ojluni/src/main/java/sun/security/util/ObjectIdentifier.java \
-    ojluni/src/main/java/sun/security/util/PropertyExpander.java \
-    ojluni/src/main/java/sun/security/util/Resources.java \
-    ojluni/src/main/java/sun/security/util/ResourcesMgr.java \
-    ojluni/src/main/java/sun/security/util/SecurityConstants.java \
-    ojluni/src/main/java/sun/security/util/SignatureFileVerifier.java \
-    ojluni/src/main/java/sun/security/x509/AccessDescription.java \
-    ojluni/src/main/java/sun/security/x509/AlgorithmId.java \
-    ojluni/src/main/java/sun/security/x509/AttributeNameEnumeration.java \
-    ojluni/src/main/java/sun/security/x509/AuthorityInfoAccessExtension.java \
-    ojluni/src/main/java/sun/security/x509/AuthorityKeyIdentifierExtension.java \
-    ojluni/src/main/java/sun/security/x509/AVA.java \
-    ojluni/src/main/java/sun/security/x509/BasicConstraintsExtension.java \
-    ojluni/src/main/java/sun/security/x509/CertAttrSet.java \
-    ojluni/src/main/java/sun/security/x509/CertificateAlgorithmId.java \
-    ojluni/src/main/java/sun/security/x509/CertificateExtensions.java \
-    ojluni/src/main/java/sun/security/x509/CertificateIssuerExtension.java \
-    ojluni/src/main/java/sun/security/x509/CertificateIssuerName.java \
-    ojluni/src/main/java/sun/security/x509/CertificatePoliciesExtension.java \
-    ojluni/src/main/java/sun/security/x509/CertificatePolicyId.java \
-    ojluni/src/main/java/sun/security/x509/CertificatePolicyMap.java \
-    ojluni/src/main/java/sun/security/x509/CertificatePolicySet.java \
-    ojluni/src/main/java/sun/security/x509/CertificateSerialNumber.java \
-    ojluni/src/main/java/sun/security/x509/CertificateSubjectName.java \
-    ojluni/src/main/java/sun/security/x509/CertificateValidity.java \
-    ojluni/src/main/java/sun/security/x509/CertificateVersion.java \
-    ojluni/src/main/java/sun/security/x509/CertificateX509Key.java \
-    ojluni/src/main/java/sun/security/x509/CRLDistributionPointsExtension.java \
-    ojluni/src/main/java/sun/security/x509/CRLExtensions.java \
-    ojluni/src/main/java/sun/security/x509/CRLNumberExtension.java \
-    ojluni/src/main/java/sun/security/x509/CRLReasonCodeExtension.java \
-    ojluni/src/main/java/sun/security/x509/DeltaCRLIndicatorExtension.java \
-    ojluni/src/main/java/sun/security/x509/DistributionPoint.java \
-    ojluni/src/main/java/sun/security/x509/DistributionPointName.java \
-    ojluni/src/main/java/sun/security/x509/DNSName.java \
-    ojluni/src/main/java/sun/security/x509/EDIPartyName.java \
-    ojluni/src/main/java/sun/security/x509/ExtendedKeyUsageExtension.java \
-    ojluni/src/main/java/sun/security/x509/Extension.java \
-    ojluni/src/main/java/sun/security/x509/FreshestCRLExtension.java \
-    ojluni/src/main/java/sun/security/x509/GeneralNameInterface.java \
-    ojluni/src/main/java/sun/security/x509/GeneralName.java \
-    ojluni/src/main/java/sun/security/x509/GeneralNames.java \
-    ojluni/src/main/java/sun/security/x509/GeneralSubtree.java \
-    ojluni/src/main/java/sun/security/x509/GeneralSubtrees.java \
-    ojluni/src/main/java/sun/security/x509/InhibitAnyPolicyExtension.java \
-    ojluni/src/main/java/sun/security/x509/InvalidityDateExtension.java \
-    ojluni/src/main/java/sun/security/x509/IPAddressName.java \
-    ojluni/src/main/java/sun/security/x509/IssuerAlternativeNameExtension.java \
-    ojluni/src/main/java/sun/security/x509/IssuingDistributionPointExtension.java \
-    ojluni/src/main/java/sun/security/x509/KeyIdentifier.java \
-    ojluni/src/main/java/sun/security/x509/KeyUsageExtension.java \
-    ojluni/src/main/java/sun/security/x509/NameConstraintsExtension.java \
-    ojluni/src/main/java/sun/security/x509/NetscapeCertTypeExtension.java \
-    ojluni/src/main/java/sun/security/x509/OCSPNoCheckExtension.java \
-    ojluni/src/main/java/sun/security/x509/OIDMap.java \
-    ojluni/src/main/java/sun/security/x509/OIDName.java \
-    ojluni/src/main/java/sun/security/x509/OtherName.java \
-    ojluni/src/main/java/sun/security/x509/PKIXExtensions.java \
-    ojluni/src/main/java/sun/security/x509/PolicyConstraintsExtension.java \
-    ojluni/src/main/java/sun/security/x509/PolicyInformation.java \
-    ojluni/src/main/java/sun/security/x509/PolicyMappingsExtension.java \
-    ojluni/src/main/java/sun/security/x509/PrivateKeyUsageExtension.java \
-    ojluni/src/main/java/sun/security/x509/RDN.java \
-    ojluni/src/main/java/sun/security/x509/ReasonFlags.java \
-    ojluni/src/main/java/sun/security/x509/RFC822Name.java \
-    ojluni/src/main/java/sun/security/x509/SerialNumber.java \
-    ojluni/src/main/java/sun/security/x509/SubjectAlternativeNameExtension.java \
-    ojluni/src/main/java/sun/security/x509/SubjectInfoAccessExtension.java \
-    ojluni/src/main/java/sun/security/x509/SubjectKeyIdentifierExtension.java \
-    ojluni/src/main/java/sun/security/x509/UniqueIdentity.java \
-    ojluni/src/main/java/sun/security/x509/URIName.java \
-    ojluni/src/main/java/sun/security/x509/X400Address.java \
-    ojluni/src/main/java/sun/security/x509/X500Name.java \
-    ojluni/src/main/java/sun/security/x509/X509AttributeName.java \
-    ojluni/src/main/java/sun/security/x509/X509CertImpl.java \
-    ojluni/src/main/java/sun/security/x509/X509CertInfo.java \
-    ojluni/src/main/java/sun/security/x509/X509CRLEntryImpl.java \
-    ojluni/src/main/java/sun/security/x509/X509CRLImpl.java \
-    ojluni/src/main/java/sun/security/x509/X509Key.java \
-    ojluni/src/main/java/sun/util/calendar/AbstractCalendar.java \
-    ojluni/src/main/java/sun/util/calendar/BaseCalendar.java \
-    ojluni/src/main/java/sun/util/calendar/CalendarDate.java \
-    ojluni/src/main/java/sun/util/calendar/CalendarSystem.java \
-    ojluni/src/main/java/sun/util/calendar/CalendarUtils.java \
-    ojluni/src/main/java/sun/util/calendar/Era.java \
-    ojluni/src/main/java/sun/util/calendar/Gregorian.java \
-    ojluni/src/main/java/sun/util/calendar/ImmutableGregorianDate.java \
-    ojluni/src/main/java/sun/util/calendar/JulianCalendar.java \
-    ojluni/src/main/java/sun/util/calendar/LocalGregorianCalendar.java \
-    ojluni/src/main/java/sun/util/locale/BaseLocale.java \
-    ojluni/src/main/java/sun/util/locale/Extension.java \
-    ojluni/src/main/java/sun/util/locale/InternalLocaleBuilder.java \
-    ojluni/src/main/java/sun/util/locale/LanguageTag.java \
-    ojluni/src/main/java/sun/util/locale/LocaleEquivalentMaps.java \
-    ojluni/src/main/java/sun/util/locale/LocaleExtensions.java \
-    ojluni/src/main/java/sun/util/locale/LocaleMatcher.java \
-    ojluni/src/main/java/sun/util/locale/LocaleObjectCache.java \
-    ojluni/src/main/java/sun/util/locale/LocaleSyntaxException.java \
-    ojluni/src/main/java/sun/util/locale/LocaleUtils.java \
-    ojluni/src/main/java/sun/util/locale/ParseStatus.java \
-    ojluni/src/main/java/sun/util/locale/StringTokenIterator.java \
-    ojluni/src/main/java/sun/util/locale/UnicodeLocaleExtension.java \
-    ojluni/src/main/java/sun/util/locale/provider/CalendarDataUtility.java \
-    ojluni/src/main/java/sun/util/logging/LoggingProxy.java \
-    ojluni/src/main/java/sun/util/logging/LoggingSupport.java \
-    ojluni/src/main/java/sun/util/logging/PlatformLogger.java \
-    ojluni/src/main/java/sun/util/ResourceBundleEnumeration.java \
-    ojluni/src/main/java/sun/util/resources/OpenListResourceBundle.java \
-    $(openjdk_javadoc_files) \
-    $(openjdk_lambda_stub_files)
-
diff --git a/tools/upstream/src/main/java/libcore/CompareUpstreams.java b/tools/upstream/src/main/java/libcore/CompareUpstreams.java
index bd80b82..fee7253 100644
--- a/tools/upstream/src/main/java/libcore/CompareUpstreams.java
+++ b/tools/upstream/src/main/java/libcore/CompareUpstreams.java
@@ -46,7 +46,7 @@
  * - The ANDROID_BUILD_TOP environment variable must be set to point to the
  * AOSP root directory (parent of libcore).
  *
- *  To check out upstreams OpenJDK 7u40, 8u60 and 8u121-b13, run:
+ * To check out upstreams OpenJDK 7u40, 8u60, 8u121-b13, and 9+181, run:
  *
  *  mkdir ~/openjdk
  *  cd ~/openjdk
@@ -57,6 +57,8 @@
  *  (cd !$ ; hg update -r jdk8u121-b13 && sh get_source.sh)
  *  hg clone http://hg.openjdk.java.net/jdk8u/jdk8u60/ 8u60
  *  (cd !$ ; sh get_source.sh)
+ *  hg clone http://hg.openjdk.java.net/jdk9/jdk9/ 9+181
+ *  (cd !$ ; hg update -r jdk-9+181 && sh get_source.sh)
  *
  *  To get the 9b113+ upstream, follow the instructions from the commit
  *  message of AOSP libcore commit 29957558cf0db700bfaae360a80c42dc3871d0e5