package org.scribble.ast;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.name.qualified.MemberNameNode;
import org.scribble.main.ScribbleException;
import org.scribble.sesstype.kind.NonProtocolKind;
import org.scribble.sesstype.name.MemberName;
import org.scribble.visit.AstVisitor;
// Rename to something better
public abstract class NonProtocolDecl<K extends NonProtocolKind> extends NameDeclNode<K> implements ModuleMember
{
public final String schema;
public final String extName;
public final String extSource;
public NonProtocolDecl(CommonTree source, String schema, String extName, String extSource, MemberNameNode<K> name)
{
super(source, name);
this.schema = schema;
this.extName = extName;
this.extSource = extSource;
}
public abstract NonProtocolDecl<K> reconstruct(String schema, String extName, String source, MemberNameNode<K> name);
@Override
public NonProtocolDecl<K> visitChildren(AstVisitor nv) throws ScribbleException
{
MemberNameNode<K> name = (MemberNameNode<K>) visitChildWithClassEqualityCheck(this, this.name, nv);
return reconstruct(this.schema, this.extName, this.extSource, name);
}
// Maybe should be moved to ModuleMember
public boolean isDataTypeDecl()
{
return false;
}
public boolean isMessageSigNameDecl()
{
return false;
}
public MemberNameNode<K> getNameNode()
{
return (MemberNameNode<K>) this.name;
}
@Override
public MemberName<K> getDeclName()
{
return (MemberName<K>) super.getDeclName(); // Simple name -- not consistent with ModuleDecl
}
}