Files
VisualSapfor/src/Visual_DVM_2021/Passes/All/SPF_GetArrayLinks.java

60 lines
2.2 KiB
Java
Raw Normal View History

package Visual_DVM_2021.Passes.All;
2023-09-17 22:13:42 +03:00
import Common.Global;
import ProjectData.SapforData.Arrays.ProjectArray;
import Visual_DVM_2021.Passes.SilentSapforPass;
2023-09-17 22:13:42 +03:00
public class SPF_GetArrayLinks extends SilentSapforPass {
@Override
protected void body() throws Exception {
sapfor.RunAnalysis(
getSapforPassName(),
-Global.messagesServer.getPort(),
Global.packSapforSettings(),
target.getProjFile().getAbsolutePath());
}
protected void unpack(String packed) throws Exception {
//----------------------------------------
/*
map<DIST::Array*, set<DIST::Array*» arrayLinksByFuncCalls;как
id_1|number_1|link_id1|link_id2|link_id3|id_2|number_2|link_id1|link_id2|link_id3
*/
//эту инфу суем в список объявленных массивов, чтобы не плодить лишних таблиц.
String[] data = packed.split("\\|");
long current_id;
int links_size = 0;
ProjectArray current_array = null;
int j = 0;
for (int i = 0; i < data.length; ++i) {
switch (j) {
case 0:
current_id = Long.parseLong(data[i]);
current_array =
target.declaratedArrays.get(current_id);
current_array.links.clear();
j++;
break;
case 1:
links_size = Integer.parseInt(data[i]);
j++;
break;
default:
if (links_size > 0) {
long link_id = Long.parseLong(data[i]);
current_array.links.put(link_id, target.declaratedArrays.get(link_id));
links_size--;
}
if (links_size == 0) {
j = 0;
current_array = null;
}
break;
}
}
}
@Override
protected void performDone() throws Exception {
if (!sapfor.getResult().isEmpty()) {
unpack(sapfor.getResult());
}
}
}