diff --git a/jdk/src/java.base/share/classes/java/lang/module/ModuleFinder.java b/jdk/src/java.base/share/classes/java/lang/module/ModuleFinder.java index a108e467a33..9dd5b54c8cc 100644 --- a/jdk/src/java.base/share/classes/java/lang/module/ModuleFinder.java +++ b/jdk/src/java.base/share/classes/java/lang/module/ModuleFinder.java @@ -33,7 +33,6 @@ import java.nio.file.Paths; import java.security.AccessController; import java.security.Permission; import java.security.PrivilegedAction; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -333,7 +332,7 @@ public interface ModuleFinder { * *

When locating modules then any exceptions or errors thrown by the * {@code find} or {@code findAll} methods of the underlying module finders - * will be propogated to the caller of the resulting module finder's + * will be propagated to the caller of the resulting module finder's * {@code find} or {@code findAll} methods.

* * @param finders @@ -342,8 +341,8 @@ public interface ModuleFinder { * @return A {@code ModuleFinder} that composes a sequence of module finders */ static ModuleFinder compose(ModuleFinder... finders) { - final List finderList = Arrays.asList(finders); - finderList.forEach(Objects::requireNonNull); + // copy the list, also checking for nulls + final List finderList = List.of(finders); return new ModuleFinder() { private final Map nameToModule = new HashMap<>(); diff --git a/jdk/src/java.base/share/classes/java/net/CookieManager.java b/jdk/src/java.base/share/classes/java/net/CookieManager.java index fb3fa356e99..13ef9e468a0 100644 --- a/jdk/src/java.base/share/classes/java/net/CookieManager.java +++ b/jdk/src/java.base/share/classes/java/net/CookieManager.java @@ -81,7 +81,7 @@ import sun.util.logging.PlatformLogger; *
  • * Currently, only CookieStore.add(URI, HttpCookie) and CookieStore.get(URI) * are used by CookieManager. Others are for completeness and might be needed - * by a more sophisticated CookieStore implementation, e.g. a NetscapeCookieSotre. + * by a more sophisticated CookieStore implementation, e.g. a NetscapeCookieStore. *
  • * * @@ -201,10 +201,9 @@ public class CookieManager extends CookieHandler throw new IllegalArgumentException("Argument is null"); } - Map> cookieMap = new java.util.HashMap<>(); // if there's no default CookieStore, no way for us to get any cookie if (cookieJar == null) - return Collections.unmodifiableMap(cookieMap); + return Map.of(); boolean secureLink = "https".equalsIgnoreCase(uri.getScheme()); List cookies = new java.util.ArrayList<>(); @@ -244,8 +243,7 @@ public class CookieManager extends CookieHandler // apply sort rule (RFC 2965 sec. 3.3.4) List cookieHeader = sortByPath(cookies); - cookieMap.put("Cookie", cookieHeader); - return Collections.unmodifiableMap(cookieMap); + return Map.of("Cookie", cookieHeader); } public void diff --git a/jdk/src/java.base/share/classes/java/nio/file/FileTreeIterator.java b/jdk/src/java.base/share/classes/java/nio/file/FileTreeIterator.java index 63b4dc767d8..c748e32571b 100644 --- a/jdk/src/java.base/share/classes/java/nio/file/FileTreeIterator.java +++ b/jdk/src/java.base/share/classes/java/nio/file/FileTreeIterator.java @@ -31,11 +31,10 @@ import java.io.UncheckedIOException; import java.util.Arrays; import java.util.Iterator; import java.util.NoSuchElementException; -import java.util.Objects; import java.nio.file.FileTreeWalker.Event; /** - * An {@code Iterator to iterate over the nodes of a file tree. + * An {@code Iterator} to iterate over the nodes of a file tree. * *
    {@code
      *     try (FileTreeIterator iterator = new FileTreeIterator(start, maxDepth, options)) {
    @@ -62,7 +61,7 @@ class FileTreeIterator implements Iterator, Closeable {
          * @throws  SecurityException
          *          if the security manager denies access to the starting file
          * @throws  NullPointerException
    -     *          if {@code start} or {@code options} is {@ocde null} or
    +     *          if {@code start} or {@code options} is {@code null} or
          *          the options array contains a {@code null} element
          */
         FileTreeIterator(Path start, int maxDepth, FileVisitOption... options)
    diff --git a/jdk/src/java.base/share/classes/java/nio/file/FileTreeWalker.java b/jdk/src/java.base/share/classes/java/nio/file/FileTreeWalker.java
    index 13bb629807f..b7dc93ad0f5 100644
    --- a/jdk/src/java.base/share/classes/java/nio/file/FileTreeWalker.java
    +++ b/jdk/src/java.base/share/classes/java/nio/file/FileTreeWalker.java
    @@ -171,7 +171,7 @@ class FileTreeWalker implements Closeable {
          *          if {@code options} contains an element that is not a
          *          {@code FileVisitOption}
          * @throws  NullPointerException
    -     *          if {@code options} is {@ocde null} or the options
    +     *          if {@code options} is {@code null} or the options
          *          array contains a {@code null} element
          */
         FileTreeWalker(Collection options, int maxDepth) {
    diff --git a/jdk/src/java.base/share/classes/java/security/Signature.java b/jdk/src/java.base/share/classes/java/security/Signature.java
    index 7efa9c9a7e6..9bfe4667df6 100644
    --- a/jdk/src/java.base/share/classes/java/security/Signature.java
    +++ b/jdk/src/java.base/share/classes/java/security/Signature.java
    @@ -37,7 +37,6 @@ import java.nio.ByteBuffer;
     import java.security.Provider.Service;
     
     import javax.crypto.Cipher;
    -import javax.crypto.CipherSpi;
     import javax.crypto.IllegalBlockSizeException;
     import javax.crypto.BadPaddingException;
     import javax.crypto.NoSuchPaddingException;
    @@ -180,15 +179,12 @@ public abstract class Signature extends SignatureSpi {
         private static final String RSA_CIPHER = "RSA/ECB/PKCS1Padding";
     
         // all the services we need to lookup for compatibility with Cipher
    -    private static final List rsaIds = Arrays.asList(
    -        new ServiceId[] {
    -            new ServiceId("Signature", "NONEwithRSA"),
    -            new ServiceId("Cipher", "RSA/ECB/PKCS1Padding"),
    -            new ServiceId("Cipher", "RSA/ECB"),
    -            new ServiceId("Cipher", "RSA//PKCS1Padding"),
    -            new ServiceId("Cipher", "RSA"),
    -        }
    -    );
    +    private static final List rsaIds = List.of(
    +        new ServiceId("Signature", "NONEwithRSA"),
    +        new ServiceId("Cipher", "RSA/ECB/PKCS1Padding"),
    +        new ServiceId("Cipher", "RSA/ECB"),
    +        new ServiceId("Cipher", "RSA//PKCS1Padding"),
    +        new ServiceId("Cipher", "RSA"));
     
         /**
          * Returns a Signature object that implements the specified signature
    diff --git a/jdk/src/java.base/share/classes/java/time/Duration.java b/jdk/src/java.base/share/classes/java/time/Duration.java
    index e2c55a971ea..cacd3999a83 100644
    --- a/jdk/src/java.base/share/classes/java/time/Duration.java
    +++ b/jdk/src/java.base/share/classes/java/time/Duration.java
    @@ -88,8 +88,6 @@ import java.time.temporal.Temporal;
     import java.time.temporal.TemporalAmount;
     import java.time.temporal.TemporalUnit;
     import java.time.temporal.UnsupportedTemporalTypeException;
    -import java.util.Arrays;
    -import java.util.Collections;
     import java.util.List;
     import java.util.Objects;
     import java.util.regex.Matcher;
    @@ -578,8 +576,7 @@ public final class Duration
          * the simple initialization in Duration.
          */
         private static class DurationUnits {
    -        static final List UNITS =
    -                Collections.unmodifiableList(Arrays.asList(SECONDS, NANOS));
    +        static final List UNITS = List.of(SECONDS, NANOS);
         }
     
         //-----------------------------------------------------------------------
    diff --git a/jdk/src/java.base/share/classes/java/time/Period.java b/jdk/src/java.base/share/classes/java/time/Period.java
    index c7c04435262..e93d8a35d99 100644
    --- a/jdk/src/java.base/share/classes/java/time/Period.java
    +++ b/jdk/src/java.base/share/classes/java/time/Period.java
    @@ -83,8 +83,6 @@ import java.time.temporal.TemporalAmount;
     import java.time.temporal.TemporalQueries;
     import java.time.temporal.TemporalUnit;
     import java.time.temporal.UnsupportedTemporalTypeException;
    -import java.util.Arrays;
    -import java.util.Collections;
     import java.util.List;
     import java.util.Objects;
     import java.util.regex.Matcher;
    @@ -152,8 +150,7 @@ public final class Period
         /**
          * The set of supported units.
          */
    -    private static final List SUPPORTED_UNITS =
    -            Collections.unmodifiableList(Arrays.asList(YEARS, MONTHS, DAYS));
    +    private static final List SUPPORTED_UNITS = List.of(YEARS, MONTHS, DAYS);
     
         /**
          * The number of years.
    diff --git a/jdk/src/java.base/share/classes/java/time/ZoneId.java b/jdk/src/java.base/share/classes/java/time/ZoneId.java
    index bae99f601cc..5087888da4f 100644
    --- a/jdk/src/java.base/share/classes/java/time/ZoneId.java
    +++ b/jdk/src/java.base/share/classes/java/time/ZoneId.java
    @@ -76,14 +76,14 @@ import java.time.temporal.UnsupportedTemporalTypeException;
     import java.time.zone.ZoneRules;
     import java.time.zone.ZoneRulesException;
     import java.time.zone.ZoneRulesProvider;
    -import java.util.Collections;
    -import java.util.HashMap;
     import java.util.Locale;
     import java.util.Map;
     import java.util.Objects;
     import java.util.Set;
     import java.util.TimeZone;
     
    +import static java.util.Map.entry;
    +
     /**
      * A time-zone ID, such as {@code Europe/Paris}.
      * 

    @@ -220,39 +220,36 @@ public abstract class ZoneId implements Serializable { * * The map is unmodifiable. */ - public static final Map SHORT_IDS; - static { - Map map = new HashMap<>(64); - map.put("ACT", "Australia/Darwin"); - map.put("AET", "Australia/Sydney"); - map.put("AGT", "America/Argentina/Buenos_Aires"); - map.put("ART", "Africa/Cairo"); - map.put("AST", "America/Anchorage"); - map.put("BET", "America/Sao_Paulo"); - map.put("BST", "Asia/Dhaka"); - map.put("CAT", "Africa/Harare"); - map.put("CNT", "America/St_Johns"); - map.put("CST", "America/Chicago"); - map.put("CTT", "Asia/Shanghai"); - map.put("EAT", "Africa/Addis_Ababa"); - map.put("ECT", "Europe/Paris"); - map.put("IET", "America/Indiana/Indianapolis"); - map.put("IST", "Asia/Kolkata"); - map.put("JST", "Asia/Tokyo"); - map.put("MIT", "Pacific/Apia"); - map.put("NET", "Asia/Yerevan"); - map.put("NST", "Pacific/Auckland"); - map.put("PLT", "Asia/Karachi"); - map.put("PNT", "America/Phoenix"); - map.put("PRT", "America/Puerto_Rico"); - map.put("PST", "America/Los_Angeles"); - map.put("SST", "Pacific/Guadalcanal"); - map.put("VST", "Asia/Ho_Chi_Minh"); - map.put("EST", "-05:00"); - map.put("MST", "-07:00"); - map.put("HST", "-10:00"); - SHORT_IDS = Collections.unmodifiableMap(map); - } + public static final Map SHORT_IDS = Map.ofEntries( + entry("ACT", "Australia/Darwin"), + entry("AET", "Australia/Sydney"), + entry("AGT", "America/Argentina/Buenos_Aires"), + entry("ART", "Africa/Cairo"), + entry("AST", "America/Anchorage"), + entry("BET", "America/Sao_Paulo"), + entry("BST", "Asia/Dhaka"), + entry("CAT", "Africa/Harare"), + entry("CNT", "America/St_Johns"), + entry("CST", "America/Chicago"), + entry("CTT", "Asia/Shanghai"), + entry("EAT", "Africa/Addis_Ababa"), + entry("ECT", "Europe/Paris"), + entry("IET", "America/Indiana/Indianapolis"), + entry("IST", "Asia/Kolkata"), + entry("JST", "Asia/Tokyo"), + entry("MIT", "Pacific/Apia"), + entry("NET", "Asia/Yerevan"), + entry("NST", "Pacific/Auckland"), + entry("PLT", "Asia/Karachi"), + entry("PNT", "America/Phoenix"), + entry("PRT", "America/Puerto_Rico"), + entry("PST", "America/Los_Angeles"), + entry("SST", "Pacific/Guadalcanal"), + entry("VST", "Asia/Ho_Chi_Minh"), + entry("EST", "-05:00"), + entry("MST", "-07:00"), + entry("HST", "-10:00") + ); /** * Serialization version. */ diff --git a/jdk/src/java.base/share/classes/java/time/chrono/ChronoPeriodImpl.java b/jdk/src/java.base/share/classes/java/time/chrono/ChronoPeriodImpl.java index 911144d5b04..646af14d05a 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/ChronoPeriodImpl.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/ChronoPeriodImpl.java @@ -77,8 +77,6 @@ import java.time.temporal.TemporalQueries; import java.time.temporal.TemporalUnit; import java.time.temporal.UnsupportedTemporalTypeException; import java.time.temporal.ValueRange; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Objects; @@ -105,8 +103,7 @@ final class ChronoPeriodImpl /** * The set of supported units. */ - private static final List SUPPORTED_UNITS = - Collections.unmodifiableList(Arrays.asList(YEARS, MONTHS, DAYS)); + private static final List SUPPORTED_UNITS = List.of(YEARS, MONTHS, DAYS); /** * The chronology. diff --git a/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java b/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java index ebe4e8a29d4..d61c2333303 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/HijrahChronology.java @@ -59,10 +59,7 @@ package java.time.chrono; import static java.time.temporal.ChronoField.EPOCH_DAY; -import java.io.File; -import java.io.FileInputStream; import java.io.FilePermission; -import java.io.IOException; import java.io.InputStream; import java.io.InvalidObjectException; import java.io.ObjectInputStream; @@ -83,7 +80,6 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Properties; import sun.util.logging.PlatformLogger; @@ -512,7 +508,7 @@ public final class HijrahChronology extends AbstractChronology implements Serial @Override public List eras() { - return Arrays.asList(HijrahEra.values()); + return List.of(HijrahEra.values()); } //----------------------------------------------------------------------- diff --git a/jdk/src/java.base/share/classes/java/time/chrono/IsoChronology.java b/jdk/src/java.base/share/classes/java/time/chrono/IsoChronology.java index 7ce8e4ba21a..4919b3d7d3a 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/IsoChronology.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/IsoChronology.java @@ -90,7 +90,6 @@ import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalField; import java.time.temporal.ValueRange; -import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -492,7 +491,7 @@ public final class IsoChronology extends AbstractChronology implements Serializa @Override public List eras() { - return Arrays.asList(IsoEra.values()); + return List.of(IsoEra.values()); } //----------------------------------------------------------------------- diff --git a/jdk/src/java.base/share/classes/java/time/chrono/JapaneseChronology.java b/jdk/src/java.base/share/classes/java/time/chrono/JapaneseChronology.java index 2bd38c8d755..4478c4c7de1 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/JapaneseChronology.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/JapaneseChronology.java @@ -81,7 +81,6 @@ import java.time.temporal.TemporalAdjusters; import java.time.temporal.TemporalField; import java.time.temporal.UnsupportedTemporalTypeException; import java.time.temporal.ValueRange; -import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Locale; @@ -379,7 +378,7 @@ public final class JapaneseChronology extends AbstractChronology implements Seri @Override public List eras() { - return Arrays.asList(JapaneseEra.values()); + return List.of(JapaneseEra.values()); } JapaneseEra getCurrentEra() { diff --git a/jdk/src/java.base/share/classes/java/time/chrono/MinguoChronology.java b/jdk/src/java.base/share/classes/java/time/chrono/MinguoChronology.java index 8159adc0ac5..fd6fdc3e8cd 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/MinguoChronology.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/MinguoChronology.java @@ -72,7 +72,6 @@ import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalField; import java.time.temporal.ValueRange; -import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; @@ -306,7 +305,7 @@ public final class MinguoChronology extends AbstractChronology implements Serial @Override public List eras() { - return Arrays.asList(MinguoEra.values()); + return List.of(MinguoEra.values()); } //----------------------------------------------------------------------- diff --git a/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistChronology.java b/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistChronology.java index 6412c9dab15..c6938b2c530 100644 --- a/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistChronology.java +++ b/jdk/src/java.base/share/classes/java/time/chrono/ThaiBuddhistChronology.java @@ -342,7 +342,7 @@ public final class ThaiBuddhistChronology extends AbstractChronology implements @Override public List eras() { - return Arrays.asList(ThaiBuddhistEra.values()); + return List.of(ThaiBuddhistEra.values()); } //----------------------------------------------------------------------- diff --git a/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java b/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java index ec5fd9c8086..a3f903a7d9a 100644 --- a/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java +++ b/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatter.java @@ -1685,6 +1685,7 @@ public final class DateTimeFormatter { public DateTimeFormatter withResolverFields(TemporalField... resolverFields) { Set fields = null; if (resolverFields != null) { + // Set.of cannot be used because it is hostile to nulls and duplicate elements fields = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(resolverFields))); } if (Objects.equals(this.resolverFields, fields)) { diff --git a/jdk/src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java b/jdk/src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java index c1568e46364..94264f32cce 100644 --- a/jdk/src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java +++ b/jdk/src/java.base/share/classes/java/time/zone/ZoneOffsetTransition.java @@ -387,9 +387,9 @@ public final class ZoneOffsetTransition */ List getValidOffsets() { if (isGap()) { - return Collections.emptyList(); + return List.of(); } - return Arrays.asList(getOffsetBefore(), getOffsetAfter()); + return List.of(getOffsetBefore(), getOffsetAfter()); } //----------------------------------------------------------------------- diff --git a/jdk/src/java.base/share/classes/java/time/zone/ZoneRules.java b/jdk/src/java.base/share/classes/java/time/zone/ZoneRules.java index f6154857b8d..ed2330f38ef 100644 --- a/jdk/src/java.base/share/classes/java/time/zone/ZoneRules.java +++ b/jdk/src/java.base/share/classes/java/time/zone/ZoneRules.java @@ -303,7 +303,6 @@ public final class ZoneRules implements Serializable { * Creates an instance of ZoneRules that has fixed zone rules. * * @param offset the offset this fixed zone rules is based on, not null - * @return the zone rules, not null * @see #isFixedOffset() */ private ZoneRules(ZoneOffset offset) { @@ -970,7 +969,7 @@ public final class ZoneRules implements Serializable { * @return an immutable list of transition rules, not null */ public List getTransitionRules() { - return Collections.unmodifiableList(Arrays.asList(lastRules)); + return List.of(lastRules); } /** diff --git a/jdk/src/java.base/share/classes/java/util/ResourceBundle.java b/jdk/src/java.base/share/classes/java/util/ResourceBundle.java index bc7aaae063e..1d84e2dee6b 100644 --- a/jdk/src/java.base/share/classes/java/util/ResourceBundle.java +++ b/jdk/src/java.base/share/classes/java/util/ResourceBundle.java @@ -2491,34 +2491,29 @@ public abstract class ResourceBundle { /** * The default format List, which contains the strings * "java.class" and "java.properties", in - * this order. This List is {@linkplain - * Collections#unmodifiableList(List) unmodifiable}. + * this order. This List is unmodifiable. * * @see #getFormats(String) */ public static final List FORMAT_DEFAULT - = Collections.unmodifiableList(Arrays.asList("java.class", - "java.properties")); + = List.of("java.class", "java.properties"); /** * The class-only format List containing - * "java.class". This List is {@linkplain - * Collections#unmodifiableList(List) unmodifiable}. + * "java.class". This List is unmodifiable. * * @see #getFormats(String) */ - public static final List FORMAT_CLASS - = Collections.unmodifiableList(Arrays.asList("java.class")); + public static final List FORMAT_CLASS = List.of("java.class"); /** * The properties-only format List containing - * "java.properties". This List is - * {@linkplain Collections#unmodifiableList(List) unmodifiable}. + * "java.properties". This List is unmodifiable. * * @see #getFormats(String) */ public static final List FORMAT_PROPERTIES - = Collections.unmodifiableList(Arrays.asList("java.properties")); + = List.of("java.properties"); /** * The time-to-live constant for not caching loaded resource bundle diff --git a/jdk/src/java.base/share/classes/java/util/stream/Collectors.java b/jdk/src/java.base/share/classes/java/util/stream/Collectors.java index 018bb5fc1b6..fd7b0a477fa 100644 --- a/jdk/src/java.base/share/classes/java/util/stream/Collectors.java +++ b/jdk/src/java.base/share/classes/java/util/stream/Collectors.java @@ -27,7 +27,6 @@ package java.util.stream; import java.util.AbstractMap; import java.util.AbstractSet; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -1720,12 +1719,12 @@ public final class Collectors { @Override public Set> entrySet() { - return new AbstractSet>() { + return new AbstractSet<>() { @Override public Iterator> iterator() { Map.Entry falseEntry = new SimpleImmutableEntry<>(false, forFalse); Map.Entry trueEntry = new SimpleImmutableEntry<>(true, forTrue); - return Arrays.asList(falseEntry, trueEntry).iterator(); + return List.of(falseEntry, trueEntry).iterator(); } @Override