package org.scribble.parser.ast.global;
import java.util.LinkedList;
import java.util.List;
import org.antlr.runtime.tree.CommonTree;
import org.scribble.ast.AstFactoryImpl;
import org.scribble.ast.global.GChoice;
import org.scribble.ast.global.GProtocolBlock;
import org.scribble.ast.name.simple.RoleNode;
import org.scribble.parser.ScribParser;
import org.scribble.parser.ast.name.AntlrSimpleName;
import org.scribble.parser.util.ScribParserUtil;
import org.scribble.util.ScribParserException;
public class AntlrGChoice
{
public static final int SUBJECT_CHILD_INDEX = 0;
public static final int BLOCK_CHILDREN_START_INDEX = 1;
public static GChoice parseGChoice(ScribParser parser, CommonTree ct) throws ScribParserException
{
RoleNode subj = AntlrSimpleName.toRoleNode(getSubjectChild(ct));
/*List<GProtocolBlock> blocks =
getBlockChildren(ct).stream().map((b) -> (GProtocolBlock) parser.parse(b)).collect(Collectors.toList());*/
List<GProtocolBlock> blocks = new LinkedList<>();
for (CommonTree b : getBlockChildren(ct))
{
blocks.add((GProtocolBlock) parser.parse(b));
}
return AstFactoryImpl.FACTORY.GChoice(ct, subj, blocks);
}
public static CommonTree getSubjectChild(CommonTree ct)
{
return (CommonTree) ct.getChild(SUBJECT_CHILD_INDEX);
}
public static List<CommonTree> getBlockChildren(CommonTree ct)
{
List<?> children = ct.getChildren();
return ScribParserUtil.toCommonTreeList(children.subList(BLOCK_CHILDREN_START_INDEX, children.size()));
}
}