package org.scribble.ast;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.name.simple.RoleNode;
import org.scribble.ast.name.simple.SimpleNameNode;
import org.scribble.del.ScribDel;
import org.scribble.sesstype.kind.RoleKind;
import org.scribble.sesstype.name.Name;
import org.scribble.sesstype.name.Role;
public class RoleDecl extends HeaderParamDecl<RoleKind>
{
public RoleDecl(CommonTree source, RoleNode name)
{
super(source, name);
}
@Override
protected RoleDecl copy()
{
return new RoleDecl(this.source, (RoleNode) this.name);
}
@Override
public RoleDecl clone()
{
RoleNode role = (RoleNode) this.name.clone();
return AstFactoryImpl.FACTORY.RoleDecl(this.source, role);
}
@Override
public RoleDecl reconstruct(SimpleNameNode<RoleKind> name)
{
ScribDel del = del();
RoleDecl rd = new RoleDecl(this.source, (RoleNode) name);
rd = (RoleDecl) rd.del(del);
return rd;
}
@Override
public RoleDecl project(Role self)
{
Name<RoleKind> role = this.name.toName();
RoleNode rn = (RoleNode) AstFactoryImpl.FACTORY.SimpleNameNode(this.name.source, RoleKind.KIND, role.toString());
if (role.equals(self))
{
return AstFactoryImpl.FACTORY.SelfRoleDecl(this.name.source, rn);
}
return AstFactoryImpl.FACTORY.RoleDecl(this.source, rn);
}
@Override
public Role getDeclName()
{
return (Role) super.getDeclName();
}
public boolean isSelfRoleDecl()
{
return false;
}
@Override
public String getKeyword()
{
return Constants.ROLE_KW;
}
}