@@ -25,6 +25,31 @@ public static Object testFlowThroughBindingInstanceOf(String s, Integer i, boole
25
25
return null ;
26
26
}
27
27
28
+ public static Object testFlowThroughSwitchStmtWrapper (Wrapper s , Wrapper i , boolean unknown ) {
29
+ Wrapper o = unknown ? s : i ;
30
+ switch (o ) {
31
+ case Wrapper (Integer i2 ) -> { return (Object )i2 ; }
32
+ default -> { return null ; }
33
+ }
34
+ }
35
+
36
+ public static Object testFlowThroughSwitchExprWrapper (Wrapper s , Wrapper i , boolean unknown ) {
37
+ Wrapper o = unknown ? s : i ;
38
+ Object toRet = switch (o ) {
39
+ case Wrapper (Integer i2 ) -> (Object )i2 ;
40
+ default -> null ;
41
+ };
42
+ return toRet ;
43
+ }
44
+
45
+ public static Object testFlowThroughBindingInstanceOfWrapper (Wrapper s , Wrapper i , boolean unknown ) {
46
+ Wrapper o = unknown ? s : i ;
47
+ if (o instanceof Wrapper (Integer i2 ))
48
+ return (Object )i2 ;
49
+ else
50
+ return null ;
51
+ }
52
+
28
53
public static <T > T source () { return null ; }
29
54
30
55
public static void sink (Object o ) { }
@@ -37,6 +62,14 @@ public static void test(boolean unknown, boolean unknown2) {
37
62
sink (testFlowThroughSwitchExpr (source1 , source2 , unknown ));
38
63
sink (testFlowThroughBindingInstanceOf (source1 , source2 , unknown ));
39
64
65
+ Wrapper source1Wrapper = new Wrapper ((String )source ());
66
+ Wrapper source2Wrapper = new Wrapper ((Integer )source ());
67
+ sink (testFlowThroughSwitchStmtWrapper (source1Wrapper , source2Wrapper , unknown ));
68
+ sink (testFlowThroughSwitchExprWrapper (source1Wrapper , source2Wrapper , unknown ));
69
+ sink (testFlowThroughBindingInstanceOfWrapper (source1Wrapper , source2Wrapper , unknown ));
70
+
40
71
}
41
72
73
+ record Wrapper (Object o ) { }
74
+
42
75
}
0 commit comments