import org.checkerframework.checker.nullness.qual.*; class Node { int id; @Nullable Node next; Node(int id, @Nullable Node next) { this.id = id; this.next = next; } } class SubEnumerate { protected @Nullable Node current; public SubEnumerate(Node node) { this.current = node; } @EnsuresNonNullIf(expression = "current", result = true) public boolean hasMoreElements() { return (current != null); } } class Enumerate extends SubEnumerate { public Enumerate(Node node) { super(node); } public boolean hasMoreElements() { return (current != null); } } class Main { public static final void main(String args[]) { Node n2 = new Node(2, null); Node n1 = new Node(1, n2); Enumerate e = new Enumerate(n1); while (e.hasMoreElements()) {} } }