Merge "Integrate upstream changes forgotten in the update to OpenJDK 8u60"
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..98fe24c
--- /dev/null
+++ b/JavaLibrary.bp
@@ -0,0 +1,145 @@
+// 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"],
+    hostdex: true,
+
+    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"],
+    hostdex: true,
+
+    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 168e82e..4ebf2d8 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,77 +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
-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
-# Deliberately include the sources alongside the .class files to simplify
-# distribution
-LOCAL_JAVA_RESOURCE_FILES := \
-  $(patsubst ojluni/src/lambda/java/%, \
-    $(LOCAL_PATH)/ojluni/src/lambda/java:%,$(LOCAL_SRC_FILES))
-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)
@@ -198,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)
@@ -331,59 +263,6 @@
 
 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_JAVA_RESOURCE_DIRS := $(core_resource_dirs)
-LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVACFLAGS := $(local_javac_flags)
-LOCAL_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-all-hostdex
-LOCAL_REQUIRED_MODULES := tzdata-host tzlookup.xml-host
-LOCAL_CORE_LIBRARY := true
-LOCAL_UNINSTALLABLE_MODULE := true
-include $(BUILD_HOST_DALVIK_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_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-oj-hostdex
-LOCAL_NOTICE_FILE := $(LOCAL_PATH)/ojluni/NOTICE
-LOCAL_JAVA_LIBRARIES := core-all-hostdex
-LOCAL_REQUIRED_MODULES := tzdata-host tzlookup.xml-host
-LOCAL_CORE_LIBRARY := true
-include $(BUILD_HOST_DALVIK_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_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-libart-hostdex
-LOCAL_JAVA_LIBRARIES := core-oj-hostdex
-LOCAL_REQUIRED_MODULES := tzdata-host tzlookup.xml-host
-include $(BUILD_HOST_DALVIK_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_DX_FLAGS := --core-library
-LOCAL_MODULE_TAGS := optional
-LOCAL_MODULE := core-lambda-stubs-hostdex
-LOCAL_JAVA_LIBRARIES := core-all-hostdex
-LOCAL_CORE_LIBRARY := true
-include $(BUILD_HOST_DALVIK_JAVA_LIBRARY)
-
 # Make the core-tests-hostdex library.
 ifeq ($(LIBCORE_SKIP_TESTS),)
     include $(CLEAR_VARS)
@@ -498,6 +377,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 050f29f..3f296fa 100644
--- a/NativeCode.bp
+++ b/NativeCode.bp
@@ -113,7 +113,7 @@
     static_libs: ["libfdlibm"],
 
     target: {
-        linux: {
+        linux_glibc: {
             cflags: [ // Sigh.
                 "-D_LARGEFILE64_SOURCE",
                 "-D_GNU_SOURCE",
diff --git a/benchmarks/src/benchmarks/ZipFileReadBenchmark.java b/benchmarks/src/benchmarks/ZipFileReadBenchmark.java
new file mode 100644
index 0000000..f6125a6
--- /dev/null
+++ b/benchmarks/src/benchmarks/ZipFileReadBenchmark.java
@@ -0,0 +1,90 @@
+/*
+ * 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 benchmarks;
+
+import com.google.caliper.BeforeExperiment;
+import com.google.caliper.Param;
+import java.io.File;
+import java.io.InputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Random;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+
+
+public class ZipFileReadBenchmark {
+    private File file;
+    @Param({"1024", "16384", "65536"}) int readBufferSize;
+
+    @BeforeExperiment
+    protected void setUp() throws Exception {
+        System.setProperty("java.io.tmpdir", "/data/local/tmp");
+        file = File.createTempFile(getClass().getName(), ".zip");
+        writeEntries(new ZipOutputStream(new FileOutputStream(file)), 2, 1024*1024);
+        ZipFile zipFile = new ZipFile(file);
+        for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
+            ZipEntry zipEntry = e.nextElement();
+        }
+        zipFile.close();
+    }
+
+    /**
+     * Compresses the given number of files, each of the given size, into a .zip archive.
+     */
+    protected void writeEntries(ZipOutputStream out, int entryCount, long entrySize)
+            throws IOException {
+        byte[] writeBuffer = new byte[8192];
+        Random random = new Random();
+        try {
+            for (int entry = 0; entry < entryCount; ++entry) {
+                ZipEntry ze = new ZipEntry(Integer.toHexString(entry));
+                ze.setSize(entrySize);
+                out.putNextEntry(ze);
+
+                for (long i = 0; i < entrySize; i += writeBuffer.length) {
+                    random.nextBytes(writeBuffer);
+                    int byteCount = (int) Math.min(writeBuffer.length, entrySize - i);
+                    out.write(writeBuffer, 0, byteCount);
+                }
+
+                out.closeEntry();
+            }
+        } finally {
+            out.close();
+        }
+    }
+
+    public void timeZipFileRead(int reps) throws Exception {
+        byte readBuffer[] = new byte[readBufferSize];
+        for (int i = 0; i < reps; ++i) {
+            ZipFile zipFile = new ZipFile(file);
+            for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
+                ZipEntry zipEntry = e.nextElement();
+                InputStream is = zipFile.getInputStream(zipEntry);
+                while (true) {
+                    if (is.read(readBuffer, 0, readBuffer.length) < 0) {
+                        break;
+                    }
+                }
+            }
+            zipFile.close();
+        }
+    }
+}
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/dalvik/src/main/java/dalvik/system/VMDebug.java b/dalvik/src/main/java/dalvik/system/VMDebug.java
index 85b52f8..fe8294b 100644
--- a/dalvik/src/main/java/dalvik/system/VMDebug.java
+++ b/dalvik/src/main/java/dalvik/system/VMDebug.java
@@ -194,7 +194,7 @@
         if (fd == null) {
             throw new NullPointerException("fd == null");
         }
-        startMethodTracingFd(traceFileName, fd, checkBufferSize(bufferSize), flags,
+        startMethodTracingFd(traceFileName, fd.getInt$(), checkBufferSize(bufferSize), flags,
                              samplingEnabled, intervalUs, streamingOutput);
     }
 
@@ -219,7 +219,8 @@
     }
 
     private static native void startMethodTracingDdmsImpl(int bufferSize, int flags, boolean samplingEnabled, int intervalUs);
-    private static native void startMethodTracingFd(String traceFileName, FileDescriptor fd, int bufferSize, int flags, boolean samplingEnabled, int intervalUs, boolean streamingOutput);
+    private static native void startMethodTracingFd(String traceFileName, int fd, int bufferSize,
+            int flags, boolean samplingEnabled, int intervalUs, boolean streamingOutput);
     private static native void startMethodTracingFilename(String traceFileName, int bufferSize, int flags, boolean samplingEnabled, int intervalUs);
 
     /**
@@ -340,7 +341,12 @@
      * @param fd Descriptor of open file that will receive the output.
      *        If this is null, the fileName is used instead.
      */
-    public static native void dumpHprofData(String fileName, FileDescriptor fd)
+    public static void dumpHprofData(String fileName, FileDescriptor fd)
+            throws IOException {
+       dumpHprofData(fileName, fd != null ? fd.getInt$() : -1);
+    }
+
+    private static native void dumpHprofData(String fileName, int fd)
             throws IOException;
 
     /**
diff --git a/expectations/knownfailures.txt b/expectations/knownfailures.txt
index 3cd2e2a..39e13ed 100644
--- a/expectations/knownfailures.txt
+++ b/expectations/knownfailures.txt
@@ -1844,5 +1844,11 @@
   result: EXEC_FAILED,
   bug: 64092664,
   name: "org.apache.harmony.tests.java.text.DecimalFormatTest#test_formatDouble_withFieldPosition"
+},
+{
+  description: "Broken after zlib update in 7291b8caf1884",
+  result: EXEC_FAILED,
+  bug: 67395816,
+  name: "libcore.java.util.zip.DeflateRegressionTest#deterministicOutput"
 }
 ]
diff --git a/luni/src/main/java/org/apache/harmony/security/PrivateKeyImpl.java b/luni/src/main/java/org/apache/harmony/security/PrivateKeyImpl.java
deleted file mode 100644
index 47aceb3..0000000
--- a/luni/src/main/java/org/apache/harmony/security/PrivateKeyImpl.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You 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 org.apache.harmony.security;
-
-import java.security.PrivateKey;
-
-/**
- * PrivateKeyImpl
- */
-public class PrivateKeyImpl implements PrivateKey {
-
-    /*
-     * @serial
-     */
-    private static final long serialVersionUID = 7776497482533790279L;
-
-    private String algorithm;
-
-    private byte[] encoding;
-
-    public PrivateKeyImpl(String algorithm) {
-        this.algorithm = algorithm;
-    }
-
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-    public String getFormat() {
-        return "PKCS#8";
-    }
-
-    public byte[] getEncoded() {
-
-        byte[] toReturn = new byte[encoding.length];
-        System.arraycopy(encoding, 0, toReturn, 0, encoding.length);
-
-        return toReturn;
-    }
-
-    public void setAlgorithm(String algorithm) {
-        this.algorithm = algorithm;
-    }
-
-    public void setEncoding(byte[] encoding) {
-        this.encoding = new byte[encoding.length];
-        System.arraycopy(encoding, 0, this.encoding, 0, encoding.length);
-    }
-
-}
diff --git a/luni/src/main/java/org/apache/harmony/security/PublicKeyImpl.java b/luni/src/main/java/org/apache/harmony/security/PublicKeyImpl.java
deleted file mode 100644
index dccc72d..0000000
--- a/luni/src/main/java/org/apache/harmony/security/PublicKeyImpl.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You 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 org.apache.harmony.security;
-
-import java.security.PublicKey;
-
-
-/**
- * PublicKeyImpl
- */
-public class PublicKeyImpl implements PublicKey {
-
-    /**
-     * @serial
-     */
-    private static final long serialVersionUID = 7179022516819534075L;
-
-
-    private byte[] encoding;
-
-    private String algorithm;
-
-
-    public PublicKeyImpl(String algorithm) {
-        this.algorithm = algorithm;
-    }
-
-
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-
-    public String getFormat() {
-        return "X.509";
-    }
-
-
-    public byte[] getEncoded() {
-        byte[] result = new byte[encoding.length];
-        System.arraycopy(encoding, 0, result, 0, encoding.length);
-        return result;
-    }
-
-
-    public void setAlgorithm(String algorithm) {
-        this.algorithm = algorithm;
-    }
-
-
-    public void setEncoding(byte[] encoding) {
-        this.encoding = new byte[encoding.length];
-        System.arraycopy(encoding, 0, this.encoding, 0, encoding.length);
-    }
-}
-
diff --git a/luni/src/main/java/org/apache/harmony/security/provider/crypto/CryptoProvider.java b/luni/src/main/java/org/apache/harmony/security/provider/crypto/CryptoProvider.java
deleted file mode 100644
index ad5ac7d..0000000
--- a/luni/src/main/java/org/apache/harmony/security/provider/crypto/CryptoProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You 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 org.apache.harmony.security.provider.crypto;
-
-import java.security.Provider;
-
-/**
- * Implementation of Provider for SecureRandom. The implementation supports the
- * "SHA1PRNG" algorithm described in JavaTM Cryptography Architecture, API
- * Specification & Reference
- */
-
-public final class CryptoProvider extends Provider {
-
-    private static final long serialVersionUID = 7991202868423459598L;
-
-    /**
-     * Creates a Provider and puts parameters
-     */
-    public CryptoProvider() {
-        super("Crypto", 1.0, "HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)");
-
-        put("SecureRandom.SHA1PRNG",
-                "org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl");
-        put("SecureRandom.SHA1PRNG ImplementedIn", "Software");
-    }
-}
diff --git a/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Constants.java b/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Constants.java
deleted file mode 100644
index fc6a847..0000000
--- a/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Constants.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You 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.
- */
-/**
-* @author Yuri A. Kropachev
-* @version $Revision$
-*/
-
-
-package org.apache.harmony.security.provider.crypto;
-
-
-/**
- * This interface contains : <BR>
- * - a set of constant values, H0-H4, defined in "SECURE HASH STANDARD", FIPS PUB 180-2 ;<BR>
- * - implementation constant values to use in classes using SHA-1 algorithm.    <BR>
- */
-public final class SHA1Constants {
-    private SHA1Constants() {
-    }
-
-    /**
-     *  constant defined in "SECURE HASH STANDARD"
-     */
-    public static final int H0 = 0x67452301;
-
-
-    /**
-     *  constant defined in "SECURE HASH STANDARD"
-     */
-    public static final int H1 = 0xEFCDAB89;
-
-
-    /**
-     *  constant defined in "SECURE HASH STANDARD"
-     */
-    public static final int H2 = 0x98BADCFE;
-
-
-    /**
-     *  constant defined in "SECURE HASH STANDARD"
-     */
-    public static final int H3 = 0x10325476;
-
-
-    /**
-     *  constant defined in "SECURE HASH STANDARD"
-     */
-    public static final int H4 = 0xC3D2E1F0;
-
-
-    /**
-     * offset in buffer to store number of bytes in 0-15 word frame
-     */
-    public static final int BYTES_OFFSET = 81;
-
-
-    /**
-     * offset in buffer to store current hash value
-     */
-    public static final int HASH_OFFSET = 82;
-
-
-    /**
-     * # of bytes in H0-H4 words; <BR>
-     * in this implementation # is set to 20 (in general # varies from 1 to 20)
-     */
-    public static final int DIGEST_LENGTH = 20;
-}
diff --git a/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Impl.java b/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Impl.java
deleted file mode 100644
index 57b9005..0000000
--- a/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1Impl.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You 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.
- */
-/**
-* @author Yuri A. Kropachev
-* @version $Revision$
-*/
-
-
-package org.apache.harmony.security.provider.crypto;
-
-import static org.apache.harmony.security.provider.crypto.SHA1Constants.*;
-
-/**
- * This class contains methods providing SHA-1 functionality to use in classes. <BR>
- * The methods support the algorithm described in "SECURE HASH STANDARD", FIPS PUB 180-2, <BR>
- * "http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf"      <BR>
- * <BR>
- * The class contains two package level access methods, -
- * "void updateHash(int[], byte[], int, int)" and "void computeHash(int[])", -
- * performing the following operations. <BR>
- * <BR>
- * The "updateHash(..)" method appends new bytes to existing ones
- * within limit of a frame of 64 bytes (16 words).
- * Once a length of accumulated bytes reaches the limit
- * the "computeHash(int[])" method is invoked on the frame to compute updated hash,
- * and the number of bytes in the frame is set to 0.
- * Thus, after appending all bytes, the frame contain only those bytes
- * that were not used in computing final hash value yet. <BR>
- * <BR>
- * The "computeHash(..)" method generates a 160 bit hash value using
- * a 512 bit message stored in first 16 words of int[] array argument and
- * current hash value stored in five words, beginning HASH_OFFSET, of the array argument.
- * Computation is done according to SHA-1 algorithm. <BR>
- * <BR>
- * The resulting hash value replaces the previous hash value in the array;
- * original bits of the message are not preserved.
- */
-public class SHA1Impl {
-
-
-    /**
-     * The method generates a 160 bit hash value using
-     * a 512 bit message stored in first 16 words of int[] array argument and
-     * current hash value stored in five words, beginning OFFSET+1, of the array argument.
-     * Computation is done according to SHA-1 algorithm.
-     *
-     * The resulting hash value replaces the previous hash value in the array;
-     * original bits of the message are not preserved.
-     *
-     * No checks on argument supplied, that is,
-     * a calling method is responsible for such checks.
-     * In case of incorrect array passed to the method
-     * either NPE or IndexOutOfBoundException gets thrown by JVM.
-     *
-     * @params
-     *        arrW - integer array; arrW.length >= (BYTES_OFFSET+6); <BR>
-     *               only first (BYTES_OFFSET+6) words are used
-     */
-    static void computeHash(int[] arrW) {
-
-        int  a = arrW[HASH_OFFSET   ];
-        int  b = arrW[HASH_OFFSET +1];
-        int  c = arrW[HASH_OFFSET +2];
-        int  d = arrW[HASH_OFFSET +3];
-        int  e = arrW[HASH_OFFSET +4];
-
-        int temp;
-
-        // In this implementation the "d. For t = 0 to 79 do" loop
-        // is split into four loops. The following constants:
-        //     K = 5A827999   0 <= t <= 19
-        //     K = 6ED9EBA1  20 <= t <= 39
-        //     K = 8F1BBCDC  40 <= t <= 59
-        //     K = CA62C1D6  60 <= t <= 79
-        // are hex literals in the loops.
-
-        for ( int t = 16; t < 80 ; t++ ) {
-
-            temp  = arrW[t-3] ^ arrW[t-8] ^ arrW[t-14] ^ arrW[t-16];
-            arrW[t] = ( temp<<1 ) | ( temp>>>31 );
-        }
-
-        for ( int t = 0 ; t < 20 ; t++ ) {
-
-            temp = ( ( a<<5 ) | ( a>>>27 )   ) +
-                   ( ( b & c) | ((~b) & d)   ) +
-                   ( e + arrW[t] + 0x5A827999 ) ;
-            e = d;
-            d = c;
-            c = ( b<<30 ) | ( b>>>2 ) ;
-            b = a;
-            a = temp;
-        }
-        for ( int t = 20 ; t < 40 ; t++ ) {
-
-            temp = ((( a<<5 ) | ( a>>>27 ))) + (b ^ c ^ d) + (e + arrW[t] + 0x6ED9EBA1) ;
-            e = d;
-            d = c;
-            c = ( b<<30 ) | ( b>>>2 ) ;
-            b = a;
-            a = temp;
-        }
-        for ( int t = 40 ; t < 60 ; t++ ) {
-
-            temp = (( a<<5 ) | ( a>>>27 )) + ((b & c) | (b & d) | (c & d)) +
-                                                             (e + arrW[t] + 0x8F1BBCDC) ;
-            e = d;
-            d = c;
-            c = ( b<<30 ) | ( b>>>2 ) ;
-            b = a;
-            a = temp;
-        }
-        for ( int t = 60 ; t < 80 ; t++ ) {
-
-            temp = ((( a<<5 ) | ( a>>>27 ))) + (b ^ c ^ d) + (e + arrW[t] + 0xCA62C1D6) ;
-            e = d;
-            d = c;
-            c = ( b<<30 ) | ( b>>>2 ) ;
-            b = a;
-            a = temp;
-        }
-
-        arrW[HASH_OFFSET   ] += a;
-        arrW[HASH_OFFSET +1] += b;
-        arrW[HASH_OFFSET +2] += c;
-        arrW[HASH_OFFSET +3] += d;
-        arrW[HASH_OFFSET +4] += e;
-    }
-
-    /**
-     * The method appends new bytes to existing ones
-     * within limit of a frame of 64 bytes (16 words).
-     *
-     * Once a length of accumulated bytes reaches the limit
-     * the "computeHash(int[])" method is invoked on the array to compute updated hash,
-     * and the number of bytes in the frame is set to 0.
-     * Thus, after appending all bytes, the array contain only those bytes
-     * that were not used in computing final hash value yet.
-     *
-     * No checks on arguments passed to the method, that is,
-     * a calling method is responsible for such checks.
-     *
-     * @params
-     *        intArray  - int array containing bytes to which to append;
-     *                    intArray.length >= (BYTES_OFFSET+6)
-     * @params
-     *        byteInput - array of bytes to use for the update
-     * @params
-     *        from      - the offset to start in the "byteInput" array
-     * @params
-     *        to        - a number of the last byte in the input array to use,
-     *                that is, for first byte "to"==0, for last byte "to"==input.length-1
-     */
-    static void updateHash(int[] intArray, byte[] byteInput, int fromByte, int toByte) {
-
-        // As intArray contains a packed bytes
-        // the buffer's index is in the intArray[BYTES_OFFSET] element
-
-        int index = intArray[BYTES_OFFSET];
-        int i = fromByte;
-        int maxWord;
-        int nBytes;
-
-        int wordIndex = index >>2;
-        int byteIndex = index & 0x03;
-
-        intArray[BYTES_OFFSET] = ( index + toByte - fromByte + 1 ) & 077 ;
-
-        // In general case there are 3 stages :
-        // - appending bytes to non-full word,
-        // - writing 4 bytes into empty words,
-        // - writing less than 4 bytes in last word
-
-        if ( byteIndex != 0 ) {       // appending bytes in non-full word (as if)
-
-            for ( ; ( i <= toByte ) && ( byteIndex < 4 ) ; i++ ) {
-                intArray[wordIndex] |= ( byteInput[i] & 0xFF ) << ((3 - byteIndex)<<3) ;
-                byteIndex++;
-            }
-            if ( byteIndex == 4 ) {
-                wordIndex++;
-                if ( wordIndex == 16 ) {          // intArray is full, computing hash
-
-                    computeHash(intArray);
-                    wordIndex = 0;
-                }
-            }
-            if ( i > toByte ) {                 // all input bytes appended
-                return ;
-            }
-        }
-
-        // writing full words
-
-        maxWord = (toByte - i + 1) >> 2;           // # of remaining full words, may be "0"
-        for ( int k = 0; k < maxWord ; k++ ) {
-
-            intArray[wordIndex] = ( ((int) byteInput[i   ] & 0xFF) <<24 ) |
-                                  ( ((int) byteInput[i +1] & 0xFF) <<16 ) |
-                                  ( ((int) byteInput[i +2] & 0xFF) <<8  ) |
-                                  ( ((int) byteInput[i +3] & 0xFF)      )  ;
-            i += 4;
-            wordIndex++;
-
-            if ( wordIndex < 16 ) {     // buffer is not full yet
-                continue;
-            }
-            computeHash(intArray);      // buffer is full, computing hash
-            wordIndex = 0;
-        }
-
-        // writing last incomplete word
-        // after writing free byte positions are set to "0"s
-
-        nBytes = toByte - i +1;
-        if ( nBytes != 0 ) {
-
-            int w =  ((int) byteInput[i] & 0xFF) <<24 ;
-
-            if ( nBytes != 1 ) {
-                w |= ((int) byteInput[i +1] & 0xFF) <<16 ;
-                if ( nBytes != 2) {
-                    w |= ((int) byteInput[i +2] & 0xFF) <<8 ;
-                }
-            }
-            intArray[wordIndex] = w;
-        }
-
-        return ;
-    }
-
-}
diff --git a/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java b/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java
deleted file mode 100644
index 5c0e328..0000000
--- a/luni/src/main/java/org/apache/harmony/security/provider/crypto/SHA1PRNG_SecureRandomImpl.java
+++ /dev/null
@@ -1,564 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You 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 org.apache.harmony.security.provider.crypto;
-
-import dalvik.system.BlockGuard;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.security.InvalidParameterException;
-import java.security.ProviderException;
-import java.security.SecureRandomSpi;
-import libcore.io.Streams;
-import libcore.util.EmptyArray;
-
-import static org.apache.harmony.security.provider.crypto.SHA1Constants.*;
-
-/**
- * This class extends the SecureRandomSpi class implementing all its abstract methods.
- *
- * <p>To generate pseudo-random bits, the implementation uses technique described in
- * the "Random Number Generator (RNG) algorithms" section, Appendix A,
- * JavaTM Cryptography Architecture, API Specification & Reference.
- */
-public class SHA1PRNG_SecureRandomImpl extends SecureRandomSpi implements Serializable {
-
-    private static final long serialVersionUID = 283736797212159675L;
-
-    private static FileInputStream devURandom;
-    static {
-        try {
-            devURandom = new FileInputStream(new File("/dev/urandom"));
-        } catch (IOException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-
-    // constants to use in expressions operating on bytes in int and long variables:
-    // END_FLAGS - final bytes in words to append to message;
-    //             see "ch.5.1 Padding the Message, FIPS 180-2"
-    // RIGHT1    - shifts to right for left half of long
-    // RIGHT2    - shifts to right for right half of long
-    // LEFT      - shifts to left for bytes
-    // MASK      - mask to select counter's bytes after shift to right
-
-    private static final int[] END_FLAGS = { 0x80000000, 0x800000, 0x8000, 0x80 };
-
-    private static final int[] RIGHT1 = { 0, 40, 48, 56 };
-
-    private static final int[] RIGHT2 = { 0, 8, 16, 24 };
-
-    private static final int[] LEFT = { 0, 24, 16, 8 };
-
-    private static final int[] MASK = { 0xFFFFFFFF, 0x00FFFFFF, 0x0000FFFF,
-            0x000000FF };
-
-    // HASHBYTES_TO_USE defines # of bytes returned by "computeHash(byte[])"
-    // to use to form byte array returning by the "nextBytes(byte[])" method
-    // Note, that this implementation uses more bytes than it is defined
-    // in the above specification.
-    private static final int HASHBYTES_TO_USE = 20;
-
-    // value of 16 defined in the "SECURE HASH STANDARD", FIPS PUB 180-2
-    private static final int FRAME_LENGTH = 16;
-
-    // miscellaneous constants defined in this implementation:
-    // COUNTER_BASE - initial value to set to "counter" before computing "nextBytes(..)";
-    //                note, that the exact value is not defined in STANDARD
-    // HASHCOPY_OFFSET   - offset for copy of current hash in "copies" array
-    // EXTRAFRAME_OFFSET - offset for extra frame in "copies" array;
-    //                     as the extra frame follows the current hash frame,
-    //                     EXTRAFRAME_OFFSET is equal to length of current hash frame
-    // FRAME_OFFSET      - offset for frame in "copies" array
-    // MAX_BYTES - maximum # of seed bytes processing which doesn't require extra frame
-    //             see (1) comments on usage of "seed" array below and
-    //             (2) comments in "engineNextBytes(byte[])" method
-    //
-    // UNDEFINED  - three states of engine; initially its state is "UNDEFINED"
-    // SET_SEED     call to "engineSetSeed"  sets up "SET_SEED" state,
-    // NEXT_BYTES   call to "engineNextByte" sets up "NEXT_BYTES" state
-
-    private static final int COUNTER_BASE = 0;
-
-    private static final int HASHCOPY_OFFSET = 0;
-
-    private static final int EXTRAFRAME_OFFSET = 5;
-
-    private static final int FRAME_OFFSET = 21;
-
-    private static final int MAX_BYTES = 48;
-
-    private static final int UNDEFINED = 0;
-
-    private static final int SET_SEED = 1;
-
-    private static final int NEXT_BYTES = 2;
-
-    private static SHA1PRNG_SecureRandomImpl myRandom;
-
-    // Structure of "seed" array:
-    // -  0-79 - words for computing hash
-    // - 80    - unused
-    // - 81    - # of seed bytes in current seed frame
-    // - 82-86 - 5 words, current seed hash
-    private transient int[] seed;
-
-    // total length of seed bytes, including all processed
-    private transient long seedLength;
-
-    // Structure of "copies" array
-    // -  0-4  - 5 words, copy of current seed hash
-    // -  5-20 - extra 16 words frame;
-    //           is used if final padding exceeds 512-bit length
-    // - 21-36 - 16 word frame to store a copy of remaining bytes
-    private transient int[] copies;
-
-    // ready "next" bytes; needed because words are returned
-    private transient byte[] nextBytes;
-
-    // index of used bytes in "nextBytes" array
-    private transient int nextBIndex;
-
-    // variable required according to "SECURE HASH STANDARD"
-    private transient long counter;
-
-    // contains int value corresponding to engine's current state
-    private transient int state;
-
-    // The "seed" array is used to compute both "current seed hash" and "next bytes".
-    //
-    // As the "SHA1" algorithm computes a hash of entire seed by splitting it into
-    // a number of the 512-bit length frames (512 bits = 64 bytes = 16 words),
-    // "current seed hash" is a hash (5 words, 20 bytes) for all previous full frames;
-    // remaining bytes are stored in the 0-15 word frame of the "seed" array.
-    //
-    // As for calculating "next bytes",
-    // both remaining bytes and "current seed hash" are used,
-    // to preserve the latter for following "setSeed(..)" commands,
-    // the following technique is used:
-    // - upon getting "nextBytes(byte[])" invoked, single or first in row,
-    //   which requires computing new hash, that is,
-    //   there is no more bytes remaining from previous "next bytes" computation,
-    //   remaining bytes are copied into the 21-36 word frame of the "copies" array;
-    // - upon getting "setSeed(byte[])" invoked, single or first in row,
-    //   remaining bytes are copied back.
-
-    /**
-     *  Creates object and sets implementation variables to their initial values
-     */
-    public SHA1PRNG_SecureRandomImpl() {
-
-        seed = new int[HASH_OFFSET + EXTRAFRAME_OFFSET];
-        seed[HASH_OFFSET] = H0;
-        seed[HASH_OFFSET + 1] = H1;
-        seed[HASH_OFFSET + 2] = H2;
-        seed[HASH_OFFSET + 3] = H3;
-        seed[HASH_OFFSET + 4] = H4;
-
-        seedLength = 0;
-        copies = new int[2 * FRAME_LENGTH + EXTRAFRAME_OFFSET];
-        nextBytes = new byte[DIGEST_LENGTH];
-        nextBIndex = HASHBYTES_TO_USE;
-        counter = COUNTER_BASE;
-        state = UNDEFINED;
-    }
-
-    /*
-     * The method invokes the SHA1Impl's "updateHash(..)" method
-     * to update current seed frame and
-     * to compute new intermediate hash value if the frame is full.
-     *
-     * After that it computes a length of whole seed.
-     */
-    private void updateSeed(byte[] bytes) {
-
-        // on call:   "seed" contains current bytes and current hash;
-        // on return: "seed" contains new current bytes and possibly new current hash
-        //            if after adding, seed bytes overfill its buffer
-        SHA1Impl.updateHash(seed, bytes, 0, bytes.length - 1);
-
-        seedLength += bytes.length;
-    }
-
-    /**
-     * Changes current seed by supplementing a seed argument to the current seed,
-     * if this already set;
-     * the argument is used as first seed otherwise. <BR>
-     *
-     * The method overrides "engineSetSeed(byte[])" in class SecureRandomSpi.
-     *
-     * @param
-     *       seed - byte array
-     * @throws
-     *       NullPointerException - if null is passed to the "seed" argument
-     */
-    protected synchronized void engineSetSeed(byte[] seed) {
-
-        if (seed == null) {
-            throw new NullPointerException("seed == null");
-        }
-
-        if (state == NEXT_BYTES) { // first setSeed after NextBytes; restoring hash
-            System.arraycopy(copies, HASHCOPY_OFFSET, this.seed, HASH_OFFSET,
-                    EXTRAFRAME_OFFSET);
-        }
-        state = SET_SEED;
-
-        if (seed.length != 0) {
-            updateSeed(seed);
-        }
-    }
-
-    /**
-     * Returns a required number of random bytes. <BR>
-     *
-     * The method overrides "engineGenerateSeed (int)" in class SecureRandomSpi. <BR>
-     *
-     * @param
-     *       numBytes - number of bytes to return; should be >= 0.
-     * @return
-     *       byte array containing bits in order from left to right
-     * @throws
-     *       InvalidParameterException - if numBytes < 0
-     */
-    protected synchronized byte[] engineGenerateSeed(int numBytes) {
-
-        byte[] myBytes; // byte[] for bytes returned by "nextBytes()"
-
-        if (numBytes < 0) {
-            throw new NegativeArraySizeException(Integer.toString(numBytes));
-        }
-        if (numBytes == 0) {
-            return EmptyArray.BYTE;
-        }
-
-        if (myRandom == null) {
-            myRandom = new SHA1PRNG_SecureRandomImpl();
-            myRandom.engineSetSeed(getRandomBytes(DIGEST_LENGTH));
-        }
-
-        myBytes = new byte[numBytes];
-        myRandom.engineNextBytes(myBytes);
-
-        return myBytes;
-    }
-
-    /**
-     * Writes random bytes into an array supplied.
-     * Bits in a byte are from left to right. <BR>
-     *
-     * To generate random bytes, the "expansion of source bits" method is used,
-     * that is,
-     * the current seed with a 64-bit counter appended is used to compute new bits.
-     * The counter is incremented by 1 for each 20-byte output. <BR>
-     *
-     * The method overrides engineNextBytes in class SecureRandomSpi.
-     *
-     * @param
-     *       bytes - byte array to be filled in with bytes
-     * @throws
-     *       NullPointerException - if null is passed to the "bytes" argument
-     */
-    protected synchronized void engineNextBytes(byte[] bytes) {
-
-        int i, n;
-
-        long bits; // number of bits required by Secure Hash Standard
-        int nextByteToReturn; // index of ready bytes in "bytes" array
-        int lastWord; // index of last word in frame containing bytes
-        final int extrabytes = 7;// # of bytes to add in order to computer # of 8 byte words
-
-        if (bytes == null) {
-            throw new NullPointerException("bytes == null");
-        }
-
-        lastWord = seed[BYTES_OFFSET] == 0 ? 0
-                : (seed[BYTES_OFFSET] + extrabytes) >> 3 - 1;
-
-        if (state == UNDEFINED) {
-
-            // no seed supplied by user, hence it is generated thus randomizing internal state
-            updateSeed(getRandomBytes(DIGEST_LENGTH));
-            nextBIndex = HASHBYTES_TO_USE;
-
-            // updateSeed(...) updates where the last word of the seed is, so we
-            // have to read it again.
-            lastWord = seed[BYTES_OFFSET] == 0 ? 0
-                    : (seed[BYTES_OFFSET] + extrabytes) >> 3 - 1;
-
-        } else if (state == SET_SEED) {
-
-            System.arraycopy(seed, HASH_OFFSET, copies, HASHCOPY_OFFSET,
-                    EXTRAFRAME_OFFSET);
-
-            // possible cases for 64-byte frame:
-            //
-            // seed bytes < 48      - remaining bytes are enough for all, 8 counter bytes,
-            //                        0x80, and 8 seedLength bytes; no extra frame required
-            // 48 < seed bytes < 56 - remaining 9 bytes are for 0x80 and 8 counter bytes
-            //                        extra frame contains only seedLength value at the end
-            // seed bytes > 55      - extra frame contains both counter's bytes
-            //                        at the beginning and seedLength value at the end;
-            //                        note, that beginning extra bytes are not more than 8,
-            //                        that is, only 2 extra words may be used
-
-            // no need to set to "0" 3 words after "lastWord" and
-            // more than two words behind frame
-            for (i = lastWord + 3; i < FRAME_LENGTH + 2; i++) {
-                seed[i] = 0;
-            }
-
-            bits = (seedLength << 3) + 64; // transforming # of bytes into # of bits
-
-            // putting # of bits into two last words (14,15) of 16 word frame in
-            // seed or copies array depending on total length after padding
-            if (seed[BYTES_OFFSET] < MAX_BYTES) {
-                seed[14] = (int) (bits >>> 32);
-                seed[15] = (int) (bits & 0xFFFFFFFF);
-            } else {
-                copies[EXTRAFRAME_OFFSET + 14] = (int) (bits >>> 32);
-                copies[EXTRAFRAME_OFFSET + 15] = (int) (bits & 0xFFFFFFFF);
-            }
-
-            nextBIndex = HASHBYTES_TO_USE; // skipping remaining random bits
-        }
-        state = NEXT_BYTES;
-
-        if (bytes.length == 0) {
-            return;
-        }
-
-        nextByteToReturn = 0;
-
-        // possibly not all of HASHBYTES_TO_USE bytes were used previous time
-        n = (HASHBYTES_TO_USE - nextBIndex) < (bytes.length - nextByteToReturn) ? HASHBYTES_TO_USE
-                - nextBIndex
-                : bytes.length - nextByteToReturn;
-        if (n > 0) {
-            System.arraycopy(nextBytes, nextBIndex, bytes, nextByteToReturn, n);
-            nextBIndex += n;
-            nextByteToReturn += n;
-        }
-
-        if (nextByteToReturn >= bytes.length) {
-            return; // return because "bytes[]" are filled in
-        }
-
-        n = seed[BYTES_OFFSET] & 0x03;
-        for (;;) {
-            if (n == 0) {
-
-                seed[lastWord] = (int) (counter >>> 32);
-                seed[lastWord + 1] = (int) (counter & 0xFFFFFFFF);
-                seed[lastWord + 2] = END_FLAGS[0];
-
-            } else {
-
-                seed[lastWord] |= (int) ((counter >>> RIGHT1[n]) & MASK[n]);
-                seed[lastWord + 1] = (int) ((counter >>> RIGHT2[n]) & 0xFFFFFFFF);
-                seed[lastWord + 2] = (int) ((counter << LEFT[n]) | END_FLAGS[n]);
-            }
-            if (seed[BYTES_OFFSET] > MAX_BYTES) {
-                copies[EXTRAFRAME_OFFSET] = seed[FRAME_LENGTH];
-                copies[EXTRAFRAME_OFFSET + 1] = seed[FRAME_LENGTH + 1];
-            }
-
-            SHA1Impl.computeHash(seed);
-
-            if (seed[BYTES_OFFSET] > MAX_BYTES) {
-
-                System.arraycopy(seed, 0, copies, FRAME_OFFSET, FRAME_LENGTH);
-                System.arraycopy(copies, EXTRAFRAME_OFFSET, seed, 0,
-                        FRAME_LENGTH);
-
-                SHA1Impl.computeHash(seed);
-                System.arraycopy(copies, FRAME_OFFSET, seed, 0, FRAME_LENGTH);
-            }
-            counter++;
-
-            int j = 0;
-            for (i = 0; i < EXTRAFRAME_OFFSET; i++) {
-                int k = seed[HASH_OFFSET + i];
-                nextBytes[j] = (byte) (k >>> 24); // getting first  byte from left
-                nextBytes[j + 1] = (byte) (k >>> 16); // getting second byte from left
-                nextBytes[j + 2] = (byte) (k >>> 8); // getting third  byte from left
-                nextBytes[j + 3] = (byte) (k); // getting fourth byte from left
-                j += 4;
-            }
-
-            nextBIndex = 0;
-            j = HASHBYTES_TO_USE < (bytes.length - nextByteToReturn) ? HASHBYTES_TO_USE
-                    : bytes.length - nextByteToReturn;
-
-            if (j > 0) {
-                System.arraycopy(nextBytes, 0, bytes, nextByteToReturn, j);
-                nextByteToReturn += j;
-                nextBIndex += j;
-            }
-
-            if (nextByteToReturn >= bytes.length) {
-                break;
-            }
-        }
-    }
-
-    private void writeObject(ObjectOutputStream oos) throws IOException {
-
-        int[] intData = null;
-
-        final int only_hash = EXTRAFRAME_OFFSET;
-        final int hashes_and_frame = EXTRAFRAME_OFFSET * 2 + FRAME_LENGTH;
-        final int hashes_and_frame_extra = EXTRAFRAME_OFFSET * 2 + FRAME_LENGTH
-                * 2;
-
-        oos.writeLong(seedLength);
-        oos.writeLong(counter);
-        oos.writeInt(state);
-        oos.writeInt(seed[BYTES_OFFSET]);
-
-        int nRemaining = (seed[BYTES_OFFSET] + 3) >> 2; // converting bytes in words
-        // result may be 0
-        if (state != NEXT_BYTES) {
-
-            // either the state is UNDEFINED or previous method was "setSeed(..)"
-            // so in "seed[]" to serialize are remaining bytes (seed[0-nRemaining]) and
-            // current hash (seed[82-86])
-
-            intData = new int[only_hash + nRemaining];
-
-            System.arraycopy(seed, 0, intData, 0, nRemaining);
-            System.arraycopy(seed, HASH_OFFSET, intData, nRemaining,
-                    EXTRAFRAME_OFFSET);
-
-        } else {
-            // previous method was "nextBytes(..)"
-            // so, data to serialize are all the above (two first are in "copies" array)
-            // and current words in both frame and extra frame (as if)
-
-            int offset = 0;
-            if (seed[BYTES_OFFSET] < MAX_BYTES) { // no extra frame
-
-                intData = new int[hashes_and_frame + nRemaining];
-
-            } else { // extra frame is used
-
-                intData = new int[hashes_and_frame_extra + nRemaining];
-
-                intData[offset] = seed[FRAME_LENGTH];
-                intData[offset + 1] = seed[FRAME_LENGTH + 1];
-                intData[offset + 2] = seed[FRAME_LENGTH + 14];
-                intData[offset + 3] = seed[FRAME_LENGTH + 15];
-                offset += 4;
-            }
-
-            System.arraycopy(seed, 0, intData, offset, FRAME_LENGTH);
-            offset += FRAME_LENGTH;
-
-            System.arraycopy(copies, FRAME_LENGTH + EXTRAFRAME_OFFSET, intData,
-                    offset, nRemaining);
-            offset += nRemaining;
-
-            System.arraycopy(copies, 0, intData, offset, EXTRAFRAME_OFFSET);
-            offset += EXTRAFRAME_OFFSET;
-
-            System.arraycopy(seed, HASH_OFFSET, intData, offset,
-                    EXTRAFRAME_OFFSET);
-        }
-        for (int i = 0; i < intData.length; i++) {
-            oos.writeInt(intData[i]);
-        }
-
-        oos.writeInt(nextBIndex);
-        oos.write(nextBytes, nextBIndex, HASHBYTES_TO_USE - nextBIndex);
-    }
-
-    private void readObject(ObjectInputStream ois) throws IOException,
-            ClassNotFoundException {
-
-        seed = new int[HASH_OFFSET + EXTRAFRAME_OFFSET];
-        copies = new int[2 * FRAME_LENGTH + EXTRAFRAME_OFFSET];
-        nextBytes = new byte[DIGEST_LENGTH];
-
-        seedLength = ois.readLong();
-        counter = ois.readLong();
-        state = ois.readInt();
-        seed[BYTES_OFFSET] = ois.readInt();
-
-        int nRemaining = (seed[BYTES_OFFSET] + 3) >> 2; // converting bytes in words
-
-        if (state != NEXT_BYTES) {
-
-            for (int i = 0; i < nRemaining; i++) {
-                seed[i] = ois.readInt();
-            }
-            for (int i = 0; i < EXTRAFRAME_OFFSET; i++) {
-                seed[HASH_OFFSET + i] = ois.readInt();
-            }
-        } else {
-            if (seed[BYTES_OFFSET] >= MAX_BYTES) {
-
-                // reading next bytes in seed extra frame
-                seed[FRAME_LENGTH] = ois.readInt();
-                seed[FRAME_LENGTH + 1] = ois.readInt();
-                seed[FRAME_LENGTH + 14] = ois.readInt();
-                seed[FRAME_LENGTH + 15] = ois.readInt();
-            }
-            // reading next bytes in seed frame
-            for (int i = 0; i < FRAME_LENGTH; i++) {
-                seed[i] = ois.readInt();
-            }
-            // reading remaining seed bytes
-            for (int i = 0; i < nRemaining; i++) {
-                copies[FRAME_LENGTH + EXTRAFRAME_OFFSET + i] = ois.readInt();
-            }
-            // reading copy of current hash
-            for (int i = 0; i < EXTRAFRAME_OFFSET; i++) {
-                copies[i] = ois.readInt();
-            }
-            // reading current hash
-            for (int i = 0; i < EXTRAFRAME_OFFSET; i++) {
-                seed[HASH_OFFSET + i] = ois.readInt();
-            }
-        }
-
-        nextBIndex = ois.readInt();
-        Streams.readFully(ois, nextBytes, nextBIndex, HASHBYTES_TO_USE - nextBIndex);
-    }
-
-    private static byte[] getRandomBytes(int byteCount) {
-        if (byteCount <= 0) {
-            throw new IllegalArgumentException("Too few bytes requested: " + byteCount);
-        }
-
-        BlockGuard.Policy originalPolicy = BlockGuard.getThreadPolicy();
-        try {
-            BlockGuard.setThreadPolicy(BlockGuard.LAX_POLICY);
-            byte[] result = new byte[byteCount];
-            Streams.readFully(devURandom, result, 0, byteCount);
-            return result;
-        } catch (Exception ex) {
-            throw new ProviderException("Couldn't read " + byteCount + " random bytes", ex);
-        } finally {
-            BlockGuard.setThreadPolicy(originalPolicy);
-        }
-    }
-}
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/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 5df45c2..8d49a10 100644
--- a/luni/src/main/native/libcore_io_Linux.cpp
+++ b/luni/src/main/native/libcore_io_Linux.cpp
@@ -455,14 +455,26 @@
         return NULL;
     }
 
+    jobject atim_timespec = makeStructTimespec(env, sb.st_atim);
+    if (atim_timespec == NULL) {
+        return NULL;
+    }
+    jobject mtim_timespec = makeStructTimespec(env, sb.st_mtim);
+    if (mtim_timespec == NULL) {
+        return NULL;
+    }
+    jobject ctim_timespec = makeStructTimespec(env, sb.st_ctim);
+    if (ctim_timespec == 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),
             static_cast<jint>(sb.st_uid), static_cast<jint>(sb.st_gid),
             static_cast<jlong>(sb.st_rdev), static_cast<jlong>(sb.st_size),
-            makeStructTimespec(env, sb.st_atim), makeStructTimespec(env, sb.st_mtim),
-            makeStructTimespec(env, sb.st_ctim), static_cast<jlong>(sb.st_blksize),
-            static_cast<jlong>(sb.st_blocks));
+            atim_timespec, mtim_timespec, ctim_timespec,
+            static_cast<jlong>(sb.st_blksize), static_cast<jlong>(sb.st_blocks));
 }
 
 static jobject makeStructStatVfs(JNIEnv* env, const struct statvfs& sb) {
diff --git a/luni/src/test/java/libcore/build/DuplicateBridgeMethodsTest.java b/luni/src/test/java/libcore/build/DuplicateBridgeMethodsTest.java
new file mode 100644
index 0000000..2461b5b
--- /dev/null
+++ b/luni/src/test/java/libcore/build/DuplicateBridgeMethodsTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.build;
+
+import java.lang.Enum;
+import java.lang.NoSuchMethodException;
+import java.lang.reflect.Method;
+
+import libcore.io.IoTracker;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+import static org.junit.Assert.*;
+
+@RunWith(JUnit4.class)
+public final class DuplicateBridgeMethodsTest {
+
+    /**
+     * Checks that javac+turbine is not causing duplicate bridge methods to be inserted into
+     * subclasses (b/65645120).  Turbine doesn't generate bridge methods.  When javac
+     * compiles a subclass against a superclass that is missing bridge methods it will by
+     * default insert the missing bridge methods into the subclass.  Android's bundled javac
+     * prebuilts support a -XDskipDuplicateBridges=true flag to not insert the missing bridge
+     * methods.  If the prebuilt javac is not being used then TURBINE_ENABLED=false should be
+     * passed on the command line to make for the platform build.
+     * This test ensures that an extra bridge method did not get inserted into the
+     * libcore.io.IoTracker.Mode enum.
+     */
+    @Test
+    public void testSubclassHasNoBridgeMethod() throws NoSuchMethodException {
+        Method method = IoTracker.Mode.class.getMethod("compareTo",
+                                                       new Class[]{java.lang.Object.class});
+        assertTrue(method.isBridge());
+        assertTrue(method.isSynthetic());
+        assertSame("Extra bridge methods found, use a javac that supports " +
+                   "-XDskipDuplicateBridges=true or set TURBINE_ENABLED=false " +
+                   "when building the platform",
+                   method.getDeclaringClass(), java.lang.Enum.class);
+    }
+}
diff --git a/luni/src/test/java/libcore/java/text/DecimalFormatTest.java b/luni/src/test/java/libcore/java/text/DecimalFormatTest.java
index 1d506f3..60fafac 100644
--- a/luni/src/test/java/libcore/java/text/DecimalFormatTest.java
+++ b/luni/src/test/java/libcore/java/text/DecimalFormatTest.java
@@ -360,7 +360,7 @@
      * when formatting currency. http://b/37135768
      */
     public void testLocaleGroupingSeparator() {
-        // CLDR uses '.' for currency and '\u00a0' for non-currency number formats in de_AT
+        // CLDR uses '.' for currency and U+00a0 for non-currency number formats in de_AT
         // Assert ICU is using these characters
         Locale locale = new Locale("de", "AT");
         android.icu.text.DecimalFormatSymbols icuDfs =
@@ -368,9 +368,9 @@
         assertEquals(icuDfs.getGroupingSeparator(), '\u00a0');
         assertEquals(icuDfs.getMonetaryGroupingSeparator(), '.');
 
-        // In this class, only '\u00a0' should be used for both cases.
+        // In this class, only U+00a0 should be used for both cases.
         DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
-        // Assert CLDR uses '\u00a0' as grouping separator
+        // Assert CLDR uses U+00a0 as grouping separator
         assertEquals(dfs.getGroupingSeparator(), '\u00a0');
 
         // Test non-currency number formats
@@ -391,4 +391,196 @@
         // Test currency format
         assertEquals("$1 234.00", new DecimalFormat("¤#,##0.00", dfs).format(1234));
     }
+
+    /**
+     * PerMill should be truncated into one char. http://b/67034519
+     */
+    public void testPerMill() {
+        String pattern = "0\u2030";
+        double number = 0.1;
+        Locale locale;
+
+        // Test US locale behavior: java.text perMill char is expected to be \u2030.
+        locale = Locale.US;
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            assertEquals("100\u2030", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals("100\u2030", df.format(number));
+        }
+
+        // Test setPerMill() works
+        DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
+        dfs.setPerMill(';');
+        assertEquals("100;", new DecimalFormat(pattern, dfs).format(number));
+
+        // Confirm ICU and java.text agree. Test PerMill is localized.
+        locale = new Locale("ar");
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            // Confirm the "correct" perMill sign uses a single non-ascii char.
+            // ICU's perMill string for ar is known to use single non-ascii char U+0609
+            assertEquals("\u0609", df.getDecimalFormatSymbols().getPerMillString());
+            assertEquals("\u0661\u0660\u0660\u0609", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals('\u0609', df.getDecimalFormatSymbols().getPerMill());
+            assertEquals("\u0661\u0660\u0660\u0609", df.format(number));
+        }
+
+        // Confirm ICU and java.text disagree.
+        // java.text doesn't localize PerMill and fallback to default char U+2030
+        // when PerMill in that locale has more than one visible characters.
+        locale = new Locale("en_US_POSIX");
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            // Confirm the "correct" perMill sign requires more than one char.
+            // ICU's perMill string for en_US_POSIX is known to have more than one visible chars.
+            assertEquals("0/00", df.getDecimalFormatSymbols().getPerMillString());
+            assertEquals("1000/00", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals('\u2030', df.getDecimalFormatSymbols().getPerMill());
+            assertEquals("100\u2030", df.format(number));
+        }
+    }
+
+    /**
+     * Percent should be truncated into one char.
+     */
+    public void testPercent() {
+        String pattern = "0%";
+        double number = 0.1;
+        Locale locale;
+
+        // Test US locale behavior: java.text percent char is expected to be '%'.
+        locale = Locale.US;
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            assertEquals("10%", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals("10%", df.format(number));
+        }
+
+        // Test setPercent() works
+        DecimalFormatSymbols dfs = new DecimalFormatSymbols(locale);
+        dfs.setPercent(';');
+        assertEquals("10;", new DecimalFormat(pattern, dfs).format(number));
+
+        // Confirm ICU and java.text disagree because java.text strips out bidi marker
+        locale = new Locale("ar");
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            // Confirm the "correct" percent sign requires more than one char.
+            // ICU's percent string for ar is known to have a bidi marker.
+            assertEquals("\u066a\u061c", df.getDecimalFormatSymbols().getPercentString());
+            assertEquals("\u0661\u0660\u066a\u061c", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            // Confirm that java.text.DecimalFormat strips bidi marker characters.
+            // so the ar percent can fit in a single char.
+            assertEquals('\u066a', df.getDecimalFormatSymbols().getPercent());
+            assertEquals("\u0661\u0660\u066a", df.format(number));
+        }
+    }
+
+    /**
+     * Minus sign should be truncated into one char.
+     */
+    public void testMinusSign() {
+        String pattern = "0;-0";
+        double number = -123;
+        Locale locale;
+
+        // Test US locale behavior: java.text percent char is expected to be '-'.
+        locale = Locale.US;
+        assertEquals("-123", new DecimalFormat(pattern, new DecimalFormatSymbols(locale))
+                .format(number));
+        assertEquals("-123", new android.icu.text.DecimalFormat(pattern,
+                new android.icu.text.DecimalFormatSymbols(locale)).format(number));
+
+        // Confirm ICU and java.text agree. Minus sign is localized
+        locale = new Locale("lt");
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            // Confirm the "correct" minus sign uses a single non-ascii char.
+            // ICU's minus string for ar is known to use single non-ascii char U+2212
+            assertEquals("\u2212", df.getDecimalFormatSymbols().getMinusSignString());
+            assertEquals("\u2212123", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals('\u2212', df.getDecimalFormatSymbols().getMinusSign());
+            assertEquals("\u2212123", df.format(number));
+        }
+
+        // Confirm ICU and java.text disagree because java.text strips out bidi marker
+        locale = new Locale("ar");
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            // Confirm the "correct" minus sign requires more than one char.
+            // ICU's minus string for ar is known to have a bidi marker.
+            assertEquals("\u061c\u002d", df.getDecimalFormatSymbols().getMinusSignString());
+            assertEquals("\u061c\u002d\u0661\u0662\u0663", df.format(number));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals('\u002d', df.getDecimalFormatSymbols().getMinusSign());
+            assertEquals("\u002d\u0661\u0662\u0663", df.format(number));
+        }
+    }
+
+    /**
+     * Plus sign should not be localized. http://b/67034519
+     */
+    public void testPlusSign() {
+        // Test US Locale
+        String pattern = "+0;-0";
+        assertEquals("+123", new DecimalFormat(pattern, new DecimalFormatSymbols(Locale.US))
+                .format(123));
+
+        // Confirm ICU and java.text disagree because java.text doesn't localize plus sign.
+        Locale locale = new Locale("ar");
+        {
+            android.icu.text.DecimalFormat df = new android.icu.text.DecimalFormat(pattern,
+                    new android.icu.text.DecimalFormatSymbols(locale));
+            // Confirm the "correct" plus sign requires more than one char.
+            // ICU's plus string for ar is known to have a bidi marker.
+            assertEquals("\u061c\u002b", df.getDecimalFormatSymbols().getPlusSignString());
+            assertEquals("\u061c\u002b\u0661\u0662\u0663", df.format(123));
+        }
+        for (DecimalFormat df : createDecimalFormatInstances(locale, pattern)) {
+            assertEquals("\u002b\u0661\u0662\u0663", df.format(123));
+        }
+    }
+
+    /**
+     * Returns DecimalFormat instances created in different ways:
+     * <ol>
+     * <li>Using an implicit DecimalFormatSymbols created using the default locale.</li>
+     * <li>Using an explicit DecimalFormatSymbols object.
+     * </ol>
+     * This is to confirm the behavior is currently the same. In future we may choose to improve the
+     * behavior when the caller doesn't provide an explicit DecimalFormatSymbols:
+     * in that case we wouldn't have to pretend that some symbols fit into single char; because the
+     * caller hasn't explicitly specified the symbols they want us to use and we'd be under no
+     * obligation to use the limited char-based public API on DecimalFormatSymbols.
+     */
+    private static DecimalFormat[] createDecimalFormatInstances(Locale locale, String pattern) {
+        Locale originalLocale = Locale.getDefault();
+        Locale.setDefault(locale);
+        DecimalFormat[] instances = new DecimalFormat[] {
+                new DecimalFormat(pattern),
+                new DecimalFormat(pattern, new DecimalFormatSymbols(locale))
+        };
+        Locale.setDefault(originalLocale);
+        return instances;
+    }
 }
diff --git a/luni/src/test/java/libcore/java/util/zip/AbstractZipFileTest.java b/luni/src/test/java/libcore/java/util/zip/AbstractZipFileTest.java
index c4f41f6..3d5440e 100644
--- a/luni/src/test/java/libcore/java/util/zip/AbstractZipFileTest.java
+++ b/luni/src/test/java/libcore/java/util/zip/AbstractZipFileTest.java
@@ -552,4 +552,85 @@
             assertTrue(entryNamesFromFile.contains(entryName));
         }
     }
