package org.scribble.del.name; import org.scribble.ast.AstFactoryImpl; import org.scribble.ast.DataTypeDecl; import org.scribble.ast.ScribNode; import org.scribble.ast.context.ModuleContext; import org.scribble.ast.name.qualified.DataTypeNode; import org.scribble.del.ScribDelBase; import org.scribble.main.ScribbleException; import org.scribble.sesstype.kind.DataTypeKind; import org.scribble.sesstype.name.DataType; import org.scribble.visit.wf.NameDisambiguator; public class DataTypeNodeDel extends ScribDelBase { public DataTypeNodeDel() { } // Is this needed? Or DataTypeNodes always created from AmbigNameNode? (in this same pass) @Override public ScribNode leaveDisambiguation(ScribNode parent, ScribNode child, NameDisambiguator disamb, ScribNode visited) throws ScribbleException { if (parent instanceof DataTypeDecl) // Hacky? don't want to do for decl simplenames (generally, don't do if parent is namedeclnode) { return visited; } ModuleContext mc = disamb.getModuleContext(); DataTypeNode dtn = (DataTypeNode) visited; DataType dt = dtn.toName(); if (!mc.isVisibleDataType(dt)) { throw new ScribbleException(dtn.getSource(), "Data type not visible: " + dt); } DataType fullname = mc.getVisibleDataTypeFullName(dt); return (DataTypeNode) AstFactoryImpl.FACTORY.QualifiedNameNode(dtn.getSource(), DataTypeKind.KIND, fullname.getElements()); // Didn't keep original del } }