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.ActionList; 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.GuardedAction; import net.sourceforge.czt.circus.ast.IfGuardedCommand; import net.sourceforge.czt.circus.ast.MuAction; import net.sourceforge.czt.circus.ast.PrefixingAction; import net.sourceforge.czt.circus.ast.VarDeclCommand; import jcircus.environment.NameTypeEnv; public class MuUtil { public static NameTypeEnv searchNameTypeEnvAnnForMu (String callname, CircusAction action) { if (action instanceof Action2) { CircusAction left = ((Action2)action).getLeftAction(); CircusAction right = ((Action2)action).getRightAction(); NameTypeEnv nteleft = searchNameTypeEnvAnnForMu (callname, left); NameTypeEnv nteright = searchNameTypeEnvAnnForMu (callname, right); nteleft.putAll(nteright); return nteleft; } else if (action instanceof MuAction) { String muname = ((MuAction)action).getZName().toString(); if (muname.equals (callname)) { return action.getAnn(NameTypeEnv.class); } else { return searchNameTypeEnvAnnForMu (callname, ((MuAction)action).getCircusAction()); } } else if (action instanceof PrefixingAction) { return searchNameTypeEnvAnnForMu (callname, ((PrefixingAction)action).getCircusAction()); } else if (action instanceof Action1) { return searchNameTypeEnvAnnForMu (callname, ((Action1)action).getCircusAction()); } else if (action instanceof AssignmentCommand) { return new NameTypeEnv (); } else if (action instanceof IfGuardedCommand) { CircusActionList actions = ((IfGuardedCommand)action).getGuardedActionList(); NameTypeEnv nte = new NameTypeEnv (); int size = actions.size(); for (int i = 0; i < size; i++) { GuardedAction ga = (GuardedAction) actions.get(i); if (nte.iteratorSize() == 0) nte = searchNameTypeEnvAnnForMu (callname, ga); } return nte; } else if (action instanceof VarDeclCommand) { return searchNameTypeEnvAnnForMu (callname, ((VarDeclCommand)action).getCircusAction()); } else if (action instanceof CallAction) { return new NameTypeEnv (); } else if (action instanceof BasicAction) { return new NameTypeEnv (); } else { ExceptionUtil.throwImplementationException("MuUtil.searchNameTypeEnvAnnForMu", action.getClass()); return new NameTypeEnv (); } } }