/* * @test * @summary Test for Issue 347: concurrent semantics has desired behavior * * @compile -XDrawDiagnostics -processor org.checkerframework.checker.nullness.NullnessChecker -AprintErrorStack -Alint Issue347.java * @compile/fail/ref=Issue347-con.out -XDrawDiagnostics -processor org.checkerframework.checker.nullness.NullnessChecker -AprintErrorStack -Alint Issue347.java -AconcurrentSemantics */ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.Nullable; class Issue347 { @MonotonicNonNull String mono; @Nullable String nble; void testMono() { if (mono == null) { return; } // The object referenced by mono might change, but // it can't become null again, even in concurrent // semantics. mono.toString(); } void testNble() { if (nble == null) { return; } // error expected in concurrent semantics only nble.toString(); } }