package org.scribble.visit.context; import org.scribble.ast.Module; import org.scribble.ast.ScribNode; import org.scribble.ast.context.ModuleContext; import org.scribble.del.ModuleDel; import org.scribble.main.Job; import org.scribble.main.ScribbleException; import org.scribble.visit.AstVisitor; public abstract class ModuleContextVisitor extends AstVisitor { private ModuleContext mcontext; // The "root" module context (different than the front-end "main" module) // Factor up to ModelVisitor? (will be null before context building) public ModuleContextVisitor(Job job) { super(job); } @Override protected void enter(ScribNode parent, ScribNode child) throws ScribbleException { super.enter(parent, child); if (child instanceof Module) // Factor out? { setModuleContext(((ModuleDel) ((Module) child).del()).getModuleContext()); } } public ModuleContext getModuleContext() { return this.mcontext; } // Factor out -- e.g. some Visitors want to root on ProtocolDecl, not Module protected void setModuleContext(ModuleContext mcontext) { this.mcontext = mcontext; } }