+
+    // http://b/65491407
+    public void testReadMoreThan8kInOneRead() throws IOException {
+        // Create a zip file with 1mb entry
+        final File f = createTemporaryZipFile();
+        writeEntries(createZipOutputStream(f), 1, 1024 * 1024, true /* setEntrySize */);
+
+        // Create a ~64kb read buffer (-32 bytes for a slack, inflater wont fill it completly)
+        byte[] readBuffer = new byte[1024 * 64 - 32];
+
+        // Read the data to read buffer
+        ZipFile zipFile = new ZipFile(f);
+        InputStream is = zipFile.getInputStream(zipFile.entries().nextElement());
+        int read = is.read(readBuffer, 0, readBuffer.length);
+
+        // Assert that whole buffer been filled. Due to openJdk choice of buffer size, read
+        // never returned more than 8k of data.
+        assertEquals(readBuffer.length, read);
+        is.close();
+        zipFile.close();
+    }
+
+    // http://b/65491407
+    public void testReadWithOffset() throws IOException {
+        // Create a zip file with 1mb entry
+        final File f = createTemporaryZipFile();
+        writeEntries(createZipOutputStream(f), 1, 1024 * 1024, true /* setEntrySize */);
+
+        int bufferSize = 128;
+        byte[] readBuffer = new byte[bufferSize];
+
+        // Read the data to read buffer
+        ZipFile zipFile = new ZipFile(f);
+        InputStream is = zipFile.getInputStream(zipFile.entries().nextElement());
+
+        // Read data (Random bytes sting) to last 32 bit
+        int read = is.read(readBuffer, bufferSize - 32, 32);
+
+        // Check if buffer looks like expected
+        assertEquals(32, read);
+        for (int i = 0; i < bufferSize - 32; i++) {
+          assertEquals(0, readBuffer[i]);
+        }
+
+        is.close();
+        zipFile.close();
+    }
+
+    // http://b/65491407
+    public void testReadWithOffsetInvalid() throws IOException {
+        // Create a zip file with 1mb entry
+        final File f = createTemporaryZipFile();
+        writeEntries(createZipOutputStream(f), 1, 1024 * 1024, true /* setEntrySize */);
+
+        int bufferSize = 128;
+        byte[] readBuffer = new byte[bufferSize];
+
+        // Read the data to read buffer
+        ZipFile zipFile = new ZipFile(f);
+        InputStream is = zipFile.getInputStream(zipFile.entries().nextElement());
+
+        try {
+          is.read(readBuffer, bufferSize - 32, 33);
+          fail();
+        } catch(IndexOutOfBoundsException expect) {}
+        try {
+          is.read(readBuffer, -1, 32);
+          fail();
+        } catch(IndexOutOfBoundsException expect) {}
+        try {
+          is.read(readBuffer, 32, -1);
+          fail();
+        } catch(IndexOutOfBoundsException expect) {}
+        try {
+          is.read(readBuffer, bufferSize, 1);
+          fail();
+        } catch(IndexOutOfBoundsException expect) {}
+
+        is.close();
+        zipFile.close();
+    }
 }
