deprecatedMap() {
+ return keySet().stream()
+ .map(k -> String.format(" \"%s\", \"%s\",", k, get(k)))
+ .sorted();
+ }
+}
diff --git a/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java b/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java
index c14cac0b5f3..a8fd51882b6 100644
--- a/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java
+++ b/src/java.base/linux/classes/sun/nio/fs/LinuxFileStore.java
@@ -140,10 +140,12 @@ class LinuxFileStore
if ((entry().hasOption("user_xattr")))
return true;
- // user_xattr option not present but we special-case ext3/4 as we
- // know that extended attributes are not enabled by default.
- if (entry().fstype().equals("ext3") || entry().fstype().equals("ext4"))
- return false;
+ // for ext3 and ext4 user_xattr option is enabled by default so
+ // check for explicit disabling of this option
+ if (entry().fstype().equals("ext3") ||
+ entry().fstype().equals("ext4")) {
+ return !entry().hasOption("nouser_xattr");
+ }
// not ext3/4 so probe mount point
if (!xattrChecked) {
diff --git a/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java b/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java
index f8db8990a90..871b87061a0 100644
--- a/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java
+++ b/src/java.base/share/classes/java/lang/invoke/ConstantBootstraps.java
@@ -49,6 +49,18 @@ public final class ConstantBootstraps {
Object info,
// Caller information:
Class> callerClass) {
+ // Restrict bootstrap methods to those whose first parameter is Lookup
+ // The motivation here is, in the future, to possibly support BSMs
+ // that do not accept the meta-data of lookup/name/type, thereby
+ // allowing the co-opting of existing methods to be used as BSMs as
+ // long as the static arguments can be passed as method arguments
+ MethodType mt = bootstrapMethod.type();
+ if (mt.parameterCount() < 2 ||
+ !MethodHandles.Lookup.class.isAssignableFrom(mt.parameterType(0))) {
+ throw new BootstrapMethodError(
+ "Invalid bootstrap method declared for resolving a dynamic constant: " + bootstrapMethod);
+ }
+
// BSMI.invoke handles all type checking and exception translation.
// If type is not a reference type, the JVM is expecting a boxed
// version, and will manage unboxing on the other side.
diff --git a/src/java.base/share/classes/java/lang/invoke/package-info.java b/src/java.base/share/classes/java/lang/invoke/package-info.java
index 48c24f8a4cb..0aec94f2aa3 100644
--- a/src/java.base/share/classes/java/lang/invoke/package-info.java
+++ b/src/java.base/share/classes/java/lang/invoke/package-info.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2018, 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
@@ -122,8 +122,11 @@
* On success the call site then becomes permanently linked to the {@code invokedynamic}
* instruction.
*
- * For a dynamically-computed constant, the result of the bootstrap method is cached
- * as the resolved constant value.
+ * For a dynamically-computed constant, the first parameter of the bootstrap
+ * method must be assignable to {@code MethodHandles.Lookup}. If this condition
+ * is not met, a {@code BootstrapMethodError} is thrown.
+ * On success the result of the bootstrap method is cached as the resolved
+ * constant value.
*
* If an exception, {@code E} say, occurs during execution of the bootstrap method, then
* resolution fails and terminates abnormally. {@code E} is rethrown if the type of
@@ -171,16 +174,25 @@
*
Types of bootstrap methods
* For a dynamically-computed call site, the bootstrap method is invoked with parameter
* types {@code MethodHandles.Lookup}, {@code String}, {@code MethodType}, and the types
- * of any static arguments; the return type is {@code CallSite}. For a
- * dynamically-computed constant, the bootstrap method is invoked with parameter types
+ * of any static arguments; the return type is {@code CallSite}.
+ *
+ * For a dynamically-computed constant, the bootstrap method is invoked with parameter types
* {@code MethodHandles.Lookup}, {@code String}, {@code Class}, and the types of any
* static arguments; the return type is the type represented by the {@code Class}.
- *
+ *
* Because {@link java.lang.invoke.MethodHandle#invoke MethodHandle.invoke} allows for
- * adaptations between the invoked method type and the method handle's method type,
+ * adaptations between the invoked method type and the bootstrap method handle's method type,
* there is flexibility in the declaration of the bootstrap method.
- * For example, the first argument could be {@code Object}
- * instead of {@code MethodHandles.Lookup}, and the return type
+ * For a dynamically-computed constant the first parameter type of the bootstrap method handle
+ * must be assignable to {@code MethodHandles.Lookup}, other than that constraint the same degree
+ * of flexibility applies to bootstrap methods of dynamically-computed call sites and
+ * dynamically-computed constants.
+ * Note: this constraint allows for the future possibility where the bootstrap method is
+ * invoked with just the parameter types of static arguments, thereby supporting a wider
+ * range of methods compatible with the static arguments (such as methods that don't declare
+ * or require the lookup, name, and type meta-data parameters).
+ *
For example, for dynamically-computed call site, a the first argument
+ * could be {@code Object} instead of {@code MethodHandles.Lookup}, and the return type
* could also be {@code Object} instead of {@code CallSite}.
* (Note that the types and number of the stacked arguments limit
* the legal kinds of bootstrap methods to appropriately typed
@@ -227,7 +239,10 @@
* {@code String} and {@code Integer} (or {@code int}), respectively.
* The second-to-last example assumes that all extra arguments are of type
* {@code String}.
- * The other examples work with all types of extra arguments.
+ * The other examples work with all types of extra arguments. Note that all
+ * the examples except the second and third also work with dynamically-computed
+ * constants if the return type is changed to be compatible with the
+ * constant's declared type (such as {@code Object}, which is always compatible).
*
* Since dynamically-computed constants can be provided as static arguments to bootstrap
* methods, there are no limitations on the types of bootstrap arguments.
diff --git a/src/java.base/share/classes/java/nio/Bits.java b/src/java.base/share/classes/java/nio/Bits.java
index fff84e9e58d..f96d2f48bae 100644
--- a/src/java.base/share/classes/java/nio/Bits.java
+++ b/src/java.base/share/classes/java/nio/Bits.java
@@ -65,25 +65,13 @@ class Bits { // package-private
private static final Unsafe UNSAFE = Unsafe.getUnsafe();
- static Unsafe unsafe() {
- return UNSAFE;
- }
-
-
// -- Processor and memory-system properties --
- private static final ByteOrder BYTE_ORDER
- = UNSAFE.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
-
- static ByteOrder byteOrder() {
- return BYTE_ORDER;
- }
-
private static int PAGE_SIZE = -1;
static int pageSize() {
if (PAGE_SIZE == -1)
- PAGE_SIZE = unsafe().pageSize();
+ PAGE_SIZE = UNSAFE.pageSize();
return PAGE_SIZE;
}
diff --git a/src/java.base/share/classes/java/nio/Buffer.java b/src/java.base/share/classes/java/nio/Buffer.java
index 1217ca78a74..8741108b96d 100644
--- a/src/java.base/share/classes/java/nio/Buffer.java
+++ b/src/java.base/share/classes/java/nio/Buffer.java
@@ -183,7 +183,7 @@ import java.util.Spliterator;
public abstract class Buffer {
// Cached unsafe-access object
- static final Unsafe UNSAFE = Bits.unsafe();
+ static final Unsafe UNSAFE = Unsafe.getUnsafe();
/**
* The characteristics of Spliterators that traverse and split elements
diff --git a/src/java.base/share/classes/java/nio/ByteOrder.java b/src/java.base/share/classes/java/nio/ByteOrder.java
index 97dc16b3909..64c09394ea5 100644
--- a/src/java.base/share/classes/java/nio/ByteOrder.java
+++ b/src/java.base/share/classes/java/nio/ByteOrder.java
@@ -25,6 +25,7 @@
package java.nio;
+import jdk.internal.misc.Unsafe;
/**
* A typesafe enumeration for byte orders.
@@ -57,6 +58,12 @@ public final class ByteOrder {
public static final ByteOrder LITTLE_ENDIAN
= new ByteOrder("LITTLE_ENDIAN");
+ // Retrieve the native byte order. It's used early during bootstrap, and
+ // must be initialized after BIG_ENDIAN and LITTLE_ENDIAN.
+ private static final ByteOrder NATIVE_ORDER
+ = Unsafe.getUnsafe().isBigEndian()
+ ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN;
+
/**
* Retrieves the native byte order of the underlying platform.
*
@@ -69,7 +76,7 @@ public final class ByteOrder {
* virtual machine is running
*/
public static ByteOrder nativeOrder() {
- return Bits.byteOrder();
+ return NATIVE_ORDER;
}
/**
diff --git a/src/java.base/share/classes/java/nio/X-Buffer.java.template b/src/java.base/share/classes/java/nio/X-Buffer.java.template
index b59755b1fd5..fa2598ad4db 100644
--- a/src/java.base/share/classes/java/nio/X-Buffer.java.template
+++ b/src/java.base/share/classes/java/nio/X-Buffer.java.template
@@ -1579,7 +1579,7 @@ public abstract class $Type$Buffer
boolean bigEndian // package-private
= true;
boolean nativeByteOrder // package-private
- = (Bits.byteOrder() == ByteOrder.BIG_ENDIAN);
+ = (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN);
/**
* Retrieves this buffer's byte order.
@@ -1608,7 +1608,7 @@ public abstract class $Type$Buffer
public final $Type$Buffer order(ByteOrder bo) {
bigEndian = (bo == ByteOrder.BIG_ENDIAN);
nativeByteOrder =
- (bigEndian == (Bits.byteOrder() == ByteOrder.BIG_ENDIAN));
+ (bigEndian == (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN));
return this;
}
diff --git a/src/java.base/share/classes/java/security/ProtectionDomain.java b/src/java.base/share/classes/java/security/ProtectionDomain.java
index 7830ee4d8f9..1965bd409d0 100644
--- a/src/java.base/share/classes/java/security/ProtectionDomain.java
+++ b/src/java.base/share/classes/java/security/ProtectionDomain.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, 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
@@ -33,8 +33,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.WeakHashMap;
import jdk.internal.misc.JavaSecurityAccess;
-import jdk.internal.misc.JavaSecurityProtectionDomainAccess;
-import static jdk.internal.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache;
import jdk.internal.misc.SharedSecrets;
import sun.security.action.GetPropertyAction;
import sun.security.provider.PolicyFile;
@@ -110,6 +108,21 @@ public class ProtectionDomain {
return new AccessControlContext(stack.getContext(), acc).optimize();
}
+
+ @Override
+ public ProtectionDomainCache getProtectionDomainCache() {
+ return new ProtectionDomainCache() {
+ private final Map map =
+ Collections.synchronizedMap(new WeakHashMap<>());
+ public void put(ProtectionDomain pd,
+ PermissionCollection pc) {
+ map.put((pd == null ? null : pd.key), pc);
+ }
+ public PermissionCollection get(ProtectionDomain pd) {
+ return pd == null ? map.get(null) : map.get(pd.key);
+ }
+ };
+ }
}
static {
@@ -560,23 +573,4 @@ public class ProtectionDomain {
*/
final class Key {}
- static {
- SharedSecrets.setJavaSecurityProtectionDomainAccess(
- new JavaSecurityProtectionDomainAccess() {
- public ProtectionDomainCache getProtectionDomainCache() {
- return new ProtectionDomainCache() {
- private final Map map =
- Collections.synchronizedMap
- (new WeakHashMap());
- public void put(ProtectionDomain pd,
- PermissionCollection pc) {
- map.put((pd == null ? null : pd.key), pc);
- }
- public PermissionCollection get(ProtectionDomain pd) {
- return pd == null ? map.get(null) : map.get(pd.key);
- }
- };
- }
- });
- }
}
diff --git a/src/java.base/share/classes/java/time/format/ZoneName.java b/src/java.base/share/classes/java/time/format/ZoneName.java
deleted file mode 100644
index 9f0a09bd579..00000000000
--- a/src/java.base/share/classes/java/time/format/ZoneName.java
+++ /dev/null
@@ -1,798 +0,0 @@
-/*
- * Copyright (c) 2013, 2018, 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.time.format;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-
-/**
- * A helper class to map a zone name to metazone and back to the
- * appropriate zone id for the particular locale.
- *
- * The zid<->metazone mappings are based on CLDR metaZones.xml.
- * The alias mappings are based on Link entries in tzdb data files.
- */
-class ZoneName {
-
- public static String toZid(String zid, Locale locale) {
- String mzone = zidToMzone.get(zid);
- if (mzone == null && aliases.containsKey(zid)) {
- zid = aliases.get(zid);
- mzone = zidToMzone.get(zid);
- }
- if (mzone != null) {
- Map map = mzoneToZidL.get(mzone);
- if (map != null && map.containsKey(locale.getCountry())) {
- zid = map.get(locale.getCountry());
- } else {
- zid = mzoneToZid.get(mzone);
- }
- }
- return toZid(zid);
- }
-
- public static String toZid(String zid) {
- if (aliases.containsKey(zid)) {
- return aliases.get(zid);
- }
- return zid;
- }
-
- private static final String[] zidMap = new String[] {
- "Pacific/Rarotonga", "Cook", "Pacific/Rarotonga",
- "Europe/Tirane", "Europe_Central", "Europe/Paris",
- "America/Recife", "Brasilia", "America/Sao_Paulo",
- "America/Argentina/San_Juan", "Argentina", "America/Buenos_Aires",
- "Asia/Kolkata", "India", "Asia/Calcutta",
- "America/Guayaquil", "Ecuador", "America/Guayaquil",
- "Europe/Samara", "Moscow", "Europe/Moscow",
- "Indian/Antananarivo", "Africa_Eastern", "Africa/Nairobi",
- "America/Santa_Isabel", "America_Pacific", "America/Los_Angeles",
- "America/Montserrat", "Atlantic", "America/Halifax",
- "Pacific/Port_Moresby", "Papua_New_Guinea", "Pacific/Port_Moresby",
- "Europe/Paris", "Europe_Central", "Europe/Paris",
- "America/Argentina/Salta", "Argentina", "America/Buenos_Aires",
- "Asia/Omsk", "Omsk", "Asia/Omsk",
- "Africa/Ceuta", "Europe_Central", "Europe/Paris",
- "America/Argentina/San_Luis", "Argentina_Western", "America/Argentina/San_Luis",
- "America/Atikokan", "America_Eastern", "America/New_York",
- "Asia/Vladivostok", "Vladivostok", "Asia/Vladivostok",
- "America/Argentina/Jujuy", "Argentina", "America/Buenos_Aires",
- "Asia/Almaty", "Kazakhstan_Eastern", "Asia/Almaty",
- "Atlantic/Canary", "Europe_Western", "Atlantic/Canary",
- "Asia/Bangkok", "Indochina", "Asia/Saigon",
- "America/Caracas", "Venezuela", "America/Caracas",
- "Australia/Hobart", "Australia_Eastern", "Australia/Sydney",
- "America/Havana", "Cuba", "America/Havana",
- "Africa/Malabo", "Africa_Western", "Africa/Lagos",
- "Australia/Lord_Howe", "Lord_Howe", "Australia/Lord_Howe",
- "Pacific/Fakaofo", "Tokelau", "Pacific/Fakaofo",
- "America/Matamoros", "America_Central", "America/Chicago",
- "America/Guadeloupe", "Atlantic", "America/Halifax",
- "Europe/Helsinki", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Calcutta", "India", "Asia/Calcutta",
- "Africa/Kinshasa", "Africa_Western", "Africa/Lagos",
- "America/Miquelon", "Pierre_Miquelon", "America/Miquelon",
- "Europe/Athens", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Novosibirsk", "Novosibirsk", "Asia/Novosibirsk",
- "Indian/Cocos", "Cocos", "Indian/Cocos",
- "Africa/Bujumbura", "Africa_Central", "Africa/Maputo",
- "Europe/Mariehamn", "Europe_Eastern", "Europe/Bucharest",
- "America/Winnipeg", "America_Central", "America/Chicago",
- "America/Buenos_Aires", "Argentina", "America/Buenos_Aires",
- "America/Yellowknife", "America_Mountain", "America/Denver",
- "Pacific/Midway", "Samoa", "Pacific/Apia",
- "Africa/Dar_es_Salaam", "Africa_Eastern", "Africa/Nairobi",
- "Pacific/Tahiti", "Tahiti", "Pacific/Tahiti",
- "Asia/Gaza", "Europe_Eastern", "Europe/Bucharest",
- "Australia/Lindeman", "Australia_Eastern", "Australia/Sydney",
- "Europe/Kaliningrad", "Europe_Eastern", "Europe/Bucharest",
- "Europe/Bucharest", "Europe_Eastern", "Europe/Bucharest",
- "America/Lower_Princes", "Atlantic", "America/Halifax",
- "Pacific/Chuuk", "Truk", "Pacific/Truk",
- "America/Anchorage", "Alaska", "America/Juneau",
- "America/Rankin_Inlet", "America_Central", "America/Chicago",
- "America/Marigot", "Atlantic", "America/Halifax",
- "Africa/Juba", "Africa_Eastern", "Africa/Nairobi",
- "Africa/Algiers", "Europe_Central", "Europe/Paris",
- "Europe/Kiev", "Europe_Eastern", "Europe/Bucharest",
- "America/Santarem", "Brasilia", "America/Sao_Paulo",
- "Africa/Brazzaville", "Africa_Western", "Africa/Lagos",
- "Asia/Choibalsan", "Choibalsan", "Asia/Choibalsan",
- "Indian/Christmas", "Christmas", "Indian/Christmas",
- "America/Nassau", "America_Eastern", "America/New_York",
- "Africa/Tunis", "Europe_Central", "Europe/Paris",
- "Pacific/Noumea", "New_Caledonia", "Pacific/Noumea",
- "Africa/El_Aaiun", "Europe_Western", "Atlantic/Canary",
- "Europe/Sarajevo", "Europe_Central", "Europe/Paris",
- "America/Campo_Grande", "Amazon", "America/Manaus",
- "America/Puerto_Rico", "Atlantic", "America/Halifax",
- "Antarctica/Mawson", "Mawson", "Antarctica/Mawson",
- "Pacific/Galapagos", "Galapagos", "Pacific/Galapagos",
- "Asia/Tehran", "Iran", "Asia/Tehran",
- "America/Port-au-Prince", "America_Eastern", "America/New_York",
- "America/Scoresbysund", "Greenland_Eastern", "America/Scoresbysund",
- "Africa/Harare", "Africa_Central", "Africa/Maputo",
- "America/Dominica", "Atlantic", "America/Halifax",
- "Europe/Chisinau", "Europe_Eastern", "Europe/Bucharest",
- "America/Chihuahua", "America_Mountain", "America/Denver",
- "America/La_Paz", "Bolivia", "America/La_Paz",
- "Indian/Chagos", "Indian_Ocean", "Indian/Chagos",
- "Australia/Broken_Hill", "Australia_Central", "Australia/Adelaide",
- "America/Grenada", "Atlantic", "America/Halifax",
- "America/North_Dakota/New_Salem", "America_Central", "America/Chicago",
- "Pacific/Majuro", "Marshall_Islands", "Pacific/Majuro",
- "Australia/Adelaide", "Australia_Central", "Australia/Adelaide",
- "Europe/Warsaw", "Europe_Central", "Europe/Paris",
- "Europe/Vienna", "Europe_Central", "Europe/Paris",
- "Atlantic/Cape_Verde", "Cape_Verde", "Atlantic/Cape_Verde",
- "America/Mendoza", "Argentina", "America/Buenos_Aires",
- "Pacific/Gambier", "Gambier", "Pacific/Gambier",
- "Europe/Istanbul", "Europe_Eastern", "Europe/Bucharest",
- "America/Kentucky/Monticello", "America_Eastern", "America/New_York",
- "America/Chicago", "America_Central", "America/Chicago",
- "Asia/Ulaanbaatar", "Mongolia", "Asia/Ulaanbaatar",
- "Indian/Maldives", "Maldives", "Indian/Maldives",
- "America/Mexico_City", "America_Central", "America/Chicago",
- "Africa/Asmara", "Africa_Eastern", "Africa/Nairobi",
- "Asia/Chongqing", "China", "Asia/Shanghai",
- "America/Argentina/La_Rioja", "Argentina", "America/Buenos_Aires",
- "America/Tijuana", "America_Pacific", "America/Los_Angeles",
- "Asia/Harbin", "China", "Asia/Shanghai",
- "Pacific/Honolulu", "Hawaii_Aleutian", "Pacific/Honolulu",
- "Atlantic/Azores", "Azores", "Atlantic/Azores",
- "Indian/Mayotte", "Africa_Eastern", "Africa/Nairobi",
- "America/Guatemala", "America_Central", "America/Chicago",
- "America/Indianapolis", "America_Eastern", "America/New_York",
- "America/Halifax", "Atlantic", "America/Halifax",
- "America/Resolute", "America_Central", "America/Chicago",
- "Europe/London", "GMT", "Atlantic/Reykjavik",
- "America/Hermosillo", "America_Mountain", "America/Denver",
- "Atlantic/Madeira", "Europe_Western", "Atlantic/Canary",
- "Europe/Zagreb", "Europe_Central", "Europe/Paris",
- "America/Boa_Vista", "Amazon", "America/Manaus",
- "America/Regina", "America_Central", "America/Chicago",
- "America/Cordoba", "Argentina", "America/Buenos_Aires",
- "America/Shiprock", "America_Mountain", "America/Denver",
- "Europe/Luxembourg", "Europe_Central", "Europe/Paris",
- "America/Cancun", "America_Central", "America/Chicago",
- "Pacific/Enderbury", "Phoenix_Islands", "Pacific/Enderbury",
- "Africa/Bissau", "GMT", "Atlantic/Reykjavik",
- "Antarctica/Vostok", "Vostok", "Antarctica/Vostok",
- "Pacific/Apia", "Samoa", "Pacific/Apia",
- "Australia/Perth", "Australia_Western", "Australia/Perth",
- "America/Juneau", "Alaska", "America/Juneau",
- "Africa/Mbabane", "Africa_Southern", "Africa/Johannesburg",
- "Pacific/Niue", "Niue", "Pacific/Niue",
- "Europe/Zurich", "Europe_Central", "Europe/Paris",
- "America/Rio_Branco", "Amazon", "America/Manaus",
- "Africa/Ndjamena", "Africa_Western", "Africa/Lagos",
- "Asia/Macau", "China", "Asia/Shanghai",
- "America/Lima", "Peru", "America/Lima",
- "Africa/Windhoek", "Africa_Central", "Africa/Maputo",
- "America/Sitka", "Alaska", "America/Juneau",
- "America/Mazatlan", "America_Mountain", "America/Denver",
- "Asia/Saigon", "Indochina", "Asia/Saigon",
- "Asia/Kamchatka", "Magadan", "Asia/Magadan",
- "America/Menominee", "America_Central", "America/Chicago",
- "America/Belize", "America_Central", "America/Chicago",
- "America/Sao_Paulo", "Brasilia", "America/Sao_Paulo",
- "America/Barbados", "Atlantic", "America/Halifax",
- "America/Porto_Velho", "Amazon", "America/Manaus",
- "America/Costa_Rica", "America_Central", "America/Chicago",
- "Europe/Monaco", "Europe_Central", "Europe/Paris",
- "Europe/Riga", "Europe_Eastern", "Europe/Bucharest",
- "Europe/Vatican", "Europe_Central", "Europe/Paris",
- "Europe/Madrid", "Europe_Central", "Europe/Paris",
- "Africa/Dakar", "GMT", "Atlantic/Reykjavik",
- "Asia/Damascus", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Hong_Kong", "Hong_Kong", "Asia/Hong_Kong",
- "America/Adak", "Hawaii_Aleutian", "Pacific/Honolulu",
- "Europe/Vilnius", "Europe_Eastern", "Europe/Bucharest",
- "America/Indiana/Indianapolis", "America_Eastern", "America/New_York",
- "Africa/Freetown", "GMT", "Atlantic/Reykjavik",
- "Atlantic/Reykjavik", "GMT", "Atlantic/Reykjavik",
- "Asia/Ho_Chi_Minh", "Indochina", "Asia/Saigon",
- "America/St_Kitts", "Atlantic", "America/Halifax",
- "America/Martinique", "Atlantic", "America/Halifax",
- "America/Thule", "Atlantic", "America/Halifax",
- "America/Asuncion", "Paraguay", "America/Asuncion",
- "Africa/Luanda", "Africa_Western", "Africa/Lagos",
- "America/Monterrey", "America_Central", "America/Chicago",
- "Pacific/Fiji", "Fiji", "Pacific/Fiji",
- "Africa/Banjul", "GMT", "Atlantic/Reykjavik",
- "America/Grand_Turk", "America_Eastern", "America/New_York",
- "Pacific/Pitcairn", "Pitcairn", "Pacific/Pitcairn",
- "America/Montevideo", "Uruguay", "America/Montevideo",
- "America/Bahia_Banderas", "America_Central", "America/Chicago",
- "America/Cayman", "America_Eastern", "America/New_York",
- "Pacific/Norfolk", "Norfolk", "Pacific/Norfolk",
- "Africa/Ouagadougou", "GMT", "Atlantic/Reykjavik",
- "America/Maceio", "Brasilia", "America/Sao_Paulo",
- "Pacific/Guam", "Chamorro", "Pacific/Saipan",
- "Africa/Monrovia", "GMT", "Atlantic/Reykjavik",
- "Africa/Bamako", "GMT", "Atlantic/Reykjavik",
- "Asia/Colombo", "India", "Asia/Calcutta",
- "Asia/Urumqi", "China", "Asia/Shanghai",
- "Asia/Kabul", "Afghanistan", "Asia/Kabul",
- "America/Yakutat", "Alaska", "America/Juneau",
- "America/Phoenix", "America_Mountain", "America/Denver",
- "Asia/Nicosia", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Phnom_Penh", "Indochina", "Asia/Saigon",
- "America/Rainy_River", "America_Central", "America/Chicago",
- "Europe/Uzhgorod", "Europe_Eastern", "Europe/Bucharest",
- "Pacific/Saipan", "Chamorro", "Pacific/Saipan",
- "America/St_Vincent", "Atlantic", "America/Halifax",
- "Europe/Rome", "Europe_Central", "Europe/Paris",
- "America/Nome", "Alaska", "America/Juneau",
- "Africa/Mogadishu", "Africa_Eastern", "Africa/Nairobi",
- "Europe/Zaporozhye", "Europe_Eastern", "Europe/Bucharest",
- "Pacific/Funafuti", "Tuvalu", "Pacific/Funafuti",
- "Atlantic/South_Georgia", "South_Georgia", "Atlantic/South_Georgia",
- "Europe/Skopje", "Europe_Central", "Europe/Paris",
- "Asia/Yekaterinburg", "Yekaterinburg", "Asia/Yekaterinburg",
- "Australia/Melbourne", "Australia_Eastern", "Australia/Sydney",
- "America/Argentina/Cordoba", "Argentina", "America/Buenos_Aires",
- "Africa/Kigali", "Africa_Central", "Africa/Maputo",
- "Africa/Blantyre", "Africa_Central", "Africa/Maputo",
- "Africa/Tripoli", "Europe_Eastern", "Europe/Bucharest",
- "Africa/Gaborone", "Africa_Central", "Africa/Maputo",
- "Asia/Kuching", "Malaysia", "Asia/Kuching",
- "Pacific/Nauru", "Nauru", "Pacific/Nauru",
- "America/Aruba", "Atlantic", "America/Halifax",
- "America/Antigua", "Atlantic", "America/Halifax",
- "Europe/Volgograd", "Volgograd", "Europe/Volgograd",
- "Africa/Djibouti", "Africa_Eastern", "Africa/Nairobi",
- "America/Catamarca", "Argentina", "America/Buenos_Aires",
- "Asia/Manila", "Philippines", "Asia/Manila",
- "Pacific/Kiritimati", "Line_Islands", "Pacific/Kiritimati",
- "Asia/Shanghai", "China", "Asia/Shanghai",
- "Pacific/Truk", "Truk", "Pacific/Truk",
- "Pacific/Tarawa", "Gilbert_Islands", "Pacific/Tarawa",
- "Africa/Conakry", "GMT", "Atlantic/Reykjavik",
- "Asia/Bishkek", "Kyrgystan", "Asia/Bishkek",
- "Europe/Gibraltar", "Europe_Central", "Europe/Paris",
- "Asia/Rangoon", "Myanmar", "Asia/Rangoon",
- "Asia/Baku", "Azerbaijan", "Asia/Baku",
- "America/Santiago", "Chile", "America/Santiago",
- "America/El_Salvador", "America_Central", "America/Chicago",
- "America/Noronha", "Noronha", "America/Noronha",
- "America/St_Thomas", "Atlantic", "America/Halifax",
- "Atlantic/St_Helena", "GMT", "Atlantic/Reykjavik",
- "Asia/Krasnoyarsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
- "America/Vancouver", "America_Pacific", "America/Los_Angeles",
- "Europe/Belgrade", "Europe_Central", "Europe/Paris",
- "America/St_Barthelemy", "Atlantic", "America/Halifax",
- "Asia/Pontianak", "Indonesia_Western", "Asia/Jakarta",
- "Africa/Lusaka", "Africa_Central", "Africa/Maputo",
- "America/Godthab", "Greenland_Western", "America/Godthab",
- "Asia/Dhaka", "Bangladesh", "Asia/Dhaka",
- "Asia/Dubai", "Gulf", "Asia/Dubai",
- "Europe/Moscow", "Moscow", "Europe/Moscow",
- "America/Louisville", "America_Eastern", "America/New_York",
- "Australia/Darwin", "Australia_Central", "Australia/Adelaide",
- "America/Santo_Domingo", "Atlantic", "America/Halifax",
- "America/Argentina/Ushuaia", "Argentina", "America/Buenos_Aires",
- "America/Tegucigalpa", "America_Central", "America/Chicago",
- "Asia/Aden", "Arabian", "Asia/Riyadh",
- "America/Inuvik", "America_Mountain", "America/Denver",
- "Asia/Beirut", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Qatar", "Arabian", "Asia/Riyadh",
- "Europe/Oslo", "Europe_Central", "Europe/Paris",
- "Asia/Anadyr", "Magadan", "Asia/Magadan",
- "Pacific/Palau", "Palau", "Pacific/Palau",
- "Arctic/Longyearbyen", "Europe_Central", "Europe/Paris",
- "America/Anguilla", "Atlantic", "America/Halifax",
- "Asia/Aqtau", "Kazakhstan_Western", "Asia/Aqtobe",
- "Asia/Yerevan", "Armenia", "Asia/Yerevan",
- "Africa/Lagos", "Africa_Western", "Africa/Lagos",
- "America/Denver", "America_Mountain", "America/Denver",
- "Antarctica/Palmer", "Chile", "America/Santiago",
- "Europe/Stockholm", "Europe_Central", "Europe/Paris",
- "America/Bahia", "Brasilia", "America/Sao_Paulo",
- "America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
- "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
- "Pacific/Chatham", "Chatham", "Pacific/Chatham",
- "Europe/Prague", "Europe_Central", "Europe/Paris",
- "America/Blanc-Sablon", "Atlantic", "America/Halifax",
- "America/Bogota", "Colombia", "America/Bogota",
- "America/Managua", "America_Central", "America/Chicago",
- "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
- "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
- "America/Cambridge_Bay", "America_Mountain", "America/Denver",
- "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
- "Africa/Khartoum", "Africa_Central", "Africa/Maputo",
- "Europe/Simferopol", "Europe_Eastern", "Europe/Bucharest",
- "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
- "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
- "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
- "America/Eirunepe", "Amazon", "America/Manaus",
- "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
- "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
- "Asia/Yangon", "Myanmar", "Asia/Rangoon",
- "America/Goose_Bay", "Atlantic", "America/Halifax",
- "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
- "America/Swift_Current", "America_Central", "America/Chicago",
- "America/Guyana", "Guyana", "America/Guyana",
- "Asia/Tokyo", "Japan", "Asia/Tokyo",
- "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
- "America/Belem", "Brasilia", "America/Sao_Paulo",
- "Pacific/Wallis", "Wallis", "Pacific/Wallis",
- "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
- "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
- "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
- "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
- "America/Thunder_Bay", "America_Eastern", "America/New_York",
- "Asia/Brunei", "Brunei", "Asia/Brunei",
- "America/Metlakatla", "America_Pacific", "America/Los_Angeles",
- "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
- "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
- "America/Coral_Harbour", "America_Eastern", "America/New_York",
- "America/Tortola", "Atlantic", "America/Halifax",
- "Asia/Karachi", "Pakistan", "Asia/Karachi",
- "Indian/Reunion", "Reunion", "Indian/Reunion",
- "America/Detroit", "America_Eastern", "America/New_York",
- "Australia/Eucla", "Australia_CentralWestern", "Australia/Eucla",
- "Asia/Seoul", "Korea", "Asia/Seoul",
- "Asia/Singapore", "Singapore", "Asia/Singapore",
- "Africa/Casablanca", "Europe_Western", "Atlantic/Canary",
- "Asia/Dili", "East_Timor", "Asia/Dili",
- "America/Indiana/Vincennes", "America_Eastern", "America/New_York",
- "Europe/Dublin", "GMT", "Atlantic/Reykjavik",
- "America/St_Johns", "Newfoundland", "America/St_Johns",
- "Antarctica/Macquarie", "Macquarie", "Antarctica/Macquarie",
- "America/Port_of_Spain", "Atlantic", "America/Halifax",
- "Europe/Budapest", "Europe_Central", "Europe/Paris",
- "America/Fortaleza", "Brasilia", "America/Sao_Paulo",
- "Australia/Brisbane", "Australia_Eastern", "Australia/Sydney",
- "Atlantic/Bermuda", "Atlantic", "America/Halifax",
- "Asia/Amman", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Tashkent", "Uzbekistan", "Asia/Tashkent",
- "Antarctica/DumontDUrville", "DumontDUrville", "Antarctica/DumontDUrville",
- "Antarctica/Casey", "Australia_Western", "Australia/Perth",
- "Asia/Vientiane", "Indochina", "Asia/Saigon",
- "Pacific/Johnston", "Hawaii_Aleutian", "Pacific/Honolulu",
- "America/Jamaica", "America_Eastern", "America/New_York",
- "Africa/Addis_Ababa", "Africa_Eastern", "Africa/Nairobi",
- "Pacific/Ponape", "Ponape", "Pacific/Ponape",
- "Europe/Jersey", "GMT", "Atlantic/Reykjavik",
- "Africa/Lome", "GMT", "Atlantic/Reykjavik",
- "America/Manaus", "Amazon", "America/Manaus",
- "Africa/Niamey", "Africa_Western", "Africa/Lagos",
- "Asia/Kashgar", "China", "Asia/Shanghai",
- "Pacific/Tongatapu", "Tonga", "Pacific/Tongatapu",
- "Europe/Minsk", "Europe_Eastern", "Europe/Bucharest",
- "America/Edmonton", "America_Mountain", "America/Denver",
- "Asia/Baghdad", "Arabian", "Asia/Riyadh",
- "Asia/Kathmandu", "Nepal", "Asia/Katmandu",
- "America/Ojinaga", "America_Mountain", "America/Denver",
- "Africa/Abidjan", "GMT", "Atlantic/Reykjavik",
- "America/Indiana/Winamac", "America_Eastern", "America/New_York",
- "Asia/Qyzylorda", "Kazakhstan_Eastern", "Asia/Almaty",
- "Australia/Sydney", "Australia_Eastern", "Australia/Sydney",
- "Asia/Ashgabat", "Turkmenistan", "Asia/Ashgabat",
- "Europe/Amsterdam", "Europe_Central", "Europe/Paris",
- "America/Dawson_Creek", "America_Mountain", "America/Denver",
- "Africa/Cairo", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Pyongyang", "Korea", "Asia/Seoul",
- "Africa/Kampala", "Africa_Eastern", "Africa/Nairobi",
- "America/Araguaina", "Brasilia", "America/Sao_Paulo",
- "Asia/Novokuznetsk", "Novosibirsk", "Asia/Novosibirsk",
- "Pacific/Kwajalein", "Marshall_Islands", "Pacific/Majuro",
- "Africa/Lubumbashi", "Africa_Central", "Africa/Maputo",
- "Asia/Sakhalin", "Sakhalin", "Asia/Sakhalin",
- "America/Indiana/Vevay", "America_Eastern", "America/New_York",
- "Africa/Maputo", "Africa_Central", "Africa/Maputo",
- "Atlantic/Faeroe", "Europe_Western", "Atlantic/Canary",
- "America/North_Dakota/Center", "America_Central", "America/Chicago",
- "Pacific/Wake", "Wake", "Pacific/Wake",
- "Pacific/Pago_Pago", "Samoa", "Pacific/Apia",
- "America/Moncton", "Atlantic", "America/Halifax",
- "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos",
- "America/Glace_Bay", "Atlantic", "America/Halifax",
- "Asia/Jakarta", "Indonesia_Western", "Asia/Jakarta",
- "Africa/Asmera", "Africa_Eastern", "Africa/Nairobi",
- "Europe/Lisbon", "Europe_Western", "Atlantic/Canary",
- "America/Dawson", "America_Pacific", "America/Los_Angeles",
- "America/Cayenne", "French_Guiana", "America/Cayenne",
- "Asia/Bahrain", "Arabian", "Asia/Riyadh",
- "Europe/Malta", "Europe_Central", "Europe/Paris",
- "America/Indiana/Tell_City", "America_Central", "America/Chicago",
- "America/Indiana/Petersburg", "America_Eastern", "America/New_York",
- "Antarctica/Rothera", "Rothera", "Antarctica/Rothera",
- "Asia/Aqtobe", "Kazakhstan_Western", "Asia/Aqtobe",
- "Europe/Vaduz", "Europe_Central", "Europe/Paris",
- "America/Indiana/Marengo", "America_Eastern", "America/New_York",
- "Europe/Brussels", "Europe_Central", "Europe/Paris",
- "Europe/Andorra", "Europe_Central", "Europe/Paris",
- "America/Indiana/Knox", "America_Central", "America/Chicago",
- "Pacific/Easter", "Easter", "Pacific/Easter",
- "America/Argentina/Rio_Gallegos", "Argentina", "America/Buenos_Aires",
- "Asia/Oral", "Kazakhstan_Western", "Asia/Aqtobe",
- "Europe/Copenhagen", "Europe_Central", "Europe/Paris",
- "Africa/Johannesburg", "Africa_Southern", "Africa/Johannesburg",
- "Pacific/Pohnpei", "Ponape", "Pacific/Ponape",
- "America/Argentina/Tucuman", "Argentina", "America/Buenos_Aires",
- "America/Toronto", "America_Eastern", "America/New_York",
- "Asia/Makassar", "Indonesia_Central", "Asia/Makassar",
- "Europe/Berlin", "Europe_Central", "Europe/Paris",
- "America/Argentina/Mendoza", "Argentina", "America/Buenos_Aires",
- "America/Cuiaba", "Amazon", "America/Manaus",
- "America/Creston", "America_Mountain", "America/Denver",
- "Asia/Samarkand", "Uzbekistan", "Asia/Tashkent",
- "Asia/Hovd", "Hovd", "Asia/Hovd",
- "Europe/Bratislava", "Europe_Central", "Europe/Paris",
- "Africa/Accra", "GMT", "Atlantic/Reykjavik",
- "Africa/Douala", "Africa_Western", "Africa/Lagos",
- "Africa/Nouakchott", "GMT", "Atlantic/Reykjavik",
- "Europe/Sofia", "Europe_Eastern", "Europe/Bucharest",
- "Antarctica/Davis", "Davis", "Antarctica/Davis",
- "Antarctica/McMurdo", "New_Zealand", "Pacific/Auckland",
- "Europe/San_Marino", "Europe_Central", "Europe/Paris",
- "Africa/Porto-Novo", "Africa_Western", "Africa/Lagos",
- "Asia/Jayapura", "Indonesia_Eastern", "Asia/Jayapura",
- "America/St_Lucia", "Atlantic", "America/Halifax",
- "America/Nipigon", "America_Eastern", "America/New_York",
- "America/Argentina/Catamarca", "Argentina", "America/Buenos_Aires",
- "Europe/Isle_of_Man", "GMT", "Atlantic/Reykjavik",
- "America/Kentucky/Louisville", "America_Eastern", "America/New_York",
- "America/Merida", "America_Central", "America/Chicago",
- "Pacific/Marquesas", "Marquesas", "Pacific/Marquesas",
- "Asia/Magadan", "Magadan", "Asia/Magadan",
- "Africa/Libreville", "Africa_Western", "Africa/Lagos",
- "Pacific/Efate", "Vanuatu", "Pacific/Efate",
- "Asia/Kuala_Lumpur", "Malaysia", "Asia/Kuching",
- "America/Iqaluit", "America_Eastern", "America/New_York",
- "Indian/Comoro", "Africa_Eastern", "Africa/Nairobi",
- "America/Panama", "America_Eastern", "America/New_York",
- "Asia/Hebron", "Europe_Eastern", "Europe/Bucharest",
- "America/Jujuy", "Argentina", "America/Buenos_Aires",
- "America/Pangnirtung", "America_Eastern", "America/New_York",
- "Asia/Tbilisi", "Georgia", "Asia/Tbilisi",
- "Europe/Podgorica", "Europe_Central", "Europe/Paris",
- "America/Boise", "America_Mountain", "America/Denver",
- "Asia/Muscat", "Gulf", "Asia/Dubai",
- "Indian/Mahe", "Seychelles", "Indian/Mahe",
- "America/Montreal", "America_Eastern", "America/New_York",
- "Africa/Bangui", "Africa_Western", "Africa/Lagos",
- "America/Curacao", "Atlantic", "America/Halifax",
- "Asia/Taipei", "Taipei", "Asia/Taipei",
- "Europe/Ljubljana", "Europe_Central", "Europe/Paris",
- "Atlantic/Stanley", "Falkland", "Atlantic/Stanley",
- "Pacific/Guadalcanal", "Solomon", "Pacific/Guadalcanal",
- "Asia/Kuwait", "Arabian", "Asia/Riyadh",
- "Asia/Riyadh", "Arabian", "Asia/Riyadh",
- "Europe/Tallinn", "Europe_Eastern", "Europe/Bucharest",
- "America/New_York", "America_Eastern", "America/New_York",
- "America/Paramaribo", "Suriname", "America/Paramaribo",
- "America/Argentina/Buenos_Aires", "Argentina", "America/Buenos_Aires",
- "Asia/Irkutsk", "Irkutsk", "Asia/Irkutsk",
- "Asia/Katmandu", "Nepal", "Asia/Katmandu",
- "America/Kralendijk", "Atlantic", "America/Halifax",
- };
- private static final String[] mzoneMap = new String[] {
- "GMT", "ML", "Africa/Bamako",
- "GMT", "IE", "Europe/Dublin",
- "GMT", "SN", "Africa/Dakar",
- "GMT", "GH", "Africa/Accra",
- "GMT", "CI", "Africa/Abidjan",
- "GMT", "BF", "Africa/Ouagadougou",
- "GMT", "MR", "Africa/Nouakchott",
- "GMT", "GM", "Africa/Banjul",
- "GMT", "SL", "Africa/Freetown",
- "GMT", "GN", "Africa/Conakry",
- "GMT", "SH", "Atlantic/St_Helena",
- "GMT", "GB", "Europe/London",
- "GMT", "LR", "Africa/Monrovia",
- "GMT", "TG", "Africa/Lome",
- "Africa_Western", "ST", "Africa/Sao_Tome",
- "Africa_Western", "CF", "Africa/Bangui",
- "Africa_Western", "NE", "Africa/Niamey",
- "Africa_Western", "CM", "Africa/Douala",
- "Africa_Western", "CD", "Africa/Kinshasa",
- "Africa_Western", "CG", "Africa/Brazzaville",
- "Africa_Western", "GA", "Africa/Libreville",
- "Africa_Western", "TD", "Africa/Ndjamena",
- "Africa_Western", "AO", "Africa/Luanda",
- "Africa_Western", "GQ", "Africa/Malabo",
- "Africa_Eastern", "YT", "Indian/Mayotte",
- "Africa_Eastern", "UG", "Africa/Kampala",
- "Africa_Eastern", "ET", "Africa/Addis_Ababa",
- "Africa_Eastern", "MG", "Indian/Antananarivo",
- "Africa_Eastern", "TZ", "Africa/Dar_es_Salaam",
- "Africa_Eastern", "SO", "Africa/Mogadishu",
- "Africa_Eastern", "ER", "Africa/Asmera",
- "Africa_Eastern", "KM", "Indian/Comoro",
- "Africa_Eastern", "DJ", "Africa/Djibouti",
- "Europe_Central", "GI", "Europe/Gibraltar",
- "Europe_Central", "DK", "Europe/Copenhagen",
- "Europe_Central", "SE", "Europe/Stockholm",
- "Europe_Central", "CH", "Europe/Zurich",
- "Europe_Central", "AL", "Europe/Tirane",
- "Europe_Central", "RS", "Europe/Belgrade",
- "Europe_Central", "HU", "Europe/Budapest",
- "Europe_Central", "MT", "Europe/Malta",
- "Europe_Central", "PL", "Europe/Warsaw",
- "Europe_Central", "ME", "Europe/Podgorica",
- "Europe_Central", "ES", "Europe/Madrid",
- "Europe_Central", "CZ", "Europe/Prague",
- "Europe_Central", "IT", "Europe/Rome",
- "Europe_Central", "SI", "Europe/Ljubljana",
- "Europe_Central", "LI", "Europe/Vaduz",
- "Europe_Central", "AT", "Europe/Vienna",
- "Europe_Central", "VA", "Europe/Vatican",
- "Europe_Central", "DE", "Europe/Berlin",
- "Europe_Central", "NO", "Europe/Oslo",
- "Europe_Central", "SK", "Europe/Bratislava",
- "Europe_Central", "AD", "Europe/Andorra",
- "Europe_Central", "SM", "Europe/San_Marino",
- "Europe_Central", "MK", "Europe/Skopje",
- "Europe_Central", "TN", "Africa/Tunis",
- "Europe_Central", "HR", "Europe/Zagreb",
- "Europe_Central", "NL", "Europe/Amsterdam",
- "Europe_Central", "BE", "Europe/Brussels",
- "Europe_Central", "MC", "Europe/Monaco",
- "Europe_Central", "LU", "Europe/Luxembourg",
- "Europe_Central", "BA", "Europe/Sarajevo",
- "China", "MO", "Asia/Macau",
- "America_Pacific", "MX", "America/Tijuana",
- "America_Pacific", "CA", "America/Vancouver",
- "Indochina", "LA", "Asia/Vientiane",
- "Indochina", "KH", "Asia/Phnom_Penh",
- "Indochina", "TH", "Asia/Bangkok",
- "Korea", "KP", "Asia/Pyongyang",
- "America_Mountain", "MX", "America/Hermosillo",
- "America_Mountain", "CA", "America/Edmonton",
- "Africa_Southern", "LS", "Africa/Maseru",
- "Africa_Southern", "SZ", "Africa/Mbabane",
- "Chile", "AQ", "Antarctica/Palmer",
- "New_Zealand", "AQ", "Antarctica/McMurdo",
- "Gulf", "OM", "Asia/Muscat",
- "Europe_Western", "FO", "Atlantic/Faeroe",
- "America_Eastern", "TC", "America/Grand_Turk",
- "America_Eastern", "CA", "America/Toronto",
- "America_Eastern", "BS", "America/Nassau",
- "America_Eastern", "PA", "America/Panama",
- "America_Eastern", "JM", "America/Jamaica",
- "America_Eastern", "KY", "America/Cayman",
- "Africa_Central", "BI", "Africa/Bujumbura",
- "Africa_Central", "ZM", "Africa/Lusaka",
- "Africa_Central", "ZW", "Africa/Harare",
- "Africa_Central", "CD", "Africa/Lubumbashi",
- "Africa_Central", "BW", "Africa/Gaborone",
- "Africa_Central", "RW", "Africa/Kigali",
- "Africa_Central", "MW", "Africa/Blantyre",
- "America_Central", "MX", "America/Mexico_City",
- "America_Central", "HN", "America/Tegucigalpa",
- "America_Central", "CA", "America/Winnipeg",
- "America_Central", "GT", "America/Guatemala",
- "America_Central", "SV", "America/El_Salvador",
- "America_Central", "CR", "America/Costa_Rica",
- "America_Central", "BZ", "America/Belize",
- "Atlantic", "MS", "America/Montserrat",
- "Atlantic", "AG", "America/Antigua",
- "Atlantic", "TT", "America/Port_of_Spain",
- "Atlantic", "MQ", "America/Martinique",
- "Atlantic", "DM", "America/Dominica",
- "Atlantic", "KN", "America/St_Kitts",
- "Atlantic", "BM", "Atlantic/Bermuda",
- "Atlantic", "PR", "America/Puerto_Rico",
- "Atlantic", "AW", "America/Aruba",
- "Atlantic", "VG", "America/Tortola",
- "Atlantic", "GD", "America/Grenada",
- "Atlantic", "GL", "America/Thule",
- "Atlantic", "BB", "America/Barbados",
- "Atlantic", "BQ", "America/Kralendijk",
- "Atlantic", "SX", "America/Lower_Princes",
- "Atlantic", "VI", "America/St_Thomas",
- "Atlantic", "MF", "America/Marigot",
- "Atlantic", "AI", "America/Anguilla",
- "Atlantic", "AN", "America/Curacao",
- "Atlantic", "LC", "America/St_Lucia",
- "Atlantic", "GP", "America/Guadeloupe",
- "Atlantic", "VC", "America/St_Vincent",
- "Arabian", "QA", "Asia/Qatar",
- "Arabian", "YE", "Asia/Aden",
- "Arabian", "KW", "Asia/Kuwait",
- "Arabian", "BH", "Asia/Bahrain",
- "Arabian", "IQ", "Asia/Baghdad",
- "India", "LK", "Asia/Colombo",
- "Europe_Eastern", "SY", "Asia/Damascus",
- "Europe_Eastern", "BG", "Europe/Sofia",
- "Europe_Eastern", "GR", "Europe/Athens",
- "Europe_Eastern", "JO", "Asia/Amman",
- "Europe_Eastern", "CY", "Asia/Nicosia",
- "Europe_Eastern", "AX", "Europe/Mariehamn",
- "Europe_Eastern", "LB", "Asia/Beirut",
- "Europe_Eastern", "FI", "Europe/Helsinki",
- "Europe_Eastern", "EG", "Africa/Cairo",
- "Chamorro", "GU", "Pacific/Guam",
- };
- private static final String[] aliasMap = new String[] {
- "Brazil/Acre", "America/Rio_Branco",
- "US/Indiana-Starke", "America/Indiana/Knox",
- "America/Atka", "America/Adak",
- "America/St_Barthelemy", "America/Guadeloupe",
- "Australia/North", "Australia/Darwin",
- "Europe/Zagreb", "Europe/Belgrade",
- "Etc/Universal", "Etc/UTC",
- "NZ-CHAT", "Pacific/Chatham",
- "Asia/Macao", "Asia/Macau",
- "Pacific/Yap", "Pacific/Chuuk",
- "Egypt", "Africa/Cairo",
- "US/Central", "America/Chicago",
- "Canada/Atlantic", "America/Halifax",
- "Brazil/East", "America/Sao_Paulo",
- "America/Cordoba", "America/Argentina/Cordoba",
- "US/Hawaii", "Pacific/Honolulu",
- "America/Louisville", "America/Kentucky/Louisville",
- "America/Shiprock", "America/Denver",
- "Australia/Canberra", "Australia/Sydney",
- "Asia/Chungking", "Asia/Chongqing",
- "Universal", "Etc/UTC",
- "US/Alaska", "America/Anchorage",
- "Asia/Ujung_Pandang", "Asia/Makassar",
- "Japan", "Asia/Tokyo",
- "Atlantic/Faeroe", "Atlantic/Faroe",
- "Asia/Istanbul", "Europe/Istanbul",
- "US/Pacific", "America/Los_Angeles",
- "Mexico/General", "America/Mexico_City",
- "Poland", "Europe/Warsaw",
- "Africa/Asmera", "Africa/Asmara",
- "Asia/Saigon", "Asia/Ho_Chi_Minh",
- "US/Michigan", "America/Detroit",
- "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
- "W-SU", "Europe/Moscow",
- "Australia/ACT", "Australia/Sydney",
- "Asia/Calcutta", "Asia/Kolkata",
- "Arctic/Longyearbyen", "Europe/Oslo",
- "America/Knox_IN", "America/Indiana/Knox",
- "ROC", "Asia/Taipei",
- "Zulu", "Etc/UTC",
- "Australia/Yancowinna", "Australia/Broken_Hill",
- "Australia/West", "Australia/Perth",
- "Singapore", "Asia/Singapore",
- "Europe/Mariehamn", "Europe/Helsinki",
- "ROK", "Asia/Seoul",
- "America/Porto_Acre", "America/Rio_Branco",
- "Etc/Zulu", "Etc/UTC",
- "Canada/Yukon", "America/Whitehorse",
- "Europe/Vatican", "Europe/Rome",
- "Africa/Timbuktu", "Africa/Bamako",
- "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
- "Canada/Pacific", "America/Vancouver",
- "US/Pacific-New", "America/Los_Angeles",
- "Mexico/BajaNorte", "America/Tijuana",
- "Europe/Guernsey", "Europe/London",
- "Asia/Tel_Aviv", "Asia/Jerusalem",
- "Chile/Continental", "America/Santiago",
- "Jamaica", "America/Jamaica",
- "Mexico/BajaSur", "America/Mazatlan",
- "Canada/Eastern", "America/Toronto",
- "Australia/Tasmania", "Australia/Hobart",
- "NZ", "Pacific/Auckland",
- "America/Lower_Princes", "America/Curacao",
- "GMT-", "Etc/GMT",
- "America/Rosario", "America/Argentina/Cordoba",
- "Libya", "Africa/Tripoli",
- "Asia/Ashkhabad", "Asia/Ashgabat",
- "Australia/NSW", "Australia/Sydney",
- "America/Marigot", "America/Guadeloupe",
- "Europe/Bratislava", "Europe/Prague",
- "Portugal", "Europe/Lisbon",
- "Etc/GMT-", "Etc/GMT",
- "Europe/San_Marino", "Europe/Rome",
- "Europe/Sarajevo", "Europe/Belgrade",
- "Antarctica/South_Pole", "Antarctica/McMurdo",
- "Canada/Central", "America/Winnipeg",
- "Etc/GMT", "Etc/GMT",
- "Europe/Isle_of_Man", "Europe/London",
- "America/Fort_Wayne", "America/Indiana/Indianapolis",
- "Eire", "Europe/Dublin",
- "America/Coral_Harbour", "America/Atikokan",
- "Europe/Nicosia", "Asia/Nicosia",
- "US/Samoa", "Pacific/Pago_Pago",
- "Hongkong", "Asia/Hong_Kong",
- "Canada/Saskatchewan", "America/Regina",
- "Asia/Thimbu", "Asia/Thimphu",
- "Kwajalein", "Pacific/Kwajalein",
- "GB", "Europe/London",
- "Chile/EasterIsland", "Pacific/Easter",
- "US/East-Indiana", "America/Indiana/Indianapolis",
- "Australia/LHI", "Australia/Lord_Howe",
- "Cuba", "America/Havana",
- "America/Jujuy", "America/Argentina/Jujuy",
- "US/Mountain", "America/Denver",
- "Atlantic/Jan_Mayen", "Europe/Oslo",
- "Europe/Tiraspol", "Europe/Chisinau",
- "Europe/Podgorica", "Europe/Belgrade",
- "US/Arizona", "America/Phoenix",
- "Navajo", "America/Denver",
- "Etc/Greenwich", "Etc/GMT",
- "Canada/Mountain", "America/Edmonton",
- "Iceland", "Atlantic/Reykjavik",
- "Australia/Victoria", "Australia/Melbourne",
- "Australia/South", "Australia/Adelaide",
- "Brazil/West", "America/Manaus",
- "Pacific/Ponape", "Pacific/Pohnpei",
- "Europe/Ljubljana", "Europe/Belgrade",
- "Europe/Jersey", "Europe/London",
- "Australia/Queensland", "Australia/Brisbane",
- "UTC", "Etc/UTC",
- "Canada/Newfoundland", "America/St_Johns",
- "Europe/Skopje", "Europe/Belgrade",
- "PRC", "Asia/Shanghai",
- "UCT", "Etc/UCT",
- "America/Mendoza", "America/Argentina/Mendoza",
- "Israel", "Asia/Jerusalem",
- "US/Eastern", "America/New_York",
- "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
- "Turkey", "Europe/Istanbul",
- "GMT", "Etc/GMT",
- "US/Aleutian", "America/Adak",
- "Brazil/DeNoronha", "America/Noronha",
- "GB-Eire", "Europe/London",
- "Asia/Dacca", "Asia/Dhaka",
- "America/Ensenada", "America/Tijuana",
- "America/Catamarca", "America/Argentina/Catamarca",
- "Iran", "Asia/Tehran",
- "Greenwich", "Etc/GMT",
- "Pacific/Truk", "Pacific/Chuuk",
- "Pacific/Samoa", "Pacific/Pago_Pago",
- "America/Virgin", "America/St_Thomas",
- "Asia/Katmandu", "Asia/Kathmandu",
- "America/Indianapolis", "America/Indiana/Indianapolis",
- "Europe/Belfast", "Europe/London",
- "America/Kralendijk", "America/Curacao",
- "Asia/Rangoon", "Asia/Yangon",
- };
-
- private static final Map zidToMzone = new HashMap<>();
- private static final Map mzoneToZid = new HashMap<>();
- private static final Map> mzoneToZidL = new HashMap<>();
- private static final Map aliases = new HashMap<>();
-
- static {
- for (int i = 0; i < zidMap.length; i += 3) {
- zidToMzone.put(zidMap[i], zidMap[i + 1]);
- mzoneToZid.put(zidMap[i + 1], zidMap[i + 2]);
- }
-
- for (int i = 0; i < mzoneMap.length; i += 3) {
- String mzone = mzoneMap[i];
- Map map = mzoneToZidL.get(mzone);
- if (map == null) {
- map = new HashMap<>();
- mzoneToZidL.put(mzone, map);
- }
- map.put(mzoneMap[i + 1], mzoneMap[i + 2]);
- }
-
- for (int i = 0; i < aliasMap.length; i += 2) {
- aliases.put(aliasMap[i], aliasMap[i + 1]);
- }
- }
-}
diff --git a/src/java.base/share/classes/java/time/format/ZoneName.java.template b/src/java.base/share/classes/java/time/format/ZoneName.java.template
new file mode 100644
index 00000000000..54e9d5b861f
--- /dev/null
+++ b/src/java.base/share/classes/java/time/format/ZoneName.java.template
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2013, 2018, 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.time.format;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+/**
+ * A helper class to map a zone name to metazone and back to the
+ * appropriate zone id for the particular locale.
+ *
+ * The zid<->metazone mappings are based on CLDR metaZones.xml.
+ * The alias mappings are based on Link entries in tzdb data files and
+ * CLDR's supplementalMetadata.xml.
+ */
+class ZoneName {
+
+ public static String toZid(String zid, Locale locale) {
+ String mzone = zidToMzone.get(zid);
+ if (mzone == null && aliases.containsKey(zid)) {
+ zid = aliases.get(zid);
+ mzone = zidToMzone.get(zid);
+ }
+ if (mzone != null) {
+ Map map = mzoneToZidL.get(mzone);
+ if (map != null && map.containsKey(locale.getCountry())) {
+ zid = map.get(locale.getCountry());
+ } else {
+ zid = mzoneToZid.get(mzone);
+ }
+ }
+ return toZid(zid);
+ }
+
+ public static String toZid(String zid) {
+ if (aliases.containsKey(zid)) {
+ return aliases.get(zid);
+ }
+ return zid;
+ }
+
+ private static final String[] zidMap = new String[] {
+ // From metaZones.xml
+%%%%ZIDMAP%%%%
+
+ // From tzdb
+ "Africa/Khartoum", "Africa_Central", "Africa/Maputo", // tzdata2017c
+ "Africa/Windhoek", "Africa_Central", "Africa/Maputo", // tzdata2017c
+ "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos", // tzdata2018c
+ };
+ private static final String[] mzoneMap = new String[] {
+ // From metaZones.xml
+%%%%MZONEMAP%%%%
+
+ // From tzdb
+ "Africa_Western", "ST", "Africa/Sao_Tome", // tzdata2018c
+ };
+ private static final String[] aliasMap = new String[] {
+ // From supplementalMetadata.xml
+%%%%DEPRECATED%%%%
+
+ // From tzdb
+ "Brazil/Acre", "America/Rio_Branco",
+ "US/Indiana-Starke", "America/Indiana/Knox",
+ "America/Atka", "America/Adak",
+ "America/St_Barthelemy", "America/Guadeloupe",
+ "Australia/North", "Australia/Darwin",
+ "Europe/Zagreb", "Europe/Belgrade",
+ "Etc/Universal", "Etc/UTC",
+ "NZ-CHAT", "Pacific/Chatham",
+ "Asia/Macao", "Asia/Macau",
+ "Pacific/Yap", "Pacific/Chuuk",
+ "Egypt", "Africa/Cairo",
+ "US/Central", "America/Chicago",
+ "Canada/Atlantic", "America/Halifax",
+ "Brazil/East", "America/Sao_Paulo",
+ "America/Cordoba", "America/Argentina/Cordoba",
+ "US/Hawaii", "Pacific/Honolulu",
+ "America/Louisville", "America/Kentucky/Louisville",
+ "America/Shiprock", "America/Denver",
+ "Australia/Canberra", "Australia/Sydney",
+ "Asia/Chungking", "Asia/Chongqing",
+ "Universal", "Etc/UTC",
+ "US/Alaska", "America/Anchorage",
+ "Asia/Ujung_Pandang", "Asia/Makassar",
+ "Japan", "Asia/Tokyo",
+ "Atlantic/Faeroe", "Atlantic/Faroe",
+ "Asia/Istanbul", "Europe/Istanbul",
+ "US/Pacific", "America/Los_Angeles",
+ "Mexico/General", "America/Mexico_City",
+ "Poland", "Europe/Warsaw",
+ "Africa/Asmera", "Africa/Asmara",
+ "Asia/Saigon", "Asia/Ho_Chi_Minh",
+ "US/Michigan", "America/Detroit",
+ "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
+ "W-SU", "Europe/Moscow",
+ "Australia/ACT", "Australia/Sydney",
+ "Asia/Calcutta", "Asia/Kolkata",
+ "Arctic/Longyearbyen", "Europe/Oslo",
+ "America/Knox_IN", "America/Indiana/Knox",
+ "ROC", "Asia/Taipei",
+ "Zulu", "Etc/UTC",
+ "Australia/Yancowinna", "Australia/Broken_Hill",
+ "Australia/West", "Australia/Perth",
+ "Singapore", "Asia/Singapore",
+ "Europe/Mariehamn", "Europe/Helsinki",
+ "ROK", "Asia/Seoul",
+ "America/Porto_Acre", "America/Rio_Branco",
+ "Etc/Zulu", "Etc/UTC",
+ "Canada/Yukon", "America/Whitehorse",
+ "Europe/Vatican", "Europe/Rome",
+ "Africa/Timbuktu", "Africa/Bamako",
+ "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
+ "Canada/Pacific", "America/Vancouver",
+ "US/Pacific-New", "America/Los_Angeles",
+ "Mexico/BajaNorte", "America/Tijuana",
+ "Europe/Guernsey", "Europe/London",
+ "Asia/Tel_Aviv", "Asia/Jerusalem",
+ "Chile/Continental", "America/Santiago",
+ "Jamaica", "America/Jamaica",
+ "Mexico/BajaSur", "America/Mazatlan",
+ "Canada/Eastern", "America/Toronto",
+ "Australia/Tasmania", "Australia/Hobart",
+ "NZ", "Pacific/Auckland",
+ "America/Lower_Princes", "America/Curacao",
+ "GMT-", "Etc/GMT",
+ "America/Rosario", "America/Argentina/Cordoba",
+ "Libya", "Africa/Tripoli",
+ "Asia/Ashkhabad", "Asia/Ashgabat",
+ "Australia/NSW", "Australia/Sydney",
+ "America/Marigot", "America/Guadeloupe",
+ "Europe/Bratislava", "Europe/Prague",
+ "Portugal", "Europe/Lisbon",
+ "Etc/GMT-", "Etc/GMT",
+ "Europe/San_Marino", "Europe/Rome",
+ "Europe/Sarajevo", "Europe/Belgrade",
+ "Antarctica/South_Pole", "Antarctica/McMurdo",
+ "Canada/Central", "America/Winnipeg",
+ "Etc/GMT", "Etc/GMT",
+ "Europe/Isle_of_Man", "Europe/London",
+ "America/Fort_Wayne", "America/Indiana/Indianapolis",
+ "Eire", "Europe/Dublin",
+ "America/Coral_Harbour", "America/Atikokan",
+ "Europe/Nicosia", "Asia/Nicosia",
+ "US/Samoa", "Pacific/Pago_Pago",
+ "Hongkong", "Asia/Hong_Kong",
+ "Canada/Saskatchewan", "America/Regina",
+ "Asia/Thimbu", "Asia/Thimphu",
+ "Kwajalein", "Pacific/Kwajalein",
+ "GB", "Europe/London",
+ "Chile/EasterIsland", "Pacific/Easter",
+ "US/East-Indiana", "America/Indiana/Indianapolis",
+ "Australia/LHI", "Australia/Lord_Howe",
+ "Cuba", "America/Havana",
+ "America/Jujuy", "America/Argentina/Jujuy",
+ "US/Mountain", "America/Denver",
+ "Atlantic/Jan_Mayen", "Europe/Oslo",
+ "Europe/Tiraspol", "Europe/Chisinau",
+ "Europe/Podgorica", "Europe/Belgrade",
+ "US/Arizona", "America/Phoenix",
+ "Navajo", "America/Denver",
+ "Etc/Greenwich", "Etc/GMT",
+ "Canada/Mountain", "America/Edmonton",
+ "Iceland", "Atlantic/Reykjavik",
+ "Australia/Victoria", "Australia/Melbourne",
+ "Australia/South", "Australia/Adelaide",
+ "Brazil/West", "America/Manaus",
+ "Pacific/Ponape", "Pacific/Pohnpei",
+ "Europe/Ljubljana", "Europe/Belgrade",
+ "Europe/Jersey", "Europe/London",
+ "Australia/Queensland", "Australia/Brisbane",
+ "UTC", "Etc/UTC",
+ "Canada/Newfoundland", "America/St_Johns",
+ "Europe/Skopje", "Europe/Belgrade",
+ "PRC", "Asia/Shanghai",
+ "UCT", "Etc/UCT",
+ "America/Mendoza", "America/Argentina/Mendoza",
+ "Israel", "Asia/Jerusalem",
+ "US/Eastern", "America/New_York",
+ "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
+ "Turkey", "Europe/Istanbul",
+ "GMT", "Etc/GMT",
+ "US/Aleutian", "America/Adak",
+ "Brazil/DeNoronha", "America/Noronha",
+ "GB-Eire", "Europe/London",
+ "Asia/Dacca", "Asia/Dhaka",
+ "America/Ensenada", "America/Tijuana",
+ "America/Catamarca", "America/Argentina/Catamarca",
+ "Iran", "Asia/Tehran",
+ "Greenwich", "Etc/GMT",
+ "Pacific/Truk", "Pacific/Chuuk",
+ "Pacific/Samoa", "Pacific/Pago_Pago",
+ "America/Virgin", "America/St_Thomas",
+ "Asia/Katmandu", "Asia/Kathmandu",
+ "America/Indianapolis", "America/Indiana/Indianapolis",
+ "Europe/Belfast", "Europe/London",
+ "America/Kralendijk", "America/Curacao",
+ "Asia/Rangoon", "Asia/Yangon",
+ };
+
+ private static final Map zidToMzone = new HashMap<>();
+ private static final Map mzoneToZid = new HashMap<>();
+ private static final Map> mzoneToZidL = new HashMap<>();
+ private static final Map aliases = new HashMap<>();
+
+ static {
+ for (int i = 0; i < zidMap.length; i += 3) {
+ zidToMzone.put(zidMap[i], zidMap[i + 1]);
+ mzoneToZid.put(zidMap[i + 1], zidMap[i + 2]);
+ }
+
+ for (int i = 0; i < mzoneMap.length; i += 3) {
+ String mzone = mzoneMap[i];
+ Map map = mzoneToZidL.get(mzone);
+ if (map == null) {
+ map = new HashMap<>();
+ mzoneToZidL.put(mzone, map);
+ }
+ map.put(mzoneMap[i + 1], mzoneMap[i + 2]);
+ }
+
+ for (int i = 0; i < aliasMap.length; i += 2) {
+ aliases.put(aliasMap[i], aliasMap[i + 1]);
+ }
+ }
+}
diff --git a/src/java.base/share/classes/java/util/zip/ZipFile.java b/src/java.base/share/classes/java/util/zip/ZipFile.java
index ee53b62ee6d..d4ff24077e7 100644
--- a/src/java.base/share/classes/java/util/zip/ZipFile.java
+++ b/src/java.base/share/classes/java/util/zip/ZipFile.java
@@ -37,7 +37,6 @@ import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.Files;
-
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
@@ -52,13 +51,14 @@ import java.util.Set;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.WeakHashMap;
-
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
+import jdk.internal.misc.JavaLangAccess;
import jdk.internal.misc.JavaUtilZipFileAccess;
import jdk.internal.misc.SharedSecrets;
import jdk.internal.misc.VM;
@@ -834,11 +834,10 @@ class ZipFile implements ZipConstants, Closeable {
static CleanableResource get(ZipFile zf, File file, int mode)
throws IOException {
Class> clz = zf.getClass();
- while (clz != ZipFile.class) {
- try {
- clz.getDeclaredMethod("close");
+ while (clz != ZipFile.class && clz != JarFile.class) {
+ if (JLA.getDeclaredPublicMethods(clz, "close").size() != 0) {
return new FinalizableResource(zf, file, mode);
- } catch (NoSuchMethodException nsme) {}
+ }
clz = clz.getSuperclass();
}
return new CleanableResource(zf, file, mode);
@@ -1101,6 +1100,8 @@ class ZipFile implements ZipConstants, Closeable {
}
private static boolean isWindows;
+ private static final JavaLangAccess JLA;
+
static {
SharedSecrets.setJavaUtilZipFileAccess(
new JavaUtilZipFileAccess() {
@@ -1133,6 +1134,7 @@ class ZipFile implements ZipConstants, Closeable {
}
}
);
+ JLA = jdk.internal.misc.SharedSecrets.getJavaLangAccess();
isWindows = VM.getSavedProperty("os.name").contains("Windows");
}
diff --git a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityAccess.java b/src/java.base/share/classes/jdk/internal/misc/JavaSecurityAccess.java
index 833a01b7c1d..2c1038f9b53 100644
--- a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityAccess.java
+++ b/src/java.base/share/classes/jdk/internal/misc/JavaSecurityAccess.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2018, 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 jdk.internal.misc;
import java.security.AccessControlContext;
+import java.security.PermissionCollection;
import java.security.PrivilegedAction;
import java.security.ProtectionDomain;
@@ -39,4 +40,14 @@ public interface JavaSecurityAccess {
AccessControlContext context);
ProtectionDomain[] getProtectDomains(AccessControlContext context);
+
+ interface ProtectionDomainCache {
+ void put(ProtectionDomain pd, PermissionCollection pc);
+ PermissionCollection get(ProtectionDomain pd);
+ }
+
+ /**
+ * Returns the ProtectionDomainCache.
+ */
+ ProtectionDomainCache getProtectionDomainCache();
}
diff --git a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java
index 0f60833ec78..fd792cd847f 100644
--- a/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java
+++ b/src/java.base/share/classes/jdk/internal/misc/SharedSecrets.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2018, 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
@@ -35,7 +35,6 @@ import java.io.FilePermission;
import java.io.ObjectInputStream;
import java.io.RandomAccessFile;
import java.security.ProtectionDomain;
-import java.security.AccessController;
/** A repository of "shared secrets", which are a mechanism for
calling implementation-private methods in another package without
@@ -63,7 +62,6 @@ public class SharedSecrets {
private static JavaNioAccess javaNioAccess;
private static JavaIOFileDescriptorAccess javaIOFileDescriptorAccess;
private static JavaIOFilePermissionAccess javaIOFilePermissionAccess;
- private static JavaSecurityProtectionDomainAccess javaSecurityProtectionDomainAccess;
private static JavaSecurityAccess javaSecurityAccess;
private static JavaUtilZipFileAccess javaUtilZipFileAccess;
private static JavaUtilResourceBundleAccess javaUtilResourceBundleAccess;
@@ -235,25 +233,13 @@ public class SharedSecrets {
return javaIOFileDescriptorAccess;
}
- public static void setJavaSecurityProtectionDomainAccess
- (JavaSecurityProtectionDomainAccess jspda) {
- javaSecurityProtectionDomainAccess = jspda;
- }
-
- public static JavaSecurityProtectionDomainAccess
- getJavaSecurityProtectionDomainAccess() {
- if (javaSecurityProtectionDomainAccess == null)
- unsafe.ensureClassInitialized(ProtectionDomain.class);
- return javaSecurityProtectionDomainAccess;
- }
-
public static void setJavaSecurityAccess(JavaSecurityAccess jsa) {
javaSecurityAccess = jsa;
}
public static JavaSecurityAccess getJavaSecurityAccess() {
if (javaSecurityAccess == null) {
- unsafe.ensureClassInitialized(AccessController.class);
+ unsafe.ensureClassInitialized(ProtectionDomain.class);
}
return javaSecurityAccess;
}
diff --git a/src/java.base/share/classes/sun/security/provider/PolicyFile.java b/src/java.base/share/classes/sun/security/provider/PolicyFile.java
index 6aadd9c2361..587d885d92f 100644
--- a/src/java.base/share/classes/sun/security/provider/PolicyFile.java
+++ b/src/java.base/share/classes/sun/security/provider/PolicyFile.java
@@ -41,8 +41,8 @@ import java.io.FilePermission;
import java.net.SocketPermission;
import java.net.NetPermission;
import java.util.concurrent.atomic.AtomicReference;
-import jdk.internal.misc.JavaSecurityProtectionDomainAccess;
-import static jdk.internal.misc.JavaSecurityProtectionDomainAccess.ProtectionDomainCache;
+import jdk.internal.misc.JavaSecurityAccess;
+import static jdk.internal.misc.JavaSecurityAccess.ProtectionDomainCache;
import jdk.internal.misc.SharedSecrets;
import sun.security.util.*;
import sun.net.www.ParseUtil;
@@ -2202,8 +2202,8 @@ public class PolicyFile extends java.security.Policy {
aliasMapping = Collections.synchronizedMap(new HashMap<>(11));
pdMapping = new ProtectionDomainCache[numCaches];
- JavaSecurityProtectionDomainAccess jspda
- = SharedSecrets.getJavaSecurityProtectionDomainAccess();
+ JavaSecurityAccess jspda
+ = SharedSecrets.getJavaSecurityAccess();
for (int i = 0; i < numCaches; i++) {
pdMapping[i] = jspda.getProtectionDomainCache();
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java
index b0e981c4ff8..213abeb979b 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java
@@ -287,7 +287,12 @@ public class Lint
/**
* Warn about potentially unsafe vararg methods
*/
- VARARGS("varargs");
+ VARARGS("varargs"),
+
+ /**
+ * Warn about use of preview features.
+ */
+ PREVIEW("preview");
LintCategory(String option) {
this(option, false);
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java
new file mode 100644
index 00000000000..84cff051fe4
--- /dev/null
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2018, 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 com.sun.tools.javac.code;
+
+import com.sun.tools.javac.code.Lint.LintCategory;
+import com.sun.tools.javac.code.Source.Feature;
+import com.sun.tools.javac.comp.Infer;
+import com.sun.tools.javac.jvm.Target;
+import com.sun.tools.javac.resources.CompilerProperties.Errors;
+import com.sun.tools.javac.resources.CompilerProperties.Warnings;
+import com.sun.tools.javac.util.Assert;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
+import com.sun.tools.javac.util.JCDiagnostic.Error;
+import com.sun.tools.javac.util.JCDiagnostic.SimpleDiagnosticPosition;
+import com.sun.tools.javac.util.Log;
+import com.sun.tools.javac.util.MandatoryWarningHandler;
+import com.sun.tools.javac.util.Name;
+import com.sun.tools.javac.util.Options;
+
+import javax.tools.JavaFileObject;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+
+import static com.sun.tools.javac.main.Option.PREVIEW;
+
+/**
+ * Helper class to handle preview language features. This class maps certain language features
+ * (see {@link Feature} into 'preview' features; the mapping is completely ad-hoc, so as to allow
+ * for maximum flexibility, which allows to migrate preview feature into supported features with ease.
+ *
+ * This class acts as a centralized point against which usages of preview features are reported by
+ * clients (e.g. other javac classes). Internally, this class collects all such usages and generates
+ * diagnostics to inform the user of such usages. Such diagnostics can be enabled using the
+ * {@link LintCategory#PREVIEW} lint category, and are suppressible by usual means.
+ */
+public class Preview {
+
+ /** flag: are preview featutres enabled */
+ private final boolean enabled;
+
+ /** the diag handler to manage preview feature usage diagnostics */
+ private final MandatoryWarningHandler previewHandler;
+
+ /** test flag: should all features be considered as preview features? */
+ private final boolean forcePreview;
+
+ /** a mapping from classfile numbers to Java SE versions */
+ private final Map majorVersionToSource;
+
+
+ private final Lint lint;
+ private final Log log;
+
+ private static final Context.Key previewKey = new Context.Key<>();
+
+ public static Preview instance(Context context) {
+ Preview instance = context.get(previewKey);
+ if (instance == null) {
+ instance = new Preview(context);
+ }
+ return instance;
+ }
+
+ Preview(Context context) {
+ context.put(previewKey, this);
+ Options options = Options.instance(context);
+ enabled = options.isSet(PREVIEW);
+ log = Log.instance(context);
+ lint = Lint.instance(context);
+ this.previewHandler =
+ new MandatoryWarningHandler(log, lint.isEnabled(LintCategory.PREVIEW), true, "preview", LintCategory.PREVIEW);
+ forcePreview = options.isSet("forcePreview");
+ majorVersionToSource = initMajorVersionToSourceMap();
+ }
+
+ private Map initMajorVersionToSourceMap() {
+ Map majorVersionToSource = new HashMap<>();
+ for (Target t : Target.values()) {
+ int major = t.majorVersion;
+ Source source = Source.lookup(t.name);
+ if (source != null) {
+ majorVersionToSource.put(major, source);
+ }
+ }
+ return majorVersionToSource;
+ }
+
+ /**
+ * Report usage of a preview feature. Usages reported through this method will affect the
+ * set of sourcefiles with dependencies on preview features.
+ * @param pos the position at which the preview feature was used.
+ * @param feature the preview feature used.
+ */
+ public void warnPreview(int pos, Feature feature) {
+ warnPreview(new SimpleDiagnosticPosition(pos), feature);
+ }
+
+ /**
+ * Report usage of a preview feature. Usages reported through this method will affect the
+ * set of sourcefiles with dependencies on preview features.
+ * @param pos the position at which the preview feature was used.
+ * @param feature the preview feature used.
+ */
+ public void warnPreview(DiagnosticPosition pos, Feature feature) {
+ Assert.check(isEnabled());
+ Assert.check(isPreview(feature));
+ if (!lint.isSuppressed(LintCategory.PREVIEW)) {
+ previewHandler.report(pos, feature.isPlural() ?
+ Warnings.PreviewFeatureUsePlural(feature.nameFragment()) :
+ Warnings.PreviewFeatureUse(feature.nameFragment()));
+ }
+ }
+
+ /**
+ * Report usage of a preview feature in classfile.
+ * @param classfile the name of the classfile with preview features enabled
+ * @param majorVersion the major version found in the classfile.
+ */
+ public void warnPreview(JavaFileObject classfile, int majorVersion) {
+ Assert.check(isEnabled());
+ if (!lint.isSuppressed(LintCategory.PREVIEW)) {
+ previewHandler.report(null,
+ Warnings.PreviewFeatureUseClassfile(classfile, majorVersionToSource.get(majorVersion).name));
+ }
+ }
+
+ /**
+ * Are preview features enabled?
+ * @return true, if preview features are enabled.
+ */
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ /**
+ * Is given feature a preview feature?
+ * @param feature the feature to be tested.
+ * @return true, if given feature is a preview feature.
+ */
+ public boolean isPreview(Feature feature) {
+ //Note: this is a backdoor which allows to optionally treat all features as 'preview' (for testing).
+ //When real preview features will be added, this method can be implemented to return 'true'
+ //for those selected features, and 'false' for all the others.
+ return forcePreview;
+ }
+
+ /**
+ * Generate an error key which captures the fact that a given preview feature could not be used
+ * due to the preview feature support being disabled.
+ * @param feature the feature for which the diagnostic has to be generated.
+ * @return the diagnostic.
+ */
+ public Error disabledError(Feature feature) {
+ Assert.check(!isEnabled());
+ return feature.isPlural() ?
+ Errors.PreviewFeatureDisabledPlural(feature.nameFragment()) :
+ Errors.PreviewFeatureDisabled(feature.nameFragment());
+ }
+
+ /**
+ * Generate an error key which captures the fact that a preview classfile cannot be loaded
+ * due to the preview feature support being disabled.
+ * @param classfile the name of the classfile with preview features enabled
+ * @param majorVersion the major version found in the classfile.
+ */
+ public Error disabledError(JavaFileObject classfile, int majorVersion) {
+ Assert.check(!isEnabled());
+ return Errors.PreviewFeatureDisabledClassfile(classfile, majorVersionToSource.get(majorVersion).name);
+ }
+
+ /**
+ * Report any deferred diagnostics.
+ */
+ public void reportDeferredDiagnostics() {
+ previewHandler.reportDeferredDiagnostic();
+ }
+}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java
index 822583edf77..9f643110332 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java
@@ -217,6 +217,16 @@ public enum Source {
source.compareTo(maxLevel) <= 0;
}
+ public boolean isPlural() {
+ Assert.checkNonNull(optKind);
+ return optKind == DiagKind.PLURAL;
+ }
+
+ public Fragment nameFragment() {
+ Assert.checkNonNull(optFragment);
+ return optFragment;
+ }
+
public Fragment fragment(String sourceName) {
Assert.checkNonNull(optFragment);
return optKind == DiagKind.NORMAL ?
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
index bacd82972fd..8b4be83c2b3 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java
@@ -67,6 +67,7 @@ import static com.sun.tools.javac.code.Flags.*;
import static com.sun.tools.javac.code.Kinds.Kind.*;
import static com.sun.tools.javac.code.TypeTag.*;
import static com.sun.tools.javac.tree.JCTree.Tag.*;
+import static com.sun.tools.javac.jvm.Pool.DynamicMethod;
import javax.lang.model.element.ElementKind;
import javax.lang.model.type.TypeKind;
@@ -208,6 +209,8 @@ public class LambdaToMethod extends TreeTranslator {
private Map dedupedLambdas;
+ private Map dynMethSyms = new HashMap<>();
+
/**
* list of deserialization cases
*/
@@ -1200,9 +1203,10 @@ public class LambdaToMethod extends TreeTranslator {
(MethodSymbol)bsm,
indyType,
staticArgs.toArray());
-
JCFieldAccess qualifier = make.Select(make.QualIdent(site.tsym), bsmName);
- qualifier.sym = dynSym;
+ DynamicMethodSymbol existing = kInfo.dynMethSyms.putIfAbsent(
+ new DynamicMethod(dynSym, types), dynSym);
+ qualifier.sym = existing != null ? existing : dynSym;
qualifier.type = indyType.getReturnType();
JCMethodInvocation proxyCall = make.Apply(List.nil(), qualifier, indyArgs);
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
index d07e4a86a96..374049f9515 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
@@ -2120,6 +2120,7 @@ public class Resolve {
Set recoverableModules = new HashSet<>(syms.getAllModules());
+ recoverableModules.add(syms.unnamedModule);
recoverableModules.remove(env.toplevel.modle);
for (ModuleSymbol ms : recoverableModules) {
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java
index 54f316eb253..4daeb73bc0a 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java
@@ -105,6 +105,8 @@ public class ClassFile {
public final static int MAX_LOCALS = 0xffff;
public final static int MAX_STACK = 0xffff;
+ public final static int PREVIEW_MINOR_VERSION = 0xffff;
+
public enum Version {
V45_3(45, 3), // base level for all attributes
V49(49, 0), // JDK 1.5: enum, generics, annotations
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java
index 557d04228cf..5a1d3b9005f 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java
@@ -148,6 +148,11 @@ public class ClassReader {
DeferredCompletionFailureHandler dcfh;
+ /**
+ * Support for preview language features.
+ */
+ Preview preview;
+
/** The current scope where type variables are entered.
*/
protected WriteableScope typevars;
@@ -270,6 +275,7 @@ public class ClassReader {
verbose = options.isSet(Option.VERBOSE);
Source source = Source.instance(context);
+ preview = Preview.instance(context);
allowSimplifiedVarargs = Feature.SIMPLIFIED_VARARGS.allowedInSource(source);
allowModules = Feature.MODULES.allowedInSource(source);
@@ -2786,6 +2792,14 @@ public class ClassReader {
Integer.toString(maxMinor));
}
+ if (minorVersion == ClassFile.PREVIEW_MINOR_VERSION) {
+ if (!preview.isEnabled()) {
+ log.error(preview.disabledError(currentClassFile, majorVersion));
+ } else {
+ preview.warnPreview(c.classfile, majorVersion);
+ }
+ }
+
indexPool();
if (signatureBuffer.length < bp) {
int ns = Integer.highestOneBit(bp) << 1;
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
index e582e7b4cb6..f658b3f7d58 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
@@ -49,7 +49,6 @@ import com.sun.tools.javac.jvm.Pool.DynamicMethod;
import com.sun.tools.javac.jvm.Pool.Method;
import com.sun.tools.javac.jvm.Pool.MethodHandle;
import com.sun.tools.javac.jvm.Pool.Variable;
-import com.sun.tools.javac.main.Option;
import com.sun.tools.javac.util.*;
import static com.sun.tools.javac.code.Flags.*;
@@ -89,6 +88,10 @@ public class ClassWriter extends ClassFile {
*/
private boolean debugstackmap;
+ /** Preview language level.
+ */
+ private Preview preview;
+
/**
* Target class version.
*/
@@ -178,6 +181,7 @@ public class ClassWriter extends ClassFile {
log = Log.instance(context);
names = Names.instance(context);
options = Options.instance(context);
+ preview = Preview.instance(context);
target = Target.instance(context);
source = Source.instance(context);
types = Types.instance(context);
@@ -1819,7 +1823,11 @@ public class ClassWriter extends ClassFile {
acount += writeExtraClassAttributes(c);
poolbuf.appendInt(JAVA_MAGIC);
- poolbuf.appendChar(target.minorVersion);
+ if (preview.isEnabled()) {
+ poolbuf.appendChar(ClassFile.PREVIEW_MINOR_VERSION);
+ } else {
+ poolbuf.appendChar(target.minorVersion);
+ }
poolbuf.appendChar(target.majorVersion);
writePool(c.pool);
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java
index 39fba539659..1611b6946e6 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Pool.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, 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
@@ -180,10 +180,10 @@ public class Pool {
}
}
- static class DynamicMethod extends Method {
+ public static class DynamicMethod extends Method {
public Object[] uniqueStaticArgs;
- DynamicMethod(DynamicMethodSymbol m, Types types) {
+ public DynamicMethod(DynamicMethodSymbol m, Types types) {
super(m, types);
uniqueStaticArgs = getUniqueTypeArray(m.staticArgs, types);
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java
index 70d7be3d170..99853cc9c61 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java
@@ -536,6 +536,20 @@ public class Arguments {
}
}
+ if (options.isSet(Option.PREVIEW)) {
+ if (sourceString == null) {
+ //enable-preview must be used with explicit -source or --release
+ error("err.preview.without.source.or.release");
+ return false;
+ } else if (source != Source.DEFAULT) {
+ //enable-preview must be used with latest source version
+ error("err.preview.not.latest",
+ sourceString,
+ Source.DEFAULT.name);
+ return false;
+ }
+ }
+
String profileString = options.get(Option.PROFILE);
if (profileString != null) {
Profile profile = Profile.lookup(profileString);
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java
index 954bb9cf48c..54d5676d251 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java
@@ -275,6 +275,10 @@ public class JavaCompiler {
*/
protected Source source;
+ /** The preview language version.
+ */
+ protected Preview preview;
+
/** The module for code generation.
*/
protected Gen gen;
@@ -405,6 +409,7 @@ public class JavaCompiler {
log.error(Errors.CantAccess(ex.sym, ex.getDetailValue()));
}
source = Source.instance(context);
+ preview = Preview.instance(context);
attr = Attr.instance(context);
analyzer = Analyzer.instance(context);
chk = Check.instance(context);
@@ -1725,6 +1730,7 @@ public class JavaCompiler {
log.warning(Warnings.ProcUseProcOrImplicit);
}
chk.reportDeferredDiagnostics();
+ preview.reportDeferredDiagnostics();
if (log.compressedOutput) {
log.mandatoryNote(null, Notes.CompressedDiags);
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java
index 23bfdec575e..8c7a3da8fc7 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Option.java
@@ -330,6 +330,8 @@ public enum Option {
}
},
+ PREVIEW("--enable-preview", "opt.preview", STANDARD, BASIC),
+
PROFILE("-profile", "opt.arg.profile", "opt.profile", STANDARD, BASIC) {
@Override
public void process(OptionHelper helper, String option, String operand) throws InvalidValueException {
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java
index df1d5bb62ba..35fd2243cdf 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java
@@ -25,6 +25,7 @@
package com.sun.tools.javac.parser;
+import com.sun.tools.javac.code.Preview;
import com.sun.tools.javac.code.Source;
import com.sun.tools.javac.code.Source.Feature;
import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle;
@@ -53,6 +54,9 @@ public class JavaTokenizer {
*/
private Source source;
+ /** The preview language setting. */
+ private Preview preview;
+
/** The log to be used for error reporting.
*/
private final Log log;
@@ -115,12 +119,20 @@ public class JavaTokenizer {
this.log = fac.log;
this.tokens = fac.tokens;
this.source = fac.source;
+ this.preview = fac.preview;
this.reader = reader;
}
- private void checkSourceLevel(int pos, Feature feature) {
- if (!feature.allowedInSource(source)) {
+ protected void checkSourceLevel(int pos, Feature feature) {
+ if (preview.isPreview(feature) && !preview.isEnabled()) {
+ //preview feature without --preview flag, error
+ lexError(DiagnosticFlag.SOURCE_LEVEL, pos, preview.disabledError(feature));
+ } else if (!feature.allowedInSource(source)) {
+ //incompatible source level, error
lexError(DiagnosticFlag.SOURCE_LEVEL, pos, feature.error(source.name));
+ } else if (preview.isPreview(feature)) {
+ //use of preview feature, warn
+ preview.warnPreview(pos, feature);
}
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java
index 05d81f99356..82dddd48d77 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java
@@ -95,6 +95,9 @@ public class JavacParser implements Parser {
/** The Source language setting. */
private Source source;
+ /** The Preview language setting. */
+ private Preview preview;
+
/** The name table. */
private Names names;
@@ -169,6 +172,7 @@ public class JavacParser implements Parser {
this.log = fac.log;
this.names = fac.names;
this.source = fac.source;
+ this.preview = fac.preview;
this.allowStringFolding = fac.options.getBoolean("allowStringFolding", true);
this.keepDocComments = keepDocComments;
this.parseModuleInfo = parseModuleInfo;
@@ -4219,8 +4223,15 @@ public class JavacParser implements Parser {
}
protected void checkSourceLevel(int pos, Feature feature) {
- if (!feature.allowedInSource(source)) {
+ if (preview.isPreview(feature) && !preview.isEnabled()) {
+ //preview feature without --preview flag, error
+ log.error(DiagnosticFlag.SOURCE_LEVEL, pos, preview.disabledError(feature));
+ } else if (!feature.allowedInSource(source)) {
+ //incompatible source level, error
log.error(DiagnosticFlag.SOURCE_LEVEL, pos, feature.error(source.name));
+ } else if (preview.isPreview(feature)) {
+ //use of preview feature, warn
+ preview.warnPreview(pos, feature);
}
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java
index e9c53c9920c..e699a81d7b2 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java
@@ -27,6 +27,7 @@ package com.sun.tools.javac.parser;
import java.util.Locale;
+import com.sun.tools.javac.code.Preview;
import com.sun.tools.javac.code.Source;
import com.sun.tools.javac.tree.DocTreeMaker;
import com.sun.tools.javac.tree.TreeMaker;
@@ -62,6 +63,7 @@ public class ParserFactory {
final Log log;
final Tokens tokens;
final Source source;
+ final Preview preview;
final Names names;
final Options options;
final ScannerFactory scannerFactory;
@@ -76,6 +78,7 @@ public class ParserFactory {
this.names = Names.instance(context);
this.tokens = Tokens.instance(context);
this.source = Source.instance(context);
+ this.preview = Preview.instance(context);
this.options = Options.instance(context);
this.scannerFactory = ScannerFactory.instance(context);
this.locale = context.get(Locale.class);
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ScannerFactory.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ScannerFactory.java
index 838f13b5f3b..c15a1e37150 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ScannerFactory.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ScannerFactory.java
@@ -27,6 +27,7 @@ package com.sun.tools.javac.parser;
import java.nio.CharBuffer;
+import com.sun.tools.javac.code.Preview;
import com.sun.tools.javac.code.Source;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.Log;
@@ -56,6 +57,7 @@ public class ScannerFactory {
final Log log;
final Names names;
final Source source;
+ final Preview preview;
final Tokens tokens;
/** Create a new scanner factory. */
@@ -64,6 +66,7 @@ public class ScannerFactory {
this.log = Log.instance(context);
this.names = Names.instance(context);
this.source = Source.instance(context);
+ this.preview = Preview.instance(context);
this.tokens = Tokens.instance(context);
}
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
index 7d5891b02e6..169529a6396 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties
@@ -1547,6 +1547,25 @@ compiler.note.unchecked.filename.additional=\
compiler.note.unchecked.plural.additional=\
Some input files additionally use unchecked or unsafe operations.
+# 0: file name
+compiler.note.preview.filename=\
+ {0} uses preview language features.
+
+compiler.note.preview.plural=\
+ Some input files use preview language features.
+
+# The following string may appear after one of the above deprecation
+# messages.
+compiler.note.preview.recompile=\
+ Recompile with -Xlint:preview for details.
+
+# 0: file name
+compiler.note.preview.filename.additional=\
+ {0} has additional uses of preview language features.
+
+compiler.note.preview.plural.additional=\
+ Some input files additionally use preview language features.
+
# Notes related to annotation processing
# Print a client-generated note; assumed to be localized, no translation required
@@ -2665,6 +2684,34 @@ compiler.misc.feature.not.supported.in.source.plural=\
{0} are not supported in -source {1}\n\
(use -source {2} or higher to enable {0})
+# 0: message segment (feature)
+compiler.err.preview.feature.disabled=\
+ {0} is a preview feature and is disabled by default.\n\
+ (use --enable-preview to enable {0})
+
+# 0: message segment (feature)
+compiler.err.preview.feature.disabled.plural=\
+ {0} are a preview feature and are disabled by default.\n\
+ (use --enable-preview to enable {0})
+
+# 0: file object (classfile), 1: string (expected version)
+compiler.err.preview.feature.disabled.classfile=\
+ classfile for {0} uses preview features of Java SE {1}.\n\
+ (use --enable-preview to allow loading of classfiles which contain preview features)
+
+# 0: message segment (feature)
+compiler.warn.preview.feature.use=\
+ {0} is a preview feature and may be removed in a future release.
+
+# 0: message segment (feature)
+compiler.warn.preview.feature.use.plural=\
+ {0} are a preview feature and may be removed in a future release.
+
+# 0: file object (classfile), 1: string (expected version)
+compiler.warn.preview.feature.use.classfile=\
+ classfile for {0} uses preview features of Java SE {1}.
+
+
compiler.misc.feature.modules=\
modules
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties
index 67e77e3bd16..169f697ad92 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties
@@ -252,6 +252,9 @@ javac.opt.Xlint.desc.unchecked=\
javac.opt.Xlint.desc.varargs=\
Warn about potentially unsafe vararg methods
+javac.opt.Xlint.desc.preview=\
+ Warn about use of preview language features
+
javac.opt.Xdoclint=\
Enable recommended checks for problems in javadoc comments
# L10N: do not localize: all none
@@ -293,6 +296,8 @@ javac.opt.userpathsfirst=\
Search classpath and sourcepath for classes before the bootclasspath instead of after
javac.opt.prefer=\
Specify which file to read when both a source file and class file are found for an implicitly compiled class
+javac.opt.preview=\
+ Enable preview language features. To be used in conjunction with either -source or --release.
javac.opt.AT=\
Read options and filenames from file
javac.opt.diags=\
@@ -368,6 +373,11 @@ javac.warn.target.default.source.conflict=\
target release {0} conflicts with default source release {1}
javac.warn.profile.target.conflict=\
profile {0} is not valid for target release {1}
+javac.err.preview.not.latest=\
+ invalid source release {0} with --enable-preview\n\
+ (preview language features are only supported for release {1})
+javac.err.preview.without.source.or.release=\
+ --enable-preview must be used with either -source or --release
javac.err.file.not.found=\
file not found: {0}
javac.err.file.not.directory=\
diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java
index c67e1fae16c..8ed2efe4c36 100644
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleFrameWriter.java
@@ -40,6 +40,7 @@ import jdk.javadoc.internal.doclets.formats.html.markup.Links;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
import jdk.javadoc.internal.doclets.toolkit.util.DocFileIOException;
+import jdk.javadoc.internal.doclets.toolkit.util.DocPath;
import jdk.javadoc.internal.doclets.toolkit.util.DocPaths;
/**
@@ -100,8 +101,11 @@ public class ModuleFrameWriter extends HtmlDocletWriter {
HtmlTree htmlTree = (configuration.allowTag(HtmlTag.MAIN))
? HtmlTree.MAIN()
: body;
+ DocPath moduleSummary = configuration.useModuleDirectories
+ ? DocPaths.DOT_DOT.resolve(configuration.docPaths.moduleSummary(moduleElement))
+ : configuration.docPaths.moduleSummary(moduleElement);
Content heading = HtmlTree.HEADING(HtmlConstants.TITLE_HEADING, HtmlStyle.bar,
- mdlgen.links.createLink(configuration.docPaths.moduleSummary(moduleElement), mdlLabel, "", "classFrame"));
+ mdlgen.links.createLink(moduleSummary, mdlLabel, "", "classFrame"));
htmlTree.addContent(heading);
HtmlTree div = new HtmlTree(HtmlTag.DIV);
div.setStyle(HtmlStyle.indexContainer);
diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java
index bdb6063d5b5..be331fe0522 100644
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModuleIndexFrameWriter.java
@@ -36,7 +36,6 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java
index 077febff8bf..0f5d989496f 100644
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/ModulePackageIndexFrameWriter.java
@@ -37,7 +37,6 @@ import jdk.javadoc.internal.doclets.formats.html.markup.HtmlConstants;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTag;
import jdk.javadoc.internal.doclets.formats.html.markup.HtmlTree;
-import jdk.javadoc.internal.doclets.formats.html.markup.Links;
import jdk.javadoc.internal.doclets.formats.html.markup.RawHtml;
import jdk.javadoc.internal.doclets.formats.html.markup.StringContent;
import jdk.javadoc.internal.doclets.toolkit.Content;
@@ -189,7 +188,10 @@ public class ModulePackageIndexFrameWriter extends AbstractModuleIndexWriter {
* @param ul the Content object to which the all classes link should be added
*/
protected void addAllClassesLink(Content ul) {
- Content linkContent = links.createLink(DocPaths.ALLCLASSES_FRAME,
+ DocPath allClassesFrame = configuration.useModuleDirectories
+ ? DocPaths.DOT_DOT.resolve(DocPaths.ALLCLASSES_FRAME)
+ : DocPaths.ALLCLASSES_FRAME;
+ Content linkContent = links.createLink(allClassesFrame,
contents.allClassesLabel, "", "packageFrame");
Content li = HtmlTree.LI(linkContent);
ul.addContent(li);
@@ -202,7 +204,10 @@ public class ModulePackageIndexFrameWriter extends AbstractModuleIndexWriter {
* @param ul the Content object to which the all packages link should be added
*/
protected void addAllPackagesLink(Content ul) {
- Content linkContent = links.createLink(DocPaths.OVERVIEW_FRAME,
+ DocPath overviewFrame = configuration.useModuleDirectories
+ ? DocPaths.DOT_DOT.resolve(DocPaths.OVERVIEW_FRAME)
+ : DocPaths.OVERVIEW_FRAME;
+ Content linkContent = links.createLink(overviewFrame,
contents.allPackagesLabel, "", "packageListFrame");
Content li = HtmlTree.LI(linkContent);
ul.addContent(li);
@@ -215,7 +220,10 @@ public class ModulePackageIndexFrameWriter extends AbstractModuleIndexWriter {
* @param ul the Content object to which the all modules link should be added
*/
protected void addAllModulesLink(Content ul) {
- Content linkContent = links.createLink(DocPaths.MODULE_OVERVIEW_FRAME,
+ DocPath moduleOverviewFrame = configuration.useModuleDirectories
+ ? DocPaths.DOT_DOT.resolve(DocPaths.MODULE_OVERVIEW_FRAME)
+ : DocPaths.MODULE_OVERVIEW_FRAME;
+ Content linkContent = links.createLink(moduleOverviewFrame,
contents.allModulesLabel, "", "packageListFrame");
Content li = HtmlTree.LI(linkContent);
ul.addContent(li);
diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java
index ad675e2f3ef..28fc36f18d9 100644
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPath.java
@@ -30,10 +30,6 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-import javax.lang.model.element.ModuleElement;
-import javax.lang.model.element.PackageElement;
-import javax.lang.model.element.TypeElement;
-
/**
* Abstraction for immutable relative paths.
* Paths always use '/' as a separator, and never begin or end with '/'.
diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java
index 3618a6d0a30..19305d15048 100644
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java
@@ -49,6 +49,8 @@ public class DocPaths {
moduleSeparator = useModuleDirectories ? "/module-" : "-";
}
+ public static final DocPath DOT_DOT = DocPath.create("..");
+
/** The name of the file for all classes, without using frames, when --no-frames is specified. */
public static final DocPath ALLCLASSES = DocPath.create("allclasses.html");
diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt
index 4b8039d098f..ee3548132bd 100644
--- a/test/jdk/ProblemList.txt
+++ b/test/jdk/ProblemList.txt
@@ -589,7 +589,6 @@ javax/net/ssl/DTLS/RespondToRetransmit.java 8169086 macosx-x
sun/security/krb5/auto/UnboundSSL.java 8180265 windows-all
sun/security/provider/KeyStore/DKSTest.sh 8180266 windows-all
-sun/security/ssl/X509KeyManager/PreferredKey.java 8190333 generic-all
############################################################################
@@ -777,7 +776,7 @@ com/sun/jndi/ldap/DeadSSLLdapTimeoutTest.java 8169942 linux-i5
com/sun/jndi/ldap/LdapTimeoutTest.java 8151678 linux-all
-javax/rmi/ssl/SSLSocketParametersTest.sh 8194663 generic-all
+javax/rmi/ssl/SSLSocketParametersTest.sh 8162906 generic-all
############################################################################
diff --git a/test/jdk/java/lang/invoke/condy/CondyBSMInvocation.java b/test/jdk/java/lang/invoke/condy/CondyBSMInvocation.java
index 80ff8059f53..86a68049790 100644
--- a/test/jdk/java/lang/invoke/condy/CondyBSMInvocation.java
+++ b/test/jdk/java/lang/invoke/condy/CondyBSMInvocation.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2018, 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,7 +23,7 @@
/*
* @test
- * @bug 8186046
+ * @bug 8186046 8199875
* @summary Test basic invocation of bootstrap methods
* @library /lib/testlibrary/bytecode /java/lang/invoke/common
* @build jdk.experimental.bytecode.BasicClassBuilder test.java.lang.invoke.lib.InstructionHelper
@@ -40,8 +40,10 @@ import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.lang.invoke.WrongMethodTypeException;
+import java.util.Arrays;
import java.util.Collections;
import java.util.stream.IntStream;
+import java.util.stream.Stream;
import static java.lang.invoke.MethodType.methodType;
@@ -63,85 +65,85 @@ public class CondyBSMInvocation {
}
}
+ static MethodHandle[] bsms(String bsmName) {
+ return Stream.of(CondyBSMInvocation.class.getDeclaredMethods()).
+ filter(m -> m.getName().equals(bsmName)).
+ map(m -> {
+ try {
+ return MethodHandles.lookup().unreflect(m);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException();
+ }
+ }).toArray(MethodHandle[]::new);
+ }
- public static Object _bsm() {
+ public static Object shape_bsm() {
return "0";
}
- public static Object _bsm(Object a1) {
+ public static Object shape_bsm(Object a1) {
return "0";
}
- // Note: when pull mode is supported for a BSM this test case
- // will fail and must be removed
- public static Object _bsm(Object a1, Object a2) {
+ public static Object shape_bsm(Object... args) {
+ return "0";
+ }
+
+ public static Object shape_bsm(Object a1, Object a2) {
+ return "0";
+ }
+
+ public static Object shape_bsm(Object a1, Object... args) {
+ return "0";
+ }
+
+ public static Object shape_bsm(Object a1, Object a2, Object a3) {
+ return "0";
+ }
+
+ public static Object shape_bsm(MethodHandles.Lookup a1) {
return "0";
}
@Test
- public void testWrongArity() throws Throwable {
- for (int i = 0; i < 3; i++) {
- final int n = i;
- MethodType mt = methodType(Object.class)
- .appendParameterTypes(Collections.nCopies(n, Object.class));
+ public void testWrongShape() throws Throwable {
+ for (MethodHandle bsm : bsms("shape_bsm")) {
MethodHandle mh = InstructionHelper.ldcDynamicConstant(
L, "name", Object.class,
- "_bsm", mt,
- S -> IntStream.range(0, n).forEach(S::add)
+ "shape_bsm", bsm.type(),
+ S -> {}
);
try {
Object r = mh.invoke();
- Assert.fail("BootstrapMethodError expected to be thrown for arrity " + n);
+ Assert.fail("BootstrapMethodError expected to be thrown for " + bsm);
} catch (BootstrapMethodError e) {
- Throwable t = e.getCause();
- Assert.assertTrue(WrongMethodTypeException.class.isAssignableFrom(t.getClass()));
}
}
}
- public static Object _bsm(String[] ss) {
+ public static Object sig_bsm(MethodHandles.Lookup a1, String[] a2) {
return "0";
}
- public static Object _bsm(String a1, String a2, String a3) {
+ public static Object sig_bsm(MethodHandles.Lookup a1, String a2, String a3) {
return "0";
}
@Test
public void testWrongSignature() throws Throwable {
- {
+ for (MethodHandle bsm : bsms("sig_bsm")) {
MethodHandle mh = InstructionHelper.ldcDynamicConstant(
L, "name", Object.class,
- "_bsm", methodType(Object.class, String[].class),
+ "sig_bsm", bsm.type(),
S -> {}
);
try {
Object r = mh.invoke();
- Assert.fail("BootstrapMethodError expected to be thrown");
- }
- catch (BootstrapMethodError e) {
- Throwable t = e.getCause();
- Assert.assertTrue(WrongMethodTypeException.class.isAssignableFrom(t.getClass()));
- }
- }
-
- {
- MethodHandle mh = InstructionHelper.ldcDynamicConstant(
- L, "name", Object.class,
- "_bsm", methodType(Object.class, String.class, String.class, String.class),
- S -> {}
- );
-
- try {
- Object r = mh.invoke();
- Assert.fail("BootstrapMethodError expected to be thrown");
- }
- catch (BootstrapMethodError e) {
- Throwable t = e.getCause();
- Assert.assertTrue(ClassCastException.class.isAssignableFrom(t.getClass()));
+ Assert.fail("BootstrapMethodError expected to be thrown for " + bsm);
+ } catch (BootstrapMethodError e) {
}
}
}
@@ -193,6 +195,12 @@ public class CondyBSMInvocation {
return "7";
}
+ public static Object bsm(MethodHandles.Lookup l, Object... args) {
+ Object[] staticArgs = Arrays.copyOfRange(args, 2, args.length);
+ assertAll(staticArgs);
+ return Integer.toString(staticArgs.length);
+ }
+
static void assertAll(Object... as) {
for (int i = 0; i < as.length; i++) {
Assert.assertEquals(as[i], i);
@@ -214,6 +222,19 @@ public class CondyBSMInvocation {
Object r = mh.invoke();
Assert.assertEquals(r, Integer.toString(n));
}
+
+ {
+ MethodType mt = methodType(Object.class, MethodHandles.Lookup.class, Object[].class);
+ MethodHandle mh = InstructionHelper.ldcDynamicConstant(
+ L, "name", Object.class,
+ "bsm", mt,
+ S -> IntStream.range(0, 9).forEach(S::add)
+ );
+
+ Object r = mh.invoke();
+ Assert.assertEquals(r, Integer.toString(9));
+
+ }
}
@Test
diff --git a/test/jdk/java/net/Socket/asyncClose/Race.java b/test/jdk/java/net/Socket/asyncClose/Race.java
index 5a9585682f1..3a7b7affeec 100644
--- a/test/jdk/java/net/Socket/asyncClose/Race.java
+++ b/test/jdk/java/net/Socket/asyncClose/Race.java
@@ -30,6 +30,7 @@
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
+import java.net.ConnectException;
import java.net.SocketException;
import java.util.concurrent.Phaser;
@@ -43,33 +44,37 @@ public class Race {
final int port = ss.getLocalPort();
final Phaser phaser = new Phaser(THREADS + 1);
for (int i=0; i<100; i++) {
- final Socket s = new Socket("localhost", port);
- s.setSoLinger(false, 0);
- try (Socket sa = ss.accept()) {
- sa.setSoLinger(false, 0);
- final InputStream is = s.getInputStream();
- Thread[] threads = new Thread[THREADS];
- for (int j=0; j
+ * The zid<->metazone mappings are based on CLDR metaZones.xml.
+ * The alias mappings are based on Link entries in tzdb data files and
+ * CLDR's supplementalMetadata.xml.
+ */
class ZoneName {
public static String toZid(String zid, Locale locale) {
@@ -54,699 +61,850 @@ class ZoneName {
}
private static final String[] zidMap = new String[] {
- "Asia/Bangkok", "Indochina", "Asia/Saigon",
- "Pacific/Pago_Pago", "Samoa", "Pacific/Apia",
- "Africa/Blantyre", "Africa_Central", "Africa/Maputo",
- "America/Argentina/San_Juan", "Argentina", "America/Buenos_Aires",
- "America/Cancun", "America_Central", "America/Chicago",
- "Pacific/Nauru", "Nauru", "Pacific/Nauru",
- "America/Atikokan", "America_Eastern", "America/New_York",
- "Africa/Asmara", "Africa_Eastern", "Africa/Nairobi",
- "Europe/Berlin", "Europe_Central", "Europe/Paris",
- "Asia/Kolkata", "India", "Asia/Calcutta",
- "Australia/Darwin", "Australia_Central", "Australia/Adelaide",
- "America/Guayaquil", "Ecuador", "America/Guayaquil",
- "Europe/Vienna", "Europe_Central", "Europe/Paris",
- "Atlantic/St_Helena", "GMT", "Atlantic/Reykjavik",
- "Europe/London", "GMT", "Atlantic/Reykjavik",
- "Europe/Moscow", "Moscow", "Europe/Moscow",
- "America/St_Vincent", "Atlantic", "America/Halifax",
- "America/Bogota", "Colombia", "America/Bogota",
- "America/Marigot", "Atlantic", "America/Halifax",
- "Europe/Sarajevo", "Europe_Central", "Europe/Paris",
- "America/Hermosillo", "America_Mountain", "America/Denver",
- "America/Winnipeg", "America_Central", "America/Chicago",
- "America/Rainy_River", "America_Central", "America/Chicago",
- "Indian/Mahe", "Seychelles", "Indian/Mahe",
- "Africa/Freetown", "GMT", "Atlantic/Reykjavik",
- "America/Grand_Turk", "America_Eastern", "America/New_York",
- "America/Argentina/Ushuaia", "Argentina", "America/Buenos_Aires",
- "Atlantic/Azores", "Azores", "Atlantic/Azores",
- "Asia/Harbin", "China", "Asia/Shanghai",
- "America/Cuiaba", "Amazon", "America/Manaus",
- "Asia/Bahrain", "Arabian", "Asia/Riyadh",
- "Asia/Katmandu", "Nepal", "Asia/Katmandu",
- "Pacific/Galapagos", "Galapagos", "Pacific/Galapagos",
- "Asia/Brunei", "Brunei", "Asia/Brunei",
- "Africa/Kigali", "Africa_Central", "Africa/Maputo",
- "Asia/Makassar", "Indonesia_Central", "Asia/Makassar",
- "Africa/Maputo", "Africa_Central", "Africa/Maputo",
- "Asia/Kamchatka", "Magadan", "Asia/Magadan",
- "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
- "America/El_Salvador", "America_Central", "America/Chicago",
- "Asia/Saigon", "Indochina", "Asia/Saigon",
- "Africa/Kinshasa", "Africa_Western", "Africa/Lagos",
- "Europe/Oslo", "Europe_Central", "Europe/Paris",
- "Asia/Hong_Kong", "Hong_Kong", "Asia/Hong_Kong",
- "Pacific/Midway", "Samoa", "Pacific/Apia",
- "Africa/Douala", "Africa_Western", "Africa/Lagos",
- "Europe/San_Marino", "Europe_Central", "Europe/Paris",
- "Pacific/Chuuk", "Truk", "Pacific/Truk",
- "Africa/Gaborone", "Africa_Central", "Africa/Maputo",
- "Africa/Tunis", "Europe_Central", "Europe/Paris",
- "Africa/Khartoum", "Africa_Central", "Africa/Maputo",
- "Europe/Isle_of_Man", "GMT", "Atlantic/Reykjavik",
- "Europe/Skopje", "Europe_Central", "Europe/Paris",
- "America/Merida", "America_Central", "America/Chicago",
- "Antarctica/DumontDUrville", "DumontDUrville", "Antarctica/DumontDUrville",
- "Atlantic/Reykjavik", "GMT", "Atlantic/Reykjavik",
- "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
- "Africa/Malabo", "Africa_Western", "Africa/Lagos",
- "Africa/Juba", "Africa_Eastern", "Africa/Nairobi",
- "America/Resolute", "America_Central", "America/Chicago",
+ // From metaZones.xml
"Africa/Abidjan", "GMT", "Atlantic/Reykjavik",
- "Antarctica/McMurdo", "New_Zealand", "Pacific/Auckland",
- "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
- "Europe/Zaporozhye", "Europe_Eastern", "Europe/Bucharest",
- "Antarctica/Davis", "Davis", "Antarctica/Davis",
- "Indian/Antananarivo", "Africa_Eastern", "Africa/Nairobi",
- "Africa/Harare", "Africa_Central", "Africa/Maputo",
- "Pacific/Marquesas", "Marquesas", "Pacific/Marquesas",
- "Africa/Tripoli", "Europe_Eastern", "Europe/Bucharest",
- "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
- "America/Buenos_Aires", "Argentina", "America/Buenos_Aires",
- "America/Tortola", "Atlantic", "America/Halifax",
- "Asia/Kuwait", "Arabian", "Asia/Riyadh",
- "Europe/Rome", "Europe_Central", "Europe/Paris",
- "America/Eirunepe", "Amazon", "America/Manaus",
- "Australia/Hobart", "Australia_Eastern", "Australia/Sydney",
- "America/Thule", "Atlantic", "America/Halifax",
- "Asia/Beirut", "Europe_Eastern", "Europe/Bucharest",
- "America/Bahia_Banderas", "America_Central", "America/Chicago",
- "Africa/Dar_es_Salaam", "Africa_Eastern", "Africa/Nairobi",
- "America/Argentina/Tucuman", "Argentina", "America/Buenos_Aires",
- "America/Paramaribo", "Suriname", "America/Paramaribo",
- "Africa/Kampala", "Africa_Eastern", "Africa/Nairobi",
- "Pacific/Port_Moresby", "Papua_New_Guinea", "Pacific/Port_Moresby",
- "America/Mendoza", "Argentina", "America/Buenos_Aires",
- "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
- "Asia/Qyzylorda", "Kazakhstan_Eastern", "Asia/Almaty",
- "Antarctica/Vostok", "Vostok", "Antarctica/Vostok",
- "Pacific/Majuro", "Marshall_Islands", "Pacific/Majuro",
- "Asia/Tehran", "Iran", "Asia/Tehran",
- "Asia/Hovd", "Hovd", "Asia/Hovd",
- "Antarctica/Rothera", "Rothera", "Antarctica/Rothera",
- "Africa/Brazzaville", "Africa_Western", "Africa/Lagos",
- "Europe/Tirane", "Europe_Central", "Europe/Paris",
- "Asia/Urumqi", "China", "Asia/Shanghai",
- "Asia/Krasnoyarsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
- "America/Tegucigalpa", "America_Central", "America/Chicago",
- "Asia/Vientiane", "Indochina", "Asia/Saigon",
- "Asia/Pontianak", "Indonesia_Western", "Asia/Jakarta",
- "America/Bahia", "Brasilia", "America/Sao_Paulo",
- "Asia/Choibalsan", "Choibalsan", "Asia/Choibalsan",
- "America/Regina", "America_Central", "America/Chicago",
- "Africa/Cairo", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Irkutsk", "Irkutsk", "Asia/Irkutsk",
- "Europe/Luxembourg", "Europe_Central", "Europe/Paris",
- "America/St_Kitts", "Atlantic", "America/Halifax",
- "America/Manaus", "Amazon", "America/Manaus",
- "America/Noronha", "Noronha", "America/Noronha",
- "Pacific/Gambier", "Gambier", "Pacific/Gambier",
- "America/Edmonton", "America_Mountain", "America/Denver",
- "Pacific/Palau", "Palau", "Pacific/Palau",
- "America/Lower_Princes", "Atlantic", "America/Halifax",
- "Africa/Ouagadougou", "GMT", "Atlantic/Reykjavik",
- "Asia/Yerevan", "Armenia", "Asia/Yerevan",
- "America/Montevideo", "Uruguay", "America/Montevideo",
- "Europe/Minsk", "Europe_Eastern", "Europe/Bucharest",
- "Europe/Amsterdam", "Europe_Central", "Europe/Paris",
- "Pacific/Efate", "Vanuatu", "Pacific/Efate",
- "Asia/Manila", "Philippines", "Asia/Manila",
- "America/Dawson", "America_Pacific", "America/Los_Angeles",
- "America/Argentina/Cordoba", "Argentina", "America/Buenos_Aires",
- "Australia/Melbourne", "Australia_Eastern", "Australia/Sydney",
- "Asia/Rangoon", "Myanmar", "Asia/Rangoon",
- "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
- "Africa/Casablanca", "Europe_Western", "Atlantic/Canary",
- "Africa/Porto-Novo", "Africa_Western", "Africa/Lagos",
- "Asia/Macau", "China", "Asia/Shanghai",
- "America/Boa_Vista", "Amazon", "America/Manaus",
- "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
- "Africa/Monrovia", "GMT", "Atlantic/Reykjavik",
- "America/Godthab", "Greenland_Western", "America/Godthab",
- "Africa/Ceuta", "Europe_Central", "Europe/Paris",
- "Asia/Oral", "Kazakhstan_Western", "Asia/Aqtobe",
- "America/Yakutat", "Alaska", "America/Juneau",
- "Indian/Mayotte", "Africa_Eastern", "Africa/Nairobi",
- "America/Denver", "America_Mountain", "America/Denver",
- "America/New_York", "America_Eastern", "America/New_York",
- "Pacific/Rarotonga", "Cook", "Pacific/Rarotonga",
- "America/Louisville", "America_Eastern", "America/New_York",
- "Africa/El_Aaiun", "Europe_Western", "Atlantic/Canary",
- "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos",
- "Pacific/Fiji", "Fiji", "Pacific/Fiji",
- "Asia/Damascus", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Ulaanbaatar", "Mongolia", "Asia/Ulaanbaatar",
- "America/Cayman", "America_Eastern", "America/New_York",
- "America/Tijuana", "America_Pacific", "America/Los_Angeles",
- "Atlantic/Bermuda", "Atlantic", "America/Halifax",
- "Australia/Sydney", "Australia_Eastern", "Australia/Sydney",
- "Asia/Aden", "Arabian", "Asia/Riyadh",
- "Australia/Eucla", "Australia_CentralWestern", "Australia/Eucla",
- "America/Indiana/Petersburg", "America_Eastern", "America/New_York",
- "America/Panama", "America_Eastern", "America/New_York",
- "Europe/Istanbul", "Europe_Eastern", "Europe/Bucharest",
- "America/Kralendijk", "Atlantic", "America/Halifax",
- "America/Catamarca", "Argentina", "America/Buenos_Aires",
- "America/Nassau", "America_Eastern", "America/New_York",
- "Europe/Paris", "Europe_Central", "Europe/Paris",
- "Asia/Jakarta", "Indonesia_Western", "Asia/Jakarta",
- "Australia/Lindeman", "Australia_Eastern", "Australia/Sydney",
- "America/Sao_Paulo", "Brasilia", "America/Sao_Paulo",
- "America/Juneau", "Alaska", "America/Juneau",
- "America/Grenada", "Atlantic", "America/Halifax",
- "America/Cayenne", "French_Guiana", "America/Cayenne",
- "Antarctica/Casey", "Australia_Western", "Australia/Perth",
- "Africa/Algiers", "Europe_Central", "Europe/Paris",
- "America/Miquelon", "Pierre_Miquelon", "America/Miquelon",
- "Asia/Tokyo", "Japan", "Asia/Tokyo",
- "Africa/Windhoek", "Africa_Central", "Africa/Maputo",
- "Africa/Bujumbura", "Africa_Central", "Africa/Maputo",
- "America/Guatemala", "America_Central", "America/Chicago",
- "Africa/Dakar", "GMT", "Atlantic/Reykjavik",
- "Asia/Bishkek", "Kyrgystan", "Asia/Bishkek",
- "America/Guadeloupe", "Atlantic", "America/Halifax",
- "Africa/Ndjamena", "Africa_Western", "Africa/Lagos",
- "Europe/Simferopol", "Europe_Eastern", "Europe/Bucharest",
- "America/Santa_Isabel", "America_Pacific", "America/Los_Angeles",
- "Asia/Dubai", "Gulf", "Asia/Dubai",
- "America/Maceio", "Brasilia", "America/Sao_Paulo",
- "America/Anchorage", "Alaska", "America/Juneau",
- "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
- "Africa/Djibouti", "Africa_Eastern", "Africa/Nairobi",
- "Europe/Budapest", "Europe_Central", "Europe/Paris",
- "America/Argentina/Salta", "Argentina", "America/Buenos_Aires",
- "Asia/Calcutta", "India", "Asia/Calcutta",
- "America/Indiana/Winamac", "America_Eastern", "America/New_York",
- "Asia/Yekaterinburg", "Yekaterinburg", "Asia/Yekaterinburg",
- "America/Santiago", "Chile", "America/Santiago",
- "Asia/Aqtobe", "Kazakhstan_Western", "Asia/Aqtobe",
- "Asia/Dili", "East_Timor", "Asia/Dili",
- "America/Detroit", "America_Eastern", "America/New_York",
- "Africa/Libreville", "Africa_Western", "Africa/Lagos",
- "Pacific/Ponape", "Ponape", "Pacific/Ponape",
- "Pacific/Wallis", "Wallis", "Pacific/Wallis",
- "Asia/Vladivostok", "Vladivostok", "Asia/Vladivostok",
- "Africa/Lubumbashi", "Africa_Central", "Africa/Maputo",
- "Africa/Asmera", "Africa_Eastern", "Africa/Nairobi",
- "Pacific/Guam", "Chamorro", "Pacific/Saipan",
- "America/Chicago", "America_Central", "America/Chicago",
- "America/Swift_Current", "America_Central", "America/Chicago",
- "America/Coral_Harbour", "America_Eastern", "America/New_York",
- "America/Cambridge_Bay", "America_Mountain", "America/Denver",
- "America/Costa_Rica", "America_Central", "America/Chicago",
- "America/Curacao", "Atlantic", "America/Halifax",
- "America/Recife", "Brasilia", "America/Sao_Paulo",
- "Africa/Bangui", "Africa_Western", "Africa/Lagos",
- "America/Cordoba", "Argentina", "America/Buenos_Aires",
- "Asia/Baghdad", "Arabian", "Asia/Riyadh",
- "America/Shiprock", "America_Mountain", "America/Denver",
- "America/Glace_Bay", "Atlantic", "America/Halifax",
- "America/North_Dakota/Center", "America_Central", "America/Chicago",
- "Europe/Stockholm", "Europe_Central", "Europe/Paris",
- "America/Halifax", "Atlantic", "America/Halifax",
- "Atlantic/Canary", "Europe_Western", "Atlantic/Canary",
- "Europe/Volgograd", "Volgograd", "Europe/Volgograd",
- "America/Moncton", "Atlantic", "America/Halifax",
- "Pacific/Tongatapu", "Tonga", "Pacific/Tongatapu",
- "America/Argentina/Buenos_Aires", "Argentina", "America/Buenos_Aires",
- "Asia/Samarkand", "Uzbekistan", "Asia/Tashkent",
- "Pacific/Apia", "Samoa", "Pacific/Apia",
- "America/Sitka", "Alaska", "America/Juneau",
- "Europe/Warsaw", "Europe_Central", "Europe/Paris",
"Africa/Accra", "GMT", "Atlantic/Reykjavik",
- "Europe/Bratislava", "Europe_Central", "Europe/Paris",
- "Europe/Zurich", "Europe_Central", "Europe/Paris",
- "Indian/Reunion", "Reunion", "Indian/Reunion",
- "America/Mazatlan", "America_Mountain", "America/Denver",
- "Pacific/Tarawa", "Gilbert_Islands", "Pacific/Tarawa",
- "America/Indiana/Knox", "America_Central", "America/Chicago",
- "Asia/Tbilisi", "Georgia", "Asia/Tbilisi",
- "Asia/Novosibirsk", "Novosibirsk", "Asia/Novosibirsk",
- "Atlantic/Faeroe", "Europe_Western", "Atlantic/Canary",
- "Africa/Bissau", "GMT", "Atlantic/Reykjavik",
- "Asia/Amman", "Europe_Eastern", "Europe/Bucharest",
- "Africa/Lagos", "Africa_Western", "Africa/Lagos",
- "Africa/Banjul", "GMT", "Atlantic/Reykjavik",
- "America/Araguaina", "Brasilia", "America/Sao_Paulo",
- "America/Nipigon", "America_Eastern", "America/New_York",
- "Europe/Vilnius", "Europe_Eastern", "Europe/Bucharest",
- "America/Montserrat", "Atlantic", "America/Halifax",
- "Asia/Baku", "Azerbaijan", "Asia/Baku",
- "Africa/Lusaka", "Africa_Central", "Africa/Maputo",
- "Europe/Uzhgorod", "Europe_Eastern", "Europe/Bucharest",
- "America/Argentina/Rio_Gallegos", "Argentina", "America/Buenos_Aires",
- "America/Blanc-Sablon", "Atlantic", "America/Halifax",
- "Asia/Kabul", "Afghanistan", "Asia/Kabul",
- "America/Jamaica", "America_Eastern", "America/New_York",
- "Europe/Vatican", "Europe_Central", "Europe/Paris",
- "Africa/Nouakchott", "GMT", "Atlantic/Reykjavik",
"Africa/Addis_Ababa", "Africa_Eastern", "Africa/Nairobi",
- "Europe/Athens", "Europe_Eastern", "Europe/Bucharest",
- "Atlantic/Madeira", "Europe_Western", "Atlantic/Canary",
- "America/Thunder_Bay", "America_Eastern", "America/New_York",
- "Europe/Brussels", "Europe_Central", "Europe/Paris",
- "Africa/Luanda", "Africa_Western", "Africa/Lagos",
- "Africa/Mogadishu", "Africa_Eastern", "Africa/Nairobi",
- "America/Matamoros", "America_Central", "America/Chicago",
- "Pacific/Norfolk", "Norfolk", "Pacific/Norfolk",
- "America/Scoresbysund", "Greenland_Eastern", "America/Scoresbysund",
- "America/Indianapolis", "America_Eastern", "America/New_York",
- "Pacific/Pitcairn", "Pitcairn", "Pacific/Pitcairn",
- "Asia/Singapore", "Singapore", "Asia/Singapore",
- "America/Port-au-Prince", "America_Eastern", "America/New_York",
- "Pacific/Honolulu", "Hawaii_Aleutian", "Pacific/Honolulu",
- "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
- "Atlantic/Cape_Verde", "Cape_Verde", "Atlantic/Cape_Verde",
- "America/Asuncion", "Paraguay", "America/Asuncion",
- "America/Martinique", "Atlantic", "America/Halifax",
- "Europe/Gibraltar", "Europe_Central", "Europe/Paris",
- "Africa/Lome", "GMT", "Atlantic/Reykjavik",
- "Australia/Lord_Howe", "Lord_Howe", "Australia/Lord_Howe",
- "America/Argentina/La_Rioja", "Argentina", "America/Buenos_Aires",
- "Europe/Jersey", "GMT", "Atlantic/Reykjavik",
- "America/Kentucky/Louisville", "America_Eastern", "America/New_York",
- "America/Monterrey", "America_Central", "America/Chicago",
- "Europe/Belgrade", "Europe_Central", "Europe/Paris",
- "Asia/Gaza", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Ho_Chi_Minh", "Indochina", "Asia/Saigon",
- "Europe/Prague", "Europe_Central", "Europe/Paris",
- "Indian/Christmas", "Christmas", "Indian/Christmas",
- "Pacific/Fakaofo", "Tokelau", "Pacific/Fakaofo",
- "America/Dominica", "Atlantic", "America/Halifax",
- "America/Ojinaga", "America_Mountain", "America/Denver",
- "Asia/Colombo", "India", "Asia/Calcutta",
- "Asia/Nicosia", "Europe_Eastern", "Europe/Bucharest",
- "Europe/Copenhagen", "Europe_Central", "Europe/Paris",
- "America/Creston", "America_Mountain", "America/Denver",
- "Asia/Ashgabat", "Turkmenistan", "Asia/Ashgabat",
- "Asia/Shanghai", "China", "Asia/Shanghai",
- "Pacific/Easter", "Easter", "Pacific/Easter",
- "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
- "America/La_Paz", "Bolivia", "America/La_Paz",
- "Pacific/Truk", "Truk", "Pacific/Truk",
- "America/Inuvik", "America_Mountain", "America/Denver",
- "America/Belem", "Brasilia", "America/Sao_Paulo",
- "Asia/Hebron", "Europe_Eastern", "Europe/Bucharest",
- "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
- "America/Belize", "America_Central", "America/Chicago",
- "America/Rio_Branco", "Amazon", "America/Manaus",
- "America/Dawson_Creek", "America_Mountain", "America/Denver",
- "America/Anguilla", "Atlantic", "America/Halifax",
- "America/Port_of_Spain", "Atlantic", "America/Halifax",
- "America/St_Barthelemy", "Atlantic", "America/Halifax",
- "America/Indiana/Marengo", "America_Eastern", "America/New_York",
- "America/St_Johns", "Newfoundland", "America/St_Johns",
- "Asia/Jayapura", "Indonesia_Eastern", "Asia/Jayapura",
- "Europe/Riga", "Europe_Eastern", "Europe/Bucharest",
- "America/Phoenix", "America_Mountain", "America/Denver",
- "America/Boise", "America_Mountain", "America/Denver",
- "Pacific/Kiritimati", "Line_Islands", "Pacific/Kiritimati",
- "Africa/Johannesburg", "Africa_Southern", "Africa/Johannesburg",
- "America/Pangnirtung", "America_Eastern", "America/New_York",
- "America/Toronto", "America_Eastern", "America/New_York",
- "Australia/Brisbane", "Australia_Eastern", "Australia/Sydney",
- "Asia/Aqtau", "Kazakhstan_Western", "Asia/Aqtobe",
- "America/Vancouver", "America_Pacific", "America/Los_Angeles",
- "Africa/Mbabane", "Africa_Southern", "Africa/Johannesburg",
- "Europe/Vaduz", "Europe_Central", "Europe/Paris",
- "Asia/Karachi", "Pakistan", "Asia/Karachi",
- "Asia/Riyadh", "Arabian", "Asia/Riyadh",
- "Indian/Maldives", "Maldives", "Indian/Maldives",
- "Asia/Anadyr", "Magadan", "Asia/Magadan",
- "Europe/Helsinki", "Europe_Eastern", "Europe/Bucharest",
- "America/Nome", "Alaska", "America/Juneau",
- "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
- "Asia/Yangon", "Myanmar", "Asia/Rangoon",
- "Africa/Conakry", "GMT", "Atlantic/Reykjavik",
- "Asia/Seoul", "Korea", "Asia/Seoul",
- "America/Antigua", "Atlantic", "America/Halifax",
- "Asia/Almaty", "Kazakhstan_Eastern", "Asia/Almaty",
- "America/Fortaleza", "Brasilia", "America/Sao_Paulo",
- "Pacific/Tahiti", "Tahiti", "Pacific/Tahiti",
- "Asia/Kashgar", "China", "Asia/Shanghai",
- "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
- "Europe/Kaliningrad", "Europe_Eastern", "Europe/Bucharest",
- "Pacific/Enderbury", "Phoenix_Islands", "Pacific/Enderbury",
- "America/St_Lucia", "Atlantic", "America/Halifax",
- "Atlantic/Stanley", "Falkland", "Atlantic/Stanley",
- "Asia/Omsk", "Omsk", "Asia/Omsk",
- "America/Menominee", "America_Central", "America/Chicago",
- "Asia/Novokuznetsk", "Novosibirsk", "Asia/Novosibirsk",
- "Asia/Sakhalin", "Sakhalin", "Asia/Sakhalin",
- "Asia/Muscat", "Gulf", "Asia/Dubai",
- "Pacific/Noumea", "New_Caledonia", "Pacific/Noumea",
- "Asia/Phnom_Penh", "Indochina", "Asia/Saigon",
- "Antarctica/Mawson", "Mawson", "Antarctica/Mawson",
- "Indian/Cocos", "Cocos", "Indian/Cocos",
- "Europe/Tallinn", "Europe_Eastern", "Europe/Bucharest",
- "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
- "Europe/Ljubljana", "Europe_Central", "Europe/Paris",
- "America/Montreal", "America_Eastern", "America/New_York",
- "Asia/Kuala_Lumpur", "Malaysia", "Asia/Kuching",
- "Asia/Magadan", "Magadan", "Asia/Magadan",
+ "Africa/Algiers", "Europe_Central", "Europe/Paris",
+ "Africa/Asmara", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Asmera", "Africa_Eastern", "Africa/Nairobi",
"Africa/Bamako", "GMT", "Atlantic/Reykjavik",
- "Australia/Broken_Hill", "Australia_Central", "Australia/Adelaide",
- "America/Indiana/Indianapolis", "America_Eastern", "America/New_York",
- "Asia/Taipei", "Taipei", "Asia/Taipei",
- "Europe/Samara", "Moscow", "Europe/Moscow",
- "America/Indiana/Vevay", "America_Eastern", "America/New_York",
- "Atlantic/South_Georgia", "South_Georgia", "Atlantic/South_Georgia",
- "Pacific/Wake", "Wake", "Pacific/Wake",
- "Asia/Tashkent", "Uzbekistan", "Asia/Tashkent",
- "America/St_Thomas", "Atlantic", "America/Halifax",
- "America/Argentina/San_Luis", "Argentina_Western", "America/Argentina/San_Luis",
- "Arctic/Longyearbyen", "Europe_Central", "Europe/Paris",
- "Asia/Chongqing", "China", "Asia/Shanghai",
- "Europe/Monaco", "Europe_Central", "Europe/Paris",
- "Asia/Qatar", "Arabian", "Asia/Riyadh",
- "America/Chihuahua", "America_Mountain", "America/Denver",
- "America/Havana", "Cuba", "America/Havana",
- "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
- "America/Jujuy", "Argentina", "America/Buenos_Aires",
- "America/Goose_Bay", "Atlantic", "America/Halifax",
+ "Africa/Bangui", "Africa_Western", "Africa/Lagos",
+ "Africa/Banjul", "GMT", "Atlantic/Reykjavik",
+ "Africa/Bissau", "GMT", "Atlantic/Reykjavik",
+ "Africa/Blantyre", "Africa_Central", "Africa/Maputo",
+ "Africa/Brazzaville", "Africa_Western", "Africa/Lagos",
+ "Africa/Bujumbura", "Africa_Central", "Africa/Maputo",
+ "Africa/Cairo", "Europe_Eastern", "Europe/Bucharest",
+ "Africa/Casablanca", "Europe_Western", "Atlantic/Canary",
+ "Africa/Ceuta", "Europe_Central", "Europe/Paris",
+ "Africa/Conakry", "GMT", "Atlantic/Reykjavik",
+ "Africa/Dakar", "GMT", "Atlantic/Reykjavik",
+ "Africa/Dar_es_Salaam", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Djibouti", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Douala", "Africa_Western", "Africa/Lagos",
+ "Africa/El_Aaiun", "Europe_Western", "Atlantic/Canary",
+ "Africa/Freetown", "GMT", "Atlantic/Reykjavik",
+ "Africa/Gaborone", "Africa_Central", "Africa/Maputo",
+ "Africa/Harare", "Africa_Central", "Africa/Maputo",
+ "Africa/Johannesburg", "Africa_Southern", "Africa/Johannesburg",
+ "Africa/Juba", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Kampala", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Khartoum", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Kigali", "Africa_Central", "Africa/Maputo",
+ "Africa/Kinshasa", "Africa_Western", "Africa/Lagos",
+ "Africa/Lagos", "Africa_Western", "Africa/Lagos",
+ "Africa/Libreville", "Africa_Western", "Africa/Lagos",
+ "Africa/Lome", "GMT", "Atlantic/Reykjavik",
+ "Africa/Luanda", "Africa_Western", "Africa/Lagos",
+ "Africa/Lubumbashi", "Africa_Central", "Africa/Maputo",
+ "Africa/Lusaka", "Africa_Central", "Africa/Maputo",
+ "Africa/Malabo", "Africa_Western", "Africa/Lagos",
+ "Africa/Maputo", "Africa_Central", "Africa/Maputo",
+ "Africa/Maseru", "Africa_Southern", "Africa/Johannesburg",
+ "Africa/Mbabane", "Africa_Southern", "Africa/Johannesburg",
+ "Africa/Mogadishu", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Monrovia", "GMT", "Atlantic/Reykjavik",
+ "Africa/Nairobi", "Africa_Eastern", "Africa/Nairobi",
+ "Africa/Ndjamena", "Africa_Western", "Africa/Lagos",
"Africa/Niamey", "Africa_Western", "Africa/Lagos",
- "Asia/Kathmandu", "Nepal", "Asia/Katmandu",
- "America/Caracas", "Venezuela", "America/Caracas",
- "Indian/Comoro", "Africa_Eastern", "Africa/Nairobi",
- "America/Argentina/Jujuy", "Argentina", "America/Buenos_Aires",
- "America/Guyana", "Guyana", "America/Guyana",
- "America/Indiana/Tell_City", "America_Central", "America/Chicago",
- "America/Metlakatla", "America_Pacific", "America/Los_Angeles",
- "Europe/Mariehamn", "Europe_Eastern", "Europe/Bucharest",
- "Europe/Dublin", "GMT", "Atlantic/Reykjavik",
- "Europe/Lisbon", "Europe_Western", "Atlantic/Canary",
- "America/Puerto_Rico", "Atlantic", "America/Halifax",
- "Asia/Pyongyang", "Korea", "Asia/Seoul",
- "America/North_Dakota/New_Salem", "America_Central", "America/Chicago",
- "Asia/Dhaka", "Bangladesh", "Asia/Dhaka",
- "America/Rankin_Inlet", "America_Central", "America/Chicago",
+ "Africa/Nouakchott", "GMT", "Atlantic/Reykjavik",
+ "Africa/Ouagadougou", "GMT", "Atlantic/Reykjavik",
+ "Africa/Porto-Novo", "Africa_Western", "Africa/Lagos",
+ "Africa/Sao_Tome", "GMT", "Atlantic/Reykjavik",
+ "Africa/Timbuktu", "GMT", "Atlantic/Reykjavik",
+ "Africa/Tripoli", "Europe_Eastern", "Europe/Bucharest",
+ "Africa/Tunis", "Europe_Central", "Europe/Paris",
+ "Africa/Windhoek", "Africa_Western", "Africa/Lagos",
"America/Adak", "Hawaii_Aleutian", "Pacific/Honolulu",
- "America/Campo_Grande", "Amazon", "America/Manaus",
- "Europe/Chisinau", "Europe_Eastern", "Europe/Bucharest",
- "Pacific/Saipan", "Chamorro", "Pacific/Saipan",
- "Pacific/Niue", "Niue", "Pacific/Niue",
- "Europe/Madrid", "Europe_Central", "Europe/Paris",
- "Pacific/Kwajalein", "Marshall_Islands", "Pacific/Majuro",
- "America/Porto_Velho", "Amazon", "America/Manaus",
- "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
- "America/Santarem", "Brasilia", "America/Sao_Paulo",
- "Asia/Kuching", "Malaysia", "Asia/Kuching",
- "Australia/Adelaide", "Australia_Central", "Australia/Adelaide",
- "Europe/Bucharest", "Europe_Eastern", "Europe/Bucharest",
- "Australia/Perth", "Australia_Western", "Australia/Perth",
- "Europe/Sofia", "Europe_Eastern", "Europe/Bucharest",
- "Indian/Chagos", "Indian_Ocean", "Indian/Chagos",
- "America/Yellowknife", "America_Mountain", "America/Denver",
- "America/Managua", "America_Central", "America/Chicago",
- "America/Iqaluit", "America_Eastern", "America/New_York",
- "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
- "Pacific/Guadalcanal", "Solomon", "Pacific/Guadalcanal",
- "America/Barbados", "Atlantic", "America/Halifax",
- "America/Aruba", "Atlantic", "America/Halifax",
- "Europe/Andorra", "Europe_Central", "Europe/Paris",
- "Pacific/Chatham", "Chatham", "Pacific/Chatham",
- "America/Santo_Domingo", "Atlantic", "America/Halifax",
- "America/Indiana/Vincennes", "America_Eastern", "America/New_York",
- "Europe/Kiev", "Europe_Eastern", "Europe/Bucharest",
- "Pacific/Funafuti", "Tuvalu", "Pacific/Funafuti",
- "America/Mexico_City", "America_Central", "America/Chicago",
- "America/Kentucky/Monticello", "America_Eastern", "America/New_York",
+ "America/Anchorage", "Alaska", "America/Juneau",
+ "America/Anguilla", "Atlantic", "America/Halifax",
+ "America/Antigua", "Atlantic", "America/Halifax",
+ "America/Araguaina", "Brasilia", "America/Sao_Paulo",
+ "America/Argentina/Buenos_Aires", "Argentina", "America/Buenos_Aires",
"America/Argentina/Catamarca", "Argentina", "America/Buenos_Aires",
- "Pacific/Johnston", "Hawaii_Aleutian", "Pacific/Honolulu",
- "Europe/Podgorica", "Europe_Central", "Europe/Paris",
- "Europe/Zagreb", "Europe_Central", "Europe/Paris",
- "Pacific/Pohnpei", "Ponape", "Pacific/Ponape",
- "Antarctica/Palmer", "Chile", "America/Santiago",
+ "America/Argentina/ComodRivadavia", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/Cordoba", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/Jujuy", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/La_Rioja", "Argentina", "America/Buenos_Aires",
"America/Argentina/Mendoza", "Argentina", "America/Buenos_Aires",
- "America/Lima", "Peru", "America/Lima",
- "Antarctica/Macquarie", "Macquarie", "Antarctica/Macquarie",
- "Europe/Malta", "Europe_Central", "Europe/Paris",
+ "America/Argentina/Rio_Gallegos", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/Salta", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/San_Juan", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/San_Luis", "Argentina_Western", "America/Argentina/San_Luis",
+ "America/Argentina/Tucuman", "Argentina", "America/Buenos_Aires",
+ "America/Argentina/Ushuaia", "Argentina", "America/Buenos_Aires",
+ "America/Aruba", "Atlantic", "America/Halifax",
+ "America/Asuncion", "Paraguay", "America/Asuncion",
+ "America/Atikokan", "America_Eastern", "America/New_York",
+ "America/Atka", "Hawaii_Aleutian", "Pacific/Honolulu",
+ "America/Bahia", "Brasilia", "America/Sao_Paulo",
+ "America/Bahia_Banderas", "America_Central", "America/Chicago",
+ "America/Barbados", "Atlantic", "America/Halifax",
+ "America/Belem", "Brasilia", "America/Sao_Paulo",
+ "America/Belize", "America_Central", "America/Chicago",
+ "America/Blanc-Sablon", "Atlantic", "America/Halifax",
+ "America/Boa_Vista", "Amazon", "America/Manaus",
+ "America/Bogota", "Colombia", "America/Bogota",
+ "America/Boise", "America_Mountain", "America/Denver",
+ "America/Buenos_Aires", "Argentina", "America/Buenos_Aires",
+ "America/Cambridge_Bay", "America_Mountain", "America/Denver",
+ "America/Campo_Grande", "Amazon", "America/Manaus",
+ "America/Cancun", "America_Eastern", "America/New_York",
+ "America/Caracas", "Venezuela", "America/Caracas",
+ "America/Catamarca", "Argentina", "America/Buenos_Aires",
+ "America/Cayenne", "French_Guiana", "America/Cayenne",
+ "America/Cayman", "America_Eastern", "America/New_York",
+ "America/Chicago", "America_Central", "America/Chicago",
+ "America/Chihuahua", "Mexico_Pacific", "America/Mazatlan",
+ "America/Coral_Harbour", "America_Eastern", "America/New_York",
+ "America/Cordoba", "Argentina", "America/Buenos_Aires",
+ "America/Costa_Rica", "America_Central", "America/Chicago",
+ "America/Creston", "America_Mountain", "America/Denver",
+ "America/Cuiaba", "Amazon", "America/Manaus",
+ "America/Curacao", "Atlantic", "America/Halifax",
"America/Danmarkshavn", "GMT", "Atlantic/Reykjavik",
+ "America/Dawson", "America_Pacific", "America/Los_Angeles",
+ "America/Dawson_Creek", "America_Mountain", "America/Denver",
+ "America/Denver", "America_Mountain", "America/Denver",
+ "America/Detroit", "America_Eastern", "America/New_York",
+ "America/Dominica", "Atlantic", "America/Halifax",
+ "America/Edmonton", "America_Mountain", "America/Denver",
+ "America/Eirunepe", "Acre", "America/Rio_Branco",
+ "America/El_Salvador", "America_Central", "America/Chicago",
+ "America/Ensenada", "America_Pacific", "America/Los_Angeles",
+ "America/Fort_Nelson", "America_Mountain", "America/Denver",
+ "America/Fort_Wayne", "America_Eastern", "America/New_York",
+ "America/Fortaleza", "Brasilia", "America/Sao_Paulo",
+ "America/Glace_Bay", "Atlantic", "America/Halifax",
+ "America/Godthab", "Greenland_Western", "America/Godthab",
+ "America/Goose_Bay", "Atlantic", "America/Halifax",
+ "America/Grand_Turk", "Atlantic", "America/Halifax",
+ "America/Grenada", "Atlantic", "America/Halifax",
+ "America/Guadeloupe", "Atlantic", "America/Halifax",
+ "America/Guatemala", "America_Central", "America/Chicago",
+ "America/Guayaquil", "Ecuador", "America/Guayaquil",
+ "America/Guyana", "Guyana", "America/Guyana",
+ "America/Halifax", "Atlantic", "America/Halifax",
+ "America/Havana", "Cuba", "America/Havana",
+ "America/Hermosillo", "Mexico_Pacific", "America/Mazatlan",
+ "America/Indiana/Indianapolis", "America_Eastern", "America/New_York",
+ "America/Indiana/Knox", "America_Central", "America/Chicago",
+ "America/Indiana/Marengo", "America_Eastern", "America/New_York",
+ "America/Indiana/Petersburg", "America_Eastern", "America/New_York",
+ "America/Indiana/Tell_City", "America_Central", "America/Chicago",
+ "America/Indiana/Vevay", "America_Eastern", "America/New_York",
+ "America/Indiana/Vincennes", "America_Eastern", "America/New_York",
+ "America/Indiana/Winamac", "America_Eastern", "America/New_York",
+ "America/Indianapolis", "America_Eastern", "America/New_York",
+ "America/Inuvik", "America_Mountain", "America/Denver",
+ "America/Iqaluit", "America_Eastern", "America/New_York",
+ "America/Jamaica", "America_Eastern", "America/New_York",
+ "America/Jujuy", "Argentina", "America/Buenos_Aires",
+ "America/Juneau", "Alaska", "America/Juneau",
+ "America/Kentucky/Louisville", "America_Eastern", "America/New_York",
+ "America/Kentucky/Monticello", "America_Eastern", "America/New_York",
+ "America/Knox_IN", "America_Central", "America/Chicago",
+ "America/Kralendijk", "Atlantic", "America/Halifax",
+ "America/La_Paz", "Bolivia", "America/La_Paz",
+ "America/Lima", "Peru", "America/Lima",
+ "America/Los_Angeles", "America_Pacific", "America/Los_Angeles",
+ "America/Louisville", "America_Eastern", "America/New_York",
+ "America/Lower_Princes", "Atlantic", "America/Halifax",
+ "America/Maceio", "Brasilia", "America/Sao_Paulo",
+ "America/Managua", "America_Central", "America/Chicago",
+ "America/Manaus", "Amazon", "America/Manaus",
+ "America/Marigot", "Atlantic", "America/Halifax",
+ "America/Martinique", "Atlantic", "America/Halifax",
+ "America/Matamoros", "America_Central", "America/Chicago",
+ "America/Mazatlan", "Mexico_Pacific", "America/Mazatlan",
+ "America/Mendoza", "Argentina", "America/Buenos_Aires",
+ "America/Menominee", "America_Central", "America/Chicago",
+ "America/Merida", "America_Central", "America/Chicago",
+ "America/Metlakatla", "Alaska", "America/Juneau",
+ "America/Mexico_City", "America_Central", "America/Chicago",
+ "America/Miquelon", "Pierre_Miquelon", "America/Miquelon",
+ "America/Moncton", "Atlantic", "America/Halifax",
+ "America/Monterrey", "America_Central", "America/Chicago",
+ "America/Montevideo", "Uruguay", "America/Montevideo",
+ "America/Montserrat", "Atlantic", "America/Halifax",
+ "America/Nassau", "America_Eastern", "America/New_York",
+ "America/New_York", "America_Eastern", "America/New_York",
+ "America/Nipigon", "America_Eastern", "America/New_York",
+ "America/Nome", "Alaska", "America/Juneau",
+ "America/Noronha", "Noronha", "America/Noronha",
+ "America/North_Dakota/Beulah", "America_Central", "America/Chicago",
+ "America/North_Dakota/Center", "America_Central", "America/Chicago",
+ "America/North_Dakota/New_Salem", "America_Central", "America/Chicago",
+ "America/Ojinaga", "America_Mountain", "America/Denver",
+ "America/Panama", "America_Eastern", "America/New_York",
+ "America/Pangnirtung", "America_Eastern", "America/New_York",
+ "America/Paramaribo", "Suriname", "America/Paramaribo",
+ "America/Phoenix", "America_Mountain", "America/Denver",
+ "America/Port-au-Prince", "America_Eastern", "America/New_York",
+ "America/Port_of_Spain", "Atlantic", "America/Halifax",
+ "America/Porto_Acre", "Acre", "America/Rio_Branco",
+ "America/Porto_Velho", "Amazon", "America/Manaus",
+ "America/Puerto_Rico", "Atlantic", "America/Halifax",
+ "America/Rainy_River", "America_Central", "America/Chicago",
+ "America/Rankin_Inlet", "America_Central", "America/Chicago",
+ "America/Recife", "Brasilia", "America/Sao_Paulo",
+ "America/Regina", "America_Central", "America/Chicago",
+ "America/Resolute", "America_Central", "America/Chicago",
+ "America/Rio_Branco", "Acre", "America/Rio_Branco",
+ "America/Rosario", "Argentina", "America/Buenos_Aires",
+ "America/Santa_Isabel", "Mexico_Northwest", "America/Santa_Isabel",
+ "America/Santarem", "Brasilia", "America/Sao_Paulo",
+ "America/Santiago", "Chile", "America/Santiago",
+ "America/Santo_Domingo", "Atlantic", "America/Halifax",
+ "America/Sao_Paulo", "Brasilia", "America/Sao_Paulo",
+ "America/Scoresbysund", "Greenland_Eastern", "America/Scoresbysund",
+ "America/Shiprock", "America_Mountain", "America/Denver",
+ "America/Sitka", "Alaska", "America/Juneau",
+ "America/St_Barthelemy", "Atlantic", "America/Halifax",
+ "America/St_Johns", "Newfoundland", "America/St_Johns",
+ "America/St_Kitts", "Atlantic", "America/Halifax",
+ "America/St_Lucia", "Atlantic", "America/Halifax",
+ "America/St_Thomas", "Atlantic", "America/Halifax",
+ "America/St_Vincent", "Atlantic", "America/Halifax",
+ "America/Swift_Current", "America_Central", "America/Chicago",
+ "America/Tegucigalpa", "America_Central", "America/Chicago",
+ "America/Thule", "Atlantic", "America/Halifax",
+ "America/Thunder_Bay", "America_Eastern", "America/New_York",
+ "America/Tijuana", "America_Pacific", "America/Los_Angeles",
+ "America/Toronto", "America_Eastern", "America/New_York",
+ "America/Tortola", "Atlantic", "America/Halifax",
+ "America/Vancouver", "America_Pacific", "America/Los_Angeles",
+ "America/Virgin", "Atlantic", "America/Halifax",
+ "America/Whitehorse", "America_Pacific", "America/Los_Angeles",
+ "America/Winnipeg", "America_Central", "America/Chicago",
+ "America/Yakutat", "Alaska", "America/Juneau",
+ "America/Yellowknife", "America_Mountain", "America/Denver",
+ "Antarctica/Casey", "Australia_Western", "Australia/Perth",
+ "Antarctica/Davis", "Davis", "Antarctica/Davis",
+ "Antarctica/DumontDUrville", "DumontDUrville", "Antarctica/DumontDUrville",
+ "Antarctica/Macquarie", "Macquarie", "Antarctica/Macquarie",
+ "Antarctica/Mawson", "Mawson", "Antarctica/Mawson",
+ "Antarctica/McMurdo", "New_Zealand", "Pacific/Auckland",
+ "Antarctica/Palmer", "Chile", "America/Santiago",
+ "Antarctica/Rothera", "Rothera", "Antarctica/Rothera",
+ "Antarctica/South_Pole", "New_Zealand", "Pacific/Auckland",
+ "Antarctica/Syowa", "Syowa", "Antarctica/Syowa",
+ "Antarctica/Troll", "GMT", "Atlantic/Reykjavik",
+ "Antarctica/Vostok", "Vostok", "Antarctica/Vostok",
+ "Arctic/Longyearbyen", "Europe_Central", "Europe/Paris",
+ "Asia/Aden", "Arabian", "Asia/Riyadh",
+ "Asia/Almaty", "Kazakhstan_Eastern", "Asia/Almaty",
+ "Asia/Amman", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Anadyr", "Magadan", "Asia/Magadan",
+ "Asia/Aqtau", "Kazakhstan_Western", "Asia/Aqtobe",
+ "Asia/Aqtobe", "Kazakhstan_Western", "Asia/Aqtobe",
+ "Asia/Ashgabat", "Turkmenistan", "Asia/Ashgabat",
+ "Asia/Ashkhabad", "Turkmenistan", "Asia/Ashgabat",
+ "Asia/Baghdad", "Arabian", "Asia/Riyadh",
+ "Asia/Bahrain", "Arabian", "Asia/Riyadh",
+ "Asia/Baku", "Azerbaijan", "Asia/Baku",
+ "Asia/Bangkok", "Indochina", "Asia/Bangkok",
+ "Asia/Beirut", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Bishkek", "Kyrgystan", "Asia/Bishkek",
+ "Asia/Brunei", "Brunei", "Asia/Brunei",
+ "Asia/Calcutta", "India", "Asia/Calcutta",
+ "Asia/Chita", "Yakutsk", "Asia/Yakutsk",
+ "Asia/Choibalsan", "Choibalsan", "Asia/Choibalsan",
+ "Asia/Chongqing", "China", "Asia/Shanghai",
+ "Asia/Chungking", "China", "Asia/Shanghai",
+ "Asia/Colombo", "India", "Asia/Calcutta",
+ "Asia/Dacca", "Bangladesh", "Asia/Dhaka",
+ "Asia/Damascus", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Dhaka", "Bangladesh", "Asia/Dhaka",
+ "Asia/Dili", "East_Timor", "Asia/Dili",
+ "Asia/Dubai", "Gulf", "Asia/Dubai",
+ "Asia/Dushanbe", "Tajikistan", "Asia/Dushanbe",
+ "Asia/Gaza", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Harbin", "China", "Asia/Shanghai",
+ "Asia/Hebron", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Ho_Chi_Minh", "Indochina", "Asia/Bangkok",
+ "Asia/Hong_Kong", "Hong_Kong", "Asia/Hong_Kong",
+ "Asia/Hovd", "Hovd", "Asia/Hovd",
+ "Asia/Irkutsk", "Irkutsk", "Asia/Irkutsk",
+ "Asia/Istanbul", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Jakarta", "Indonesia_Western", "Asia/Jakarta",
+ "Asia/Jayapura", "Indonesia_Eastern", "Asia/Jayapura",
+ "Asia/Jerusalem", "Israel", "Asia/Jerusalem",
+ "Asia/Kabul", "Afghanistan", "Asia/Kabul",
+ "Asia/Kamchatka", "Kamchatka", "Asia/Kamchatka",
+ "Asia/Karachi", "Pakistan", "Asia/Karachi",
+ "Asia/Kashgar", "Urumqi", "Asia/Urumqi",
+ "Asia/Kathmandu", "Nepal", "Asia/Katmandu",
+ "Asia/Katmandu", "Nepal", "Asia/Katmandu",
+ "Asia/Khandyga", "Yakutsk", "Asia/Yakutsk",
+ "Asia/Kolkata", "India", "Asia/Calcutta",
+ "Asia/Krasnoyarsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
+ "Asia/Kuala_Lumpur", "Malaysia", "Asia/Kuching",
+ "Asia/Kuching", "Malaysia", "Asia/Kuching",
+ "Asia/Kuwait", "Arabian", "Asia/Riyadh",
+ "Asia/Macao", "China", "Asia/Shanghai",
+ "Asia/Macau", "China", "Asia/Shanghai",
+ "Asia/Magadan", "Magadan", "Asia/Magadan",
+ "Asia/Makassar", "Indonesia_Central", "Asia/Makassar",
+ "Asia/Manila", "Philippines", "Asia/Manila",
+ "Asia/Muscat", "Gulf", "Asia/Dubai",
+ "Asia/Nicosia", "Europe_Eastern", "Europe/Bucharest",
+ "Asia/Novokuznetsk", "Krasnoyarsk", "Asia/Krasnoyarsk",
+ "Asia/Novosibirsk", "Novosibirsk", "Asia/Novosibirsk",
+ "Asia/Omsk", "Omsk", "Asia/Omsk",
+ "Asia/Oral", "Kazakhstan_Western", "Asia/Aqtobe",
+ "Asia/Phnom_Penh", "Indochina", "Asia/Bangkok",
+ "Asia/Pontianak", "Indonesia_Western", "Asia/Jakarta",
+ "Asia/Pyongyang", "Pyongyang", "Asia/Pyongyang",
+ "Asia/Qatar", "Arabian", "Asia/Riyadh",
+ "Asia/Qyzylorda", "Kazakhstan_Eastern", "Asia/Almaty",
+ "Asia/Rangoon", "Myanmar", "Asia/Rangoon",
+ "Asia/Riyadh", "Arabian", "Asia/Riyadh",
+ "Asia/Saigon", "Indochina", "Asia/Bangkok",
+ "Asia/Sakhalin", "Sakhalin", "Asia/Sakhalin",
+ "Asia/Samarkand", "Uzbekistan", "Asia/Tashkent",
+ "Asia/Seoul", "Korea", "Asia/Seoul",
+ "Asia/Shanghai", "China", "Asia/Shanghai",
+ "Asia/Singapore", "Singapore", "Asia/Singapore",
+ "Asia/Srednekolymsk", "Singapore", "Asia/Singapore",
+ "Asia/Taipei", "Taipei", "Asia/Taipei",
+ "Asia/Tashkent", "Uzbekistan", "Asia/Tashkent",
+ "Asia/Tbilisi", "Georgia", "Asia/Tbilisi",
+ "Asia/Tehran", "Iran", "Asia/Tehran",
+ "Asia/Tel_Aviv", "Israel", "Asia/Jerusalem",
+ "Asia/Thimbu", "Bhutan", "Asia/Thimphu",
+ "Asia/Thimphu", "Bhutan", "Asia/Thimphu",
+ "Asia/Tokyo", "Japan", "Asia/Tokyo",
+ "Asia/Ujung_Pandang", "Indonesia_Central", "Asia/Makassar",
+ "Asia/Ulaanbaatar", "Mongolia", "Asia/Ulaanbaatar",
+ "Asia/Ulan_Bator", "Mongolia", "Asia/Ulaanbaatar",
+ "Asia/Urumqi", "Urumqi", "Asia/Urumqi",
+ "Asia/Ust-Nera", "Vladivostok", "Asia/Vladivostok",
+ "Asia/Vientiane", "Indochina", "Asia/Bangkok",
+ "Asia/Vladivostok", "Vladivostok", "Asia/Vladivostok",
+ "Asia/Yakutsk", "Yakutsk", "Asia/Yakutsk",
+ "Asia/Yekaterinburg", "Yekaterinburg", "Asia/Yekaterinburg",
+ "Asia/Yerevan", "Armenia", "Asia/Yerevan",
+ "Atlantic/Azores", "Azores", "Atlantic/Azores",
+ "Atlantic/Bermuda", "Atlantic", "America/Halifax",
+ "Atlantic/Canary", "Europe_Western", "Atlantic/Canary",
+ "Atlantic/Cape_Verde", "Cape_Verde", "Atlantic/Cape_Verde",
+ "Atlantic/Faeroe", "Europe_Western", "Atlantic/Canary",
+ "Atlantic/Faroe", "Europe_Western", "Atlantic/Canary",
+ "Atlantic/Jan_Mayen", "Europe_Central", "Europe/Paris",
+ "Atlantic/Madeira", "Europe_Western", "Atlantic/Canary",
+ "Atlantic/Reykjavik", "GMT", "Atlantic/Reykjavik",
+ "Atlantic/South_Georgia", "South_Georgia", "Atlantic/South_Georgia",
+ "Atlantic/St_Helena", "GMT", "Atlantic/Reykjavik",
+ "Atlantic/Stanley", "Falkland", "Atlantic/Stanley",
+ "Australia/ACT", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Adelaide", "Australia_Central", "Australia/Adelaide",
+ "Australia/Brisbane", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Broken_Hill", "Australia_Central", "Australia/Adelaide",
+ "Australia/Canberra", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Currie", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Darwin", "Australia_Central", "Australia/Adelaide",
+ "Australia/Eucla", "Australia_CentralWestern", "Australia/Eucla",
+ "Australia/Hobart", "Australia_Eastern", "Australia/Sydney",
+ "Australia/LHI", "Lord_Howe", "Australia/Lord_Howe",
+ "Australia/Lindeman", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Lord_Howe", "Lord_Howe", "Australia/Lord_Howe",
+ "Australia/Melbourne", "Australia_Eastern", "Australia/Sydney",
+ "Australia/NSW", "Australia_Eastern", "Australia/Sydney",
+ "Australia/North", "Australia_Central", "Australia/Adelaide",
+ "Australia/Perth", "Australia_Western", "Australia/Perth",
+ "Australia/Queensland", "Australia_Eastern", "Australia/Sydney",
+ "Australia/South", "Australia_Central", "Australia/Adelaide",
+ "Australia/Sydney", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Tasmania", "Australia_Eastern", "Australia/Sydney",
+ "Australia/Victoria", "Australia_Eastern", "Australia/Sydney",
+ "Australia/West", "Australia_Western", "Australia/Perth",
+ "Australia/Yancowinna", "Australia_Central", "Australia/Adelaide",
+ "Brazil/Acre", "Acre", "America/Rio_Branco",
+ "Brazil/DeNoronha", "Noronha", "America/Noronha",
+ "Brazil/East", "Brasilia", "America/Sao_Paulo",
+ "Brazil/West", "Amazon", "America/Manaus",
+ "CST6CDT", "America_Central", "America/Chicago",
+ "Canada/Atlantic", "Atlantic", "America/Halifax",
+ "Canada/Central", "America_Central", "America/Chicago",
+ "Canada/East-Saskatchewan", "America_Central", "America/Chicago",
+ "Canada/Eastern", "America_Eastern", "America/New_York",
+ "Canada/Mountain", "America_Mountain", "America/Denver",
+ "Canada/Newfoundland", "Newfoundland", "America/St_Johns",
+ "Canada/Pacific", "America_Pacific", "America/Los_Angeles",
+ "Canada/Saskatchewan", "America_Central", "America/Chicago",
+ "Canada/Yukon", "America_Pacific", "America/Los_Angeles",
+ "Chile/Continental", "Chile", "America/Santiago",
+ "Chile/EasterIsland", "Easter", "Pacific/Easter",
+ "Cuba", "Cuba", "America/Havana",
+ "EST5EDT", "America_Eastern", "America/New_York",
+ "Egypt", "Europe_Eastern", "Europe/Bucharest",
+ "Eire", "GMT", "Atlantic/Reykjavik",
+ "Europe/Amsterdam", "Europe_Central", "Europe/Paris",
+ "Europe/Andorra", "Europe_Central", "Europe/Paris",
+ "Europe/Athens", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Belfast", "GMT", "Atlantic/Reykjavik",
+ "Europe/Belgrade", "Europe_Central", "Europe/Paris",
+ "Europe/Berlin", "Europe_Central", "Europe/Paris",
+ "Europe/Bratislava", "Europe_Central", "Europe/Paris",
+ "Europe/Brussels", "Europe_Central", "Europe/Paris",
+ "Europe/Bucharest", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Budapest", "Europe_Central", "Europe/Paris",
+ "Europe/Busingen", "Europe_Central", "Europe/Paris",
+ "Europe/Chisinau", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Copenhagen", "Europe_Central", "Europe/Paris",
+ "Europe/Dublin", "GMT", "Atlantic/Reykjavik",
+ "Europe/Gibraltar", "Europe_Central", "Europe/Paris",
+ "Europe/Guernsey", "GMT", "Atlantic/Reykjavik",
+ "Europe/Helsinki", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Isle_of_Man", "GMT", "Atlantic/Reykjavik",
+ "Europe/Istanbul", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Jersey", "GMT", "Atlantic/Reykjavik",
+ "Europe/Kaliningrad", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Kiev", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Lisbon", "Europe_Western", "Atlantic/Canary",
+ "Europe/Ljubljana", "Europe_Central", "Europe/Paris",
+ "Europe/London", "GMT", "Atlantic/Reykjavik",
+ "Europe/Luxembourg", "Europe_Central", "Europe/Paris",
+ "Europe/Madrid", "Europe_Central", "Europe/Paris",
+ "Europe/Malta", "Europe_Central", "Europe/Paris",
+ "Europe/Mariehamn", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Minsk", "Europe_Further_Eastern", "Europe/Minsk",
+ "Europe/Monaco", "Europe_Central", "Europe/Paris",
+ "Europe/Moscow", "Moscow", "Europe/Moscow",
+ "Europe/Nicosia", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Oslo", "Europe_Central", "Europe/Paris",
+ "Europe/Paris", "Europe_Central", "Europe/Paris",
+ "Europe/Podgorica", "Europe_Central", "Europe/Paris",
+ "Europe/Prague", "Europe_Central", "Europe/Paris",
+ "Europe/Riga", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Rome", "Europe_Central", "Europe/Paris",
+ "Europe/Samara", "Samara", "Europe/Samara",
+ "Europe/San_Marino", "Europe_Central", "Europe/Paris",
+ "Europe/Sarajevo", "Europe_Central", "Europe/Paris",
+ "Europe/Simferopol", "Moscow", "Europe/Moscow",
+ "Europe/Skopje", "Europe_Central", "Europe/Paris",
+ "Europe/Sofia", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Stockholm", "Europe_Central", "Europe/Paris",
+ "Europe/Tallinn", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Tirane", "Europe_Central", "Europe/Paris",
+ "Europe/Tiraspol", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Uzhgorod", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Vaduz", "Europe_Central", "Europe/Paris",
+ "Europe/Vatican", "Europe_Central", "Europe/Paris",
+ "Europe/Vienna", "Europe_Central", "Europe/Paris",
+ "Europe/Vilnius", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Volgograd", "Moscow", "Europe/Moscow",
+ "Europe/Warsaw", "Europe_Central", "Europe/Paris",
+ "Europe/Zagreb", "Europe_Central", "Europe/Paris",
+ "Europe/Zaporozhye", "Europe_Eastern", "Europe/Bucharest",
+ "Europe/Zurich", "Europe_Central", "Europe/Paris",
+ "GB", "GMT", "Atlantic/Reykjavik",
+ "GB-Eire", "GMT", "Atlantic/Reykjavik",
+ "Hongkong", "Hong_Kong", "Asia/Hong_Kong",
+ "Iceland", "GMT", "Atlantic/Reykjavik",
+ "Indian/Antananarivo", "Africa_Eastern", "Africa/Nairobi",
+ "Indian/Chagos", "Indian_Ocean", "Indian/Chagos",
+ "Indian/Christmas", "Christmas", "Indian/Christmas",
+ "Indian/Cocos", "Cocos", "Indian/Cocos",
+ "Indian/Comoro", "Africa_Eastern", "Africa/Nairobi",
+ "Indian/Kerguelen", "French_Southern", "Indian/Kerguelen",
+ "Indian/Mahe", "Seychelles", "Indian/Mahe",
+ "Indian/Maldives", "Maldives", "Indian/Maldives",
+ "Indian/Mauritius", "Mauritius", "Indian/Mauritius",
+ "Indian/Mayotte", "Africa_Eastern", "Africa/Nairobi",
+ "Indian/Reunion", "Reunion", "Indian/Reunion",
+ "Iran", "Iran", "Asia/Tehran",
+ "Israel", "Israel", "Asia/Jerusalem",
+ "Jamaica", "America_Eastern", "America/New_York",
+ "Japan", "Japan", "Asia/Tokyo",
+ "Kwajalein", "Marshall_Islands", "Pacific/Majuro",
+ "Libya", "Europe_Eastern", "Europe/Bucharest",
+ "MST7MDT", "America_Mountain", "America/Denver",
+ "Mexico/BajaNorte", "America_Pacific", "America/Los_Angeles",
+ "Mexico/BajaSur", "Mexico_Pacific", "America/Mazatlan",
+ "Mexico/General", "America_Central", "America/Chicago",
+ "NZ", "New_Zealand", "Pacific/Auckland",
+ "NZ-CHAT", "Chatham", "Pacific/Chatham",
+ "Navajo", "America_Mountain", "America/Denver",
+ "PRC", "China", "Asia/Shanghai",
+ "PST8PDT", "America_Pacific", "America/Los_Angeles",
+ "Pacific/Apia", "Apia", "Pacific/Apia",
+ "Pacific/Auckland", "New_Zealand", "Pacific/Auckland",
+ "Pacific/Bougainville", "New_Zealand", "Pacific/Auckland",
+ "Pacific/Chatham", "Chatham", "Pacific/Chatham",
+ "Pacific/Chuuk", "Truk", "Pacific/Truk",
+ "Pacific/Easter", "Easter", "Pacific/Easter",
+ "Pacific/Efate", "Vanuatu", "Pacific/Efate",
+ "Pacific/Enderbury", "Phoenix_Islands", "Pacific/Enderbury",
+ "Pacific/Fakaofo", "Tokelau", "Pacific/Fakaofo",
+ "Pacific/Fiji", "Fiji", "Pacific/Fiji",
+ "Pacific/Funafuti", "Tuvalu", "Pacific/Funafuti",
+ "Pacific/Galapagos", "Galapagos", "Pacific/Galapagos",
+ "Pacific/Gambier", "Gambier", "Pacific/Gambier",
+ "Pacific/Guadalcanal", "Solomon", "Pacific/Guadalcanal",
+ "Pacific/Guam", "Chamorro", "Pacific/Saipan",
+ "Pacific/Honolulu", "Hawaii_Aleutian", "Pacific/Honolulu",
+ "Pacific/Johnston", "Hawaii_Aleutian", "Pacific/Honolulu",
+ "Pacific/Kiritimati", "Line_Islands", "Pacific/Kiritimati",
+ "Pacific/Kosrae", "Kosrae", "Pacific/Kosrae",
+ "Pacific/Kwajalein", "Marshall_Islands", "Pacific/Majuro",
+ "Pacific/Majuro", "Marshall_Islands", "Pacific/Majuro",
+ "Pacific/Marquesas", "Marquesas", "Pacific/Marquesas",
+ "Pacific/Midway", "Samoa", "Pacific/Pago_Pago",
+ "Pacific/Nauru", "Nauru", "Pacific/Nauru",
+ "Pacific/Niue", "Niue", "Pacific/Niue",
+ "Pacific/Norfolk", "Norfolk", "Pacific/Norfolk",
+ "Pacific/Noumea", "New_Caledonia", "Pacific/Noumea",
+ "Pacific/Pago_Pago", "Samoa", "Pacific/Pago_Pago",
+ "Pacific/Palau", "Palau", "Pacific/Palau",
+ "Pacific/Pitcairn", "Pitcairn", "Pacific/Pitcairn",
+ "Pacific/Pohnpei", "Ponape", "Pacific/Ponape",
+ "Pacific/Ponape", "Ponape", "Pacific/Ponape",
+ "Pacific/Port_Moresby", "Papua_New_Guinea", "Pacific/Port_Moresby",
+ "Pacific/Rarotonga", "Cook", "Pacific/Rarotonga",
+ "Pacific/Saipan", "Chamorro", "Pacific/Saipan",
+ "Pacific/Samoa", "Samoa", "Pacific/Pago_Pago",
+ "Pacific/Tahiti", "Tahiti", "Pacific/Tahiti",
+ "Pacific/Tarawa", "Gilbert_Islands", "Pacific/Tarawa",
+ "Pacific/Tongatapu", "Tonga", "Pacific/Tongatapu",
+ "Pacific/Truk", "Truk", "Pacific/Truk",
+ "Pacific/Wake", "Wake", "Pacific/Wake",
+ "Pacific/Wallis", "Wallis", "Pacific/Wallis",
+ "Pacific/Yap", "Truk", "Pacific/Truk",
+ "Poland", "Europe_Central", "Europe/Paris",
+ "Portugal", "Europe_Western", "Atlantic/Canary",
+ "ROK", "Korea", "Asia/Seoul",
+ "Singapore", "Singapore", "Asia/Singapore",
+ "Turkey", "Europe_Eastern", "Europe/Bucharest",
+ "US/Alaska", "Alaska", "America/Juneau",
+ "US/Aleutian", "Hawaii_Aleutian", "Pacific/Honolulu",
+ "US/Arizona", "America_Mountain", "America/Denver",
+ "US/Central", "America_Central", "America/Chicago",
+ "US/East-Indiana", "America_Eastern", "America/New_York",
+ "US/Eastern", "America_Eastern", "America/New_York",
+ "US/Hawaii", "Hawaii_Aleutian", "Pacific/Honolulu",
+ "US/Indiana-Starke", "America_Central", "America/Chicago",
+ "US/Michigan", "America_Eastern", "America/New_York",
+ "US/Mountain", "America_Mountain", "America/Denver",
+ "US/Pacific", "America_Pacific", "America/Los_Angeles",
+ "US/Pacific-New", "America_Pacific", "America/Los_Angeles",
+ "US/Samoa", "Samoa", "Pacific/Pago_Pago",
+ "W-SU", "Moscow", "Europe/Moscow",
+
+ // From tzdb
+ "Africa/Khartoum", "Africa_Central", "Africa/Maputo", // tzdata2017c
+ "Africa/Windhoek", "Africa_Central", "Africa/Maputo", // tzdata2017c
+ "Africa/Sao_Tome", "Africa_Western", "Africa/Lagos", // tzdata2018c
};
private static final String[] mzoneMap = new String[] {
- "America_Eastern", "TC", "America/Grand_Turk",
- "America_Eastern", "BS", "America/Nassau",
- "America_Eastern", "CA", "America/Toronto",
- "America_Eastern", "KY", "America/Cayman",
- "America_Eastern", "PA", "America/Panama",
- "America_Eastern", "JM", "America/Jamaica",
- "America_Pacific", "CA", "America/Vancouver",
- "America_Pacific", "MX", "America/Tijuana",
- "Europe_Western", "FO", "Atlantic/Faeroe",
- "Arabian", "YE", "Asia/Aden",
- "Arabian", "BH", "Asia/Bahrain",
- "Arabian", "KW", "Asia/Kuwait",
- "Arabian", "QA", "Asia/Qatar",
- "Arabian", "IQ", "Asia/Baghdad",
- "Korea", "KP", "Asia/Pyongyang",
- "Africa_Central", "ZW", "Africa/Harare",
- "Africa_Central", "ZM", "Africa/Lusaka",
- "Africa_Central", "MW", "Africa/Blantyre",
+ // From metaZones.xml
+ "Africa_Central", "BI", "Africa/Bujumbura",
"Africa_Central", "BW", "Africa/Gaborone",
"Africa_Central", "CD", "Africa/Lubumbashi",
- "Africa_Central", "BI", "Africa/Bujumbura",
+ "Africa_Central", "MW", "Africa/Blantyre",
"Africa_Central", "RW", "Africa/Kigali",
- "Africa_Western", "ST", "Africa/Sao_Tome",
- "Africa_Western", "CF", "Africa/Bangui",
+ "Africa_Central", "ZM", "Africa/Lusaka",
+ "Africa_Central", "ZW", "Africa/Harare",
+ "Africa_Eastern", "DJ", "Africa/Djibouti",
+ "Africa_Eastern", "ER", "Africa/Asmera",
+ "Africa_Eastern", "ET", "Africa/Addis_Ababa",
+ "Africa_Eastern", "KM", "Indian/Comoro",
+ "Africa_Eastern", "MG", "Indian/Antananarivo",
+ "Africa_Eastern", "SO", "Africa/Mogadishu",
+ "Africa_Eastern", "TZ", "Africa/Dar_es_Salaam",
+ "Africa_Eastern", "UG", "Africa/Kampala",
+ "Africa_Eastern", "YT", "Indian/Mayotte",
+ "Africa_Southern", "LS", "Africa/Maseru",
+ "Africa_Southern", "SZ", "Africa/Mbabane",
"Africa_Western", "AO", "Africa/Luanda",
- "Africa_Western", "NE", "Africa/Niamey",
+ "Africa_Western", "BJ", "Africa/Porto-Novo",
"Africa_Western", "CD", "Africa/Kinshasa",
- "Africa_Western", "CM", "Africa/Douala",
+ "Africa_Western", "CF", "Africa/Bangui",
"Africa_Western", "CG", "Africa/Brazzaville",
- "Africa_Western", "GQ", "Africa/Malabo",
- "Africa_Western", "TD", "Africa/Ndjamena",
+ "Africa_Western", "CM", "Africa/Douala",
"Africa_Western", "GA", "Africa/Libreville",
- "Atlantic", "PR", "America/Puerto_Rico",
- "Atlantic", "AN", "America/Curacao",
- "Atlantic", "VI", "America/St_Thomas",
- "Atlantic", "GP", "America/Guadeloupe",
- "Atlantic", "TT", "America/Port_of_Spain",
+ "Africa_Western", "GQ", "Africa/Malabo",
+ "Africa_Western", "NE", "Africa/Niamey",
+ "Africa_Western", "TD", "Africa/Ndjamena",
+ "America_Central", "BZ", "America/Belize",
+ "America_Central", "CA", "America/Winnipeg",
+ "America_Central", "CR", "America/Costa_Rica",
+ "America_Central", "GT", "America/Guatemala",
+ "America_Central", "HN", "America/Tegucigalpa",
+ "America_Central", "MX", "America/Mexico_City",
+ "America_Central", "SV", "America/El_Salvador",
+ "America_Eastern", "BS", "America/Nassau",
+ "America_Eastern", "CA", "America/Toronto",
+ "America_Eastern", "HT", "America/Port-au-Prince",
+ "America_Eastern", "JM", "America/Jamaica",
+ "America_Eastern", "KY", "America/Cayman",
+ "America_Eastern", "PA", "America/Panama",
+ "America_Mountain", "CA", "America/Edmonton",
+ "America_Mountain", "MX", "America/Hermosillo",
+ "America_Pacific", "CA", "America/Vancouver",
+ "America_Pacific", "MX", "America/Tijuana",
+ "Arabian", "BH", "Asia/Bahrain",
+ "Arabian", "IQ", "Asia/Baghdad",
+ "Arabian", "KW", "Asia/Kuwait",
+ "Arabian", "QA", "Asia/Qatar",
+ "Arabian", "YE", "Asia/Aden",
"Atlantic", "AG", "America/Antigua",
- "Atlantic", "MF", "America/Marigot",
- "Atlantic", "DM", "America/Dominica",
- "Atlantic", "VG", "America/Tortola",
- "Atlantic", "MQ", "America/Martinique",
- "Atlantic", "GL", "America/Thule",
"Atlantic", "AI", "America/Anguilla",
+ "Atlantic", "AN", "America/Curacao",
+ "Atlantic", "AW", "America/Aruba",
"Atlantic", "BB", "America/Barbados",
"Atlantic", "BM", "Atlantic/Bermuda",
"Atlantic", "BQ", "America/Kralendijk",
- "Atlantic", "LC", "America/St_Lucia",
- "Atlantic", "MS", "America/Montserrat",
- "Atlantic", "SX", "America/Lower_Princes",
+ "Atlantic", "DM", "America/Dominica",
"Atlantic", "GD", "America/Grenada",
- "Atlantic", "VC", "America/St_Vincent",
+ "Atlantic", "GL", "America/Thule",
+ "Atlantic", "GP", "America/Guadeloupe",
"Atlantic", "KN", "America/St_Kitts",
- "Atlantic", "AW", "America/Aruba",
- "GMT", "GM", "Africa/Banjul",
- "GMT", "LR", "Africa/Monrovia",
- "GMT", "ML", "Africa/Bamako",
- "GMT", "SH", "Atlantic/St_Helena",
- "GMT", "TG", "Africa/Lome",
- "GMT", "GB", "Europe/London",
- "GMT", "MR", "Africa/Nouakchott",
- "GMT", "GN", "Africa/Conakry",
- "GMT", "SL", "Africa/Freetown",
- "GMT", "BF", "Africa/Ouagadougou",
- "GMT", "SN", "Africa/Dakar",
- "GMT", "CI", "Africa/Abidjan",
- "GMT", "IE", "Europe/Dublin",
- "GMT", "GH", "Africa/Accra",
- "Chile", "AQ", "Antarctica/Palmer",
- "America_Central", "CR", "America/Costa_Rica",
- "America_Central", "HN", "America/Tegucigalpa",
- "America_Central", "CA", "America/Winnipeg",
- "America_Central", "SV", "America/El_Salvador",
- "America_Central", "MX", "America/Mexico_City",
- "America_Central", "BZ", "America/Belize",
- "America_Central", "GT", "America/Guatemala",
- "America_Mountain", "CA", "America/Edmonton",
- "America_Mountain", "MX", "America/Hermosillo",
- "New_Zealand", "AQ", "Antarctica/McMurdo",
- "India", "LK", "Asia/Colombo",
- "Gulf", "OM", "Asia/Muscat",
- "China", "MO", "Asia/Macau",
- "Africa_Eastern", "ER", "Africa/Asmera",
- "Africa_Eastern", "TZ", "Africa/Dar_es_Salaam",
- "Africa_Eastern", "SO", "Africa/Mogadishu",
- "Africa_Eastern", "DJ", "Africa/Djibouti",
- "Africa_Eastern", "MG", "Indian/Antananarivo",
- "Africa_Eastern", "KM", "Indian/Comoro",
- "Africa_Eastern", "UG", "Africa/Kampala",
- "Africa_Eastern", "YT", "Indian/Mayotte",
- "Africa_Eastern", "ET", "Africa/Addis_Ababa",
+ "Atlantic", "LC", "America/St_Lucia",
+ "Atlantic", "MF", "America/Marigot",
+ "Atlantic", "MQ", "America/Martinique",
+ "Atlantic", "MS", "America/Montserrat",
+ "Atlantic", "PR", "America/Puerto_Rico",
+ "Atlantic", "SX", "America/Lower_Princes",
+ "Atlantic", "TT", "America/Port_of_Spain",
+ "Atlantic", "VC", "America/St_Vincent",
+ "Atlantic", "VG", "America/Tortola",
+ "Atlantic", "VI", "America/St_Thomas",
"Chamorro", "GU", "Pacific/Guam",
- "Africa_Southern", "LS", "Africa/Maseru",
- "Africa_Southern", "SZ", "Africa/Mbabane",
- "Indochina", "KH", "Asia/Phnom_Penh",
- "Indochina", "TH", "Asia/Bangkok",
- "Indochina", "LA", "Asia/Vientiane",
+ "Chile", "AQ", "Antarctica/Palmer",
+ "Europe_Central", "AD", "Europe/Andorra",
+ "Europe_Central", "AL", "Europe/Tirane",
"Europe_Central", "AT", "Europe/Vienna",
- "Europe_Central", "SK", "Europe/Bratislava",
"Europe_Central", "BA", "Europe/Sarajevo",
- "Europe_Central", "CZ", "Europe/Prague",
"Europe_Central", "BE", "Europe/Brussels",
- "Europe_Central", "RS", "Europe/Belgrade",
- "Europe_Central", "SE", "Europe/Stockholm",
- "Europe_Central", "MT", "Europe/Malta",
- "Europe_Central", "IT", "Europe/Rome",
- "Europe_Central", "LU", "Europe/Luxembourg",
+ "Europe_Central", "CH", "Europe/Zurich",
+ "Europe_Central", "CZ", "Europe/Prague",
+ "Europe_Central", "DE", "Europe/Berlin",
+ "Europe_Central", "DK", "Europe/Copenhagen",
+ "Europe_Central", "ES", "Europe/Madrid",
+ "Europe_Central", "GI", "Europe/Gibraltar",
+ "Europe_Central", "HR", "Europe/Zagreb",
"Europe_Central", "HU", "Europe/Budapest",
- "Europe_Central", "NO", "Europe/Oslo",
+ "Europe_Central", "IT", "Europe/Rome",
+ "Europe_Central", "LI", "Europe/Vaduz",
+ "Europe_Central", "LU", "Europe/Luxembourg",
+ "Europe_Central", "MC", "Europe/Monaco",
"Europe_Central", "ME", "Europe/Podgorica",
"Europe_Central", "MK", "Europe/Skopje",
+ "Europe_Central", "MT", "Europe/Malta",
"Europe_Central", "NL", "Europe/Amsterdam",
- "Europe_Central", "LI", "Europe/Vaduz",
+ "Europe_Central", "NO", "Europe/Oslo",
"Europe_Central", "PL", "Europe/Warsaw",
- "Europe_Central", "ES", "Europe/Madrid",
- "Europe_Central", "TN", "Africa/Tunis",
+ "Europe_Central", "RS", "Europe/Belgrade",
+ "Europe_Central", "SE", "Europe/Stockholm",
"Europe_Central", "SI", "Europe/Ljubljana",
- "Europe_Central", "DE", "Europe/Berlin",
- "Europe_Central", "GI", "Europe/Gibraltar",
- "Europe_Central", "CH", "Europe/Zurich",
- "Europe_Central", "MC", "Europe/Monaco",
- "Europe_Central", "VA", "Europe/Vatican",
- "Europe_Central", "HR", "Europe/Zagreb",
- "Europe_Central", "AL", "Europe/Tirane",
- "Europe_Central", "AD", "Europe/Andorra",
- "Europe_Central", "DK", "Europe/Copenhagen",
+ "Europe_Central", "SK", "Europe/Bratislava",
"Europe_Central", "SM", "Europe/San_Marino",
- "Europe_Eastern", "SY", "Asia/Damascus",
- "Europe_Eastern", "FI", "Europe/Helsinki",
+ "Europe_Central", "TN", "Africa/Tunis",
+ "Europe_Central", "VA", "Europe/Vatican",
+ "Europe_Central", "XK", "Europe/Belgrade",
"Europe_Eastern", "AX", "Europe/Mariehamn",
"Europe_Eastern", "BG", "Europe/Sofia",
+ "Europe_Eastern", "CY", "Asia/Nicosia",
"Europe_Eastern", "EG", "Africa/Cairo",
- "Europe_Eastern", "LB", "Asia/Beirut",
+ "Europe_Eastern", "FI", "Europe/Helsinki",
"Europe_Eastern", "GR", "Europe/Athens",
"Europe_Eastern", "JO", "Asia/Amman",
- "Europe_Eastern", "CY", "Asia/Nicosia",
+ "Europe_Eastern", "LB", "Asia/Beirut",
+ "Europe_Eastern", "SY", "Asia/Damascus",
+ "Europe_Further_Eastern", "RU", "Europe/Kaliningrad",
+ "Europe_Western", "FO", "Atlantic/Faeroe",
+ "GMT", "BF", "Africa/Ouagadougou",
+ "GMT", "CI", "Africa/Abidjan",
+ "GMT", "GB", "Europe/London",
+ "GMT", "GH", "Africa/Accra",
+ "GMT", "GM", "Africa/Banjul",
+ "GMT", "GN", "Africa/Conakry",
+ "GMT", "IE", "Europe/Dublin",
+ "GMT", "ML", "Africa/Bamako",
+ "GMT", "MR", "Africa/Nouakchott",
+ "GMT", "SH", "Atlantic/St_Helena",
+ "GMT", "SL", "Africa/Freetown",
+ "GMT", "SN", "Africa/Dakar",
+ "GMT", "ST", "Africa/Sao_Tome",
+ "GMT", "TG", "Africa/Lome",
+ "Gulf", "OM", "Asia/Muscat",
+ "India", "LK", "Asia/Colombo",
+ "Indochina", "KH", "Asia/Phnom_Penh",
+ "Indochina", "LA", "Asia/Vientiane",
+ "Korea", "KP", "Asia/Pyongyang",
+ "New_Zealand", "AQ", "Antarctica/McMurdo",
+
+ // From tzdb
+ "Africa_Western", "ST", "Africa/Sao_Tome", // tzdata2018c
};
private static final String[] aliasMap = new String[] {
- "Mexico/BajaNorte", "America/Tijuana",
- "Antarctica/South_Pole", "Antarctica/McMurdo",
- "US/Michigan", "America/Detroit",
- "America/Porto_Acre", "America/Rio_Branco",
+ // From supplementalMetadata.xml
+ "Africa/Timbuktu", "Africa/Bamako",
+ "America/Montreal", "America/Toronto",
+ "America/Shiprock", "America/Denver",
+ "Antarctica/South_Pole", "Pacific/Auckland",
+ "Asia/Chongqing", "Asia/Shanghai",
+ "Asia/Harbin", "Asia/Shanghai",
+ "Asia/Kashgar", "Asia/Urumqi",
+ "Atlantic/Jan_Mayen", "Europe/Oslo",
+ "EST", "America/Indianapolis",
+ "Europe/Belfast", "Europe/London",
+ "HST", "Pacific/Honolulu",
+ "MST", "America/Phoenix",
+ "Pacific/Yap", "Pacific/Truk",
+ "SystemV/AST4", "America/Puerto_Rico",
+ "SystemV/AST4ADT", "America/Halifax",
+ "SystemV/CST6", "America/Regina",
+ "SystemV/CST6CDT", "America/Chicago",
+ "SystemV/EST5", "America/Indianapolis",
+ "SystemV/EST5EDT", "America/New_York",
+ "SystemV/HST10", "Pacific/Honolulu",
+ "SystemV/MST7", "America/Phoenix",
+ "SystemV/MST7MDT", "America/Denver",
+ "SystemV/PST8", "Pacific/Pitcairn",
+ "SystemV/PST8PDT", "America/Los_Angeles",
+ "SystemV/YST9", "Pacific/Gambier",
+ "SystemV/YST9YDT", "America/Anchorage",
+
+ // From tzdb
+ "Brazil/Acre", "America/Rio_Branco",
+ "US/Indiana-Starke", "America/Indiana/Knox",
+ "America/Atka", "America/Adak",
+ "America/St_Barthelemy", "America/Guadeloupe",
+ "Australia/North", "Australia/Darwin",
+ "Europe/Zagreb", "Europe/Belgrade",
+ "Etc/Universal", "Etc/UTC",
+ "NZ-CHAT", "Pacific/Chatham",
+ "Asia/Macao", "Asia/Macau",
+ "Pacific/Yap", "Pacific/Chuuk",
+ "Egypt", "Africa/Cairo",
+ "US/Central", "America/Chicago",
+ "Canada/Atlantic", "America/Halifax",
+ "Brazil/East", "America/Sao_Paulo",
+ "America/Cordoba", "America/Argentina/Cordoba",
+ "US/Hawaii", "Pacific/Honolulu",
+ "America/Louisville", "America/Kentucky/Louisville",
+ "America/Shiprock", "America/Denver",
+ "Australia/Canberra", "Australia/Sydney",
+ "Asia/Chungking", "Asia/Chongqing",
+ "Universal", "Etc/UTC",
"US/Alaska", "America/Anchorage",
"Asia/Ujung_Pandang", "Asia/Makassar",
- "Canada/Atlantic", "America/Halifax",
- "W-SU", "Europe/Moscow",
- "Kwajalein", "Pacific/Kwajalein",
- "Europe/Bratislava", "Europe/Prague",
- "Canada/Central", "America/Winnipeg",
- "Canada/Mountain", "America/Edmonton",
- "Iceland", "Atlantic/Reykjavik",
- "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
- "UTC", "Etc/UTC",
- "Europe/Guernsey", "Europe/London",
- "Singapore", "Asia/Singapore",
- "Atlantic/Faeroe", "Atlantic/Faroe",
- "Greenwich", "Etc/GMT",
- "America/Fort_Wayne", "America/Indiana/Indianapolis",
- "Etc/Universal", "Etc/UTC",
- "Chile/EasterIsland", "Pacific/Easter",
- "Pacific/Samoa", "Pacific/Pago_Pago",
- "Europe/Nicosia", "Asia/Nicosia",
- "Etc/Zulu", "Etc/UTC",
- "Asia/Ashkhabad", "Asia/Ashgabat",
- "America/Louisville", "America/Kentucky/Louisville",
- "Australia/North", "Australia/Darwin",
- "America/Atka", "America/Adak",
- "America/Marigot", "America/Guadeloupe",
- "Brazil/DeNoronha", "America/Noronha",
- "Turkey", "Europe/Istanbul",
- "Zulu", "Etc/UTC",
- "Europe/Vatican", "Europe/Rome",
- "Israel", "Asia/Jerusalem",
- "America/Rosario", "America/Argentina/Cordoba",
- "Jamaica", "America/Jamaica",
- "Asia/Katmandu", "Asia/Kathmandu",
- "ROK", "Asia/Seoul",
- "Asia/Macao", "Asia/Macau",
- "Australia/South", "Australia/Adelaide",
- "US/Arizona", "America/Phoenix",
- "Australia/Yancowinna", "Australia/Broken_Hill",
- "Canada/Pacific", "America/Vancouver",
- "Libya", "Africa/Tripoli",
"Japan", "Asia/Tokyo",
- "Arctic/Longyearbyen", "Europe/Oslo",
- "Africa/Timbuktu", "Africa/Bamako",
- "America/Indianapolis", "America/Indiana/Indianapolis",
- "Etc/Greenwich", "Etc/GMT",
- "Australia/ACT", "Australia/Sydney",
- "GMT", "Etc/GMT",
- "Mexico/BajaSur", "America/Mazatlan",
- "Cuba", "America/Havana",
- "Brazil/West", "America/Manaus",
- "Asia/Saigon", "Asia/Ho_Chi_Minh",
- "America/Jujuy", "America/Argentina/Jujuy",
- "Australia/Victoria", "Australia/Melbourne",
- "America/Catamarca", "America/Argentina/Catamarca",
- "America/Ensenada", "America/Tijuana",
- "Europe/San_Marino", "Europe/Rome",
- "Europe/Isle_of_Man", "Europe/London",
- "Mexico/General", "America/Mexico_City",
- "US/Hawaii", "Pacific/Honolulu",
- "Europe/Mariehamn", "Europe/Helsinki",
- "US/Indiana-Starke", "America/Indiana/Knox",
- "Australia/NSW", "Australia/Sydney",
- "Australia/West", "Australia/Perth",
- "Brazil/Acre", "America/Rio_Branco",
- "Australia/Tasmania", "Australia/Hobart",
- "Atlantic/Jan_Mayen", "Europe/Oslo",
- "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
- "Europe/Jersey", "Europe/London",
- "Brazil/East", "America/Sao_Paulo",
- "America/Virgin", "America/St_Thomas",
- "Navajo", "America/Denver",
- "GB", "Europe/London",
- "Poland", "Europe/Warsaw",
- "Pacific/Yap", "Pacific/Chuuk",
- "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
- "Asia/Calcutta", "Asia/Kolkata",
- "America/Mendoza", "America/Argentina/Mendoza",
- "Universal", "Etc/UTC",
- "Australia/Queensland", "Australia/Brisbane",
- "Asia/Dacca", "Asia/Dhaka",
+ "Atlantic/Faeroe", "Atlantic/Faroe",
+ "Asia/Istanbul", "Europe/Istanbul",
"US/Pacific", "America/Los_Angeles",
- "Asia/Chungking", "Asia/Chongqing",
- "Pacific/Truk", "Pacific/Chuuk",
- "ROC", "Asia/Taipei",
- "US/Aleutian", "America/Adak",
- "Pacific/Ponape", "Pacific/Pohnpei",
- "Canada/Yukon", "America/Whitehorse",
- "PRC", "Asia/Shanghai",
+ "Mexico/General", "America/Mexico_City",
+ "Poland", "Europe/Warsaw",
"Africa/Asmera", "Africa/Asmara",
- "GB-Eire", "Europe/London",
- "America/St_Barthelemy", "America/Guadeloupe",
- "US/Central", "America/Chicago",
- "Egypt", "Africa/Cairo",
- "Chile/Continental", "America/Santiago",
- "Portugal", "Europe/Lisbon",
- "Europe/Tiraspol", "Europe/Chisinau",
- "America/Coral_Harbour", "America/Atikokan",
- "Europe/Belfast", "Europe/London",
- "America/Cordoba", "America/Argentina/Cordoba",
- "America/Shiprock", "America/Denver",
- "NZ-CHAT", "Pacific/Chatham",
- "Eire", "Europe/Dublin",
- "US/East-Indiana", "America/Indiana/Indianapolis",
- "Australia/Canberra", "Australia/Sydney",
- "Canada/Newfoundland", "America/St_Johns",
- "UCT", "Etc/UCT",
- "Australia/LHI", "Australia/Lord_Howe",
- "Iran", "Asia/Tehran",
- "US/Eastern", "America/New_York",
- "Canada/Eastern", "America/Toronto",
- "US/Samoa", "Pacific/Pago_Pago",
+ "Asia/Saigon", "Asia/Ho_Chi_Minh",
+ "US/Michigan", "America/Detroit",
+ "America/Argentina/ComodRivadavia", "America/Argentina/Catamarca",
+ "W-SU", "Europe/Moscow",
+ "Australia/ACT", "Australia/Sydney",
+ "Asia/Calcutta", "Asia/Kolkata",
+ "Arctic/Longyearbyen", "Europe/Oslo",
"America/Knox_IN", "America/Indiana/Knox",
+ "ROC", "Asia/Taipei",
+ "Zulu", "Etc/UTC",
+ "Australia/Yancowinna", "Australia/Broken_Hill",
+ "Australia/West", "Australia/Perth",
+ "Singapore", "Asia/Singapore",
+ "Europe/Mariehamn", "Europe/Helsinki",
+ "ROK", "Asia/Seoul",
+ "America/Porto_Acre", "America/Rio_Branco",
+ "Etc/Zulu", "Etc/UTC",
+ "Canada/Yukon", "America/Whitehorse",
+ "Europe/Vatican", "Europe/Rome",
+ "Africa/Timbuktu", "Africa/Bamako",
+ "America/Buenos_Aires", "America/Argentina/Buenos_Aires",
+ "Canada/Pacific", "America/Vancouver",
+ "US/Pacific-New", "America/Los_Angeles",
+ "Mexico/BajaNorte", "America/Tijuana",
+ "Europe/Guernsey", "Europe/London",
+ "Asia/Tel_Aviv", "Asia/Jerusalem",
+ "Chile/Continental", "America/Santiago",
+ "Jamaica", "America/Jamaica",
+ "Mexico/BajaSur", "America/Mazatlan",
+ "Canada/Eastern", "America/Toronto",
+ "Australia/Tasmania", "Australia/Hobart",
+ "NZ", "Pacific/Auckland",
+ "America/Lower_Princes", "America/Curacao",
+ "GMT-", "Etc/GMT",
+ "America/Rosario", "America/Argentina/Cordoba",
+ "Libya", "Africa/Tripoli",
+ "Asia/Ashkhabad", "Asia/Ashgabat",
+ "Australia/NSW", "Australia/Sydney",
+ "America/Marigot", "America/Guadeloupe",
+ "Europe/Bratislava", "Europe/Prague",
+ "Portugal", "Europe/Lisbon",
+ "Etc/GMT-", "Etc/GMT",
+ "Europe/San_Marino", "Europe/Rome",
+ "Europe/Sarajevo", "Europe/Belgrade",
+ "Antarctica/South_Pole", "Antarctica/McMurdo",
+ "Canada/Central", "America/Winnipeg",
+ "Etc/GMT", "Etc/GMT",
+ "Europe/Isle_of_Man", "Europe/London",
+ "America/Fort_Wayne", "America/Indiana/Indianapolis",
+ "Eire", "Europe/Dublin",
+ "America/Coral_Harbour", "America/Atikokan",
+ "Europe/Nicosia", "Asia/Nicosia",
+ "US/Samoa", "Pacific/Pago_Pago",
+ "Hongkong", "Asia/Hong_Kong",
"Canada/Saskatchewan", "America/Regina",
"Asia/Thimbu", "Asia/Thimphu",
+ "Kwajalein", "Pacific/Kwajalein",
+ "GB", "Europe/London",
+ "Chile/EasterIsland", "Pacific/Easter",
+ "US/East-Indiana", "America/Indiana/Indianapolis",
+ "Australia/LHI", "Australia/Lord_Howe",
+ "Cuba", "America/Havana",
+ "America/Jujuy", "America/Argentina/Jujuy",
"US/Mountain", "America/Denver",
- "NZ", "Pacific/Auckland",
- "Asia/Tel_Aviv", "Asia/Jerusalem",
- "Hongkong", "Asia/Hong_Kong",
+ "Atlantic/Jan_Mayen", "Europe/Oslo",
+ "Europe/Tiraspol", "Europe/Chisinau",
+ "Europe/Podgorica", "Europe/Belgrade",
+ "US/Arizona", "America/Phoenix",
+ "Navajo", "America/Denver",
+ "Etc/Greenwich", "Etc/GMT",
+ "Canada/Mountain", "America/Edmonton",
+ "Iceland", "Atlantic/Reykjavik",
+ "Australia/Victoria", "Australia/Melbourne",
+ "Australia/South", "Australia/Adelaide",
+ "Brazil/West", "America/Manaus",
+ "Pacific/Ponape", "Pacific/Pohnpei",
+ "Europe/Ljubljana", "Europe/Belgrade",
+ "Europe/Jersey", "Europe/London",
+ "Australia/Queensland", "Australia/Brisbane",
+ "UTC", "Etc/UTC",
+ "Canada/Newfoundland", "America/St_Johns",
+ "Europe/Skopje", "Europe/Belgrade",
+ "PRC", "Asia/Shanghai",
+ "UCT", "Etc/UCT",
+ "America/Mendoza", "America/Argentina/Mendoza",
+ "Israel", "Asia/Jerusalem",
+ "US/Eastern", "America/New_York",
+ "Asia/Ulan_Bator", "Asia/Ulaanbaatar",
+ "Turkey", "Europe/Istanbul",
+ "GMT", "Etc/GMT",
+ "US/Aleutian", "America/Adak",
+ "Brazil/DeNoronha", "America/Noronha",
+ "GB-Eire", "Europe/London",
+ "Asia/Dacca", "Asia/Dhaka",
+ "America/Ensenada", "America/Tijuana",
+ "America/Catamarca", "America/Argentina/Catamarca",
+ "Iran", "Asia/Tehran",
+ "Greenwich", "Etc/GMT",
+ "Pacific/Truk", "Pacific/Chuuk",
+ "Pacific/Samoa", "Pacific/Pago_Pago",
+ "America/Virgin", "America/St_Thomas",
+ "Asia/Katmandu", "Asia/Kathmandu",
+ "America/Indianapolis", "America/Indiana/Indianapolis",
+ "Europe/Belfast", "Europe/London",
+ "America/Kralendijk", "America/Curacao",
"Asia/Rangoon", "Asia/Yangon",
};
diff --git a/test/jdk/java/util/RandomAccess/Basic.java b/test/jdk/java/util/RandomAccess/Basic.java
new file mode 100644
index 00000000000..9d710e1ba5d
--- /dev/null
+++ b/test/jdk/java/util/RandomAccess/Basic.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2000, 2018, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 4327164
+ * @summary Basic test for new RandomAccess interface
+ */
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+import java.util.RandomAccess;
+import java.util.Vector;
+
+public class Basic {
+ public static void main(String[] args) throws Exception {
+ List a0 = Arrays.asList(new String[] { "a", "b", "c" });
+ List a[] = { a0, new ArrayList(a0), new LinkedList(a0),
+ new Vector(a0) };
+
+ if (!(a[0] instanceof RandomAccess))
+ throw new Exception("Arrays.asList doesn't implement RandomAccess");
+ if (!(a[1] instanceof RandomAccess))
+ throw new Exception("ArrayList doesn't implement RandomAccess");
+ if (a[2] instanceof RandomAccess)
+ throw new Exception("LinkedList implements RandomAccess");
+ if (!(a[3] instanceof RandomAccess))
+ throw new Exception("Vector doesn't implement RandomAccess");
+
+ for (int i = 0; i < a.length; i++) {
+ List t = a[i];
+ List ut = Collections.unmodifiableList(t);
+ List st = Collections.synchronizedList(t);
+
+ boolean random = t instanceof RandomAccess;
+ if ((ut instanceof RandomAccess) != random)
+ throw new Exception(
+ "Unmodifiable fails to preserve RandomAccess: " + i);
+ if ((st instanceof RandomAccess) != random)
+ throw new Exception(
+ "Synchronized fails to preserve RandomAccess: " + i);
+
+ while (t.size() > 0) {
+ t = t.subList(0, t.size() - 1);
+ if ((t instanceof RandomAccess) != random)
+ throw new Exception(
+ "SubList fails to preserve RandomAccess: " + i
+ + ", " + t.size());
+
+ ut = ut.subList(0, ut.size() - 1);
+ if ((ut instanceof RandomAccess) != random)
+ throw new Exception(
+ "SubList(unmodifiable) fails to preserve RandomAccess: "
+ + i + ", " + ut.size());
+
+ st = st.subList(0, st.size() - 1);
+ if ((st instanceof RandomAccess) != random)
+ throw new Exception(
+ "SubList(synchronized) fails to preserve RandomAccess: "
+ + i + ", " + st.size());
+ }
+ }
+
+ // Test that shuffle works the same on random and sequential access
+ List al = new ArrayList();
+ for (int j = 0; j < 100; j++)
+ al.add(Integer.valueOf(2 * j));
+ List ll = new LinkedList(al);
+ Random r1 = new Random(666), r2 = new Random(666);
+ for (int i = 0; i < 100; i++) {
+ Collections.shuffle(al, r1);
+ Collections.shuffle(ll, r2);
+ if (!al.equals(ll))
+ throw new Exception("Shuffle failed: " + i);
+ }
+
+ // Test that fill works on random & sequential access
+ List gumbyParade = Collections.nCopies(100, "gumby");
+ Collections.fill(al, "gumby");
+ if (!al.equals(gumbyParade))
+ throw new Exception("ArrayList fill failed");
+ Collections.fill(ll, "gumby");
+ if (!ll.equals(gumbyParade))
+ throw new Exception("LinkedList fill failed");
+
+ // Test that copy works on random & sequential access
+ List pokeyParade = Collections.nCopies(100, "pokey");
+ Collections.copy(al, pokeyParade);
+ if (!al.equals(pokeyParade))
+ throw new Exception("ArrayList copy failed");
+ Collections.copy(ll, pokeyParade);
+ if (!ll.equals(pokeyParade))
+ throw new Exception("LinkedList copy failed");
+
+ // Test that binarySearch works the same on random & sequential access
+ al = new ArrayList();
+ for (int i = 0; i < 10000; i++)
+ al.add(Integer.valueOf(2 * i));
+ ll = new LinkedList(al);
+ for (int i = 0; i < 500; i++) {
+ Integer key = Integer.valueOf(r1.nextInt(20000));
+ if (Collections.binarySearch(al, key) != Collections
+ .binarySearch(ll, key))
+ throw new Exception("Binary search failed: " + i);
+ }
+ }
+}
diff --git a/test/jdk/javax/net/ssl/etc/README b/test/jdk/javax/net/ssl/etc/README
index 0ac6a844a86..119c619992d 100644
--- a/test/jdk/javax/net/ssl/etc/README
+++ b/test/jdk/javax/net/ssl/etc/README
@@ -62,22 +62,21 @@ it can be used for version 1 X.509 certificate) keytool command:
Alias name: dummydsa
--------------------
-Creation date: Mar 11, 2007
+Creation date: Mar 29, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=dummy.example.com, OU=Dummy, O=Dummy, L=Cupertino, ST=CA, C=US
Issuer: CN=dummy.example.com, OU=Dummy, O=Dummy, L=Cupertino, ST=CA, C=US
-Serial number: 45f3a314
-Valid from: Sun Mar 11 06:35:00 UTC 2007 until: Wed Mar 08 06:35:00 UTC 2017
-Certificate fingerprints:
-Signature algorithm name: SHA1withDSA
-Version: 1
+Serial number: 324d85f0
+Valid from: Thu Mar 29 16:06:34 PDT 2018 until: Tue Mar 28 16:06:34 PDT 2028
+Signature algorithm name: SHA256withDSA
+Version: 3
This can be generated using hacked (update the keytool source code so that
it can be used for version 1 X.509 certificate) keytool command:
-% keytool -genkeypair -alias dummy -keyalg DSA -keysize 1024 \
- -sigalg SHA1withDSA \
+% keytool -genkeypair -alias dummydsa -keyalg DSA -keysize 1024 \
+ -sigalg SHA256withDSA \
-dname "CN=dummy.example.com, OU=Dummy, O=Dummy, L=Cupertino, ST=CA, C=US" \
-validity 3652 -keypass passphrase -keystore keystore -storepass passphrase
diff --git a/test/jdk/javax/net/ssl/etc/keystore b/test/jdk/javax/net/ssl/etc/keystore
index 4062e1798c5..871a8538e17 100644
Binary files a/test/jdk/javax/net/ssl/etc/keystore and b/test/jdk/javax/net/ssl/etc/keystore differ
diff --git a/test/jdk/javax/net/ssl/etc/truststore b/test/jdk/javax/net/ssl/etc/truststore
index 12da39e66a5..b2d1cc0adb0 100644
Binary files a/test/jdk/javax/net/ssl/etc/truststore and b/test/jdk/javax/net/ssl/etc/truststore differ
diff --git a/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java b/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java
index c3c75783976..aafec448206 100644
--- a/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java
+++ b/test/jdk/tools/jlink/multireleasejar/JLinkMultiReleaseJarTest.java
@@ -52,7 +52,9 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import java.util.Set;
import java.util.jar.JarFile;
import java.util.spi.ToolProvider;
@@ -134,14 +136,15 @@ public class JLinkMultiReleaseJarTest {
}
private void javac(Path source, Path destination, String srcpath) throws IOException {
- String[] args = Stream.concat(
- Stream.of("-d", destination.toString(), "--module-source-path", srcpath),
- Files.walk(source)
- .map(Path::toString)
- .filter(s -> s.endsWith(".java"))
- ).toArray(String[]::new);
- int rc = JAVAC_TOOL.run(System.out, System.err, args);
- Assert.assertEquals(rc, 0);
+ var args = Stream.of("-d", destination.toString(), "--module-source-path", srcpath);
+ try (Stream pathStream = Files.walk(source)) {
+ args = Stream.concat(args,
+ pathStream.map(Path::toString)
+ .filter(s -> s.endsWith(".java")));
+
+ int rc = JAVAC_TOOL.run(System.out, System.err, args.toArray(String[]::new));
+ Assert.assertEquals(rc, 0);
+ }
}
@Test
@@ -149,7 +152,7 @@ public class JLinkMultiReleaseJarTest {
if (ignoreTest()) return;
// use jlink to build image from multi-release jar
- jlink("m1.jar", "myimage");
+ jlink("m1.jar", "myimage");
// validate image
Path jimage = userdir.resolve("myimage").resolve("lib").resolve("modules");
diff --git a/test/langtools/jdk/javadoc/doclet/testModuleDirs/TestModuleDirs.java b/test/langtools/jdk/javadoc/doclet/testModuleDirs/TestModuleDirs.java
index 8c8995cf1a2..c9d502643d2 100644
--- a/test/langtools/jdk/javadoc/doclet/testModuleDirs/TestModuleDirs.java
+++ b/test/langtools/jdk/javadoc/doclet/testModuleDirs/TestModuleDirs.java
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8195795
+ * @bug 8195795 8201396
* @summary test the use of module directories in output,
* and the --no-module-directories option
* @modules jdk.javadoc/jdk.javadoc.internal.api
@@ -71,46 +71,85 @@ public class TestModuleDirs extends JavadocTester {
@Test
public void testNoModuleDirs(Path base) throws IOException {
Path src = base.resolve("src");
- new ModuleBuilder(tb, "m")
- .classes("package p; public class A {}")
- .exports("p")
+ new ModuleBuilder(tb, "ma")
+ .classes("package pa; public class A {}")
+ .exports("pa")
+ .write(src);
+ new ModuleBuilder(tb, "mb")
+ .classes("package pb; public class B {}")
+ .exports("pb")
.write(src);
javadoc("-d", base.resolve("api").toString(),
"-quiet",
"--module-source-path", src.toString(),
"--no-module-directories",
- "--module", "m");
+ "--module", "ma,mb");
checkExit(Exit.OK);
checkFiles(true,
- "m-summary.html",
- "p/package-summary.html");
+ "ma-frame.html",
+ "ma-summary.html",
+ "pa/package-summary.html");
checkFiles(false,
- "m/module-summary.html",
- "m/p/package-summary.html");
+ "ma/module-frame.html",
+ "ma/module-summary.html",
+ "ma/pa/package-summary.html");
+ checkOutput("ma-frame.html", true,
+ "\n");
+ checkOutput("ma-summary.html", true,
+ "\n");
+ checkOutput("pa/package-summary.html", true,
+ "Deprecated \n"
+ + "Index ");
+
}
@Test
public void testModuleDirs(Path base) throws IOException {
Path src = base.resolve("src");
- new ModuleBuilder(tb, "m")
- .classes("package p; public class A {}")
- .exports("p")
+ new ModuleBuilder(tb, "ma")
+ .classes("package pa; public class A {}")
+ .exports("pa")
+ .write(src);
+ new ModuleBuilder(tb, "mb")
+ .classes("package pb; public class B {}")
+ .exports("pb")
.write(src);
javadoc("-d", base.resolve("api").toString(),
"-quiet",
"--module-source-path", src.toString(),
- "--module", "m");
+ "--module", "ma,mb");
checkExit(Exit.OK);
checkFiles(false,
- "m-summary.html",
- "p/package-summary.html");
+ "ma-frame.html",
+ "ma-summary.html",
+ "pa/package-summary.html");
checkFiles(true,
- "m/module-summary.html",
- "m/p/package-summary.html");
+ "ma/module-frame.html",
+ "ma/module-summary.html",
+ "ma/pa/package-summary.html");
+ checkOutput("ma/module-frame.html", true,
+ "\n");
+ checkOutput("ma/module-summary.html", true,
+ "\n");
+ checkOutput("ma/pa/package-summary.html", true,
+ "Deprecated \n"
+ + "Index ");
}
}
diff --git a/test/langtools/tools/javac/diags/examples.not-yet.txt b/test/langtools/tools/javac/diags/examples.not-yet.txt
index ff90131995e..a3d227af59b 100644
--- a/test/langtools/tools/javac/diags/examples.not-yet.txt
+++ b/test/langtools/tools/javac/diags/examples.not-yet.txt
@@ -127,6 +127,8 @@ compiler.misc.bad.const.pool.entry # constant pool entry ha
compiler.warn.access.to.member.from.serializable.lambda # in order to generate it we need to modify a restricted package
compiler.warn.invalid.path # this warning is generated only in Windows systems
compiler.note.multiple.elements # needs user code
+compiler.err.preview.feature.disabled.classfile # preview feature support: needs compilation against classfile
+compiler.warn.preview.feature.use.classfile # preview feature support: needs compilation against classfile
# The following module-related messages will have to stay on the not-yet list for various reasons:
compiler.warn.locn.unknown.file.on.module.path # Never issued ATM (short circuited with an if (false))
diff --git a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityProtectionDomainAccess.java b/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabled.java
similarity index 69%
rename from src/java.base/share/classes/jdk/internal/misc/JavaSecurityProtectionDomainAccess.java
rename to test/langtools/tools/javac/diags/examples/PreviewFeatureDisabled.java
index 263d2c653fd..3aaeccc09a9 100644
--- a/src/java.base/share/classes/jdk/internal/misc/JavaSecurityProtectionDomainAccess.java
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabled.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 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
@@ -22,18 +22,15 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
-package jdk.internal.misc;
-import java.security.PermissionCollection;
-import java.security.ProtectionDomain;
+// key: compiler.err.preview.feature.disabled
+// key: compiler.misc.feature.diamond
+// options: -XDforcePreview
-public interface JavaSecurityProtectionDomainAccess {
- interface ProtectionDomainCache {
- void put(ProtectionDomain pd, PermissionCollection pc);
- PermissionCollection get(ProtectionDomain pd);
+import java.util.ArrayList;
+
+class PreviewFeatureDisabled {
+ void m() {
+ new ArrayList<>();
}
- /**
- * Returns the ProtectionDomainCache.
- */
- ProtectionDomainCache getProtectionDomainCache();
}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabledPlural.java b/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabledPlural.java
new file mode 100644
index 00000000000..734dab010fe
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureDisabledPlural.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.err.preview.feature.disabled.plural
+// key: compiler.misc.feature.lambda
+// options: -XDforcePreview
+
+class PreviewFeatureDisabledPlural {
+ void m() {
+ Runnable r = () -> {};
+ }
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewFeatureUse.java b/test/langtools/tools/javac/diags/examples/PreviewFeatureUse.java
new file mode 100644
index 00000000000..b280d901d0a
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewFeatureUse.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+//key: compiler.warn.preview.feature.use
+//key: compiler.warn.preview.feature.use.plural
+//key: compiler.misc.feature.diamond
+//key: compiler.misc.feature.lambda
+//options: -Xlint:preview -XDforcePreview -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewFeatureUse {
+ void test() {
+ new ArrayList<>();
+ Runnable r = () -> {};
+ }
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewFilename.java b/test/langtools/tools/javac/diags/examples/PreviewFilename.java
new file mode 100644
index 00000000000..7a58e964bbd
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewFilename.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.note.preview.filename
+// key: compiler.note.preview.recompile
+// options: -XDforcePreview -source 11 --enable-preview
+
+import java.util.ArrayList;
+import java.util.List;
+
+class PreviewFilename {
+ List ls = new ArrayList<>();
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewFilenameAdditional.java b/test/langtools/tools/javac/diags/examples/PreviewFilenameAdditional.java
new file mode 100644
index 00000000000..b813fd02c37
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewFilenameAdditional.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.note.preview.filename.additional
+// key: compiler.warn.preview.feature.use
+// key: compiler.misc.feature.diamond
+// options: -Xlint:preview -Xmaxwarns 1 -XDforcePreview -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewFilenameAdditional {
+ void test() {
+ new ArrayList<>();
+ new ArrayList<>();
+ }
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewPlural/Bar.java b/test/langtools/tools/javac/diags/examples/PreviewPlural/Bar.java
new file mode 100644
index 00000000000..a2d62055954
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewPlural/Bar.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+class Bar {
+ Runnable r = () -> {};
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewPlural/PreviewPlural.java b/test/langtools/tools/javac/diags/examples/PreviewPlural/PreviewPlural.java
new file mode 100644
index 00000000000..a43f435e8ff
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewPlural/PreviewPlural.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.note.preview.plural
+// key: compiler.note.preview.recompile
+// options: -XDforcePreview -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewPlural {
+ void test() {
+ new Bar();
+ new ArrayList<>();
+ }
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/Bar.java b/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/Bar.java
new file mode 100644
index 00000000000..0b243569554
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/Bar.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+import java.util.ArrayList;
+
+class Bar {
+ Runnable r = () -> {};
+ void test() {
+ new ArrayList<>();
+ }
+}
diff --git a/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/PreviewPluralAdditional.java b/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/PreviewPluralAdditional.java
new file mode 100644
index 00000000000..2bcb2dae3cd
--- /dev/null
+++ b/test/langtools/tools/javac/diags/examples/PreviewPluralAdditional/PreviewPluralAdditional.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+// key: compiler.note.preview.plural.additional
+// key: compiler.warn.preview.feature.use.plural
+// key: compiler.misc.feature.lambda
+// options: -Xlint:preview -Xmaxwarns 1 -XDforcePreview -source 11 --enable-preview
+
+import java.util.ArrayList;
+
+class PreviewPlural {
+ void test() {
+ new Bar();
+ new ArrayList<>();
+ }
+}
diff --git a/test/langtools/tools/javac/lambda/deduplication/Deduplication.java b/test/langtools/tools/javac/lambda/deduplication/Deduplication.java
index 7eb1335b985..74e6e0fa285 100644
--- a/test/langtools/tools/javac/lambda/deduplication/Deduplication.java
+++ b/test/langtools/tools/javac/lambda/deduplication/Deduplication.java
@@ -32,6 +32,12 @@ public class Deduplication {
void group(Object... xs) {}
void test() {
+
+ group(
+ (Runnable) () -> { ( (Runnable) () -> {} ).run(); },
+ (Runnable) () -> { ( (Runnable) () -> {} ).run(); }
+ );
+
group((Function) x -> x.hashCode());
group((Function) x -> x.hashCode());
diff --git a/test/langtools/tools/javac/modules/CompileModulePatchTest.java b/test/langtools/tools/javac/modules/CompileModulePatchTest.java
index 1ff40cdcc6c..bc86f74c705 100644
--- a/test/langtools/tools/javac/modules/CompileModulePatchTest.java
+++ b/test/langtools/tools/javac/modules/CompileModulePatchTest.java
@@ -252,7 +252,7 @@ public class CompileModulePatchTest extends ModuleTestBase {
.getOutputLines(Task.OutputKind.DIRECT);
List expectedOut = Arrays.asList(
- "Extra.java:1:76: compiler.err.doesnt.exist: p",
+ "Extra.java:1:75: compiler.err.package.not.visible: p, (compiler.misc.not.def.access.does.not.read.unnamed: p, java.compiler)",
"1 error"
);
diff --git a/test/langtools/tools/javac/modules/ConvenientAccessErrorsTest.java b/test/langtools/tools/javac/modules/ConvenientAccessErrorsTest.java
index 3fed25a3ab5..56341d4abed 100644
--- a/test/langtools/tools/javac/modules/ConvenientAccessErrorsTest.java
+++ b/test/langtools/tools/javac/modules/ConvenientAccessErrorsTest.java
@@ -23,7 +23,7 @@
/*
* @test
- * @bug 8169197 8172668 8173117 8175007
+ * @bug 8169197 8172668 8173117 8175007 8189765
* @summary Check convenient errors are produced for inaccessible classes.
* @library /tools/lib
* @modules jdk.compiler/com.sun.tools.javac.api
@@ -199,7 +199,7 @@ public class ConvenientAccessErrorsTest extends ModuleTestBase {
throw new Exception("expected output not found; actual: " + log);
}
-// @Test
+ @Test
public void testInaccessibleUnnamedModule(Path base) throws Exception {
Path jar = prepareTestJar(base, "package api; class Api { public static class Foo {} }");
@@ -224,8 +224,8 @@ public class ConvenientAccessErrorsTest extends ModuleTestBase {
.getOutputLines(Task.OutputKind.DIRECT);
List expected = Arrays.asList(
- "Test.java:1:38: compiler.err.not.def.access.package.cant.access: api.Api, api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
- "Test.java:1:51: compiler.err.not.def.access.package.cant.access: api.Api, api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
+ "Test.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
+ "Test.java:1:48: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m1x)",
"2 errors");
if (!expected.equals(log))
diff --git a/test/langtools/tools/javac/modules/ModulesAndClassPathTest.java b/test/langtools/tools/javac/modules/ModulesAndClassPathTest.java
index e88aeadc93b..656aab9aef9 100644
--- a/test/langtools/tools/javac/modules/ModulesAndClassPathTest.java
+++ b/test/langtools/tools/javac/modules/ModulesAndClassPathTest.java
@@ -77,7 +77,7 @@ public class ModulesAndClassPathTest extends ModuleTestBase {
.writeAll()
.getOutputLines(Task.OutputKind.DIRECT);
- List expected = Arrays.asList("Impl.java:1:38: compiler.err.doesnt.exist: api",
+ List expected = Arrays.asList("Impl.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m)",
"1 error");
if (!expected.equals(modLog)) {
@@ -129,7 +129,7 @@ public class ModulesAndClassPathTest extends ModuleTestBase {
.writeAll()
.getOutputLines(Task.OutputKind.DIRECT);
- List expected = Arrays.asList("Impl.java:1:38: compiler.err.doesnt.exist: api",
+ List expected = Arrays.asList("Impl.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m)",
"1 error");
if (!expected.equals(modLog)) {
@@ -170,7 +170,7 @@ public class ModulesAndClassPathTest extends ModuleTestBase {
.writeAll()
.getOutputLines(Task.OutputKind.DIRECT);
- List expected = Arrays.asList("Impl.java:1:38: compiler.err.doesnt.exist: api",
+ List expected = Arrays.asList("Impl.java:1:35: compiler.err.package.not.visible: api, (compiler.misc.not.def.access.does.not.read.unnamed: api, m)",
"1 error");
if (!expected.equals(modLog)) {
diff --git a/test/langtools/tools/javac/preview/PreviewOptionTest.java b/test/langtools/tools/javac/preview/PreviewOptionTest.java
new file mode 100644
index 00000000000..80db6ba595c
--- /dev/null
+++ b/test/langtools/tools/javac/preview/PreviewOptionTest.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+/*
+ * @test
+ * @bug 8199194
+ * @summary smoke test for enable-preview command line flag
+ * @modules jdk.compiler/com.sun.tools.javac.code
+ */
+
+import java.io.*;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import com.sun.tools.javac.code.Source;
+
+public class PreviewOptionTest {
+ public static void main(String... args) throws Exception {
+ PreviewOptionTest t = new PreviewOptionTest();
+ t.run();
+ }
+
+ public void run() throws Exception {
+ try (FileWriter out = new FileWriter("Test.java")) {
+ out.write("class Test { }");
+ }
+
+ testWithNoFlags();
+
+ List versionsToTest = Stream.of(Source.values())
+ .filter(s -> s.compareTo(Source.MIN) >= 0)
+ .collect(Collectors.toList());
+
+ versionsToTest.stream().forEach(this::testWithSourceFlag);
+ versionsToTest.stream().forEach(this::testWithReleaseFlag);
+
+ if (errors > 0)
+ throw new Exception(errors + " errors occurred");
+ }
+
+ void testWithNoFlags() {
+ testInternal(null, null, true);
+ }
+
+ void testWithSourceFlag(Source source) {
+ testInternal(source, null, source != Source.DEFAULT);
+ }
+
+ void testWithReleaseFlag(Source release) {
+ //Todo: the condition below should say "release != Source.DEFAULT", but we can't do that
+ //since --release 11 is not supported yet.
+ testInternal(null, release, true);
+ }
+
+ void testInternal(Source source, Source release, boolean shouldFail) {
+ System.err.println("Test: source:" + source + ", release:" + release + " " + shouldFail + " " + shouldFail);
+ List args = new ArrayList<>();
+ args.add("--enable-preview");
+ if (source != null) {
+ args.add("-source");
+ args.add(source.name);
+ }
+ if (release != null) {
+ args.add("--release");
+ args.add(release.name);
+ }
+ args.add("Test.java");
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw);
+ pw.close();
+ boolean hasErrors = rc != 0;
+ if (hasErrors != shouldFail) {
+ if (hasErrors) {
+ String out = sw.toString();
+ error("error not expected but found:\n" + out);
+ } else {
+ error("error expected but not found");
+ }
+ }
+ }
+
+ void error(String msg) {
+ System.err.println("error: " + msg);
+ errors++;
+ }
+
+ int errors;
+}
diff --git a/test/langtools/tools/javac/preview/classReaderTest/Bar.java b/test/langtools/tools/javac/preview/classReaderTest/Bar.java
new file mode 100644
index 00000000000..65a0687a4e7
--- /dev/null
+++ b/test/langtools/tools/javac/preview/classReaderTest/Bar.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2018, 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.
+ */
+
+public class Bar {
+ Runnable r = () -> {};
+}
diff --git a/test/langtools/tools/javac/preview/classReaderTest/Client.java b/test/langtools/tools/javac/preview/classReaderTest/Client.java
new file mode 100644
index 00000000000..91ac53e334e
--- /dev/null
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.java
@@ -0,0 +1,14 @@
+/*
+ * @test /nodynamioccopyright/
+ * @bug 8199194
+ * @summary smoke test for --enabled-preview classreader support
+ * @compile -XDforcePreview --enable-preview -source 11 Bar.java
+ * @compile/fail/ref=Client.nopreview.out -Xlint:preview -XDrawDiagnostics Client.java
+ * @compile/fail/ref=Client.preview.out -Werror -Xlint:preview -XDrawDiagnostics --enable-preview -source 11 Client.java
+ */
+
+public class Client {
+ void test() {
+ new Bar();
+ }
+}
diff --git a/test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out b/test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out
new file mode 100644
index 00000000000..967077d52d8
--- /dev/null
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.nopreview.out
@@ -0,0 +1,2 @@
+- compiler.err.preview.feature.disabled.classfile: Bar.class, 11
+1 error
diff --git a/test/langtools/tools/javac/preview/classReaderTest/Client.preview.out b/test/langtools/tools/javac/preview/classReaderTest/Client.preview.out
new file mode 100644
index 00000000000..43212d9f565
--- /dev/null
+++ b/test/langtools/tools/javac/preview/classReaderTest/Client.preview.out
@@ -0,0 +1,4 @@
+- compiler.warn.preview.feature.use.classfile: Bar.class, 11
+- compiler.err.warnings.and.werror
+1 error
+1 warning