001package daikon.diff;
002
003import daikon.PptTopLevel;
004import org.checkerframework.checker.nullness.qual.Nullable;
005import org.checkerframework.dataflow.qual.Pure;
006import org.plumelib.util.IPair;
007
008/**
009 * Contains a pair of Ppts. Resides in the second level of the tree. All its children are InvNodes.
010 */
011public class PptNode extends Node<@Nullable PptTopLevel, InvNode> {
012
013  /**
014   * Either ppt1 or ppt2 may be null, but not both.
015   *
016   * @param ppt1 a program point
017   * @param ppt2 a program point
018   */
019  public PptNode(@Nullable PptTopLevel ppt1, @Nullable PptTopLevel ppt2) {
020    super(IPair.of(ppt1, ppt2));
021    assert !(ppt1 == null && ppt2 == null) : "Both program points may not be null";
022  }
023
024  @Pure
025  public @Nullable PptTopLevel getPpt1() {
026    return getUserLeft();
027  }
028
029  @Pure
030  public @Nullable PptTopLevel getPpt2() {
031    return getUserRight();
032  }
033
034  @Override
035  public void accept(Visitor v) {
036    v.visit(this);
037  }
038}