/*
 * @test
 * @summary Test for Issue 347: concurrent semantics has desired behavior
 *
 * @compile -XDrawDiagnostics -processor org.checkerframework.checker.nullness.NullnessChecker -Alint Issue347.java
 * @compile/fail/ref=Issue347-con.out -XDrawDiagnostics -processor org.checkerframework.checker.nullness.NullnessChecker -Alint Issue347.java -AconcurrentSemantics
 */

import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
import org.checkerframework.checker.nullness.qual.Nullable;

public 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();
  }
}
