package org.scribble.ast.global;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.AstFactoryImpl;
import org.scribble.ast.Do;
import org.scribble.ast.NonRoleArgList;
import org.scribble.ast.RoleArgList;
import org.scribble.ast.ScribNodeBase;
import org.scribble.ast.context.ModuleContext;
import org.scribble.ast.local.LDo;
import org.scribble.ast.name.qualified.GProtocolNameNode;
import org.scribble.ast.name.qualified.LProtocolNameNode;
import org.scribble.ast.name.qualified.ProtocolNameNode;
import org.scribble.del.ScribDel;
import org.scribble.main.JobContext;
import org.scribble.sesstype.kind.Global;
import org.scribble.sesstype.name.GProtocolName;
import org.scribble.sesstype.name.Role;
public class GDo extends Do<Global> implements GSimpleInteractionNode
{
public GDo(CommonTree source, RoleArgList roles, NonRoleArgList args, GProtocolNameNode proto)
{
super(source, roles, args, proto);
}
public LDo project(Role self, LProtocolNameNode fullname)
{
RoleArgList roleinstans = this.roles.project(self);
NonRoleArgList arginstans = this.args.project(self);
LDo projection = AstFactoryImpl.FACTORY.LDo(this.source, roleinstans, arginstans, fullname);
return projection;
}
@Override
protected ScribNodeBase copy()
{
return new GDo(this.source, this.roles, this.args, getProtocolNameNode());
}
@Override
public GDo clone()
{
RoleArgList roles = this.roles.clone();
NonRoleArgList args = this.args.clone();
GProtocolNameNode proto = this.getProtocolNameNode().clone();
return AstFactoryImpl.FACTORY.GDo(this.source, roles, args, proto);
}
@Override
public GDo reconstruct(RoleArgList roles, NonRoleArgList args, ProtocolNameNode<Global> proto)
{
ScribDel del = del();
GDo gd = new GDo(this.source, roles, args, (GProtocolNameNode) proto);
gd = (GDo) gd.del(del);
return gd;
}
@Override
public GProtocolNameNode getProtocolNameNode()
{
return (GProtocolNameNode) this.proto;
}
@Override
public GProtocolName getTargetProtocolDeclFullName(ModuleContext mcontext)
{
return (GProtocolName) super.getTargetProtocolDeclFullName(mcontext);
}
@Override
public GProtocolDecl getTargetProtocolDecl(JobContext jcontext, ModuleContext mcontext)
{
return (GProtocolDecl) super.getTargetProtocolDecl(jcontext, mcontext);
}
// FIXME: shouldn't be needed, but here due to Eclipse bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=436350
@Override
public Global getKind()
{
return GSimpleInteractionNode.super.getKind();
}
}