package org.scribble.visit.util; import java.util.HashSet; import java.util.Set; import org.scribble.ast.context.ModuleContext; import org.scribble.main.Job; import org.scribble.sesstype.name.Name; import org.scribble.visit.NoEnvOffsetSubprotocolVisitor; // Make SubprotocolVisitor? -- should be at least SubprotocolVisitor for get all occurrences up to recursive subprotocols (e.g. role occurrences for protocoldeclcontext) public abstract class NameCollector<N extends Name<?>> extends NoEnvOffsetSubprotocolVisitor { private Set<N> names = new HashSet<>(); public NameCollector(Job job) { super(job); } // Can takes ModuleContext here, so no need to visit from Module as root -- maybe factor this facility out // though has to enter at least at protocoldecl for subprotocol visitor root sig pushing public NameCollector(Job job, ModuleContext mcontext) { super(job); setModuleContext(mcontext); } public void addName(N name) { this.names.add(name); } public void removeName(N name) { if (this.names.contains(name)) { this.names.remove(name); } } public Set<N> getNames() { return this.names; } public void clear() { this.names.clear(); } }