package org.scribble.visit.context; import org.scribble.ast.ScribNode; import org.scribble.ast.context.global.GDependencyMap; import org.scribble.ast.context.local.LDependencyMap; import org.scribble.main.Job; import org.scribble.main.ScribbleException; import org.scribble.sesstype.name.GProtocolName; import org.scribble.sesstype.name.LProtocolName; import org.scribble.sesstype.name.Role; import org.scribble.visit.NoEnvSubprotocolVisitor; // Disambiguates ambiguous PayloadTypeOrParameter names and inserts implicit Scope names -- no: old? public class ProtocolDeclContextBuilder extends NoEnvSubprotocolVisitor // For transitive dependency collection (cf. NameCollector) { private GDependencyMap gdeps; private LDependencyMap ldeps; public ProtocolDeclContextBuilder(Job job) { super(job); } @Override protected void subprotocolEnter(ScribNode parent, ScribNode child) throws ScribbleException { super.subprotocolEnter(parent, child); child.del().enterProtocolDeclContextBuilding(parent, child, this); } @Override protected ScribNode subprotocolLeave(ScribNode parent, ScribNode child, ScribNode visited) throws ScribbleException { visited = visited.del().leaveProtocolDeclContextBuilding(parent, child, this, visited); return super.subprotocolLeave(parent, child, visited); } public void clearProtocolDependencies() { this.gdeps = new GDependencyMap(); this.ldeps = new LDependencyMap(); } public void addGlobalProtocolDependency(Role self, GProtocolName gpn, Role target) { this.gdeps.addProtocolDependency(self, gpn, target); } public void addLocalProtocolDependency(Role self, LProtocolName lpn, Role target) { this.ldeps.addProtocolDependency(self, lpn, target); } public GDependencyMap getGlobalProtocolDependencyMap() { return this.gdeps; } public LDependencyMap getLocalProtocolDependencyMap() { return this.ldeps; } }