Fix for warning related to stream api call chains in java.base

Vipin Sharma vipinsharma85 at gmail.com
Tue May 19 18:51:33 UTC 2020


Hi All,

Forgot to mention these are IDE warnings I am trying to fix, need a sponsor for this.

Regards,
Vipin

> On May 3, 2020, at 8:40 PM, Vipin Sharma <vipinsharma85 at gmail.com> wrote:
> 
> Hi All,
> 
> I have fixed some warnings in java.base module, following are 3 type of code changes in this patch:
> 
> ! stream().filter(...).findFirst().isPresent() replaced with  stream().noneMatch(...))
> stream.filter(...).findFirst().isPresent() replaced with  stream.anyMatch(...)
> stream.collect(Collectors.joining(",")) replaced with  String.join(",", stringList)
> 
> This patch improves performance as well, jmh results available at https://gist.github.com/Vipin-Sharma/00f1d6da6b8e0e0bc7bec2e33bce85ed <https://gist.github.com/Vipin-Sharma/00f1d6da6b8e0e0bc7bec2e33bce85ed>, end of gist file you can see results. Need a sponsor for this patch.
> 
> Patch:
> 
> --- old/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	2020-05-03 19:44:09.519289354 +0530
> +++ new/src/java.base/share/classes/java/lang/invoke/MethodHandles.java	2020-05-03 19:44:09.087294954 +0530
> @@ -6349,7 +6349,7 @@
>                      loopReturnType + ")");
>          }
>  
> -        if (!pred.stream().filter(Objects::nonNull).findFirst().isPresent()) {
> +        if (pred.stream().noneMatch(Objects::nonNull)) {
>              throw newIllegalArgumentException("no predicate found", pred);
>          }
>          if (pred.stream().filter(Objects::nonNull).map(MethodHandle::type).map(MethodType::returnType).
> --- old/src/java.base/share/classes/java/util/Locale.java	2020-05-03 19:44:10.915271183 +0530
> +++ new/src/java.base/share/classes/java/util/Locale.java	2020-05-03 19:44:10.487276766 +0530
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 1996, 2020, 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
> @@ -2250,7 +2250,7 @@
>          // If we have no list patterns, compose the list in a simple,
>          // non-localized way.
>          if (pattern == null) {
> -            return Arrays.stream(stringList).collect(Collectors.joining(","));
> +            return String.join(",", stringList);
>          }
>  
>          switch (stringList.length) {
> --- old/src/java.base/share/classes/jdk/internal/module/DefaultRoots.java	2020-05-03 19:44:11.911258115 +0530
> +++ new/src/java.base/share/classes/jdk/internal/module/DefaultRoots.java	2020-05-03 19:44:11.479263786 +0530
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
> + * Copyright (c) 2017, 2020, 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
> @@ -74,8 +74,6 @@
>      private static boolean exportsAPI(ModuleDescriptor descriptor) {
>          return descriptor.exports()
>                  .stream()
> -                .filter(e -> !e.isQualified())
> -                .findAny()
> -                .isPresent();
> +                .anyMatch(e -> !e.isQualified());
>      }
>  }
> --- old/src/java.base/share/classes/sun/launcher/LauncherHelper.java	2020-05-03 19:44:12.863245549 +0530
> +++ new/src/java.base/share/classes/sun/launcher/LauncherHelper.java	2020-05-03 19:44:12.427251308 +0530
> @@ -1142,7 +1142,7 @@
>              ostream.format("uses %s%n", s);
>          }
>          for (Provides ps : md.provides()) {
> -            String names = ps.providers().stream().collect(Collectors.joining(" "));
> +            String names = String.join(" ", ps.providers());
>              ostream.format("provides %s with %s%n", ps.service(), names);
>  
>          }
> @@ -1150,7 +1150,7 @@
>          // qualified exports
>          for (Exports e : md.exports()) {
>              if (e.isQualified()) {
> -                String who = e.targets().stream().collect(Collectors.joining(" "));
> +                String who = String.join(" ", e.targets());
>                  ostream.format("qualified exports %s to %s%n", e.source(), who);
>              }
>          }
> @@ -1164,7 +1164,7 @@
>                      .collect(Collectors.joining(" "));
>              ostream.format("opens %s", sourceAndMods);
>              if (opens.isQualified()) {
> -                String who = opens.targets().stream().collect(Collectors.joining(" "));
> +                String who = String.join(" ", opens.targets());
>                  ostream.format(" to %s", who);
>              }
>              ostream.println();
> --- old/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	2020-05-03 19:44:14.143228540 +0530
> +++ new/src/jdk.jshell/share/classes/jdk/internal/jshell/tool/JShellTool.java	2020-05-03 19:44:13.711234292 +0530
> @@ -380,7 +380,7 @@
>                  return parse(oset);
>              } catch (OptionException ex) {
>                  if (ex.options().isEmpty()) {
> -                    msg("jshell.err.opt.invalid", stream(args).collect(joining(", ")));
> +                    msg("jshell.err.opt.invalid", String.join(", ", args));
>                  } else {
>                      boolean isKnown = parser.recognizedOptions().containsKey(ex.options().iterator().next());
>                      msg(isKnown
> @@ -2041,16 +2041,14 @@
>          if (matches.length == 0) {
>              // There are no matching sub-commands
>              errormsg("jshell.err.arg", cmd, sub);
> -            fluffmsg("jshell.msg.use.one.of", Arrays.stream(subs)
> -                    .collect(Collectors.joining(", "))
> +            fluffmsg("jshell.msg.use.one.of", String.join(", ", subs)
>              );
>              return null;
>          }
>          if (matches.length > 1) {
>              // More than one sub-command matches the initial characters provided
>              errormsg("jshell.err.sub.ambiguous", cmd, sub);
> -            fluffmsg("jshell.msg.use.one.of", Arrays.stream(matches)
> -                    .collect(Collectors.joining(", "))
> +            fluffmsg("jshell.msg.use.one.of", String.join(", ", matches)
>              );
>              return null;
>          }
> 
> 
> Regards,
> Vipin



More information about the core-libs-dev mailing list