package org.scribble.del; import org.scribble.ast.CompoundInteractionNode; import org.scribble.ast.ScribNode; import org.scribble.main.ScribbleException; import org.scribble.visit.InlinedProtocolUnfolder; import org.scribble.visit.ProtocolDefInliner; import org.scribble.visit.context.UnguardedChoiceDoProjectionChecker; import org.scribble.visit.context.env.UnguardedChoiceDoEnv; import org.scribble.visit.env.UnfoldingEnv; import org.scribble.visit.wf.ExplicitCorrelationChecker; import org.scribble.visit.wf.WFChoiceChecker; import org.scribble.visit.wf.env.ExplicitCorrelationEnv; import org.scribble.visit.wf.env.WFChoiceEnv; public abstract class CompoundInteractionNodeDel extends CompoundInteractionDel implements InteractionNodeDel { public CompoundInteractionNodeDel() { } @Override public void enterProtocolInlining(ScribNode parent, ScribNode child, ProtocolDefInliner inl) throws ScribbleException { ScribDelBase.pushVisitorEnv(this, inl); } @Override public ScribNode leaveProtocolInlining(ScribNode parent, ScribNode child, ProtocolDefInliner inl, ScribNode visited) throws ScribbleException { return ScribDelBase.popAndSetVisitorEnv(this, inl, visited); } // Should only do for projections, but OK here (visitor only run on projections) @Override public ScribNode leaveUnguardedChoiceDoProjectionCheck(ScribNode parent, ScribNode child, UnguardedChoiceDoProjectionChecker checker, ScribNode visited) throws ScribbleException { // Override super routine (in CompoundInteractionDel, which just does base popAndSet) to do merging of child context into parent context UnguardedChoiceDoEnv visited_env = checker.popEnv(); // popAndSet current setEnv(visited_env); UnguardedChoiceDoEnv parent_env = checker.popEnv(); // pop-merge-push parent parent_env = parent_env.mergeContext(visited_env); checker.pushEnv(parent_env); return (CompoundInteractionNode<?>) visited; } @Override public ScribNode leaveInlinedProtocolUnfolding(ScribNode parent, ScribNode child, InlinedProtocolUnfolder unf, ScribNode visited) throws ScribbleException { // Override super routine (in CompoundInteractionDel, which just does base popAndSet) to do merging of child context into parent context // Need to further override for "multi-compound" nodes, e.g., ChoiceDel UnfoldingEnv visited_env = unf.popEnv(); // popAndSet current setEnv(visited_env); UnfoldingEnv parent_env = unf.popEnv(); // pop-merge-push parent parent_env = parent_env.mergeContext(visited_env); unf.pushEnv(parent_env); return (CompoundInteractionNode<?>) visited; } @Override public CompoundInteractionNode<?> leaveInlinedWFChoiceCheck(ScribNode parent, ScribNode child, WFChoiceChecker checker, ScribNode visited) throws ScribbleException { WFChoiceEnv visited_env = checker.popEnv(); // popAndSet current setEnv(visited_env); WFChoiceEnv parent_env = checker.popEnv(); // pop-merge-push parent parent_env = parent_env.mergeContext(visited_env); checker.pushEnv(parent_env); return (CompoundInteractionNode<?>) visited; } @Override public ScribNode leaveExplicitCorrelationCheck(ScribNode parent, ScribNode child, ExplicitCorrelationChecker checker, ScribNode visited) throws ScribbleException { // Override super routine (in CompoundInteractionDel, which just does base popAndSet) to do merging of child context into parent context // Need to further override for "multi-compound" nodes, e.g., ChoiceDel ExplicitCorrelationEnv visited_env = checker.popEnv(); // popAndSet current setEnv(visited_env); ExplicitCorrelationEnv parent_env = checker.popEnv(); // pop-merge-push parent parent_env = parent_env.mergeContext(visited_env); checker.pushEnv(parent_env); return (CompoundInteractionNode<?>) visited; } /*@Override public void enterWFChoicePathCheck(ScribNode parent, ScribNode child, WFChoicePathChecker coll) throws ScribbleException { WFChoicePathEnv env = coll.peekEnv().enterContext(); env = env.clear(); coll.pushEnv(env); }*/ /*@Override public CompoundInteractionNode<?> leaveWFChoicePathCheck(ScribNode parent, ScribNode child, WFChoicePathChecker coll, ScribNode visited) throws ScribbleException //public CompoundInteractionNode<?> leavePathCollection(ScribNode parent, ScribNode child, PathCollectionVisitor coll, ScribNode visited) throws ScribbleException { WFChoicePathEnv visited_env = coll.popEnv(); // popAndSet current setEnv(visited_env); WFChoicePathEnv parent_env = coll.popEnv(); // pop-merge-push parent parent_env = parent_env.mergeContext(visited_env); coll.pushEnv(parent_env); /*System.out.println("3: " + parent_env.getPaths().size()); System.out.println("4: " + parent_env.getPaths() + ""); System.out.println("4: " + visited + "\n");* / return (CompoundInteractionNode<?>) visited; }*/ }