From 99bd29aa6776dc05df9e94e4d680281808b0c484 Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Fri, 6 Jun 2025 19:15:30 +0300 Subject: [PATCH] chore: replace List<@Nullable Object> with List The latter is easier to read, and it forbids list.add(...) at the compile-time. See https://jspecify.dev/docs/user-guide/#wildcard-bounds --- .../commons/support/AnnotationSupport.java | 8 +++++-- .../commons/util/ReflectionUtils.java | 6 ++--- .../commons/util/ReflectionUtilsTests.java | 24 ++++++++++--------- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/AnnotationSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/AnnotationSupport.java index a29801a7c333..f098ba5c34bf 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/AnnotationSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/AnnotationSupport.java @@ -450,7 +450,9 @@ public static List findAnnotatedFields(Class clazz, Class fields = findAnnotatedFields(instance.getClass(), annotationType, ModifierSupport::isNotStatic, HierarchyTraversalMode.TOP_DOWN); - return ReflectionUtils.readFieldValues(fields, instance); + @SuppressWarnings("unchecked") + List<@Nullable Object> result = (List<@Nullable Object>) ReflectionUtils.readFieldValues(fields, instance); + return result; } /** @@ -482,7 +484,9 @@ public static List findAnnotatedFields(Class clazz, Class fields = findAnnotatedFields(clazz, annotationType, ModifierSupport::isStatic, HierarchyTraversalMode.TOP_DOWN); - return ReflectionUtils.readFieldValues(fields, null); + @SuppressWarnings("unchecked") + List<@Nullable Object> result = (List<@Nullable Object>) ReflectionUtils.readFieldValues(fields, null); + return result; } /** diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 4fc356365cb2..3836d2369977 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -657,7 +657,7 @@ public static Try tryToReadFieldValue(Class clazz, String fieldNa * @return an immutable list of the values of the specified fields; never * {@code null} but may be empty or contain {@code null} entries */ - public static List<@Nullable Object> readFieldValues(List fields, @Nullable Object instance) { + public static List readFieldValues(List fields, @Nullable Object instance) { return readFieldValues(fields, instance, field -> true); } @@ -674,9 +674,7 @@ public static Try tryToReadFieldValue(Class clazz, String fieldNa * @return an immutable list of the values of the specified fields; never * {@code null} but may be empty or contain {@code null} entries */ - @SuppressWarnings("NullAway") - public static List<@Nullable Object> readFieldValues(List fields, @Nullable Object instance, - Predicate predicate) { + public static List readFieldValues(List fields, @Nullable Object instance, Predicate predicate) { Preconditions.notNull(fields, "fields list must not be null"); Preconditions.notNull(predicate, "Predicate must not be null"); diff --git a/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java b/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java index e1701ad6dbd3..87872afbb645 100644 --- a/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java +++ b/platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java @@ -60,6 +60,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import org.assertj.core.api.Assertions; import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -1952,7 +1953,8 @@ void readFieldValuesFromInstance() { var values = readFieldValues(fields, new ClassWithFields()); - assertThat(values).containsExactly("enigma", 3.14, "text", 2.5, null, 42, "constant", 99); + Assertions. assertThat(values).containsExactly("enigma", 3.14, "text", 2.5, null, 42, "constant", + 99); } @Test @@ -1961,7 +1963,7 @@ void readFieldValuesFromClass() { var values = readFieldValues(fields, null); - assertThat(values).containsExactly(2.5, "constant", 99); + Assertions. assertThat(values).containsExactly(2.5, "constant", 99); } /** @@ -1972,15 +1974,15 @@ void readFieldValuesFromClass() { void readFieldValuesFromInterfacesAndClassesInTypeHierarchy() { var fields = findFields(InterfaceWithField.class, ReflectionUtils::isStatic, TOP_DOWN); var values = readFieldValues(fields, null); - assertThat(values).containsOnly("ifc"); + Assertions. assertThat(values).containsOnly("ifc"); fields = findFields(SuperclassWithFieldAndFieldFromInterface.class, ReflectionUtils::isStatic, TOP_DOWN); values = readFieldValues(fields, null); - assertThat(values).containsExactly("ifc", "super"); + Assertions. assertThat(values).containsExactly("ifc", "super"); fields = findFields(SubclassWithFieldAndFieldFromInterface.class, ReflectionUtils::isStatic, TOP_DOWN); values = readFieldValues(fields, null); - assertThat(values).containsExactly("ifc", "super", "sub"); + Assertions. assertThat(values).containsExactly("ifc", "super", "sub"); } @Test @@ -1989,7 +1991,7 @@ void readFieldValuesFromInstanceWithTypeFilterForString() { var values = readFieldValues(fields, new ClassWithFields(), isA(String.class)); - assertThat(values).containsExactly("enigma", "text", null, "constant"); + Assertions. assertThat(values).containsExactly("enigma", "text", null, "constant"); } @Test @@ -1998,7 +2000,7 @@ void readFieldValuesFromClassWithTypeFilterForString() { var values = readFieldValues(fields, null, isA(String.class)); - assertThat(values).containsExactly("constant"); + Assertions. assertThat(values).containsExactly("constant"); } @Test @@ -2007,7 +2009,7 @@ void readFieldValuesFromInstanceWithTypeFilterForInteger() { var values = readFieldValues(fields, new ClassWithFields(), isA(int.class)); - assertThat(values).containsExactly(42); + Assertions. assertThat(values).containsExactly(42); } @Test @@ -2016,7 +2018,7 @@ void readFieldValuesFromClassWithTypeFilterForInteger() { var values = readFieldValues(fields, null, isA(Integer.class)); - assertThat(values).containsExactly(99); + Assertions. assertThat(values).containsExactly(99); } @Test @@ -2025,7 +2027,7 @@ void readFieldValuesFromInstanceWithTypeFilterForDouble() { var values = readFieldValues(fields, new ClassWithFields(), isA(double.class)); - assertThat(values).containsExactly(3.14); + Assertions. assertThat(values).containsExactly(3.14); } @Test @@ -2034,7 +2036,7 @@ void readFieldValuesFromClassWithTypeFilterForDouble() { var values = readFieldValues(fields, null, isA(Double.class)); - assertThat(values).containsExactly(2.5); + Assertions. assertThat(values).containsExactly(2.5); } private static Predicate isA(Class type) {