Browse Source

Refine Nullness for Kotlin functions returning Unit

Should have unspecified nullness like for Java void/Void.

Closes gh-35420
pull/36097/head
Sébastien Deleuze 7 months ago
parent
commit
d2bdf11b39
  1. 6
      spring-core/src/main/java/org/springframework/core/Nullness.java
  2. 7
      spring-core/src/test/java/org/springframework/core/NullnessTests.java
  3. 10
      spring-core/src/test/kotlin/org/springframework/core/NullnessKotlinTests.kt
  4. 4
      spring-core/src/testFixtures/java/org/springframework/core/testfixture/nullness/JSpecifyProcessor.java

6
spring-core/src/main/java/org/springframework/core/Nullness.java

@ -181,10 +181,10 @@ public enum Nullness { @@ -181,10 +181,10 @@ public enum Nullness {
public static Nullness forMethodReturnType(Method method) {
KFunction<?> function = ReflectJvmMapping.getKotlinFunction(method);
if (function != null && function.getReturnType().isMarkedNullable()) {
return Nullness.NULLABLE;
if (function != null && ReflectJvmMapping.getJavaType(function.getReturnType()) != void.class) {
return (function.getReturnType().isMarkedNullable() ? Nullness.NULLABLE : Nullness.NON_NULL);
}
return Nullness.NON_NULL;
return Nullness.UNSPECIFIED;
}
public static Nullness forParameter(Executable executable, int parameterIndex) {

7
spring-core/src/test/java/org/springframework/core/NullnessTests.java

@ -377,6 +377,13 @@ public class NullnessTests { @@ -377,6 +377,13 @@ public class NullnessTests {
Assertions.assertThat(nullness).isEqualTo(Nullness.NULLABLE);
}
@Test
void voidClassMethod() throws NoSuchMethodException {
var method = JSpecifyProcessor.class.getMethod("voidClassProcess");
var nullness = Nullness.forMethodReturnType(method);
Assertions.assertThat(nullness).isEqualTo(Nullness.UNSPECIFIED);
}
// Primitive types
@Test

10
spring-core/src/test/kotlin/org/springframework/core/NullnessKotlinTests.kt

@ -37,6 +37,13 @@ class NullnessKotlinTests { @@ -37,6 +37,13 @@ class NullnessKotlinTests {
Assertions.assertThat(nullness).isEqualTo(Nullness.NULLABLE)
}
@Test
fun unitReturnType() {
val method = ::unit.javaMethod!!
val nullness = Nullness.forMethodReturnType(method)
Assertions.assertThat(nullness).isEqualTo(Nullness.UNSPECIFIED)
}
@Test
fun nullableParameter() {
val method = ::nullable.javaMethod!!
@ -78,4 +85,7 @@ class NullnessKotlinTests { @@ -78,4 +85,7 @@ class NullnessKotlinTests {
@Suppress("unused_parameter")
fun nonNull(nonNull: String): String = "foo"
fun unit() {
}
}

4
spring-core/src/testFixtures/java/org/springframework/core/testfixture/nullness/JSpecifyProcessor.java

@ -37,5 +37,9 @@ public interface JSpecifyProcessor { @@ -37,5 +37,9 @@ public interface JSpecifyProcessor {
@NullMarked
@NonNull String nonNullMarkedProcess();
@NullMarked
void voidProcess();
@NullMarked
void voidClassProcess();
}

Loading…
Cancel
Save