package org.scribble.ast; import org.antlr.runtime.tree.CommonTree; import org.scribble.main.ScribbleException; import org.scribble.sesstype.kind.ProtocolKind; import org.scribble.visit.AstVisitor; public abstract class ProtocolBlock<K extends ProtocolKind> extends CompoundInteraction implements ProtocolKindNode<K> { public final InteractionSeq<K> seq; public ProtocolBlock(CommonTree source, InteractionSeq<K> seq) { super(source); this.seq = seq; } @Override public abstract ProtocolBlock<K> clone(); public abstract ProtocolBlock<K> reconstruct(InteractionSeq<K> seq); public abstract InteractionSeq<K> getInteractionSeq(); @Override public ProtocolBlock<K> visitChildren(AstVisitor nv) throws ScribbleException { InteractionSeq<K> seq = visitChildWithClassEqualityCheck(this, this.seq, nv); return reconstruct(seq); } public boolean isEmpty() { return this.seq.isEmpty(); } @Override public String toString() { return "{\n" + this.seq + "\n}"; // Empty block will contain an blank line } }