import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;
import java.util.Set;
import org.checkerframework.checker.nullness.qual.*;

public class FlowConditions {
  void m(@Nullable Object x, @Nullable Object y) {
    if (x == null || y == null) {
      // :: error: (dereference.of.nullable)
      x.toString();
      // :: error: (dereference.of.nullable)
      y.toString();
    } else {
      x.toString();
      y.toString();
    }
  }

  private final Map<String, Set<String>> graph = new HashMap<>();

  public void addEdge1(String e, String parent, String child) {
    if (!graph.containsKey(parent)) {
      throw new NoSuchElementException();
    }
    if (!graph.containsKey(child)) {
      throw new NoSuchElementException();
    }
    @NonNull Set<String> edges = graph.get(parent);
  }

  // TODO: Re-enable when issue 221 is resolved.
  // public void addEdge2(String e, String parent, String child) {
  //     if ( (!graph.containsKey(parent)) ||
  //          (!graph.containsKey(child)))
  //         throw new NoSuchElementException();
  //     @NonNull Set<String> edges = graph.get(parent);
  // }

}
