@@ -395,6 +395,102 @@ void fun(@Safe Object ob) {}
395395 .doTest ();
396396 }
397397
398+ @ Test
399+ public void testUnsafeLambdaSwitchStatement () {
400+ helper ().addSourceLines (
401+ "Test.java" ,
402+ // language=Java
403+ """
404+ import com.palantir.logsafe.*;
405+ import java.util.function.*;
406+
407+ enum MyEnum {
408+ ONE,
409+ TWO
410+ }
411+
412+ class Test {
413+ void f(MyEnum myEnum, @Unsafe Object unsafeValue) {
414+ @Safe
415+ Object result =
416+ switch (myEnum) {
417+ // BUG: Diagnostic contains: Dangerous
418+ case ONE -> unsafeValue;
419+ case TWO -> "safe";
420+ };
421+ }
422+ }
423+ """ )
424+ .doTest ();
425+ }
426+
427+ @ Test
428+ void testOverrideArgumentSafety () {
429+ helper ().addSourceLines (
430+ "Test.java" ,
431+ // language=Java
432+ """
433+ import com.palantir.logsafe.*;
434+ import java.util.function.*;
435+
436+ interface MyInterface {
437+ @Safe
438+ String safeMethod(@Unsafe String safeArg);
439+ }
440+
441+ class MyClass implements MyInterface {
442+ @Override
443+ @Safe
444+ // BUG: Diagnostic contains: Dangerous
445+ public String safeMethod(@Safe String safeArg) {
446+ return "unsafe";
447+ }
448+ }
449+ """ )
450+ .doTest ();
451+ }
452+
453+ @ Test
454+ void testLambdaConsumesSafetyAnnotatedType_reference () {
455+ helper ().addSourceLines (
456+ "Test.java" ,
457+ // language=Java
458+ """
459+ import com.palantir.logsafe.*;
460+ import java.util.function.*;
461+
462+ class Test {
463+ // BUG: Diagnostic contains: Dangerous
464+ Consumer<@Unsafe String> func = this::fun;
465+
466+ void fun(@Safe Object ob) {}
467+ }
468+ """ )
469+ .doTest ();
470+ }
471+
472+ @ Test
473+ void testLambdaProducesSafetyAnnotatedType_reference () {
474+ helper ().addSourceLines (
475+ "Test.java" ,
476+ // language=Java
477+ """
478+ import com.palantir.logsafe.*;
479+ import java.util.function.*;
480+
481+ class Test {
482+ // BUG: Diagnostic contains: Dangerous
483+ Supplier<@Safe String> func = this::fun;
484+
485+ @Unsafe
486+ String fun() {
487+ return "unsafe";
488+ }
489+ }
490+ """ )
491+ .doTest ();
492+ }
493+
398494 private CompilationTestHelper helper () {
399495 return CompilationTestHelper .newInstance (IllegalSafeLoggingArgument .class , getClass ());
400496 }
0 commit comments