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

126 lines
5.7 KiB
Java

package _VisualDVM.Passes.All;
import Common.Utils.Utils_;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Passes.Sapfor.SapforAnalysis;
import _VisualDVM.ProjectData.Files.DBProjectFile;
import _VisualDVM.ProjectData.Files.FileType;
import _VisualDVM.ProjectData.Files.LanguageStyle;
import _VisualDVM.ProjectData.LanguageName;
import _VisualDVM.ProjectData.SapforData.Includes.FileInfo;
import _VisualDVM.ProjectData.SapforData.Includes.Include;
import _VisualDVM.ProjectData.SapforData.Includes.Json.FileIncludesJson;
import _VisualDVM.ProjectData.SapforData.Includes.Json.IncludesJson;
import javax.swing.tree.DefaultMutableTreeNode;
public class SPF_GetIncludeDependencies extends SapforAnalysis {
boolean update_current = false;
@Override
protected PassCode necessary() {
return PassCode.SPF_ParseFilesWithOrder;
}
@Override
public String phase() {
return "BUILD_INCLUDE_DEPENDENCIES";
}
@Override
protected void performPreparation() throws Exception {
super.performPreparation(); //удаление интеррупта.
target.numAddicted = 0;
target.addictedFiles.clear();
target.includes_root.removeAllChildren();
target.allIncludes.clear();
for (DBProjectFile file : target.db.files.Data.values())
file.dependencies.clear();
}
@Override
public void unpack(String packed) throws Exception {
/*
IncludesJson includesJson = Utils_.gson.fromJson(packed, IncludesJson.class);
System.out.println("packed="+packed);
for (FileIncludesJson fileIncludesJson : includesJson.allIncludes) {
String file_name = Utils_.toW(fileIncludesJson.file);
DBProjectFile dbProjectFile = target.db.files.get(file_name);
for (Include include : fileIncludesJson.includes)
dbProjectFile.dependencies.add(include.dependencyFileName);
}
*/
//--
update_current = false;
FileInfo fileInfo = null;
String[] data_ = packed.split("@");
for (int i = 0; i < data_.length; ++i) {
String s = Utils_.toW(data_[i]);
if (i % 2 == 0) {
if (target.db.files.Data.containsKey(s)) {
fileInfo = new FileInfo(s);
} else fileInfo = null;
} else {
if ((fileInfo != null) && (s != "")) {
String[] data__ = s.split("\\|");
for (int j = 0; j < data__.length; ++j) {
if (data__[j].length() > 0) {
fileInfo.dependencies.add(
new Include(fileInfo.file, data__[j]));
//-------------------------------------
if (!target.addictedFiles.containsKey(fileInfo.file))
target.addictedFiles.put(fileInfo.file, fileInfo);
//-------------------------------------
String include_name = data__[j];
if (target.db.files.containsKey(include_name)) {
DBProjectFile d_file = target.db.files.Data.get(include_name);
//----------------->>
if (!target.allIncludes.containsKey(d_file.name))
target.allIncludes.put(d_file.name, d_file);
//----------------->>
//--
DBProjectFile father = target.db.files.Data.get(fileInfo.file);
if (!father.dependencies.contains(include_name))
father.dependencies.add(include_name);
//--
d_file.UpdateType(FileType.header);
if (d_file.languageName == LanguageName.n)
d_file.UpdateLanguage(father.languageName);
if (d_file.style == LanguageStyle.none)
d_file.UpdateStyle(father.style);
//----------------------------------------
if (Global.mainModule.HasFile() && Global.mainModule.getFile().name.equals(d_file.name))
update_current = true;
//-----------------------------------------
}
}
}
}
fileInfo = null;
}
}
//-теперь строим граф
for (FileInfo file : target.addictedFiles.values()) {
DefaultMutableTreeNode node = new DefaultMutableTreeNode(
file);
for (Include h : file.dependencies) {
node.add(new DefaultMutableTreeNode(h));
}
target.includes_root.add(node);
}
target.numAddicted += target.addictedFiles.size();
target.UpdateAddictedCount();
}
@Override
protected void showDone() throws Exception {
Global.mainModule.getUI().getMainWindow().getProjectWindow().ShowIncludes();
if (update_current)
Global.mainModule.getFile().form.ShowProperties();
super.showDone();
}
@Override
protected void showPreparation() {
Global.mainModule.getUI().getMainWindow().getProjectWindow().ShowNoIncludes();
}
@Override
protected void FocusResult() {
super.FocusResult();
Global.mainModule.getUI().getMainWindow().getProjectWindow().FocusDependencies();
}
}