diff --git a/non_openjdk_java_files.bp b/non_openjdk_java_files.bp
new file mode 100644
index 0000000..68c2f26
--- /dev/null
+++ b/non_openjdk_java_files.bp
@@ -0,0 +1,355 @@
+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/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 2cc6c81..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/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/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/ojluni/src/main/java/java/io/File.java b/ojluni/src/main/java/java/io/File.java
index 0d2fbb9..98956ca 100644
--- a/ojluni/src/main/java/java/io/File.java
+++ b/ojluni/src/main/java/java/io/File.java
@@ -37,6 +37,7 @@
 import java.nio.file.FileSystems;
 import sun.security.action.GetPropertyAction;
 
+// Android-added: Info about UTF-8 usage in filenames.
 /**
  * An abstract representation of file and directory pathnames.
  *
@@ -321,9 +322,11 @@
         if (child == null) {
             throw new NullPointerException();
         }
+        // BEGIN Android-changed: b/25859957, app-compat; don't substitute empty parent.
         if (parent != null && !parent.isEmpty()) {
             this.path = fs.resolve(fs.normalize(parent),
                                    fs.normalize(child));
+        // END Android-changed: b/25859957, app-compat; don't substitute empty parent.
         } else {
             this.path = fs.normalize(child);
         }
@@ -515,6 +518,7 @@
 
     /* -- Path operations -- */
 
