Skip to content

Commit 2089504

Browse files
authored
Replace List<@nullable Object> with List<?> for internal APIs
The latter is easier to read and forbids `list.add(...)` at compile time. See jspecify.dev/docs/user-guide#wildcard-bounds
1 parent df24efb commit 2089504

File tree

3 files changed

+21
-17
lines changed

3 files changed

+21
-17
lines changed

junit-platform-commons/src/main/java/org/junit/platform/commons/support/AnnotationSupport.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,9 @@ public static List<Field> findAnnotatedFields(Class<?> clazz, Class<? extends An
450450
List<Field> fields = findAnnotatedFields(instance.getClass(), annotationType, ModifierSupport::isNotStatic,
451451
HierarchyTraversalMode.TOP_DOWN);
452452

453-
return ReflectionUtils.readFieldValues(fields, instance);
453+
@SuppressWarnings("unchecked")
454+
List<@Nullable Object> result = (List<@Nullable Object>) ReflectionUtils.readFieldValues(fields, instance);
455+
return result;
454456
}
455457

456458
/**
@@ -482,7 +484,9 @@ public static List<Field> findAnnotatedFields(Class<?> clazz, Class<? extends An
482484
List<Field> fields = findAnnotatedFields(clazz, annotationType, ModifierSupport::isStatic,
483485
HierarchyTraversalMode.TOP_DOWN);
484486

485-
return ReflectionUtils.readFieldValues(fields, null);
487+
@SuppressWarnings("unchecked")
488+
List<@Nullable Object> result = (List<@Nullable Object>) ReflectionUtils.readFieldValues(fields, null);
489+
return result;
486490
}
487491

488492
/**

junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -657,7 +657,7 @@ public static <T> Try<Object> tryToReadFieldValue(Class<T> clazz, String fieldNa
657657
* @return an immutable list of the values of the specified fields; never
658658
* {@code null} but may be empty or contain {@code null} entries
659659
*/
660-
public static List<@Nullable Object> readFieldValues(List<Field> fields, @Nullable Object instance) {
660+
public static List<?> readFieldValues(List<Field> fields, @Nullable Object instance) {
661661
return readFieldValues(fields, instance, field -> true);
662662
}
663663

@@ -674,9 +674,7 @@ public static <T> Try<Object> tryToReadFieldValue(Class<T> clazz, String fieldNa
674674
* @return an immutable list of the values of the specified fields; never
675675
* {@code null} but may be empty or contain {@code null} entries
676676
*/
677-
@SuppressWarnings("NullAway")
678-
public static List<@Nullable Object> readFieldValues(List<Field> fields, @Nullable Object instance,
679-
Predicate<Field> predicate) {
677+
public static List<?> readFieldValues(List<Field> fields, @Nullable Object instance, Predicate<Field> predicate) {
680678
Preconditions.notNull(fields, "fields list must not be null");
681679
Preconditions.notNull(predicate, "Predicate must not be null");
682680

platform-tests/src/test/java/org/junit/platform/commons/util/ReflectionUtilsTests.java

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import java.util.stream.IntStream;
6161
import java.util.stream.Stream;
6262

63+
import org.assertj.core.api.Assertions;
6364
import org.jspecify.annotations.Nullable;
6465
import org.junit.jupiter.api.Nested;
6566
import org.junit.jupiter.api.Test;
@@ -1952,7 +1953,8 @@ void readFieldValuesFromInstance() {
19521953

19531954
var values = readFieldValues(fields, new ClassWithFields());
19541955

1955-
assertThat(values).containsExactly("enigma", 3.14, "text", 2.5, null, 42, "constant", 99);
1956+
Assertions.<Object> assertThat(values).containsExactly("enigma", 3.14, "text", 2.5, null, 42, "constant",
1957+
99);
19561958
}
19571959

19581960
@Test
@@ -1961,7 +1963,7 @@ void readFieldValuesFromClass() {
19611963

19621964
var values = readFieldValues(fields, null);
19631965

1964-
assertThat(values).containsExactly(2.5, "constant", 99);
1966+
Assertions.<Object> assertThat(values).containsExactly(2.5, "constant", 99);
19651967
}
19661968

19671969
/**
@@ -1972,15 +1974,15 @@ void readFieldValuesFromClass() {
19721974
void readFieldValuesFromInterfacesAndClassesInTypeHierarchy() {
19731975
var fields = findFields(InterfaceWithField.class, ReflectionUtils::isStatic, TOP_DOWN);
19741976
var values = readFieldValues(fields, null);
1975-
assertThat(values).containsOnly("ifc");
1977+
Assertions.<Object> assertThat(values).containsOnly("ifc");
19761978

19771979
fields = findFields(SuperclassWithFieldAndFieldFromInterface.class, ReflectionUtils::isStatic, TOP_DOWN);
19781980
values = readFieldValues(fields, null);
1979-
assertThat(values).containsExactly("ifc", "super");
1981+
Assertions.<Object> assertThat(values).containsExactly("ifc", "super");
19801982

19811983
fields = findFields(SubclassWithFieldAndFieldFromInterface.class, ReflectionUtils::isStatic, TOP_DOWN);
19821984
values = readFieldValues(fields, null);
1983-
assertThat(values).containsExactly("ifc", "super", "sub");
1985+
Assertions.<Object> assertThat(values).containsExactly("ifc", "super", "sub");
19841986
}
19851987

19861988
@Test
@@ -1989,7 +1991,7 @@ void readFieldValuesFromInstanceWithTypeFilterForString() {
19891991

19901992
var values = readFieldValues(fields, new ClassWithFields(), isA(String.class));
19911993

1992-
assertThat(values).containsExactly("enigma", "text", null, "constant");
1994+
Assertions.<Object> assertThat(values).containsExactly("enigma", "text", null, "constant");
19931995
}
19941996

19951997
@Test
@@ -1998,7 +2000,7 @@ void readFieldValuesFromClassWithTypeFilterForString() {
19982000

19992001
var values = readFieldValues(fields, null, isA(String.class));
20002002

2001-
assertThat(values).containsExactly("constant");
2003+
Assertions.<Object> assertThat(values).containsExactly("constant");
20022004
}
20032005

20042006
@Test
@@ -2007,7 +2009,7 @@ void readFieldValuesFromInstanceWithTypeFilterForInteger() {
20072009

20082010
var values = readFieldValues(fields, new ClassWithFields(), isA(int.class));
20092011

2010-
assertThat(values).containsExactly(42);
2012+
Assertions.<Object> assertThat(values).containsExactly(42);
20112013
}
20122014

20132015
@Test
@@ -2016,7 +2018,7 @@ void readFieldValuesFromClassWithTypeFilterForInteger() {
20162018

20172019
var values = readFieldValues(fields, null, isA(Integer.class));
20182020

2019-
assertThat(values).containsExactly(99);
2021+
Assertions.<Object> assertThat(values).containsExactly(99);
20202022
}
20212023

20222024
@Test
@@ -2025,7 +2027,7 @@ void readFieldValuesFromInstanceWithTypeFilterForDouble() {
20252027

20262028
var values = readFieldValues(fields, new ClassWithFields(), isA(double.class));
20272029

2028-
assertThat(values).containsExactly(3.14);
2030+
Assertions.<Object> assertThat(values).containsExactly(3.14);
20292031
}
20302032

20312033
@Test
@@ -2034,7 +2036,7 @@ void readFieldValuesFromClassWithTypeFilterForDouble() {
20342036

20352037
var values = readFieldValues(fields, null, isA(Double.class));
20362038

2037-
assertThat(values).containsExactly(2.5);
2039+
Assertions.<Object> assertThat(values).containsExactly(2.5);
20382040
}
20392041

20402042
private static Predicate<Field> isA(Class<?> type) {

0 commit comments

Comments
 (0)