001package daikon.diff;
002
003import daikon.inv.Invariant;
004import org.checkerframework.checker.nullness.qual.NonNull;
005import org.checkerframework.checker.nullness.qual.Nullable;
006import org.checkerframework.dataflow.qual.Pure;
007import org.plumelib.util.IPair;
008
009/** Contains a pair of Invariants. Resides in the third level of the tree. Has no children. */
010public class InvNode extends Node<@Nullable Invariant, @NonNull Void> {
011
012  /**
013   * Either inv1 or inv2 may be null, but not both.
014   *
015   * @param inv1 an invariant
016   * @param inv2 an invariant
017   */
018  public InvNode(@Nullable Invariant inv1, @Nullable Invariant inv2) {
019    super(IPair.of(inv1, inv2));
020    assert !(inv1 == null && inv2 == null) : "Both invariants may not be null";
021  }
022
023  @Pure
024  public @Nullable Invariant getInv1() {
025    return getUserLeft();
026  }
027
028  @Pure
029  public @Nullable Invariant getInv2() {
030    return getUserRight();
031  }
032
033  @Override
034  public void accept(Visitor v) {
035    v.visit(this);
036  }
037}