+    // Android-changed: Android-specific path information
     /**
      * Tests whether this abstract pathname is absolute.  The definition of
      * absolute pathname is system dependent.  On Android, absolute paths start with
@@ -527,6 +531,7 @@
         return fs.isAbsolute(this);
     }
 
+    // Android-changed: Android-specific path information
     /**
      * Returns the absolute path of this file. An absolute path is a path that starts at a root
      * of the file system. On Android, there is only one root: {@code /}.
@@ -671,6 +676,8 @@
         if (isInvalid()) {
             throw new MalformedURLException("Invalid file path");
         }
+        // Android-changed: Fix for new File("").toURL().
+        // return new URL("file", "", slashify(getAbsolutePath(), isDirectory()));
         return new URL("file", "", slashify(getAbsolutePath(),
                 getAbsoluteFile().isDirectory()));
     }
@@ -804,6 +811,7 @@
             return false;
         }
 
+        // Android-changed: b/25878034 work around SELinux stat64 denial.
         return fs.checkAccess(this, FileSystem.ACCESS_OK);
     }
 
@@ -1029,6 +1037,7 @@
         return fs.delete(this);
     }
 
+    // Android-added: Additional information about Android behaviour.
     /**
      * Requests that the file or directory denoted by this abstract
      * pathname be deleted when the virtual machine terminates.
@@ -1355,6 +1364,7 @@
                 canonFile.mkdir());
     }
 
+    // Android-changed: Replaced generic platform info with Android specific one.
     /**
      * Renames the file denoted by this abstract pathname.
      *
@@ -1441,7 +1451,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * Marks the file or directory named by this abstract pathname so that
      * only read operations are allowed. After invoking this method the file
@@ -1471,7 +1481,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * Sets the owner's or everybody's write permission for this abstract
      * pathname.
@@ -1514,7 +1524,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * A convenience method to set the owner's write permission for this abstract
      * pathname.
@@ -1545,7 +1555,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * Sets the owner's or everybody's read permission for this abstract
      * pathname.
@@ -1591,7 +1601,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * A convenience method to set the owner's read permission for this abstract
      * pathname.
@@ -1625,7 +1635,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * Sets the owner's or everybody's execute permission for this abstract
      * pathname.
@@ -1671,7 +1681,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * A convenience method to set the owner's execute permission for this
      * abstract pathname.
@@ -1705,7 +1715,7 @@
     }
 
     // Android-changed. Removed javadoc comment about special privileges
-    // that doesn't make sense on android
+    // that doesn't make sense on Android.
     /**
      * Tests whether the application can execute the file denoted by this
      * abstract pathname.
@@ -1734,7 +1744,7 @@
 
     /* -- Filesystem interface -- */
 
