On Mon, 26 Jun 2023 12:13:26 GMT, Chen Liang <li...@openjdk.org> wrote:
>> This patch touches java.lang.reflect and java.lang.invoke packages. It >> replaces instanceof + cast with pattern matching and updates >> Array.newInstance().getClass() patterns with arrayType() for obtaining array >> types of a class. > > Chen Liang has updated the pull request with a new target base due to a merge > or a rebase. The incremental webrev excludes the unrelated changes brought in > by the merge/rebase. The pull request contains two additional commits since > the last revision: > > - Merge branch 'master' into cleanup/invoke-instanceof > - 8310849: Pattern matching for instanceof and arrayType cleanup in > j.l.invoke and j.l.reflect Changes requested by gl...@github.com (no known OpenJDK username). src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java line 359: > 357: if (staticArguments == null) > 358: return "BSA0=null"; > 359: return "BSA1="+staticArguments; Suggestion: return switch (staticArguments) { case Object[] array -> "BSA="+java.util.Arrays.asList(array); case int[] array -> "BSA@"+java.util.Arrays.toString(array); case null -> "BSA0=null"; default -> "BSA1="+staticArguments; }; src/java.base/share/classes/sun/invoke/util/ValueConversions.java line 239: > 237: return ZERO_INT; > 238: } > 239: if (x instanceof Number n) { Number res = switch (x) { case Number n -> n; case Boolean b -> b ? ONE_INT : ZERO_INT; case Character c -> (int) c; // this will fail with the required ClassCastException: default -> (Number) x; }; src/java.base/share/classes/sun/invoke/util/ValueConversions.java line 262: > 260: */ > 261: public static int widenSubword(Object x) { > 262: if (x instanceof Integer i) return switch (x) { case Integer i -> i; case Boolean b -> fromBoolean(b); case Character c -> c; case Short s -> s; case Byte b -> b; // Fail with a ClassCastException. case null, default -> (int) x; }; src/java.base/share/classes/sun/invoke/util/Wrapper.java line 583: > 581: > 582: private static Number numberValue(Object x) { > 583: if (x instanceof Number n) return n; return switch (x) { case Number n -> n; case Character c -> (int) c; case Boolean b -> b ? 1 : 0; // Remaining allowed case of void: Must be a null reference. case null, default -> (Number) x; }; src/java.base/share/classes/sun/reflect/annotation/AnnotatedTypeFactory.java line 252: > 250: @Override > 251: public boolean equals(Object o) { > 252: if (o instanceof AnnotatedType that && return o instanceof AnnotatedType that && !(o instanceof AnnotatedArrayType) && !(o instanceof AnnotatedTypeVariable) && !(o instanceof AnnotatedParameterizedType) && !(o instanceof AnnotatedWildcardType) && equalsTypeAndAnnotations(that); src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/GenericArrayTypeImpl.java line 73: > 71: @Override > 72: public boolean equals(Object o) { > 73: if (o instanceof GenericArrayType that) { return o instanceof GenericArrayType that && Objects.equals(genericComponentType, that.getGenericComponentType()); src/java.base/share/classes/sun/reflect/generics/reflectiveObjects/WildcardTypeImpl.java line 171: > 169: @Override > 170: public boolean equals(Object o) { > 171: if (o instanceof WildcardType that) { return o instanceof WildcardType that && Arrays.equals(this.getLowerBounds(), that.getLowerBounds()) && Arrays.equals(this.getUpperBounds(), that.getUpperBounds()); ------------- PR Review: https://git.openjdk.org/jdk/pull/14642#pullrequestreview-1498452572 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242146325 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242152785 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242155031 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242163198 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242161073 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242157078 PR Review Comment: https://git.openjdk.org/jdk/pull/14642#discussion_r1242158469