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

64 lines
2.3 KiB
Java

package _VisualDVM.Passes.All;
import _VisualDVM.Global;
import _VisualDVM.Passes.Sapfor.SilentSapforPass;
import _VisualDVM.ProjectData.SapforData.Arrays.ProjectArray;
public class SPF_GetArrayLinks extends SilentSapforPass {
@Override
protected void body() throws Exception {
sapfor.RunAnalysis(
getSapforPassName(),
-Global.messagesServer.getPort(),
target.sapforProperties.pack(),
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());
}
}
@Override
public boolean needsConfirmations() {
return false;
}
}