package org.scribble.ast; import org.antlr.runtime.tree.CommonTree; import org.scribble.ast.name.simple.SimpleNameNode; import org.scribble.main.ScribbleException; import org.scribble.sesstype.kind.ParamKind; import org.scribble.sesstype.name.Role; import org.scribble.visit.AstVisitor; // Names that are declared in a protocol header (roles and parameters -- not the protocol name though) // RoleKind or (NonRole)ParamKind public abstract class HeaderParamDecl<K extends ParamKind> extends NameDeclNode<K> { protected HeaderParamDecl(CommonTree source, SimpleNameNode<K> name) { super(source, name); } public abstract HeaderParamDecl<K> reconstruct(SimpleNameNode<K> name); @Override public HeaderParamDecl<K> visitChildren(AstVisitor nv) throws ScribbleException { SimpleNameNode<K> name = visitChildWithClassEqualityCheck(this, (SimpleNameNode<K>) this.name, nv); return reconstruct(name); } public abstract HeaderParamDecl<K> project(Role self); // Move to delegate? public abstract String getKeyword(); @Override public String toString() { return getKeyword() + " " + getDeclName().toString(); } }