package _VisualDVM.ProjectData.SapforData.Loops; import Common.Visual.Fonts.VisualiserFonts; import _VisualDVM.ProjectData.Messages.Message; import _VisualDVM.ProjectData.SapforData.FileObject; import _VisualDVM.ProjectData.SapforData.FileObjectWithMessages; import _VisualDVM.ProjectData.SapforData.Functions.FuncCall; import com.google.gson.annotations.Expose; import java.util.LinkedHashMap; import java.util.List; import java.util.Vector; public class Loop extends FileObjectWithMessages { @Expose private int lineNumAfterLoop; @Expose private int perfectLoop; @Expose private int hasNonRectangularBounds; @Expose private int loopState; public LoopState getLoopState(){ switch (loopState){ case 1: return LoopState.GoodLoop; case 2: return LoopState.BadLoop; default: return LoopState.Loop; } } //--- @Expose public List funcCalls = new Vector<>(); // @Expose // public List non_rect_iters = new Vector<>(); @Expose public List extGotos = new Vector<>(); @Expose public List intGotos = new Vector<>(); @Expose public List ios = new Vector<>(); @Expose public List stops = new Vector<>(); @Expose public List children = new Vector<>(); //-- public List getAllChildren(){ List all_children = new Vector<>(); all_children.addAll(funcCalls); // all_children.addAll(non_rect_iters); all_children.addAll(extGotos); all_children.addAll(intGotos); all_children.addAll(ios); all_children.addAll(stops); all_children.addAll(children); return all_children; } @Override public String TypeKey() { return getLoopState().toString(); } @Override public String Description() { return "цикл"; } @Override public boolean HasMessage(Message message) { return (message.line >= line) && (message.line < lineNumAfterLoop); } @Override public String toString() { return super.toString() + ((perfectLoop > 1) ? (" тесная вложенность " + perfectLoop) : ""); } @Override public VisualiserFonts getFont() { return getLoopState().getFont(); } public void toMap_r(LinkedHashMap loops_map){ loops_map.put(line, this); for (Loop loop: children) loop.toMap_r(loops_map); } @Override public void setFile(String file_in) { super.setFile(file_in); for (FileObject fileObject: getAllChildren()) fileObject.setFile(file_in); } }