-
+    // Android-changed: Replaced generic platform info with Android specific one.
     /**
      * Returns the file system roots. On Android and other Unix systems, there is
      * a single root, {@code /}.
@@ -1811,6 +1821,7 @@
         return fs.getSpace(this, FileSystem.SPACE_FREE);
     }
 
+    // Android-added: Replaced generic platform info with Android specific one.
     /**
      * Returns the number of bytes available to this virtual machine on the
      * partition <a href="#partName">named</a> by this abstract pathname.  When
@@ -1858,18 +1869,22 @@
     }
 
     /* -- Temporary files -- */
+
     private static class TempDirectory {
         private TempDirectory() { }
 
         // Android-changed: Don't cache java.io.tmpdir value
-        // temporary directory location
-        // private static final File tmpdir = new File(AccessController
-        //     .doPrivileged(new GetPropertyAction("java.io.tmpdir")));
-        // static File location() {
-        //     return tmpdir;
-        // }
+        // temporary directory location.
+        /*
+        private static final File tmpdir = new File(AccessController
+           .doPrivileged(new GetPropertyAction("java.io.tmpdir")));
+        static File location() {
+            return tmpdir;
+        }
+        */
 
         // file name generation
+        // private static final SecureRandom random = new SecureRandom();
         static File generateFile(String prefix, String suffix, File dir)
             throws IOException
         {
@@ -1885,7 +1900,7 @@
 
             // Android-changed: Reject invalid file prefixes
             // Use only the file name from the supplied prefix
-            //prefix = (new File(prefix)).getName();
+            // prefix = (new File(prefix)).getName();
 
             String name = prefix + Long.toString(n) + suffix;
             File f = new File(dir, name);
@@ -1977,7 +1992,7 @@
         if (suffix == null)
             suffix = ".tmp";
 
-
+        // Android-changed: Handle java.io.tmpdir changes.
         File tmpdir = (directory != null) ? directory
                                           : new File(System.getProperty("java.io.tmpdir", "."));
         //SecurityManager sm = System.getSecurityManager();
@@ -1985,17 +2000,19 @@
         do {
             f = TempDirectory.generateFile(prefix, suffix, tmpdir);
 
-            // Android change: sm is always null on android
-            // if (sm != null) {
-            //     try {
-            //         sm.checkWrite(f.getPath());
-            //     } catch (SecurityException se) {
-            //         // don't reveal temporary directory location
-            //         if (directory == null)
-            //             throw new SecurityException("Unable to create temporary file");
-            //         throw se;
-            //     }
-            // }
+            // Android-changed: sm is always null on Android.
+            /*
+            if (sm != null) {
+                try {
+                    sm.checkWrite(f.getPath());
+                } catch (SecurityException se) {
+                    // don't reveal temporary directory location
+                    if (directory == null)
+                        throw new SecurityException("Unable to create temporary file");
+                    throw se;
+                }
+            }
+            */
         } while ((fs.getBooleanAttributes(f) & FileSystem.BA_EXISTS) != 0);
 
         if (!fs.createFileExclusively(f.getPath()))
diff --git a/ojluni/src/main/java/java/lang/String.java b/ojluni/src/main/java/java/lang/String.java
index eb24712..4cefed8 100644
--- a/ojluni/src/main/java/java/lang/String.java
+++ b/ojluni/src/main/java/java/lang/String.java
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2014 The Android Open Source Project
- * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2013, 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
@@ -23,27 +23,23 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 package java.lang;
 
 import dalvik.annotation.optimization.FastNative;
 import java.io.ObjectStreamField;
 import java.io.UnsupportedEncodingException;
-import java.lang.ArrayIndexOutOfBoundsException;
 import java.nio.charset.Charset;
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Formatter;
 import java.util.Locale;
 import java.util.Objects;
 import java.util.StringJoiner;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
 import libcore.util.CharsetUtils;
-import libcore.util.EmptyArray;
 
 /**
  * The {@code String} class represents character strings. All
@@ -117,11 +113,26 @@
 public final class String
     implements java.io.Serializable, Comparable<String>, CharSequence {
 
-    // The associated character storage is managed by the runtime. We only
-    // keep track of the length here.
+    // BEGIN Android-changed: The character data is managed by the runtime.
+    // We only keep track of the length here and compression here. This has several consequences
+    // throughout this class:
+    //  - References to value[i] are replaced by charAt(i).
+    //  - References to value.length are replaced by calls to length().
+    //  - Sometimes the result of length() is assigned to a local variable to avoid repeated calls.
+    //  - We skip several attempts at optimization where the values field was assigned to a local
+    //    variable to avoid the getfield opcode.
+    // These changes are not all marked individually.
     //
     // private final char value[];
+    //
+    // If STRING_COMPRESSION_ENABLED, count stores the length shifted one bit to the left with the
+    // lowest bit used to indicate whether or not the bytes are compressed (see GetFlaggedCount in
+    // the native code).
     private final int count;
+    // END Android-changed: The character data is managed by the runtime.
+
+    // Android-changed: We make use of new StringIndexOutOfBoundsException constructor signatures.
+    // These improve some error messages. These changes are not all marked individually.
 
     /** Cache the hash code for the string */
     private int hash; // Default to 0
@@ -145,6 +156,7 @@
      * unnecessary since Strings are immutable.
      */
     public String() {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -159,6 +171,7 @@
      *         A {@code String}
      */
     public String(String original) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -172,6 +185,7 @@
      *         The initial value of the string
      */
     public String(char value[]) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -197,6 +211,7 @@
      *          characters outside the bounds of the {@code value} array
      */
     public String(char value[], int offset, int count) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -229,6 +244,7 @@
      * @since  1.5
      */
     public String(int[] codePoints, int offset, int count) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -273,6 +289,7 @@
      */
     @Deprecated
     public String(byte ascii[], int hibyte, int offset, int count) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -308,6 +325,7 @@
      */
     @Deprecated
     public String(byte ascii[], int hibyte) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -346,6 +364,7 @@
      */
     public String(byte bytes[], int offset, int length, String charsetName)
             throws UnsupportedEncodingException {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -380,6 +399,7 @@
      * @since  1.6
      */
     public String(byte bytes[], int offset, int length, Charset charset) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -408,6 +428,7 @@
      */
     public String(byte bytes[], String charsetName)
             throws UnsupportedEncodingException {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -432,6 +453,7 @@
      * @since  1.6
      */
     public String(byte bytes[], Charset charset) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -462,6 +484,7 @@
      * @since  JDK1.1
      */
     public String(byte bytes[], int offset, int length) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -482,6 +505,7 @@
      * @since  JDK1.1
      */
     public String(byte bytes[]) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -495,6 +519,7 @@
      *         A {@code StringBuffer}
      */
     public String(StringBuffer buffer) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
@@ -514,10 +539,12 @@
      * @since  1.5
      */
     public String(StringBuilder builder) {
+        // Android-changed: Constructor unsupported as all calls are intercepted by the runtime.
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
 
 
+    // BEGIN Android-changed: Deprecated & unsupported as all calls are intercepted by the runtime.
     /**
      * Package private constructor
      *
@@ -527,6 +554,7 @@
     String(int offset, int count, char[] value) {
         throw new UnsupportedOperationException("Use StringFactory instead.");
     }
+    // END Android-changed: Deprecated & unsupported as all calls are intercepted by the runtime.
 
     /**
      * Returns the length of this string.
@@ -537,6 +565,8 @@
      *          object.
      */
     public int length() {
+        // BEGIN Android-changed: Get length from count field rather than value array (see above).
+        // return value.length;
         final boolean STRING_COMPRESSION_ENABLED = true;
         if (STRING_COMPRESSION_ENABLED) {
             // For the compression purposes (save the characters as 8-bit if all characters
@@ -545,6 +575,7 @@
         } else {
             return count;
         }
+        // END Android-changed: Get length from count field rather than value array (see above).
     }
 
     /**
@@ -556,7 +587,9 @@
      * @since 1.6
      */
     public boolean isEmpty() {
+        // Android-changed: Get length from count field rather than value array (see above).
         // Empty string has {@code count == 0} with or without string compression enabled.
+        // return value.length == 0;
         return count == 0;
     }
 
@@ -578,8 +611,10 @@
      *             argument is negative or not less than the length of this
      *             string.
      */
+    // BEGIN Android-changed: Replace with implementation in runtime to access chars (see above).
     @FastNative
     public native char charAt(int index);
+    // END Android-changed: Replace with implementation in runtime to access chars (see above).
 
     /**
      * Returns the character (Unicode code point) at the specified
@@ -593,7 +628,7 @@
      * {@code char} value at the following index is in the
      * low-surrogate range, then the supplementary code point
      * corresponding to this surrogate pair is returned. Otherwise,
-     * the {@code char} value at the given index is returned
+     * the {@code char} value at the given index is returned.
      *
      * @param      index the index to the {@code char} values
      * @return     the code point value of the character at the
@@ -607,6 +642,7 @@
         if ((index < 0) || (index >= length())) {
             throw new StringIndexOutOfBoundsException(index);
         }
+        // Android-changed: Skip codePointAtImpl optimization that needs access to java chars.
         return Character.codePointAt(this, index);
     }
 
@@ -637,6 +673,7 @@
         if ((i < 0) || (i >= length())) {
             throw new StringIndexOutOfBoundsException(index);
         }
+        // Android-changed: Skip codePointBeforeImpl optimization that needs access to java chars.
         return Character.codePointBefore(this, index);
     }
 
@@ -665,6 +702,7 @@
         if (beginIndex < 0 || endIndex > length() || beginIndex > endIndex) {
             throw new IndexOutOfBoundsException();
         }
+        // Android-changed: Skip codePointCountImpl optimization that needs access to java chars.
         return Character.codePointCount(this, beginIndex, endIndex);
     }
 
@@ -692,6 +730,7 @@
         if (index < 0 || index > length()) {
             throw new IndexOutOfBoundsException();
         }
+        // Android-changed: Skip offsetByCodePointsImpl optimization that needs access to java chars
         return Character.offsetByCodePoints(this, index, codePointOffset);
     }
 
@@ -700,6 +739,7 @@
      * This method doesn't perform any range checking.
      */
     void getChars(char dst[], int dstBegin) {
+        // Android-changed: Replace arraycopy with native call since chars are managed by runtime.
         getCharsNoCheck(0, length(), dst, dstBegin);
     }
 
@@ -734,6 +774,7 @@
      *                {@code dst.length}</ul>
      */
     public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
+        // BEGIN Android-changed: Implement in terms of length() and native getCharsNoCheck method.
         if (dst == null) {
             throw new NullPointerException("dst == null");
         }
@@ -766,8 +807,10 @@
         }
 
         getCharsNoCheck(srcBegin, srcEnd, dst, dstBegin);
+        // END Android-changed: Implement in terms of length() and native getCharsNoCheck method.
     }
 
+    // BEGIN Android-added: Native method to access char storage managed by runtime.
     /**
      * getChars without bounds checks, for use by other classes
      * within the java.lang package only.  The caller is responsible for
@@ -775,7 +818,7 @@
      */
     @FastNative
     native void getCharsNoCheck(int start, int end, char[] buffer, int index);
-
+    // END Android-added: Native method to access char storage managed by runtime.
 
     /**
      * Copies characters from this string into the destination byte array. Each
@@ -829,7 +872,7 @@
             throw new StringIndexOutOfBoundsException(this, srcEnd);
         }
         if (srcBegin > srcEnd) {
-            throw new StringIndexOutOfBoundsException(this, (srcEnd - srcBegin));
+            throw new StringIndexOutOfBoundsException(this, srcEnd - srcBegin);
         }
 
         int j = dstBegin;
@@ -864,6 +907,8 @@
     public byte[] getBytes(String charsetName)
             throws UnsupportedEncodingException {
         if (charsetName == null) throw new NullPointerException();
+        // Android-changed: Skip StringCoding optimization that needs access to java chars.
+        // return StringCoding.encode(charsetName, value, 0, value.length);
         return getBytes(Charset.forNameUEE(charsetName));
     }
 
@@ -886,6 +931,9 @@
      * @since  1.6
      */
     public byte[] getBytes(Charset charset) {
+        // BEGIN Android-changed: Skip StringCoding optimization that needs access to java chars.
+        // if (charset == null) throw new NullPointerException();
+        // return StringCoding.encode(charset, value, 0, value.length);
         if (charset == null) {
             throw new NullPointerException("charset == null");
         }
@@ -906,6 +954,7 @@
         byte[] bytes = new byte[buffer.limit()];
         buffer.get(bytes);
         return bytes;
+        // END Android-changed: Skip StringCoding optimization that needs access to java chars.
     }
 
     /**
@@ -922,6 +971,8 @@
      * @since      JDK1.1
      */
     public byte[] getBytes() {
+        // Android-changed: Skip StringCoding optimization that needs access to java chars.
+        // return StringCoding.encode(value, 0, value.length);
         return getBytes(Charset.defaultCharset());
     }
 
@@ -945,7 +996,7 @@
             return true;
         }
         if (anObject instanceof String) {
-            String anotherString = (String) anObject;
+            String anotherString = (String)anObject;
             int n = length();
             if (n == anotherString.length()) {
                 int i = 0;
@@ -1114,8 +1165,10 @@
      *          value greater than {@code 0} if this string is
      *          lexicographically greater than the string argument.
      */
+    // BEGIN Android-changed: Replace with implementation in runtime to access chars (see above).
     @FastNative
     public native int compareTo(String anotherString);
+    // END Android-changed: Replace with implementation in runtime to access chars (see above).
 
     /**
      * A Comparator that orders {@code String} objects as by
@@ -1506,8 +1559,11 @@
         }
     }
 
+    // BEGIN Android-added: Native method to access char storage managed by runtime.
+    // TODO(b/67411061): This seems to be unused, see whether we can remove it.
     @FastNative
     private native int fastIndexOf(int c, int start);
+    // END Android-added: Native method to access char storage managed by runtime.
 
     /**
      * Handles (rare) calls of indexOf with a supplementary character.
@@ -1655,6 +1711,7 @@
      *          or {@code -1} if there is no such occurrence.
      */
     public int indexOf(String str, int fromIndex) {
+        // Android-changed: Change parameters to static indexOf to match new signature below.
         return indexOf(this, str, fromIndex);
     }
 
@@ -1667,6 +1724,8 @@
      * @param   target       the characters being searched for.
      * @param   fromIndex    the index to begin searching from.
      */
+    // BEGIN Android-changed: Change signature to take String object rather than char arrays.
+    // The implementation using a java char array is replaced with one using length() & charAt().
     static int indexOf(String source,
                        String target,
                        int fromIndex) {
@@ -1706,6 +1765,7 @@
         }
         return -1;
     }
+    // END Android-changed: Change signature to take String object rather than char arrays.
 
     /**
      * Code shared by String and StringBuffer to do searches. The
@@ -1794,6 +1854,7 @@
      *          or {@code -1} if there is no such occurrence.
      */
     public int lastIndexOf(String str, int fromIndex) {
+        // Android-changed: Change parameters to static lastIndexOf to match new signature below.
         return lastIndexOf(this, str, fromIndex);
     }
 
@@ -1806,6 +1867,8 @@
      * @param   target       the characters being searched for.
      * @param   fromIndex    the index to begin searching from.
      */
+    // BEGIN Android-changed: Change signature to take String object rather than char arrays.
+    // The implementation using a java char array is replaced with one using length() & charAt().
     static int lastIndexOf(String source,
                            String target,
                            int fromIndex) {
@@ -1853,6 +1916,7 @@
             return start + 1;
         }
     }
+    // END Android-changed: Change signature to take String object rather than char arrays.
 
     /**
      * Code shared by String and StringBuffer to do searches. The
@@ -1938,6 +2002,7 @@
         if (subLen < 0) {
             throw new StringIndexOutOfBoundsException(this, beginIndex);
         }
+        // Android-changed: Use native fastSubstring instead of String constructor.
         return (beginIndex == 0) ? this : fastSubstring(beginIndex, subLen);
     }
 
@@ -1975,12 +2040,15 @@
             throw new StringIndexOutOfBoundsException(subLen);
         }
 
+        // Android-changed: Use native fastSubstring instead of String constructor.
         return ((beginIndex == 0) && (endIndex == length())) ? this
                 : fastSubstring(beginIndex, subLen);
     }
 
+    // BEGIN Android-added: Native method to access char storage managed by runtime.
     @FastNative
     private native String fastSubstring(int start, int length);
+    // END Android-added: Native method to access char storage managed by runtime.
 
     /**
      * Returns a character sequence that is a subsequence of this sequence.
@@ -2035,8 +2103,10 @@
      * @return  a string that represents the concatenation of this object's
      *          characters followed by the string argument's characters.
      */
+    // BEGIN Android-changed: Replace with implementation in runtime to access chars (see above).
     @FastNative
     public native String concat(String str);
+    // END Android-changed: Replace with implementation in runtime to access chars (see above).
 
     /**
      * Returns a string resulting from replacing all occurrences of
@@ -2068,6 +2138,7 @@
      *          occurrence of {@code oldChar} with {@code newChar}.
      */
     public String replace(char oldChar, char newChar) {
+        // BEGIN Android-changed: Replace with implementation using native doReplace method.
         if (oldChar != newChar) {
             final int len = length();
             for (int i = 0; i < len; ++i) {
@@ -2076,12 +2147,15 @@
                 }
             }
         }
+        // END Android-changed: Replace with implementation using native doReplace method.
         return this;
     }
 
+    // BEGIN Android-added: Native method to access char storage managed by runtime.
     // Implementation of replace(char oldChar, char newChar) called when we found a match.
     @FastNative
     private native String doReplace(char oldChar, char newChar);
+    // END Android-added: Native method to access char storage managed by runtime.
 
     /**
      * Tells whether or not this string matches the given <a
@@ -2226,11 +2300,10 @@
      * @param  target The sequence of char values to be replaced
      * @param  replacement The replacement sequence of char values
      * @return  The resulting string
-     * @throws NullPointerException if <code>target</code> or
-     *         <code>replacement</code> is <code>null</code>.
      * @since 1.5
      */
     public String replace(CharSequence target, CharSequence replacement) {
+        // BEGIN Android-changed: Replace regex-based implementation with a bespoke one.
         if (target == null) {
             throw new NullPointerException("target == null");
         }
@@ -2286,6 +2359,7 @@
         } else {
             return this;
         }
+        // END Android-changed: Replace regex-based implementation with a bespoke one.
     }
 
     /**
@@ -2375,12 +2449,13 @@
      * @spec JSR-51
      */
     public String[] split(String regex, int limit) {
+        // BEGIN Android-changed: Replace custom fast-path with use of new Pattern.fastSplit method.
         // Try fast splitting without allocating Pattern object
         String[] fast = Pattern.fastSplit(regex, this, limit);
         if (fast != null) {
             return fast;
         }
-
+        // END Android-changed: Replace custom fast-path with use of new Pattern.fastSplit method.
         return Pattern.compile(regex).split(this, limit);
     }
 
@@ -2563,6 +2638,7 @@
      * @since   1.1
      */
     public String toLowerCase(Locale locale) {
+        // Android-changed: Replace custom code with call to new CaseMapper class.
         return CaseMapper.toLowerCase(locale, this);
     }
 
@@ -2638,6 +2714,7 @@
      * @since   1.1
      */
     public String toUpperCase(Locale locale) {
+        // Android-changed: Replace custom code with call to new CaseMapper class.
         return CaseMapper.toUpperCase(locale, this, length());
     }
 
@@ -2724,8 +2801,10 @@
      *          of this string and whose contents are initialized to contain
      *          the character sequence represented by this string.
      */
+    // BEGIN Android-changed: Replace with implementation in runtime to access chars (see above).
     @FastNative
     public native char[] toCharArray();
+    // END Android-changed: Replace with implementation in runtime to access chars (see above).
 
 
     /**
@@ -2758,9 +2837,6 @@
      *          href="../util/Formatter.html#detail">Details</a> section of the
      *          formatter class specification.
      *
-     * @throws  NullPointerException
-     *          If the <tt>format</tt> is <tt>null</tt>
-     *
      * @return  A formatted string
      *
      * @see  java.util.Formatter
@@ -2802,9 +2878,6 @@
      *          href="../util/Formatter.html#detail">Details</a> section of the
      *          formatter class specification
      *
-     * @throws  NullPointerException
-     *          If the <tt>format</tt> is <tt>null</tt>
-     *
      * @return  A formatted string
      *
      * @see  java.util.Formatter
@@ -2838,6 +2911,8 @@
      *          character array.
      */
     public static String valueOf(char data[]) {
+        // Android-changed: Replace constructor call with call to new StringFactory class.
+        // return new String(data);
         return StringFactory.newStringFromChars(data);
     }
 
@@ -2862,6 +2937,8 @@
      *          {@code data.length}.
      */
     public static String valueOf(char data[], int offset, int count) {
+        // Android-changed: Replace constructor call with call to new StringFactory class.
+        // return new String(data, offset, count);
         return StringFactory.newStringFromChars(data, offset, count);
     }
 
@@ -2879,7 +2956,9 @@
      *          {@code data.length}.
      */
     public static String copyValueOf(char data[], int offset, int count) {
+        // Android-changed: Replace constructor call with call to new StringFactory class.
         // All public String constructors now copy the data.
+        // return new String(data, offset, count);
         return StringFactory.newStringFromChars(data, offset, count);
     }
 
@@ -2891,6 +2970,8 @@
      *          character array.
      */
     public static String copyValueOf(char data[]) {
+        // Android-changed: Replace constructor call with call to new StringFactory class.
+        // return new String(data);
         return StringFactory.newStringFromChars(data);
     }
 
@@ -2915,6 +2996,9 @@
      *          as its single character the argument {@code c}.
      */
     public static String valueOf(char c) {
+        // Android-changed: Replace constructor call with call to new StringFactory class.
+        // char data[] = {c};
+        // return new String(data, true);
         return StringFactory.newStringFromChars(0, 1, new char[] { c });
     }
 
@@ -2997,6 +3081,8 @@
      * @return  a string that has the same contents as this string, but is
      *          guaranteed to be from a pool of unique strings.
      */
+    // BEGIN Android-changed: Annotate native method as @FastNative.
     @FastNative
+    // END Android-changed: Annotate native method as @FastNative.
     public native String intern();
 }
