RFR: 8268056: Update java.net and java.nio to use switch expressions [v2]

Patrick Concannon pconcannon at openjdk.java.net
Wed Jun 2 11:06:47 UTC 2021


On Wed, 2 Jun 2021 09:13:44 GMT, Chris Hegarty <chegar at openjdk.org> wrote:

>> Patrick Concannon has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   8268056: Reverted changes to URLDecoder; reformatted change to FileTime
>
> src/java.base/share/classes/java/nio/file/Files.java line 2832:
> 
>> 2830:                             result = FileVisitResult.CONTINUE;
>> 2831:                     }
>> 2832:                     default -> throw new AssertionError("Should not get here");
> 
> This is subjective, and we're still finding our way with how best to construct some of the more complex switch expressions.
> 
> Where possible, I think it is best to remove assignments from the individual case branches. The use of `yield` makes it very clear what is going on, and ensures that each case branch, well... yields something. So how about:
> 
> 
>   FileVisitResult result = switch (ev.type()) {
>       case ENTRY -> {
>           IOException ioe = ev.ioeException();
>           if (ioe == null) {
>               assert ev.attributes() != null;
>               yield visitor.visitFile(ev.file(), ev.attributes());
>           } else {
>               yield visitor.visitFileFailed(ev.file(), ioe);
>           }
>       }
>       case START_DIRECTORY -> {
>           var r = visitor.preVisitDirectory(ev.file(), ev.attributes());
> 
>           // if SKIP_SIBLINGS and SKIP_SUBTREE is returned then
>           // there shouldn't be any more events for the current
>           // directory.
>           if (r == FileVisitResult.SKIP_SUBTREE ||
>               r == FileVisitResult.SKIP_SIBLINGS)
>               walker.pop();
>           yield r;
>       }
>       case END_DIRECTORY -> {
>           var r = visitor.postVisitDirectory(ev.file(), ev.ioeException());
>           // SKIP_SIBLINGS is a no-op for postVisitDirectory
>           if (r == FileVisitResult.SKIP_SIBLINGS)
>               r = FileVisitResult.CONTINUE;
>           yield r;
>       }
>       default -> throw new AssertionError("Should not get here");
>   };

OK. I've made that change now. See 433b02a

-------------

PR: https://git.openjdk.java.net/jdk/pull/4285


More information about the nio-dev mailing list