package org.scribble.ast.local;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.AstFactoryImpl;
import org.scribble.ast.Constants;
import org.scribble.ast.NameDeclNode;
import org.scribble.ast.NonRoleParamDeclList;
import org.scribble.ast.ProtocolHeader;
import org.scribble.ast.RoleDecl;
import org.scribble.ast.RoleDeclList;
import org.scribble.ast.ScribNodeBase;
import org.scribble.ast.name.qualified.LProtocolNameNode;
import org.scribble.ast.name.qualified.ProtocolNameNode;
import org.scribble.del.ScribDel;
import org.scribble.sesstype.kind.Local;
import org.scribble.sesstype.kind.RoleKind;
import org.scribble.sesstype.name.LProtocolName;
import org.scribble.sesstype.name.Role;
public class LProtocolHeader extends ProtocolHeader<Local> implements LNode
{
public LProtocolHeader(CommonTree source, LProtocolNameNode name, RoleDeclList roledecls, NonRoleParamDeclList paramdecls)
{
super(source, name, roledecls, paramdecls);
}
@Override
protected ScribNodeBase copy()
{
return new LProtocolHeader(this.source, getNameNode(), this.roledecls, this.paramdecls);
}
@Override
public LProtocolHeader clone()
{
LProtocolNameNode name = getNameNode().clone();
RoleDeclList roledecls = this.roledecls.clone();
NonRoleParamDeclList paramdecls = this.paramdecls.clone();
return AstFactoryImpl.FACTORY.LProtocolHeader(this.source, name, roledecls, paramdecls);
}
@Override
public LProtocolHeader reconstruct(ProtocolNameNode<Local> name, RoleDeclList rdl, NonRoleParamDeclList pdl)
{
ScribDel del = del();
LProtocolHeader gph = new LProtocolHeader(this.source, (LProtocolNameNode) name, rdl, pdl);
gph = (LProtocolHeader) gph.del(del);
return gph;
}
public Role getSelfRole()
{
for (NameDeclNode<RoleKind> rd : this.roledecls.getDecls())
{
RoleDecl tmp = (RoleDecl) rd;
if (tmp.isSelfRoleDecl())
{
return tmp.getDeclName();
}
}
throw new RuntimeException("Shouldn't get here: " + this.roledecls);
}
@Override
public LProtocolNameNode getNameNode()
{
return (LProtocolNameNode) this.name;
}
@Override
public LProtocolName getDeclName()
{
return (LProtocolName) super.getDeclName();
}
// FIXME: shouldn't be needed, but here due to Eclipse bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=436350
@Override
public Local getKind()
{
return LNode.super.getKind();
}
@Override
public String toString()
{
return Constants.LOCAL_KW + " " + super.toString();
}
}