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}