no message

This commit is contained in:
2024-10-09 22:21:57 +03:00
parent 54c80c516b
commit 6252af944e
699 changed files with 2634 additions and 1997 deletions

View File

@@ -0,0 +1,103 @@
package _VisualDVM.ProjectData.SapforData.Loops;
import Common.Visual.Fonts.VisualiserFonts;
import Common.Utils.Index;
import _VisualDVM.ProjectData.Files.DBProjectFile;
import _VisualDVM.ProjectData.Messages.Message;
import _VisualDVM.ProjectData.SapforData.FileObjectWithMessages;
import _VisualDVM.ProjectData.SapforData.Functions.FuncCall;
import java.util.Vector;
public class Loop extends FileObjectWithMessages {
private final int lineNumAfterLoop;
private final int perfectLoop;
private final boolean hasOutGoto;
private final boolean hasPrints;
private final boolean hasNonRectIters;
//
private final int childCount;
public LoopState loopState;
public Vector<FileObjectWithMessages> children = new Vector<>();
public Loop(String[] packedLoopInfo, Index idx, DBProjectFile father_in) {
file = father_in.name;
int calls = Integer.parseInt(packedLoopInfo[idx.Inc()]);
for (int k = 0; k < calls; ++k) {
String c_name = packedLoopInfo[idx.Inc()];
int c_line = Integer.parseInt(packedLoopInfo[idx.Inc()]);
children.add(new FuncCall(father_in, c_name, c_line));
}
line = Integer.parseInt(packedLoopInfo[idx.Inc()]);
lineNumAfterLoop = Integer.parseInt(packedLoopInfo[idx.Inc()]);
perfectLoop = Integer.parseInt(packedLoopInfo[idx.Inc()]);
hasOutGoto = (Integer.parseInt(packedLoopInfo[idx.Inc()]) == 1);
hasPrints = (Integer.parseInt(packedLoopInfo[idx.Inc()]) == 1);
childCount = Integer.parseInt(packedLoopInfo[idx.Inc()]);
int state = Integer.parseInt(packedLoopInfo[idx.Inc()]);
switch (state) {
case 1:
loopState = LoopState.GoodLoop;
break;
case 2:
loopState = LoopState.BadLoop;
break;
default:
loopState = LoopState.Loop;
break;
}
hasNonRectIters = (Integer.parseInt(packedLoopInfo[idx.Inc()]) == 1);
if (hasNonRectIters)
children.add(new NonRectIter(father_in, line));
////-------------------------------------------------------------------------------
// число внешних переходов
int e_gotos = Integer.parseInt(packedLoopInfo[idx.Inc()]);
for (int k = 0; k < e_gotos; ++k) {
int c_line = Integer.parseInt(packedLoopInfo[idx.Inc()]);
children.add(new EGoto(father_in, c_line));
}
//число внутренних переходов
int i_gotos = Integer.parseInt(packedLoopInfo[idx.Inc()]);
for (int k = 0; k < i_gotos; ++k) {
int c_line = Integer.parseInt(packedLoopInfo[idx.Inc()]);
children.add(new IGoto(father_in, c_line));
}
//число операторов печати
int IO = Integer.parseInt(packedLoopInfo[idx.Inc()]);
for (int k = 0; k < IO; ++k) {
int c_line = Integer.parseInt(packedLoopInfo[idx.Inc()]);
children.add(new IO(father_in, c_line));
}
//число операторов останова (STOPб PAUSE)
int stop = Integer.parseInt(packedLoopInfo[idx.Inc()]);
for (int k = 0; k < stop; ++k) {
int c_line = Integer.parseInt(packedLoopInfo[idx.Inc()]);
children.add(new Stop(father_in, c_line));
}
//--------------------------------------------------------------------------------
for (int i = 0; i < childCount; ++i) {
Loop nextChild = new Loop(packedLoopInfo, idx, father_in);
children.add(nextChild);
}
father_in.AllLoops.put(line, this);
//нельзя использовать конструктор с параметрами из за особеностей распаковки.
CheckMessagesPresence();
}
@Override
public String TypeKey() {
return loopState.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 loopState.getFont();
}
}