package org.scribble.ast; import org.antlr.runtime.tree.CommonTree; import org.scribble.ast.name.qualified.ModuleNameNode; import org.scribble.del.ScribDel; import org.scribble.main.ScribbleException; import org.scribble.sesstype.kind.ModuleKind; import org.scribble.sesstype.name.ModuleName; import org.scribble.visit.AstVisitor; public class ImportModule extends ImportDecl<ModuleKind> { public final ModuleNameNode modname; public final ModuleNameNode alias; // Factor up to ImportDecl public ImportModule(CommonTree source, ModuleNameNode modname, ModuleNameNode alias) { super(source); this.modname = modname; this.alias = alias; } @Override protected ImportModule copy() { return new ImportModule(this.source, this.modname, this.alias); } @Override public ImportModule clone() { ModuleNameNode name = (ModuleNameNode) this.modname.clone(); ModuleNameNode alias = (ModuleNameNode) this.alias.clone(); return AstFactoryImpl.FACTORY.ImportModule(this.source, name, alias); } public ImportModule reconstruct(ModuleNameNode modname, ModuleNameNode alias) // Factor up { ScribDel del = del(); ImportModule im = new ImportModule(this.source, modname, alias); im = (ImportModule) im.del(del); return im; } @Override public ImportModule visitChildren(AstVisitor nv) throws ScribbleException { ModuleNameNode modname = (ModuleNameNode) visitChild(this.modname, nv); ModuleNameNode alias = (isAliased()) ? (ModuleNameNode) visitChild(this.alias, nv) : null; return reconstruct(modname, alias); } @Override public boolean isImportModule() { return true; } @Override public boolean isAliased() { return this.alias != null; } /*@Override public ModuleName getVisibleName() { return isAliased() ? getAlias() : this.modname.toName(); }*/ @Override public ModuleName getAlias() { return this.alias.toName(); } @Override public String toString() { String s = Constants.IMPORT_KW + " " + this.modname; if (isAliased()) { s += " " + Constants.AS_KW + " " + this.alias; } return s + ";"; } }