package org.scribble.ast;
import java.util.List;
import java.util.stream.Collectors;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.del.ScribDel;
import org.scribble.sesstype.Arg;
import org.scribble.sesstype.kind.NonRoleArgKind;
import org.scribble.sesstype.name.Role;
import org.scribble.util.ScribUtil;
// Cf. NonRoleParamDeclList
public class NonRoleArgList extends DoArgList<NonRoleArg>
{
public NonRoleArgList(CommonTree source, List<NonRoleArg> args)
{
super(source, args);
}
@Override
protected ScribNodeBase copy()
{
return new NonRoleArgList(this.source, getDoArgs());
}
@Override
public NonRoleArgList clone()
{
List<NonRoleArg> args = ScribUtil.cloneList(getDoArgs());
return AstFactoryImpl.FACTORY.NonRoleArgList(this.source, args);
}
@Override
public DoArgList<NonRoleArg> reconstruct(List<NonRoleArg> instans)
{
ScribDel del = del();
NonRoleArgList ail = new NonRoleArgList(this.source, instans);
ail = (NonRoleArgList) ail.del(del);
return ail;
}
@Override
public NonRoleArgList project(Role self)
{
List<NonRoleArg> instans =
getDoArgs().stream().map((ai) -> ai.project(self)).collect(Collectors.toList());
return AstFactoryImpl.FACTORY.NonRoleArgList(this.source, instans);
}
public boolean isEmpty()
{
return getDoArgs().isEmpty();
}
public List<NonRoleArgNode> getArgumentNodes()
{
return getDoArgs().stream().map((ai) -> ai.val).collect(Collectors.toList());
}
public List<Arg<? extends NonRoleArgKind>> getArguments()
{
return getDoArgs().stream().map((ai) -> ai.val.toArg()).collect(Collectors.toList());
}
@Override
public String toString()
{
return (getDoArgs().isEmpty())
? ""
: "<" + super.toString() + ">";
}
}