package org.scribble.del;
import java.util.List;
import java.util.stream.Collectors;
import org.scribble.ast.Choice;
import org.scribble.ast.ScribNode;
import org.scribble.main.ScribbleException;
import org.scribble.visit.InlinedProtocolUnfolder;
import org.scribble.visit.env.UnfoldingEnv;
import org.scribble.visit.wf.ExplicitCorrelationChecker;
import org.scribble.visit.wf.env.ExplicitCorrelationEnv;
public abstract class ChoiceDel extends CompoundInteractionNodeDel
{
public ChoiceDel()
{
}
@Override
public void enterInlinedProtocolUnfolding(ScribNode parent, ScribNode child, InlinedProtocolUnfolder unf) throws ScribbleException
{
UnfoldingEnv env = unf.peekEnv().enterContext();
env = env.pushChoiceParent(); // Above is already a copy, but fine
unf.pushEnv(env);
}
@Override
public Choice<?> leaveInlinedProtocolUnfolding(ScribNode parent, ScribNode child, InlinedProtocolUnfolder unf, ScribNode visited) throws ScribbleException
{
Choice<?> cho = (Choice<?>) visited;
List<UnfoldingEnv> benvs =
cho.getBlocks().stream().map((b) -> (UnfoldingEnv) b.del().env()).collect(Collectors.toList());
UnfoldingEnv merged = unf.popEnv().mergeContexts(benvs);
unf.pushEnv(merged);
return (Choice<?>) super.leaveInlinedProtocolUnfolding(parent, child, unf, visited); // Done merge of children here, super does merge into parent
}
@Override
public void enterExplicitCorrelationCheck(ScribNode parent, ScribNode child, ExplicitCorrelationChecker checker) throws ScribbleException
{
ExplicitCorrelationEnv env = checker.peekEnv().enterContext();
checker.pushEnv(env);
}
@Override
public Choice<?> leaveExplicitCorrelationCheck(ScribNode parent, ScribNode child, ExplicitCorrelationChecker checker, ScribNode visited) throws ScribbleException
{
Choice<?> cho = (Choice<?>) visited;
List<ExplicitCorrelationEnv> benvs =
cho.getBlocks().stream().map((b) -> (ExplicitCorrelationEnv) b.del().env()).collect(Collectors.toList());
ExplicitCorrelationEnv merged = checker.popEnv().mergeContexts(benvs);
checker.pushEnv(merged);
return (Choice<?>) super.leaveExplicitCorrelationCheck(parent, child, checker, visited); // Done merge of children here, super does merge into parent
}
}