diff --git a/ojluni/src/main/java/java/lang/StringCoding.java b/ojluni/src/main/java/java/lang/StringCoding.java
deleted file mode 100644
index 54abaed..0000000
--- a/ojluni/src/main/java/java/lang/StringCoding.java
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- * Copyright (c) 2000, 2012, 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;
-
-import java.io.UnsupportedEncodingException;
-import java.lang.ref.SoftReference;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.CoderResult;
-import java.nio.charset.CodingErrorAction;
-import java.nio.charset.IllegalCharsetNameException;
-import java.nio.charset.UnsupportedCharsetException;
-import java.util.Arrays;
-import sun.misc.MessageUtils;
-import sun.nio.cs.HistoricallyNamedCharset;
-import sun.nio.cs.ArrayDecoder;
-import sun.nio.cs.ArrayEncoder;
-
-/**
- * Utility class for string encoding and decoding.
- */
-
-class StringCoding {
-
-    private StringCoding() { }
-
-    /** The cached coders for each thread */
-    private final static ThreadLocal<SoftReference<StringDecoder>> decoder =
-        new ThreadLocal<>();
-    private final static ThreadLocal<SoftReference<StringEncoder>> encoder =
-        new ThreadLocal<>();
-
-    private static boolean warnUnsupportedCharset = true;
-
-    private static <T> T deref(ThreadLocal<SoftReference<T>> tl) {
-        SoftReference<T> sr = tl.get();
-        if (sr == null)
-            return null;
-        return sr.get();
-    }
-
-    private static <T> void set(ThreadLocal<SoftReference<T>> tl, T ob) {
-        tl.set(new SoftReference<T>(ob));
-    }
-
-    // Trim the given byte array to the given length
-    //
-    private static byte[] safeTrim(byte[] ba, int len, Charset cs, boolean isTrusted) {
-
-        // Android-changed: System.getSecurityManager() == null is always true on Android.
-        // Libcore tests expect a defensive copy in pretty much all cases.
-        // if (len == ba.length && (isTrusted || System.getSecurityManager() == null))
-        if (len == ba.length && (isTrusted))
-            return ba;
-        else
-            return Arrays.copyOf(ba, len);
-    }
-
-    // Trim the given char array to the given length
-    //
-    private static char[] safeTrim(char[] ca, int len,
-                                   Charset cs, boolean isTrusted) {
-        // Android-changed: System.getSecurityManager() == null is always true on Android.
-        // Libcore tests expect a defensive copy in pretty much all cases.
-        // if (len == ca.length && (isTrusted || System.getSecurityManager() == null))
-        if (len == ca.length && (isTrusted))
-            return ca;
-        else
-            return Arrays.copyOf(ca, len);
-    }
-
-    private static int scale(int len, float expansionFactor) {
-        // We need to perform double, not float, arithmetic; otherwise
-        // we lose low order bits when len is larger than 2**24.
-        return (int)(len * (double)expansionFactor);
-    }
-
-    private static Charset lookupCharset(String csn) {
-        if (Charset.isSupported(csn)) {
-            try {
-                return Charset.forName(csn);
-            } catch (UnsupportedCharsetException x) {
-                throw new Error(x);
-            }
-        }
-        return null;
-    }
-
-    private static void warnUnsupportedCharset(String csn) {
-        if (warnUnsupportedCharset) {
-            // Use sun.misc.MessageUtils rather than the Logging API or
-            // System.err since this method may be called during VM
-            // initialization before either is available.
-            MessageUtils.err("WARNING: Default charset " + csn +
-                             " not supported, using ISO-8859-1 instead");
-            warnUnsupportedCharset = false;
-        }
-    }
-
-
-    // -- Decoding --
-    private static class StringDecoder {
-        private final String requestedCharsetName;
-        private final Charset cs;
-        private final CharsetDecoder cd;
-        private final boolean isTrusted;
-
-        private StringDecoder(Charset cs, String rcn) {
-            this.requestedCharsetName = rcn;
-            this.cs = cs;
-            this.cd = cs.newDecoder()
-                .onMalformedInput(CodingErrorAction.REPLACE)
-                .onUnmappableCharacter(CodingErrorAction.REPLACE);
-            this.isTrusted = (cs.getClass().getClassLoader() == null);
-        }
-
-        String charsetName() {
-            if (cs instanceof HistoricallyNamedCharset)
-                return ((HistoricallyNamedCharset)cs).historicalName();
-            return cs.name();
-        }
-
-        final String requestedCharsetName() {
-            return requestedCharsetName;
-        }
-
-        char[] decode(byte[] ba, int off, int len) {
-            int en = scale(len, cd.maxCharsPerByte());
-            char[] ca = new char[en];
-            if (len == 0)
-                return ca;
-            if (cd instanceof ArrayDecoder) {
-                int clen = ((ArrayDecoder)cd).decode(ba, off, len, ca);
-                return safeTrim(ca, clen, cs, isTrusted);
-            } else {
-                cd.reset();
-                ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
-                CharBuffer cb = CharBuffer.wrap(ca);
-                try {
-                    CoderResult cr = cd.decode(bb, cb, true);
-                    if (!cr.isUnderflow())
-                        cr.throwException();
-                    cr = cd.flush(cb);
-                    if (!cr.isUnderflow())
-                        cr.throwException();
-                } catch (CharacterCodingException x) {
-                    // Substitution is always enabled,
-                    // so this shouldn't happen
-                    throw new Error(x);
-                }
-                return safeTrim(ca, cb.position(), cs, isTrusted);
-            }
-        }
-    }
-
-    static char[] decode(String charsetName, byte[] ba, int off, int len)
-        throws UnsupportedEncodingException
-    {
-        StringDecoder sd = deref(decoder);
-        String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;
-        if ((sd == null) || !(csn.equals(sd.requestedCharsetName())
-                              || csn.equals(sd.charsetName()))) {
-            sd = null;
-            try {
-                Charset cs = lookupCharset(csn);
-                if (cs != null)
-                    sd = new StringDecoder(cs, csn);
-            } catch (IllegalCharsetNameException x) {}
-            if (sd == null)
-                throw new UnsupportedEncodingException(csn);
-            set(decoder, sd);
-        }
-        return sd.decode(ba, off, len);
-    }
-
-    static char[] decode(Charset cs, byte[] ba, int off, int len) {
-        // (1)We never cache the "external" cs, the only benefit of creating
-        // an additional StringDe/Encoder object to wrap it is to share the
-        // de/encode() method. These SD/E objects are short-lifed, the young-gen
-        // gc should be able to take care of them well. But the best approash
-        // is still not to generate them if not really necessary.
-        // (2)The defensive copy of the input byte/char[] has a big performance
-        // impact, as well as the outgoing result byte/char[]. Need to do the
-        // optimization check of (sm==null && classLoader0==null) for both.
-        // (3)getClass().getClassLoader0() is expensive
-        // (4)There might be a timing gap in isTrusted setting. getClassLoader0()
-        // is only chcked (and then isTrusted gets set) when (SM==null). It is
-        // possible that the SM==null for now but then SM is NOT null later
-        // when safeTrim() is invoked...the "safe" way to do is to redundant
-        // check (... && (isTrusted || SM == null || getClassLoader0())) in trim
-        // but it then can be argued that the SM is null when the opertaion
-        // is started...
-        CharsetDecoder cd = cs.newDecoder();
-        int en = scale(len, cd.maxCharsPerByte());
-        char[] ca = new char[en];
-        if (len == 0)
-            return ca;
-        boolean isTrusted = false;
-        if (System.getSecurityManager() != null) {
-            if (!(isTrusted = (cs.getClass().getClassLoader() == null))) {
-                ba =  Arrays.copyOfRange(ba, off, off + len);
-                off = 0;
-            }
-        }
-        cd.onMalformedInput(CodingErrorAction.REPLACE)
-          .onUnmappableCharacter(CodingErrorAction.REPLACE)
-          .reset();
-        if (cd instanceof ArrayDecoder) {
-            int clen = ((ArrayDecoder)cd).decode(ba, off, len, ca);
-            return safeTrim(ca, clen, cs, isTrusted);
-        } else {
-            ByteBuffer bb = ByteBuffer.wrap(ba, off, len);
-            CharBuffer cb = CharBuffer.wrap(ca);
-            try {
-                CoderResult cr = cd.decode(bb, cb, true);
-                if (!cr.isUnderflow())
-                    cr.throwException();
-                cr = cd.flush(cb);
-                if (!cr.isUnderflow())
-                    cr.throwException();
-            } catch (CharacterCodingException x) {
-                // Substitution is always enabled,
-                // so this shouldn't happen
-                throw new Error(x);
-            }
-            return safeTrim(ca, cb.position(), cs, isTrusted);
-        }
-    }
-
-    static char[] decode(byte[] ba, int off, int len) {
-        String csn = Charset.defaultCharset().name();
-        try {
-            // use charset name decode() variant which provides caching.
-            return decode(csn, ba, off, len);
-        } catch (UnsupportedEncodingException x) {
-            warnUnsupportedCharset(csn);
-        }
-        try {
-            return decode("ISO-8859-1", ba, off, len);
-        } catch (UnsupportedEncodingException x) {
-            // If this code is hit during VM initialization, MessageUtils is
-            // the only way we will be able to get any kind of error message.
-            MessageUtils.err("ISO-8859-1 charset not available: "
-                             + x.toString());
-            // If we can not find ISO-8859-1 (a required encoding) then things
-            // are seriously wrong with the installation.
-            System.exit(1);
-            return null;
-        }
-    }
-
-    // -- Encoding --
-    private static class StringEncoder {
-        private Charset cs;
-        private CharsetEncoder ce;
-        private final String requestedCharsetName;
-        private final boolean isTrusted;
-
-        private StringEncoder(Charset cs, String rcn) {
-            this.requestedCharsetName = rcn;
-            this.cs = cs;
-            this.ce = cs.newEncoder()
-                .onMalformedInput(CodingErrorAction.REPLACE)
-                .onUnmappableCharacter(CodingErrorAction.REPLACE);
-            this.isTrusted = (cs.getClass().getClassLoader() == null);
-        }
-
-        String charsetName() {
-            if (cs instanceof HistoricallyNamedCharset)
-                return ((HistoricallyNamedCharset)cs).historicalName();
-            return cs.name();
-        }
-
-        final String requestedCharsetName() {
-            return requestedCharsetName;
-        }
-
-        byte[] encode(char[] ca, int off, int len) {
-            int en = scale(len, ce.maxBytesPerChar());
-            byte[] ba = new byte[en];
-            if (len == 0)
-                return ba;
-            if (ce instanceof ArrayEncoder) {
-                int blen = ((ArrayEncoder)ce).encode(ca, off, len, ba);
-                return safeTrim(ba, blen, cs, isTrusted);
-            } else {
-                ce.reset();
-                ByteBuffer bb = ByteBuffer.wrap(ba);
-                CharBuffer cb = CharBuffer.wrap(ca, off, len);
-                try {
-                    // Android-changed:  Pass read-only buffer, so the encoder can't alter it
-                    CoderResult cr = ce.encode(cb.asReadOnlyBuffer(), bb, true);
-                    if (!cr.isUnderflow())
-                        cr.throwException();
-                    cr = ce.flush(bb);
-                    if (!cr.isUnderflow())
-                        cr.throwException();
-                } catch (CharacterCodingException x) {
-                    // Substitution is always enabled,
-                    // so this shouldn't happen
-                    throw new Error(x);
-                }
-                return safeTrim(ba, bb.position(), cs, isTrusted);
-            }
-        }
-    }
-
-    static byte[] encode(String charsetName, char[] ca, int off, int len)
-        throws UnsupportedEncodingException
-    {
-        StringEncoder se = deref(encoder);
-        String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;
-        if ((se == null) || !(csn.equals(se.requestedCharsetName())
-                              || csn.equals(se.charsetName()))) {
-            se = null;
-            try {
-                Charset cs = lookupCharset(csn);
-                if (cs != null)
-                    se = new StringEncoder(cs, csn);
-            } catch (IllegalCharsetNameException x) {}
-            if (se == null)
-                throw new UnsupportedEncodingException (csn);
-            set(encoder, se);
-        }
-        return se.encode(ca, off, len);
-    }
-
-    static byte[] encode(Charset cs, char[] ca, int off, int len) {
-        CharsetEncoder ce = cs.newEncoder();
-        int en = scale(len, ce.maxBytesPerChar());
-        byte[] ba = new byte[en];
-        if (len == 0)
-            return ba;
-        boolean isTrusted = false;
-        if (System.getSecurityManager() != null) {
-            if (!(isTrusted = (cs.getClass().getClassLoader() == null))) {
-                ca =  Arrays.copyOfRange(ca, off, off + len);
-                off = 0;
-            }
-        }
-        ce.onMalformedInput(CodingErrorAction.REPLACE)
-          .onUnmappableCharacter(CodingErrorAction.REPLACE)
-          .reset();
-        if (ce instanceof ArrayEncoder) {
-            int blen = ((ArrayEncoder)ce).encode(ca, off, len, ba);
-            return safeTrim(ba, blen, cs, isTrusted);
-        } else {
-            ByteBuffer bb = ByteBuffer.wrap(ba);
-            CharBuffer cb = CharBuffer.wrap(ca, off, len);
-            try {
-                // Android-changed:  Pass read-only buffer, so the encoder can't alter it
-                CoderResult cr = ce.encode(cb.asReadOnlyBuffer(), bb, true);
-                if (!cr.isUnderflow())
-                    cr.throwException();
-                cr = ce.flush(bb);
-                if (!cr.isUnderflow())
-                    cr.throwException();
-            } catch (CharacterCodingException x) {
-                throw new Error(x);
-            }
-            return safeTrim(ba, bb.position(), cs, isTrusted);
-        }
-    }
-
-    static byte[] encode(char[] ca, int off, int len) {
-        String csn = Charset.defaultCharset().name();
-        try {
-            // use charset name encode() variant which provides caching.
-            return encode(csn, ca, off, len);
-        } catch (UnsupportedEncodingException x) {
-            warnUnsupportedCharset(csn);
-        }
-        try {
-            return encode("ISO-8859-1", ca, off, len);
-        } catch (UnsupportedEncodingException x) {
-            // If this code is hit during VM initialization, MessageUtils is
-            // the only way we will be able to get any kind of error message.
-            MessageUtils.err("ISO-8859-1 charset not available: "
-                             + x.toString());
-            // If we can not find ISO-8859-1 (a required encoding) then things
-            // are seriously wrong with the installation.
-            System.exit(1);
-            return null;
-        }
-    }
-}
diff --git a/ojluni/src/main/java/java/lang/StringIndexOutOfBoundsException.java b/ojluni/src/main/java/java/lang/StringIndexOutOfBoundsException.java
index 4fdd061..a40bd29 100644
--- a/ojluni/src/main/java/java/lang/StringIndexOutOfBoundsException.java
+++ b/ojluni/src/main/java/java/lang/StringIndexOutOfBoundsException.java
@@ -70,11 +70,12 @@
         super("String index out of range: " + index);
     }
 
