package _VisualDVM.ProjectData.SapforData.Loops; import Common.Visual.Fonts.VisualiserFonts; import _VisualDVM.ProjectData.Files.DBProjectFile; import _VisualDVM.ProjectData.Messages.Message; 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 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 funcCalls = new Vector<>(); @Expose public List children = new Vector<>(); @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; } } //-- public List getGraphNodes(DBProjectFile dbProjectFile) { List all_children = new Vector<>(); //- if (hasNonRectangularBounds != 0) all_children.add(new NonRectIter(dbProjectFile, line)); //- all_children.addAll(funcCalls); //- for (int line_ : extGotos) all_children.add(new EGoto(dbProjectFile, line_)); for (int line_ : intGotos) all_children.add(new IGoto(dbProjectFile, line_)); for (int line_ : ios) all_children.add(new IO(dbProjectFile, line_)); for (int line_ : stops) all_children.add(new Stop(dbProjectFile, line_)); //- for (FileObjectWithMessages fileObjectWithMessages : all_children) { fileObjectWithMessages.CheckMessagesPresence(); } 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) { CheckMessagesPresence(); 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 (FuncCall funcCall : funcCalls) funcCall.setFile(file_in); for (Loop child : children) child.setFile(file_in); } }