package org.scribble.visit.util; import org.scribble.ast.ProtocolDecl; import org.scribble.ast.ScribNode; import org.scribble.ast.context.ModuleContext; import org.scribble.main.Job; import org.scribble.main.ScribbleException; import org.scribble.sesstype.name.Role; // Second pass for ProtocolDeclContext building // Maybe generalise to integrate enabled message collection? // NOTE: doesn't collect from choice subjects public class RoleCollector extends NameCollector<Role> { public RoleCollector(Job job) { super(job); } public RoleCollector(Job job, ModuleContext mcontext) { super(job, mcontext); } @Override protected final void offsetSubprotocolEnter(ScribNode parent, ScribNode child) throws ScribbleException { super.offsetSubprotocolEnter(parent, child); if (child instanceof ProtocolDecl<?>) { super.clear(); } child.del().enterRoleCollection(parent, child, this); } @Override protected ScribNode offsetSubprotocolLeave(ScribNode parent, ScribNode child, ScribNode visited) throws ScribbleException { visited = visited.del().leaveRoleCollection(parent, child, this, visited); return super.offsetSubprotocolLeave(parent, child, visited); } }