package jcircus.newutil; import java.util.List; import net.sourceforge.czt.circus.ast.Action1; import net.sourceforge.czt.circus.ast.Action2; import net.sourceforge.czt.circus.ast.AssignmentCommand; import net.sourceforge.czt.circus.ast.BasicAction; import net.sourceforge.czt.circus.ast.CallAction; import net.sourceforge.czt.circus.ast.CircusAction; import net.sourceforge.czt.circus.ast.CircusActionList; import net.sourceforge.czt.circus.ast.CircusCommand; import net.sourceforge.czt.circus.ast.ExtChoiceAction; import net.sourceforge.czt.circus.ast.GuardedAction; import net.sourceforge.czt.circus.ast.IfGuardedCommand; import net.sourceforge.czt.circus.ast.VarDeclCommand; import net.sourceforge.czt.circus.util.Factory; import net.sourceforge.czt.z.ast.Pred; public class ChoiceUtil { public static CircusAction replaceGuardsOnExtChoice (CircusAction action) { Factory f = new Factory (); FactoryUtil fu = new FactoryUtil (); if (action instanceof GuardedAction) { CircusAction resaction = ((GuardedAction)action).getCircusAction(); Pred respred = ((GuardedAction)action).getPred(); if (resaction instanceof ExtChoiceAction) { CircusAction left = fu.createCircusAction (replaceGuardsOnExtChoice(((ExtChoiceAction)resaction).getLeftAction())); CircusAction right = fu.createCircusAction (replaceGuardsOnExtChoice(((ExtChoiceAction)resaction).getRightAction())); GuardedAction gleft = f.createGuardedAction(); GuardedAction gright = f.createGuardedAction(); gleft.setPred(fu.createPred (respred)); gright.setPred(fu.createPred (respred)); gleft.setCircusAction(left); gright.setCircusAction(right); ExtChoiceAction eca = f.createExtChoiceAction (); eca.setLeftAction (gleft); eca.setRightAction (gright); return eca; } else { Pred pred = ((GuardedAction)action).getPred(); GuardedAction ga = f.createGuardedAction (); ga.setPred(fu.createPred(pred)); ga.setCircusAction(fu.createCircusAction (replaceGuardsOnExtChoice(resaction))); return ga; } } else if (action instanceof Action1) { CircusAction returnedAction = fu.createCircusAction(((Action1)action).getCircusAction()); ((Action1)action).setCircusAction(replaceGuardsOnExtChoice(returnedAction)); return action; } else if (action instanceof Action2) { ((Action2)action).setLeftAction(replaceGuardsOnExtChoice (fu.createCircusAction(((Action2)action).getLeftAction()))); ((Action2)action).setRightAction(replaceGuardsOnExtChoice (fu.createCircusAction(((Action2)action).getRightAction()))); return action; } else if (action instanceof CircusCommand) { if (action instanceof AssignmentCommand) { return action; } else if (action instanceof IfGuardedCommand) { CircusActionList cal = ((IfGuardedCommand)action).getGuardedActionList(); int size = cal.size(); for (int i = 0; i < size; i++) { GuardedAction ga = (GuardedAction)cal.get(i); ga.setCircusAction(replaceGuardsOnExtChoice (fu.createCircusAction(ga.getCircusAction()))); } return action; } else if (action instanceof VarDeclCommand) { ((VarDeclCommand)action).setCircusAction(replaceGuardsOnExtChoice(((VarDeclCommand)action).getCircusAction())); return action; } else { ExceptionUtil.throwImplementationException("ChoiceUtil.replaceGuardsOnExtChoice", action.getClass()); return action; } } else if (action instanceof BasicAction) { return action; } else if (action instanceof CallAction) { return action; } else { ExceptionUtil.throwImplementationException("ChoiceUtil.replaceGuardsOnExtChoice", action.getClass()); return action; } } }