+    // BEGIN Android-added: Additional constructors for internal use.
     /**
      * Used internally for consistent high-quality error reporting.
      * @hide
      */
-    public StringIndexOutOfBoundsException(String s, int index) {
+    StringIndexOutOfBoundsException(String s, int index) {
         this(s.length(), index);
     }
 
@@ -82,7 +83,7 @@
      * Used internally for consistent high-quality error reporting.
      * @hide
      */
-    public StringIndexOutOfBoundsException(int sourceLength, int index) {
+    StringIndexOutOfBoundsException(int sourceLength, int index) {
         super("length=" + sourceLength + "; index=" + index);
     }
 
@@ -90,7 +91,7 @@
      * Used internally for consistent high-quality error reporting.
      * @hide
      */
-    public StringIndexOutOfBoundsException(String s, int offset, int count) {
+    StringIndexOutOfBoundsException(String s, int offset, int count) {
         this(s.length(), offset, count);
     }
 
@@ -98,9 +99,10 @@
      * Used internally for consistent high-quality error reporting.
      * @hide
      */
-    public StringIndexOutOfBoundsException(int sourceLength, int offset,
+    StringIndexOutOfBoundsException(int sourceLength, int offset,
             int count) {
         super("length=" + sourceLength + "; regionStart=" + offset
                 + "; regionLength=" + count);
     }
+    // END Android-added: Additional constructors for internal use.
 }
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/security/SecureRandom.java b/ojluni/src/main/java/java/security/SecureRandom.java
index 0852cbd..1e8707a 100644
--- a/ojluni/src/main/java/java/security/SecureRandom.java
+++ b/ojluni/src/main/java/java/security/SecureRandom.java
@@ -300,41 +300,6 @@
             instance.provider, algorithm);
     }
 
-    // BEGIN Android-added: Support for Crypto provider workaround
-    /**
-     * Maximum SDK version for which the workaround for the Crypto provider is in place.
-     *
-     * <p> We provide instances from the Crypto provider (although the provider is not installed) to
-     * apps targeting M or earlier versions of the SDK.
-     *
-     * <p> Default is 23 (M). We have it as a field for testability and it shouldn't be changed.
-     *
-     * @hide
-     */
-    public static final int DEFAULT_SDK_TARGET_FOR_CRYPTO_PROVIDER_WORKAROUND = 23;
-
-    private static int sdkTargetForCryptoProviderWorkaround =
-            DEFAULT_SDK_TARGET_FOR_CRYPTO_PROVIDER_WORKAROUND;
-
-    /**
-     * Only for testing.
-     *
-     * @hide
-     */
-    public static void setSdkTargetForCryptoProviderWorkaround(int sdkTargetVersion) {
-        sdkTargetForCryptoProviderWorkaround = sdkTargetVersion;
-    }
-
-    /**
-     * Only for testing.
-     *
-     * @hide
-     */
-    public static int getSdkTargetForCryptoProviderWorkaround() {
-        return sdkTargetForCryptoProviderWorkaround;
-    }
-    // END Android-added: Support for Crypto provider workaround
-
     /**
      * Returns a SecureRandom object that implements the specified
      * Random Number Generator (RNG) algorithm.
@@ -380,55 +345,12 @@
      */
     public static SecureRandom getInstance(String algorithm, String provider)
             throws NoSuchAlgorithmException, NoSuchProviderException {
-        try {
-            Instance instance = GetInstance.getInstance("SecureRandom",
-                    SecureRandomSpi.class, algorithm, provider);
-            return new SecureRandom((SecureRandomSpi) instance.impl,
-                    instance.provider, algorithm);
-        // BEGIN Android-added: Crypto provider deprecation
-        } catch (NoSuchProviderException nspe) {
-            if ("Crypto".equals(provider)) {
-                System.logE(" ********** PLEASE READ ************ ");
-                System.logE(" * ");
-                System.logE(" * New versions of the Android SDK no longer support the Crypto provider.");
-                System.logE(" * If your app was relying on setSeed() to derive keys from strings, you");
-                System.logE(" * should switch to using SecretKeySpec to load raw key bytes directly OR");
-                System.logE(" * use a real key derivation function (KDF). See advice here : ");
-                System.logE(" * http://android-developers.blogspot.com/2016/06/security-crypto-provider-deprecated-in.html ");
-                System.logE(" *********************************** ");
-                if (VMRuntime.getRuntime().getTargetSdkVersion()
-                        <= sdkTargetForCryptoProviderWorkaround) {
-                    System.logE(" Returning an instance of SecureRandom from the Crypto provider");
-                    System.logE(" as a temporary measure so that the apps targeting earlier SDKs");
-                    System.logE(" keep working. Please do not rely on the presence of the Crypto");
-                    System.logE(" provider in the codebase, as our plan is to delete it");
-                    System.logE(" completely in the future.");
-                    return getInstanceFromCryptoProvider(algorithm);
-                }
-            }
-
-            throw nspe;
-        }
+        Instance instance = GetInstance.getInstance("SecureRandom",
+            SecureRandomSpi.class, algorithm, provider);
+        return new SecureRandom((SecureRandomSpi)instance.impl,
+            instance.provider, algorithm);
     }
 
-    private static SecureRandom getInstanceFromCryptoProvider(String algorithm)
-            throws NoSuchAlgorithmException {
-        Provider cryptoProvider;
-        try {
-            cryptoProvider = (Provider) SecureRandom.class.getClassLoader()
-                    .loadClass(
-                            "org.apache.harmony.security.provider.crypto.CryptoProvider")
-                    .newInstance();
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        Service service = cryptoProvider.getService("SecureRandom", algorithm);
-        Instance instance = GetInstance.getInstance(service, SecureRandomSpi.class);
-        return new SecureRandom(
-                (SecureRandomSpi) instance.impl, instance.provider, algorithm);
-    }
-    // END Android-added: Crypto provider deprecation
-
     /**
      * Returns a SecureRandom object that implements the specified
      * Random Number Generator (RNG) algorithm.
@@ -679,7 +601,7 @@
     /**
      * Returns a {@code SecureRandom} object.
      *
-     * In Android this is equivalent to get a SHA1PRNG from OpenSSLProvider.
+     * In Android this is equivalent to get a SHA1PRNG from AndroidOpenSSL.
      *
      * Some situations require strong random values, such as when
      * creating high-value/long-lived secrets like RSA public/private
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..a9f11c8 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;
     }
 
@@ -666,7 +684,7 @@
         minusSign = maybeStripMarkers(numberElements[6], '-');
         exponential = numberElements[7].charAt(0);
         exponentialSeparator = numberElements[7]; //string representation new since 1.6
-        perMill = numberElements[8].charAt(0);
+        perMill = maybeStripMarkers(numberElements[8], '\u2030');
         infinity  = numberElements[9];
         NaN = numberElements[10];
 
@@ -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
@@ -753,6 +774,9 @@
         }
 
         cachedIcuDFS = new android.icu.text.DecimalFormatSymbols(this.locale);
+        // Do not localize plus sign. See "Special Pattern Characters" section in DecimalFormat.
+        // http://b/67034519
+        cachedIcuDFS.setPlusSign('+');
         cachedIcuDFS.setZeroDigit(zeroDigit);
         cachedIcuDFS.setDigit(digit);
         cachedIcuDFS.setDecimalSeparator(decimalSeparator);
@@ -763,6 +787,7 @@
         cachedIcuDFS.setMonetaryGroupingSeparator(groupingSeparator);
         cachedIcuDFS.setPatternSeparator(patternSeparator);
         cachedIcuDFS.setPercent(percent);
+        cachedIcuDFS.setPerMill(perMill);
         cachedIcuDFS.setMonetaryDecimalSeparator(monetarySeparator);
         cachedIcuDFS.setMinusSign(minusSign);
         cachedIcuDFS.setInfinity(infinity);
@@ -816,8 +841,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 +893,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 +912,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 +968,7 @@
         } catch (IllegalArgumentException e) {
             currency = null;
         }
+        // END Android-changed: Android specific serialization code.
     }
 
     /**
@@ -1109,11 +1139,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/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/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/java/util/zip/ZipFile.java b/ojluni/src/main/java/java/util/zip/ZipFile.java
index fbe366e..797f2c6 100644
--- a/ojluni/src/main/java/java/util/zip/ZipFile.java
+++ b/ojluni/src/main/java/java/util/zip/ZipFile.java
@@ -396,7 +396,9 @@
             case DEFLATED:
                 // MORE: Compute good size for inflater stream:
                 long size = getEntrySize(jzentry) + 2; // Inflater likes a bit of slack
-                if (size > 65536) size = 8192;
+                // Android-changed: Use 64k buffer size, performs better than 8k.
+                // if (size > 65536) size = 8192;
+                if (size > 65536) size = 65536;
                 if (size <= 0) size = 4096;
                 Inflater inf = getInflater();
                 InputStream is =
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/ojluni/src/main/native/java_util_zip_ZipFile.c b/ojluni/src/main/native/java_util_zip_ZipFile.c
index 8444c42..daf5d8e 100644
--- a/ojluni/src/main/native/java_util_zip_ZipFile.c
+++ b/ojluni/src/main/native/java_util_zip_ZipFile.c
@@ -307,21 +307,22 @@
     jzfile *zip = jlong_to_ptr(zfile);
     char *msg;
 
-#define BUFSIZE 8192
-    /* copy via tmp stack buffer: */
-    jbyte buf[BUFSIZE];
-
-    if (len > BUFSIZE) {
-        len = BUFSIZE;
+    // BEGIN Android-changed: Removed tmp stack buffer.
+    long long length = (long long)(*env)->GetArrayLength(env, bytes);
+    if (off < 0 || len < 0 || off + len > length) {
+        char errmsg[128];
+        snprintf(errmsg, sizeof(errmsg), "len: %d, off: %d are not valid for array sized %lld\n",
+                 len, off, length);
+        JNU_ThrowArrayIndexOutOfBoundsException(env, errmsg);
+        return -1;
     }
 
+    jbyte *buf = (*env)->GetByteArrayElements(env, bytes, NULL);
     ZIP_Lock(zip);
-    len = ZIP_Read(zip, jlong_to_ptr(zentry), pos, buf, len);
+    len = ZIP_Read(zip, jlong_to_ptr(zentry), pos, buf + off, len);
     msg = zip->msg;
     ZIP_Unlock(zip);
-    if (len != -1) {
-        (*env)->SetByteArrayRegion(env, bytes, off, len, buf);
-    }
+    (*env)->ReleaseByteArrayElements(env, bytes, buf, 0);
 
     if (len == -1) {
         if (msg != 0) {
@@ -333,6 +334,7 @@
             JNU_ThrowIOExceptionWithLastError(env, errmsg);
         }
     }
+    // END Android-changed: Removed tmp stack buffer.
 
     return len;
 }
diff --git a/openjdk_java_files.bp b/openjdk_java_files.bp
new file mode 100644
index 0000000..c574f2d
--- /dev/null
+++ b/openjdk_java_files.bp
@@ -0,0 +1,1781 @@
+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/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)
-