diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableCheckerTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableCheckerTest.java index 864524e5e8e..b51dd6501ce 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableCheckerTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/threadsafety/ImmutableCheckerTest.java @@ -16,11 +16,14 @@ package com.google.errorprone.bugpatterns.threadsafety; +import static org.junit.Assume.assumeTrue; + import com.google.common.collect.ImmutableList; import com.google.errorprone.CompilationTestHelper; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.Immutable; import com.google.errorprone.annotations.concurrent.LazyInit; +import com.google.errorprone.util.RuntimeVersion; import java.util.Arrays; import org.junit.Ignore; import org.junit.Test; @@ -2969,4 +2972,27 @@ public void anonymousClass_canCallSuperMethodOnNonImmutableSuperClass() { "}") .doTest(); } + + @Test + public void switchExpressionsResultingInGenericTypes_doesNotThrow() { + assumeTrue(RuntimeVersion.isAtLeast14()); + compilationHelper + .addSourceLines( + "Kind.java", + "import com.google.errorprone.annotations.Immutable;", + "@Immutable enum Kind { A, B; }") + .addSourceLines( + "Test.java", + "import java.util.Optional;", + "import java.util.function.Supplier;", + "class Test {", + " Supplier> test(Kind kind) {", + " return switch (kind) {", + " case A -> Optional::empty;", + " case B -> () -> Optional.of(\"\");", + " };", + " }", + "}") + .doTest(); + } }