2025-01-13 22:41:11 +03:00
|
|
|
package _VisualDVM.ProjectData.SapforData;
|
2025-01-16 02:26:51 +03:00
|
|
|
import Common.Properties;
|
2025-01-16 19:04:46 +03:00
|
|
|
import Common.Utils.Utils_;
|
2025-01-16 02:26:51 +03:00
|
|
|
import Common.Utils.Vector_;
|
|
|
|
|
import _VisualDVM.Global;
|
|
|
|
|
import _VisualDVM.Passes.PassCode;
|
2025-01-16 19:04:46 +03:00
|
|
|
import _VisualDVM.Repository.BugReport.Json.VisualiserSettingJson;
|
|
|
|
|
import _VisualDVM.Repository.BugReport.Json.VisualiserSettingsJson;
|
2025-01-16 02:26:51 +03:00
|
|
|
import com.google.gson.annotations.Expose;
|
|
|
|
|
|
|
|
|
|
import javax.swing.*;
|
|
|
|
|
import java.io.File;
|
2025-01-16 19:04:46 +03:00
|
|
|
import java.lang.reflect.Field;
|
2025-01-16 02:26:51 +03:00
|
|
|
import java.util.Vector;
|
|
|
|
|
public class SapforProperties extends Properties {
|
2025-01-13 22:41:11 +03:00
|
|
|
//побочные настройки визулизатора
|
2025-01-16 02:26:51 +03:00
|
|
|
@Expose
|
|
|
|
|
public boolean Precompilation = true;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean SaveModifications = true; // сохранять исходную версию
|
|
|
|
|
@Expose
|
|
|
|
|
public int GCOVLimit = 10;
|
|
|
|
|
@Expose
|
|
|
|
|
public String DVMConvertationOptions = " ";
|
2025-01-13 22:41:11 +03:00
|
|
|
//настройки для компонента SAPFOR
|
2025-01-16 02:26:51 +03:00
|
|
|
@Expose
|
|
|
|
|
public boolean STATIC_SHADOW_ANALYSIS = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean STATIC_PRIVATE_ANALYSIS = true;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean FREE_FORM = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean KEEP_DVM_DIRECTIVES = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean KEEP_SPF_DIRECTIVES = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean PARALLELIZE_FREE_LOOPS = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public int MAX_SHADOW_WIDTH = 50;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean OUTPUT_UPPER = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean TRANSLATE_MESSAGES = true;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean KEEP_LOOPS_CLOSE_NESTING = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean KEEP_GCOV = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public String ANALYSIS_OPTIONS = " ";
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean DEBUG_PRINT_ON = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean MPI_PROGRAM = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean IGNORE_IO_SAPFOR = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean KEEP_SPF_DIRECTIVES_AMONG_TRANSFORMATIONS = false;
|
|
|
|
|
@Expose
|
|
|
|
|
public boolean PARSE_FOR_INLINE = false;
|
|
|
|
|
public String pack() {
|
|
|
|
|
Vector<String> res = new Vector_<String>(
|
|
|
|
|
STATIC_SHADOW_ANALYSIS ? "1" : "0",
|
|
|
|
|
STATIC_PRIVATE_ANALYSIS ? "1" : "0",
|
|
|
|
|
FREE_FORM ? "1" : "0",
|
|
|
|
|
KEEP_DVM_DIRECTIVES ? "1" : "0",
|
|
|
|
|
KEEP_SPF_DIRECTIVES ? "1" : "0",
|
|
|
|
|
PARALLELIZE_FREE_LOOPS ? "1" : "0",
|
|
|
|
|
String.valueOf(MAX_SHADOW_WIDTH),
|
|
|
|
|
OUTPUT_UPPER ? "1" : "0",
|
|
|
|
|
TRANSLATE_MESSAGES ? "1" : "0",
|
|
|
|
|
KEEP_LOOPS_CLOSE_NESTING ? "1" : "0",
|
|
|
|
|
KEEP_GCOV ? "1" : "0",
|
|
|
|
|
ANALYSIS_OPTIONS,
|
|
|
|
|
DEBUG_PRINT_ON ? "1" : "0",
|
|
|
|
|
MPI_PROGRAM ? "1" : "0",
|
|
|
|
|
IGNORE_IO_SAPFOR ? "1" : "0",
|
|
|
|
|
KEEP_SPF_DIRECTIVES_AMONG_TRANSFORMATIONS ? "1" : "0",
|
|
|
|
|
PARSE_FOR_INLINE ? "1" : "0"
|
|
|
|
|
);
|
|
|
|
|
return String.join("|", res);
|
|
|
|
|
}
|
|
|
|
|
//-
|
|
|
|
|
public SapforProperties(File file_in) {
|
|
|
|
|
super(file_in);
|
|
|
|
|
}
|
|
|
|
|
public SapforProperties() {
|
|
|
|
|
}
|
|
|
|
|
public SapforProperties(SapforProperties src) {
|
|
|
|
|
this.Precompilation = src.Precompilation;
|
|
|
|
|
this.SaveModifications = src.SaveModifications; // сохранять исходную версию
|
|
|
|
|
this.GCOVLimit = src.GCOVLimit;
|
|
|
|
|
this.DVMConvertationOptions = src.DVMConvertationOptions;
|
|
|
|
|
//настройки для компонента SAPFOR
|
|
|
|
|
this.STATIC_SHADOW_ANALYSIS = src.STATIC_SHADOW_ANALYSIS;
|
|
|
|
|
this.STATIC_PRIVATE_ANALYSIS = src.STATIC_PRIVATE_ANALYSIS;
|
|
|
|
|
this.FREE_FORM = src.FREE_FORM;
|
|
|
|
|
this.KEEP_DVM_DIRECTIVES = src.KEEP_DVM_DIRECTIVES;
|
|
|
|
|
this.KEEP_SPF_DIRECTIVES = src.KEEP_SPF_DIRECTIVES;
|
|
|
|
|
this.PARALLELIZE_FREE_LOOPS = src.PARALLELIZE_FREE_LOOPS;
|
|
|
|
|
this.MAX_SHADOW_WIDTH = src.MAX_SHADOW_WIDTH;
|
|
|
|
|
this.OUTPUT_UPPER = src.OUTPUT_UPPER;
|
|
|
|
|
this.TRANSLATE_MESSAGES = src.TRANSLATE_MESSAGES;
|
|
|
|
|
this.KEEP_LOOPS_CLOSE_NESTING = src.KEEP_LOOPS_CLOSE_NESTING;
|
|
|
|
|
this.KEEP_GCOV = src.KEEP_GCOV;
|
|
|
|
|
this.ANALYSIS_OPTIONS = src.ANALYSIS_OPTIONS;
|
|
|
|
|
this.DEBUG_PRINT_ON = src.DEBUG_PRINT_ON;
|
|
|
|
|
this.MPI_PROGRAM = src.MPI_PROGRAM;
|
|
|
|
|
this.IGNORE_IO_SAPFOR = src.IGNORE_IO_SAPFOR;
|
|
|
|
|
this.KEEP_SPF_DIRECTIVES_AMONG_TRANSFORMATIONS = src.KEEP_SPF_DIRECTIVES_AMONG_TRANSFORMATIONS;
|
|
|
|
|
this.PARSE_FOR_INLINE = src.PARSE_FOR_INLINE;
|
|
|
|
|
}
|
|
|
|
|
//-
|
|
|
|
|
@Override
|
|
|
|
|
public String getFieldDescription(String fieldName) {
|
|
|
|
|
switch (fieldName) {
|
|
|
|
|
case "SaveModifications":
|
|
|
|
|
return "Сохранять копию исходной версии при преобразованиях";
|
|
|
|
|
case "DVMConvertationOptions":
|
|
|
|
|
return "Опции DVM конвертации";
|
|
|
|
|
case "GCOVLimit":
|
|
|
|
|
return "Нижний порог отображения GCOV";
|
|
|
|
|
case "Precompilation":
|
|
|
|
|
return "Предварительная компиляция";
|
|
|
|
|
//------------------------------------------>>
|
|
|
|
|
case "STATIC_SHADOW_ANALYSIS":
|
|
|
|
|
return "Оптимизация теневых обменов";
|
|
|
|
|
case "STATIC_PRIVATE_ANALYSIS":
|
|
|
|
|
return "Статический анализ приватностей";
|
|
|
|
|
case "FREE_FORM":
|
|
|
|
|
return "Свободный выходной стиль";
|
|
|
|
|
case "KEEP_DVM_DIRECTIVES":
|
|
|
|
|
return "Учитывать DVM директивы";
|
|
|
|
|
case "KEEP_SPF_DIRECTIVES":
|
|
|
|
|
return "Сохранять SPF директивы при построении параллельных вариантов";
|
|
|
|
|
case "PARALLELIZE_FREE_LOOPS":
|
|
|
|
|
return "Улучшенное распараллеливание";
|
|
|
|
|
case "MAX_SHADOW_WIDTH":
|
|
|
|
|
return "Максимальный размер теневых граней";
|
|
|
|
|
case "OUTPUT_UPPER":
|
|
|
|
|
return "Верхний выходной регистр";
|
|
|
|
|
case "TRANSLATE_MESSAGES":
|
|
|
|
|
return "Сообщения на русском языке";
|
|
|
|
|
case "KEEP_LOOPS_CLOSE_NESTING":
|
|
|
|
|
return "Учитывать тесную вложенность циклов";
|
|
|
|
|
case "KEEP_GCOV":
|
|
|
|
|
return "Учитывать GCOV";
|
|
|
|
|
case "ANALYSIS_OPTIONS":
|
|
|
|
|
return "Опции анализа";
|
|
|
|
|
case "DEBUG_PRINT_ON":
|
|
|
|
|
return "Включить отладочную печать";
|
|
|
|
|
case "MPI_PROGRAM":
|
|
|
|
|
return "Общая память";
|
|
|
|
|
case "IGNORE_IO_SAPFOR":
|
|
|
|
|
return "Игнорировать ввод/вывод";
|
|
|
|
|
case "KEEP_SPF_DIRECTIVES_AMONG_TRANSFORMATIONS":
|
|
|
|
|
return "Сохранять SPF директивы при преобразованиях";
|
|
|
|
|
case "PARSE_FOR_INLINE":
|
|
|
|
|
return "Синтаксический анализ для подстановки";
|
|
|
|
|
//------------------------------------------------------
|
|
|
|
|
}
|
|
|
|
|
return "";
|
|
|
|
|
}
|
|
|
|
|
//--
|
|
|
|
|
@Override
|
|
|
|
|
public boolean controlAction(String fieldName, JMenuItem control) {
|
|
|
|
|
return (Global.mainModule.getPass(PassCode.UpdateSapforProperty).Do(fieldName));
|
|
|
|
|
}
|
2025-01-16 19:04:46 +03:00
|
|
|
public String getSummary(){
|
|
|
|
|
Vector<String> res = new Vector<>();
|
|
|
|
|
for (Field field: this.getClass().getFields()){
|
|
|
|
|
try {
|
|
|
|
|
res.add(getFieldDescription(field.getName()) + "=" + field.get(this));
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex){
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return String.join("\n", res);
|
|
|
|
|
}
|
|
|
|
|
public void applyPatch(VisualiserSettingsJson settings){
|
|
|
|
|
Vector<String> changedFields = new Vector<>();
|
|
|
|
|
try {
|
|
|
|
|
for (VisualiserSettingJson setting : settings.array) {
|
|
|
|
|
System.out.println(setting.name+"="+ Utils_.Brackets(setting.value));
|
|
|
|
|
Field field = null;
|
|
|
|
|
try {
|
|
|
|
|
field = getClass().getField(setting.name);
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex){
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
if (field!=null) {
|
|
|
|
|
if (field.getName().equals(setting.name)) {
|
|
|
|
|
changedFields.add(setting.name);
|
|
|
|
|
switch (setting.name) {
|
|
|
|
|
case "GCOVLimit":
|
|
|
|
|
GCOVLimit = Integer.parseInt(setting.value);
|
|
|
|
|
break;
|
|
|
|
|
case "MAX_SHADOW_WIDTH":
|
|
|
|
|
MAX_SHADOW_WIDTH = Integer.parseInt(setting.value);
|
|
|
|
|
break;
|
|
|
|
|
case "ANALYSIS_OPTIONS":
|
|
|
|
|
ANALYSIS_OPTIONS = setting.value;
|
|
|
|
|
break;
|
|
|
|
|
case "DVMConvertationOptions":
|
|
|
|
|
DVMConvertationOptions = setting.value;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
int value_ = Integer.parseInt(setting.value);
|
|
|
|
|
field.set(this, value_ != 0);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!changedFields.isEmpty()) {
|
|
|
|
|
this.Update();
|
|
|
|
|
for (String fieldName: changedFields){
|
|
|
|
|
Mark(fieldName, getMenuItem(fieldName));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex) {
|
|
|
|
|
ex.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-13 22:41:11 +03:00
|
|
|
}
|