From 4f1f7eaf8a389abf25237dcc6d19cd9fd0d186ff Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 17 Sep 2025 14:39:50 +0200 Subject: [PATCH] [jspecify] IDEA-377689 Nullable incompatibilities. Calls with union generics Fix testdata to avoid testing several mismatches in a single flow See also https://github.com/jspecify/jspecify/pull/763/ GitOrigin-RevId: 719c2f289c5e971bc4e4879e06cf3f7fc2de1842 --- .../jspecify/IntersectionSupertype.java | 127 +++++++++++------- .../JSpecifyFilteredAnnotationTest.java | 7 +- 2 files changed, 81 insertions(+), 53 deletions(-) diff --git a/java/java-tests/testData/inspection/dataFlow/jspecify/IntersectionSupertype.java b/java/java-tests/testData/inspection/dataFlow/jspecify/IntersectionSupertype.java index c50f1943b3c3..5360364fb56a 100644 --- a/java/java-tests/testData/inspection/dataFlow/jspecify/IntersectionSupertype.java +++ b/java/java-tests/testData/inspection/dataFlow/jspecify/IntersectionSupertype.java @@ -37,57 +37,90 @@ interface IntersectionSupertype { void x8(T t); - default void useLib(Lib lib) { - x0(lib); - x1(lib); - x2(lib); - x3(lib); - x4(lib); - x5(lib); - x6(lib); - x7(lib); - x8(lib); + default void useLib(Lib lib, int i) { + switch (i) { + case 0: + x0(lib); + case 1: + x1(lib); + case 2: + x2(lib); + case 3: + x3(lib); + case 4: + x4(lib); + case 5: + x5(lib); + case 6: + x6(lib); + case 7: + x7(lib); + case 8: + x8(lib); + } } - default void useLibUnspec(@NullnessUnspecified Lib lib) { - // jspecify_nullness_not_enough_information - x0(lib); - // jspecify_nullness_not_enough_information - x1(lib); - // jspecify_nullness_not_enough_information - x2(lib); - // jspecify_nullness_not_enough_information - x3(lib); - // jspecify_nullness_not_enough_information - x4(lib); - // jspecify_nullness_not_enough_information - x5(lib); - // jspecify_nullness_not_enough_information - x6(lib); - // jspecify_nullness_not_enough_information - x7(lib); - this.<@Nullable Lib>x8(lib); + default void useLibUnspec(@NullnessUnspecified Lib lib, int i) { + switch (i) { + case 0: + // jspecify_nullness_not_enough_information + x0(lib); + case 1: + // jspecify_nullness_not_enough_information + x1(lib); + case 2: + // jspecify_nullness_not_enough_information + x2(lib); + case 3: + // jspecify_nullness_not_enough_information + x3(lib); + case 4: + // jspecify_nullness_not_enough_information + x4(lib); + case 5: + // jspecify_nullness_not_enough_information + x5(lib); + case 6: + // jspecify_nullness_not_enough_information + x6(lib); + case 7: + // jspecify_nullness_not_enough_information + x7(lib); + case 8: + this.<@Nullable Lib>x8(lib); + } } - default void useLibUnionNull(@Nullable Lib lib) { - // jspecify_nullness_mismatch - x0(lib); - // jspecify_nullness_mismatch - x1(lib); - // jspecify_nullness_mismatch - x2(lib); - // jspecify_nullness_mismatch - x3(lib); - // jspecify_nullness_not_enough_information - x4(lib); - // jspecify_nullness_not_enough_information - x5(lib); - // jspecify_nullness_mismatch - x6(lib); - // jspecify_nullness_not_enough_information - x7(lib); - x8(lib); + default void useLibUnionNull(@Nullable Lib lib, int i) { + switch (i) { + case 0: + // jspecify_nullness_mismatch + x0(lib); + case 1: + // jspecify_nullness_mismatch + x1(lib); + case 2: + // jspecify_nullness_mismatch + x2(lib); + case 3: + // jspecify_nullness_mismatch + x3(lib); + case 4: + // jspecify_nullness_not_enough_information + x4(lib); + case 5: + // jspecify_nullness_not_enough_information + x5(lib); + case 6: + // jspecify_nullness_mismatch + x6(lib); + case 7: + // jspecify_nullness_not_enough_information + x7(lib); + case 8: + x8(lib); + } } interface Lib {} -} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/JSpecifyFilteredAnnotationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/JSpecifyFilteredAnnotationTest.java index 48c9d537487a..29c214a071fb 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/JSpecifyFilteredAnnotationTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/JSpecifyFilteredAnnotationTest.java @@ -38,9 +38,6 @@ public class JSpecifyFilteredAnnotationTest extends JSpecifyAnnotationTest { new Pair<>("DereferenceTypeVariable.java", 117), // see: IDEA-377688 new Pair<>("TypeVariableToObject.java", 104), // see: IDEA-377688 - new Pair<>("IntersectionSupertype.java", 76), // see: IDEA-377689 - new Pair<>("IntersectionSupertype.java", 84), // see: IDEA-377689 - new Pair<>("NullLiteralToTypeVariable.java", 58), // see: IDEA-377691 new Pair<>("NullLiteralToTypeVariable.java", 78), // see: IDEA-377691 new Pair<>("NullLiteralToTypeVariable.java", 98), // see: IDEA-377691 @@ -81,7 +78,7 @@ public class JSpecifyFilteredAnnotationTest extends JSpecifyAnnotationTest { ) ), new SkipIndividuallyFilter( //cases to investigate. (line number starts from 0) - Set.>of( + Set.of( new Pair<>("AnnotatedBoundsOfWildcard.java", 74), // @unspecified, skip new Pair<>("AnnotatedBoundsOfWildcard.java", 76), // @unspecified, skip new Pair<>("ComplexParametric.java", 158), // @unspecified, skip @@ -90,8 +87,6 @@ public class JSpecifyFilteredAnnotationTest extends JSpecifyAnnotationTest { new Pair<>("ComplexParametric.java", 238), // @unspecified, skip new Pair<>("ComplexParametric.java", 246), // @unspecified, skip new Pair<>("DereferenceTypeVariable.java", 123), // @unspecified, skip - new Pair<>("IntersectionSupertype.java", 74), // @unspecified, skip - new Pair<>("IntersectionSupertype.java", 78), // @unspecified, skip new Pair<>("MultiBoundTypeVariableToObject.java", 43), // @unspecified, skip new Pair<>("MultiBoundTypeVariableToObject.java", 52), // @unspecified, skip new Pair<>("MultiBoundTypeVariableToOther.java", 43), // @unspecified, skip