package org.scribble.ast.local; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.antlr.runtime.tree.CommonTree; import org.scribble.ast.AstFactoryImpl; import org.scribble.ast.InteractionNode; import org.scribble.ast.InteractionSeq; import org.scribble.ast.ScribNodeBase; import org.scribble.del.ScribDel; import org.scribble.sesstype.Message; import org.scribble.sesstype.kind.Local; import org.scribble.util.ScribUtil; public class LInteractionSeq extends InteractionSeq<Local> implements LNode { public LInteractionSeq(CommonTree source, List<LInteractionNode> lis) { super(source, lis); } @Override protected ScribNodeBase copy() { return new LInteractionSeq(this.source, getInteractions()); } @Override public LInteractionSeq clone() { List<LInteractionNode> lis = ScribUtil.cloneList(getInteractions()); return AstFactoryImpl.FACTORY.LInteractionSeq(this.source, lis); } @Override public LInteractionSeq reconstruct(List<? extends InteractionNode<Local>> actions) { ScribDel del = del(); LInteractionSeq lis = new LInteractionSeq(this.source, castNodes(actions)); lis = (LInteractionSeq) lis.del(del); return lis; } @Override public List<LInteractionNode> getInteractions() { return castNodes(super.getInteractions()); } @Override public boolean isLocal() { return true; } private static List<LInteractionNode> castNodes(List<? extends InteractionNode<Local>> nodes) { return nodes.stream().map((n) -> (LInteractionNode) n).collect(Collectors.toList()); } // 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(); } public Set<Message> getEnabling() { if (!this.isEmpty()) { for (LInteractionNode ln : getInteractions()) { Set<Message> enab = ln.getEnabling(); if (!enab.isEmpty()) { return enab; } } } return Collections.emptySet(); } }