Перенос.
This commit is contained in:
25
src/ProjectData/Messages/Errors/ErrorsDBTable.java
Normal file
25
src/ProjectData/Messages/Errors/ErrorsDBTable.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package ProjectData.Messages.Errors;
|
||||
import Common.Current;
|
||||
import ProjectData.Messages.MessagesDBTable;
|
||||
public class ErrorsDBTable extends MessagesDBTable<MessageError> {
|
||||
public ErrorsDBTable() {
|
||||
super(MessageError.class);
|
||||
// setUIContent(UI.getMainWindow().errorsPanel);
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "сообщение об ошибке";
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.Errors;
|
||||
}
|
||||
public void changeColumnFilterValue(int columnIndex, String text) {
|
||||
if (columnIndex == 3)
|
||||
MessageError.filterValue = text;
|
||||
}
|
||||
public Object getColumnFilterValue(int columnIndex) {
|
||||
return MessageError.filterValue;
|
||||
}
|
||||
|
||||
}
|
||||
14
src/ProjectData/Messages/Errors/MessageError.java
Normal file
14
src/ProjectData/Messages/Errors/MessageError.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package ProjectData.Messages.Errors;
|
||||
import ProjectData.Messages.Message;
|
||||
public class MessageError extends Message {
|
||||
public MessageError(String file_in, int line_in, String value_in, int group_in) throws Exception {
|
||||
super(file_in, line_in, value_in, group_in);
|
||||
}
|
||||
public MessageError() {
|
||||
}
|
||||
public static String filterValue = "";
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return super.isVisible()&&value.contains(filterValue);
|
||||
}
|
||||
}
|
||||
443
src/ProjectData/Messages/Message.java
Normal file
443
src/ProjectData/Messages/Message.java
Normal file
@@ -0,0 +1,443 @@
|
||||
package ProjectData.Messages;
|
||||
import Common.Current;
|
||||
import Common.Global;
|
||||
import GlobalData.Settings.SettingName;
|
||||
import ProjectData.SapforData.FileObject;
|
||||
import ProjectData.SapforData.FileObjectWithMessages;
|
||||
import Visual_DVM_2021.Passes.PassException;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
public class Message extends FileObject {
|
||||
@Description("IGNORE")
|
||||
public static final int parser_group = -1;
|
||||
private static HashMap<String, String> codedMessages;
|
||||
private static HashMap<String, String> codedMessages2;
|
||||
public int group;
|
||||
public String group_s = "#";
|
||||
public String value;
|
||||
public Message() {
|
||||
}
|
||||
public Message(String file_in, int line_in, String value_in, int group_in
|
||||
) throws Exception {
|
||||
file = file_in;
|
||||
line = line_in;
|
||||
setGroup(group_in);
|
||||
value = ((group == parser_group) ||
|
||||
!Global.getSetting(SettingName.TRANSLATE_MESSAGES).toBoolean() ?
|
||||
value_in : decodeRussianMessage(value_in));
|
||||
}
|
||||
|
||||
// last code - 183
|
||||
private static String decodeRussianMessage(String coded) throws Exception {
|
||||
if (codedMessages == null) {
|
||||
codedMessages = new HashMap<>();
|
||||
codedMessages2 = new HashMap<>();
|
||||
codedMessages2.put("RR1_1", "перед");
|
||||
codedMessages2.put("RR1_2", "объявлением переменных или");
|
||||
codedMessages2.put("RR1_3", "циклом");
|
||||
codedMessages2.put("RR1_4", "после");
|
||||
codedMessages2.put("RR1_5", "всех операторов объявления");
|
||||
codedMessages2.put("RR1_6", "заголовка процедуры");
|
||||
codedMessages2.put("RR1_7", "единожды");
|
||||
codedMessages2.put("RR1_8", "только");
|
||||
codedMessages2.put("RR158_1", "' для этого цикла.");
|
||||
codedMessages2.put("RR42_1", "как выходной аргумент");
|
||||
codedMessages2.put("RR42_2", "как массив в функции");
|
||||
//1001
|
||||
codedMessages.put("R1", "Неверное расположение директивы: можно располагать только %s %s %s.");
|
||||
codedMessages.put("R2", "Неверное выражение: слишком много переменных цикла.");
|
||||
codedMessages.put("R3", "Неверное выражение: возможно только вида a * i + b.");
|
||||
codedMessages.put("R4", "Неверное расположение директивы: для области '%s' ожидается 'SPF END PARALLEL_REG_DIR', а была получена 'SPF PARALLEL_REG_DIR'.");
|
||||
codedMessages.put("R5", "Неверное расположение директивы: для области '%s' ожидается 'SPF END PARALLEL_REG_DIR'.");
|
||||
codedMessages.put("R6", "Неверное расположение директивы: для области '%s' ожидается 'SPF END PARALLEL_REG_DIR'.");
|
||||
codedMessages.put("R7", "Неверное расположение директивы: ожидается 'SPF PARALLEL_REG_DIR', а была получена 'SPF END PARALLEL_REG_DIR'.");
|
||||
codedMessages.put("R8", "Неверное расположение директивы: ожидается 'SPF PARALLEL_REG_DIR' в той же области видимости.");
|
||||
codedMessages.put("R9", "Неверное расположение директивы: ожидается 'SPF PARALLEL_REG_DIR'.");
|
||||
codedMessages.put("R10", "Неправильная расстановка области распараллеливания: есть несколько входов во фрагмент '%s', вызванные оператором ENTRY.");
|
||||
codedMessages.put("R11", "Неправильная расстановка области распараллеливания: есть несколько входов во фрагмент '%s', вызванные оператором GOTO.");
|
||||
codedMessages.put("R12", "Неправильное расположение строк: можно выбирать строки только в исполняемой части кода.");
|
||||
codedMessages.put("R13", "Неправильное расположение строк: начало не может быть больше конца.");
|
||||
codedMessages.put("R14", "Неправильное расположение строк: начало и конец при расширении не могут лежать в разных областях.");
|
||||
codedMessages.put("R15", "Неправильное положение строки: начало и конец не могут быть в неявных фрагментах.");
|
||||
codedMessages.put("R16", "Неправильное положение строк: начало и конец не могут быть в разных процедурах.");
|
||||
codedMessages.put("R17", "Неправильное расположение строк: выделенный фрагмент при расширении не должен включать фрагменты разных областей.");
|
||||
codedMessages.put("R18", "Неправильное расположение строк: начало и конец должны быть в одной области видимости.");
|
||||
codedMessages.put("R19", "Неправильное расположение строк %d-%d: нельзя объединить фрагменты в разных областях видимости.");
|
||||
codedMessages.put("R20", "Неправильное расположение строк: начало и конец должны быть в одной области видимости.");
|
||||
//1002
|
||||
codedMessages.put("R21", "Переменная '%s' не используется в цикле.");
|
||||
codedMessages.put("R22", "Переменная '%s' не используется в цикле.");
|
||||
//1003
|
||||
codedMessages.put("R23", "Переменная '%s' не изменяется в цикле.");
|
||||
codedMessages.put("R24", "Переменная '%s' не изменяется в цикле.");
|
||||
//1004
|
||||
codedMessages.put("R25", "Размерность массива '%s' %d, а должна быть 1.");
|
||||
//1005
|
||||
codedMessages.put("R26", "Тип массива '%s' должен быть INTEGER.");
|
||||
//1006
|
||||
codedMessages.put("R27", "Типом переменной '%s' должен быть массив.");
|
||||
codedMessages.put("R28", "Переменная '%s' не является массивом.");
|
||||
codedMessages.put("R29", "Переменная '%s' не является массивом.");
|
||||
//1007
|
||||
codedMessages.put("R30", "Размер массива не может быть вычислен.");
|
||||
//1008
|
||||
codedMessages.put("R31", "Размер массива '%s' %d, а вы вводите %d.");
|
||||
codedMessages.put("R32", "Размерность массива '%s' %d, а вы вводите %d.");
|
||||
//1009
|
||||
codedMessages.put("R33", "Массив '%s' является приватным.");
|
||||
codedMessages.put("R34", "Массив '%s' является приватным.");
|
||||
//1010
|
||||
codedMessages.put("R35", "Разрешены только положительные числа.");
|
||||
//1011
|
||||
codedMessages.put("R36", "Нет такого выражения '%s' в цикле.");
|
||||
//1012
|
||||
codedMessages.put("R37", "Невозможно определить размеры массива '%s'.");
|
||||
codedMessages.put("R149", "Невозможно определить размеры цикла '%s'.");
|
||||
//1013
|
||||
codedMessages.put("R38", "Отличается количество формальных и фактических параметров для процедуры '%s'."); //Требуется выполнить подстановку процедуры '%s', так как
|
||||
codedMessages.put("R39", "Отличается тип фактического (%s : %s) и формального (%s : %s) %d-го параметра для процедуры '%s'."); //Требуется выполнить подстановку процедуры '%s', так как
|
||||
codedMessages.put("R40", "Требуется выполнить подстановку процедуры '%s', так как можно передавать массивы только целиком.");
|
||||
codedMessages.put("R41", "Требуется выполнить подстановку процедуры '%s' из-за обращения к неприватному массиву '%s' в цикле на строке %d %s.");
|
||||
codedMessages.put("R42", "Требуется выполнить подстановку процедуры '%s' из-за обращения к неприватному массиву '%s' %s.");
|
||||
codedMessages.put("R43", "Требуется подставить процедуру '%s' из-за разной размерности массива '%s', передаваемого в качестве параметра: размерность формального параметра = %d, а фактического параметра = %d.");
|
||||
codedMessages.put("R44", "Для процедуры '%s' обнаружено несоответствие типов формального и фактического параметра для массива '%s'.");
|
||||
codedMessages.put("R45", "Необходимо подставить процедуру '%s', так как через параметр %d передается итерационная переменная цикла на строке %d и она используется в индексном выражении в обращении к массиву в теле этой процедуры.");
|
||||
//1014
|
||||
codedMessages.put("R46", "Была найдена рекурсивная цепочка вызовов: '%s', данная процедура исключена из рассмотрения.");
|
||||
//1015
|
||||
codedMessages.put("R47", "Данная процедура не вызывается в данном проекте.");
|
||||
//1016
|
||||
codedMessages.put("R48", "Невозможно вычислить количество итераций данного цикла, информация о количестве итераций для всех остальных циклов в области распараллеливания '%s' будет проигнорирована.");
|
||||
//1017
|
||||
codedMessages.put("R49", "Невозможно найти определение для символа '%s' в данной области видимости.");
|
||||
//1018
|
||||
codedMessages.put("R50", "Данный цикл не в END DO формате.");
|
||||
codedMessages.put("R51", "Данный цикл не в END DO формате.");
|
||||
//1019
|
||||
codedMessages.put("R52", "Включаемый файл '%s' содержит исполняемые операторы, что запрещено к распараллеливанию в системе SAPFOR.");
|
||||
//1020
|
||||
codedMessages.put("R53", "Активные DVM-директивы не поддерживаются.");
|
||||
//1021
|
||||
codedMessages.put("R54", "Обращение к массиву '%s' содержит более одной индексной переменной циклов.");
|
||||
codedMessages.put("R55", "Обращение к массиву '%s' по измерению '%d' не содержит итерационных переменных циклов.");
|
||||
//1022
|
||||
codedMessages.put("R56", "Обращение к массиву '%s' имеет косвенную адресацию.");
|
||||
//1023
|
||||
codedMessages.put("R57", "Невозможно вычислить индексное выражение в обращении к массиву '%s'.");
|
||||
//1024
|
||||
codedMessages.put("R58", "Коэффициент A в линейном обращении A*x+B к массиву '%s' не может быть отрицательным, так как инверсное распределение не поддерживается.");
|
||||
//1025
|
||||
codedMessages.put("R59", "Невозможно сопоставить обращение к массиву на запись '%s' с данными циклом.");
|
||||
//1026
|
||||
codedMessages.put("R60", "Обнаружен оператор записи в нераспределенный массив '%s', связанный с данным циклом.");
|
||||
codedMessages.put("R61", "Обнаружен оператор записи в нераспределенный массив '%s', связанный с данным циклом.");
|
||||
//1027
|
||||
codedMessages.put("R179", "Обнаружен более, чем один оператор в одной и той же строке, попробуйте применить проход 'Коррекция стиля кода'.");
|
||||
//1028
|
||||
codedMessages.put("R62", "Описание модуля '%s' должно находиться в данном файле.");
|
||||
//1029 && 1030
|
||||
codedMessages.put("R158", "Рекурсия не анализируется для приватных переменных в common-блоке '%s'.");
|
||||
codedMessages.put("R159", "Анализ приватных переменных невозможен для данного цикла из-за: '%s'.");
|
||||
codedMessages.put("R160", "Переменная '%s' из списка приватных переменных не может быть классифицирована как приватная.");
|
||||
codedMessages.put("R161", "Массив '%s' из списка приватных переменных не может быть классифицирована как приватный.");
|
||||
codedMessages.put("R162", "Добавлена приватная переменная '%s");
|
||||
codedMessages.put("R163", "Добавлена приватная переменная по массиву '%s");
|
||||
//1031
|
||||
codedMessages.put("R63", "Неверное имя области: имя '%s' уже объявлено на строке %d.");
|
||||
//1032
|
||||
codedMessages.put("R64", "Неверное имя области: имя '%s' уже объявлено в common-блоке '%s'.");
|
||||
//1033
|
||||
codedMessages.put("R65", "Область распараллеливания '%s' включает саму себя в файле '%s'.");
|
||||
//1034
|
||||
codedMessages.put("R66", "Неверное расположение области: не существует common-блока в текущей функции '%s' со следующими массивами:%s.");
|
||||
//1035
|
||||
//--- TODO
|
||||
//1036
|
||||
codedMessages.put("R67", "Невозможно построить дерево выравнивания в данной области распараллеливания, используя пользовательские DVM-директивы.");
|
||||
//1037
|
||||
codedMessages.put("R68", "Массив '%s' не может быть распределен из-за ограничений ввода/вывода, накладываемых DVM системой.");
|
||||
//1038
|
||||
codedMessages.put("R69", "Оператор PAUSE является запрещенным в параллельной программе.");
|
||||
codedMessages.put("R70", "Оператор EQUIVALENCE не поддерживается на данный момент.");
|
||||
//1039
|
||||
codedMessages.put("R71", "Переменные '%s' и '%s' находятся в одной области ассоциации (common block '%s'), но имеют разные типы (файлы - %s:%d и %s:%d).");
|
||||
//1040
|
||||
codedMessages.put("R72", "Первые %d измерений массива '%s' запрещены к распределению из-за передачи к процедуру '%s'.");
|
||||
codedMessages.put("R73", "Первое измерение массива '%s' запрещено к распределению из-за передачи в процедуру '%s'.");
|
||||
//1041
|
||||
codedMessages.put("R74", "Область распараллеливания '%s'содержит строку, которая включена в другую область, необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//1042
|
||||
codedMessages.put("R75", "Распределенный массив '%s' состоящий в common блоке '%s' должен иметь описание в главной программной единице.");
|
||||
//1043
|
||||
codedMessages.put("R76", "Неверное выражение в директиве: ожидается список переменных.");
|
||||
codedMessages.put("R77", "Неверное выражение в директиве: ожидается %d тесно-вложенных циклов на строке %d, но их всего %d.");
|
||||
codedMessages.put("R78", "Неверное выражение в директиве: ожидается переменная '%s' на позиции %d.");
|
||||
//1044
|
||||
codedMessages.put("R79", "Поддерживаются процедуры только без побочных эффектов.");
|
||||
codedMessages.put("R80", "Поддерживаются процедуры только без побочных эффектов.");
|
||||
//1045
|
||||
codedMessages.put("R81", "Аргумент '%s' процедуры '%s' имеет неизвестные нижнюю и/или верхнюю границы.");
|
||||
//1046
|
||||
codedMessages.put("R82", "Количество формальных и фактических параметров не одинаково для вызова данной процедуры '%s'.");
|
||||
codedMessages.put("R83", "Количество формальных и фактических параметров не одинаково для вызова данной процедуры '%s'.");
|
||||
codedMessages.put("R84", "Количество формальных и фактических параметров не одинаково для вызова данной процедуры '%s'.");
|
||||
//1047
|
||||
codedMessages.put("R85", "%d измерение массива '%s' не может быть распределено из-за различных отображений на циклы в операциях присваиваний.");
|
||||
codedMessages.put("R86", "Массив '%s' не может быть распределен, так как все его измерения запрещены к распределению.");
|
||||
codedMessages.put("R87", "Массив '%s' не может быть распределен.");
|
||||
codedMessages.put("R88", "Массив '%s' не может быть распределен.");
|
||||
codedMessages.put("R89", "Массив '%s' не может быть распределен.");
|
||||
codedMessages.put("R90", "Массив '%s' не может быть распределен из-за использования RESHAPE.");
|
||||
codedMessages.put("R91", "Массив '%s' не может быть распределен.");
|
||||
codedMessages.put("R164", "Массив '%s' не может быть распределен из-за использования конструктора инициализации");
|
||||
//1048
|
||||
codedMessages.put("R92", "Процедура '%s' с одинаковым именем была объявлена в более, чем одном месте: в файле '%s':%d и '%s':%d.");
|
||||
//1049
|
||||
codedMessages.put("R93", "Процедура не является чистой (без побочных эффектов) из-за наличия данного оператора.");
|
||||
//1050
|
||||
codedMessages.put("R146", "Найдена более, чем одна главная программная единица (PROGRAM).");
|
||||
codedMessages.put("R147", "Не найдена ни одна главная программная единица (PROGRAM).");
|
||||
//1051
|
||||
codedMessages.put("R148", "Обнаружены вызовы MPI-процедур, включен режим специальный режим распараллеливания MPI-программ.");
|
||||
//1052
|
||||
codedMessages.put("R150", "Ошибка в расстановке пользовательских интервалов - не удалось найти конец интервала.");
|
||||
//1053
|
||||
codedMessages.put("R154", "Ошибка в выражении SHRINK клаузы: переменная должна быть массивом в файле '%s'.");
|
||||
//1054
|
||||
codedMessages.put("R155", "Длина маски для массива '%s' должна быть равна %d, но указано только %d измерений в файле '%s'.");
|
||||
//1055
|
||||
codedMessages.put("R156", "Ошибка в выражении маски на %d позиции массива '%s': в качестве значения могут быть только 0 и 1 в файле '%s'.");
|
||||
//1056
|
||||
codedMessages.put("R157", "Массив '%s' в клаузе SHRINK также должен быть объявлен в клаузе private в файле '%s'.");
|
||||
//1057
|
||||
codedMessages.put("R175", "Переменная '%s' должна использоваться в следующем операторе.");
|
||||
//1058
|
||||
codedMessages.put("R176", "В левой части клаузы PARAMETER должна быть переменная.");
|
||||
//1059
|
||||
codedMessages.put("R182", "Редукционная операция по элементу массива '%s' на данный момент не поддерживается.");
|
||||
//1060
|
||||
codedMessages.put("R183", "Расположение операторов FORMAT в области описания типов данных не поддерживается, попробуйте применить проход 'Коррекция стиля кода'.");
|
||||
//1061
|
||||
codedMessages.put("R184", "Область объявления массива '%s' конфликтует с предыдущей областью. Возможно, это вызвано использованием include-файлов. Попробуйте применить проход 'Подстановка заголовочных файлов'.");
|
||||
//2001
|
||||
codedMessages.put("R94", "Невозможно автоматически преобразовать данное присваивание к циклу.");
|
||||
codedMessages.put("R95", "Невозможно автоматически преобразовать данное присваивание к циклу.");
|
||||
//2002
|
||||
codedMessages.put("R96", "Арифметический IF был преобразован в IF-ENDIF.");
|
||||
codedMessages.put("R97", "Вычисляемый GOTO был преобразован в IF-ENDIF.");
|
||||
//2003
|
||||
codedMessages.put("R98", "Невозможно автоматически преобразовать цикл в END DO формат.");
|
||||
//2004
|
||||
codedMessages.put("R99", "Цикл был преобразован в END DO формат.");
|
||||
//2005
|
||||
codedMessages.put("R100", "Циклы в строке %d и в строке %d были объединены.");
|
||||
//2006
|
||||
codedMessages.put("R101", "Была выполнена подстановка макроса с именем '%s'.");
|
||||
//2007
|
||||
codedMessages.put("R102", "Возникла непредвиденная ситуация во время генерации выходного текста.");
|
||||
codedMessages.put("R103", "Возникла непредвиденная ситуация во время генерации выходного текста.");
|
||||
//2008
|
||||
// -- TODO
|
||||
//2009
|
||||
codedMessages.put("R104", "Невозможно разделить данный цикл из-за следующей зависимости: %s.");
|
||||
//2010
|
||||
codedMessages.put("R105", "Данный цикл содержит косвенные подциклы, поэтому не может быть разделен.");
|
||||
codedMessages.put("R106", "У данного цикла есть ограничение на разделение в строке %s (наличие операторов goto, print, stop или этот цикл не является DO-ENDDO).");
|
||||
codedMessages.put("R107", "У данного цикла есть зависимости, которые нельзя проанализировать, поэтому он не может быть разделен в строке %s.");
|
||||
//2011
|
||||
codedMessages.put("R177", "Подстановка процедур разрешена только в исполняемой части кода.");
|
||||
//2012
|
||||
codedMessages.put("R173", "Операторы SAVE и DATA запрещены в дублируемых процедурах");
|
||||
//2013
|
||||
codedMessages.put("R174", "Операторы SAVE и DATA запрещены в дублируемых процедурах: переменная '%s'");
|
||||
//2014
|
||||
codedMessages.put("R180", "Невозможно выполнить подстановку процедур '%s': разная размерность формального и фактического параметра '%s'");
|
||||
//2015
|
||||
codedMessages.put("R185", "Неправильный синтаксис директивы");
|
||||
codedMessages.put("R186", "Неправильный синтаксис директивы - выражения в заголовке цикла должны быть вычисляемыми");
|
||||
codedMessages.put("R187", "Выражения в заголовке цикла должны быть вычисляемыми");
|
||||
codedMessages.put("R195", "Нельзя выполнить преобразование из-за данного оператора, который имеет construct-name");
|
||||
//2016
|
||||
codedMessages.put("R188", "Нельзя удалить приватную переменную '%s' - для неё не найдена маска фиксированных измерений");
|
||||
//2017
|
||||
codedMessages.put("R189", "Нельзя удалить приватную переменную '%s' - она имеет рекурсивную зависимость");
|
||||
codedMessages.put("R190", "Нельзя удалить приватную переменную '%s' - она зависит от неинвариантной переменной цикла '%s'");
|
||||
//2018
|
||||
codedMessages.put("R191", "Приватная переменная '%s' была удалена");
|
||||
codedMessages.put("R201", "Приватная переменная '%s' была частично удалена");
|
||||
|
||||
//2019
|
||||
codedMessages.put("R192", "Нельзя удалить приватную переменную '%s' - она не имеет фиксированных измерений");
|
||||
//2020
|
||||
codedMessages.put("R193", "Нельзя удалить приватную переменную '%s' - более одного определения достигают оператора");
|
||||
codedMessages.put("R194", "Нельзя удалить приватную переменную '%s' - не удалось найти достигающее определение для оператора");
|
||||
//2022
|
||||
codedMessages.put("R196", "Невозможно выполнить преобразование циклов из-за зависимостей между операторами.");
|
||||
//2023
|
||||
codedMessages.put("R197", "Преобразование не может быть выполнено - не произошло никаких изменений в коде");
|
||||
codedMessages.put("R198", "Цикл на строке %d был удалён");
|
||||
codedMessages.put("R199", "Зависимость по скаляру с типом lastprivate препятствует распараллеливанию данного цикла");
|
||||
codedMessages.put("R200", "Добавлена lastprivate переменная '%s' к циклу на строке %d");
|
||||
//3002
|
||||
|
||||
//3001
|
||||
codedMessages.put("R108", "Добавлена across-зависимость к массиву '%s' в цикле.");
|
||||
//3002
|
||||
codedMessages.put("R109", "Добавлена приватная переменная '%s' к циклу на строке %d.");
|
||||
//3003
|
||||
codedMessages.put("R110", "Добавлена редукционная переменная '%s' с типом операции '%s' к циклу на строке %d.");
|
||||
//3004
|
||||
codedMessages.put("R111", "Неизвестный тип редукционной операции по скаляру '%s'.");
|
||||
//3005
|
||||
codedMessages.put("R112", "Неизвестная зависимость по скалярной переменной '%s' (попробуйте вручную специфицировать ее тип).");
|
||||
//3006
|
||||
codedMessages.put("R113", "Неизвестная зависимость по массиву препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R114", "Неизвестная зависимость по скаляру препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R115", "Внешние или внутренние операторы перехода (GOTO/EXIT) препятствуют распараллеливанию данного цикла.");
|
||||
codedMessages.put("R116", "Операторы ввода/вывода препятствуют распараллеливанию данного цикла.");
|
||||
codedMessages.put("R117", "Операторы STOP препятствуют распараллеливанию данного цикла.");
|
||||
codedMessages.put("R118", "Обнаружены конфликтные присваивания, которые препятствуют распараллеливанию данного цикла.");
|
||||
codedMessages.put("R119", "Невозможность сопоставить обращение к массиву на запись препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R120", "Косвенная адресация по распределяемому массиву препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R121", "Обращение к нераспределенному массиву на запись препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R122", "Найдены различные правила выравнивания массивов, используемых на запись в данном цикле, препятствует распараллеливанию.");
|
||||
codedMessages.put("R123", "Процедуры с побочным эффектом препятствуют распараллеливанию данного цикла.");
|
||||
codedMessages.put("R124", "%s зависимость между %s (строка %d) и %s (строка %d) с неизвестным расстоянием препятствует распараллеливанию цикла на строке %d.");
|
||||
codedMessages.put("R125", "%s зависимость между %s (строка %d) и %s (строка %d) с неизвестным расстоянием препятствует распараллеливанию.");
|
||||
codedMessages.put("R144", "Обнаружено непрямоугольное пространство итераций, что препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R145", "Обнаружены DVM интервалы внутри цикла, что препятствует распараллеливанию данного цикла.");
|
||||
codedMessages.put("R178", "Данный вид циклов не поддерживается системой.");
|
||||
//--TODO R124 R125 про неопределенную длину зависимости
|
||||
//3007
|
||||
codedMessages.put("R126", "Невозможно создать с шаблоном для массива '%s': размерность массива '%d' и это не соответствует '%d'.");
|
||||
codedMessages.put("R127", "Невозможно сопоставить выравнивания массивов, передаваемых в процедуру.");
|
||||
//3008
|
||||
codedMessages.put("R128", "Внутренняя ошибка анализа, распараллеливание не будет выполнено для данного файла.");
|
||||
//3009
|
||||
codedMessages.put("R129", "Добавленный REMOTE_ACCESS для обращения к массиву '%s' может привести к сильному замедлению.");
|
||||
//3010
|
||||
codedMessages.put("R130", "Не обнаружены массивы или свободные циклы для распределения в данном проекте.");
|
||||
codedMessages.put("R131", "Не обнаружены массивы или свободные циклы для распределения в данной области распараллеливания.");
|
||||
//3011
|
||||
codedMessages.put("R132", "У массивов '%s' и '%s' разные правила выравнивания согласно обращению на запись в данном цикле.");
|
||||
//3012
|
||||
codedMessages.put("R133", "Области распараллеливания %sимеют общую используемую процедуру '%s', необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//3013
|
||||
codedMessages.put("R134", "Области распараллеливания %sимеют общий используемый локальный массив '%s', необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
codedMessages.put("R152", "Области распараллеливания %sимеют общий используемый массив из модуля '%s', необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//3014
|
||||
codedMessages.put("R135", "Область распараллеливания '%s' содержит common-массив '%s', используемый в области и вне её, необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//3015
|
||||
codedMessages.put("R136", "Область распараллеливания '%s' не имеет DVM-интервала для фрагмента, необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//3016
|
||||
codedMessages.put("R137", "Невозможно считать DVM-статистику для получения времен.");
|
||||
//3017
|
||||
codedMessages.put("R138", "Область распараллеливания '%s' не содержит копирования массива '%s' в DVM-интервале, необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//3018
|
||||
codedMessages.put("R139", "Область распараллеливания '%s' не содержит копирования массива '%s' в DVM-интервале, необходимо применить проход 'Разрешение конфликтов областей'.");
|
||||
//3019
|
||||
//--- TODO предиктор
|
||||
//3020
|
||||
codedMessages.put("R140", "Обнаружен массив '%s', являющийся параметром процедуры, в которую передаются как распределенные, так и нераспределенные массивы. Возможно, стоит запретить к распределению обнаруженные массивы, либо продублировать соответствующую процедуру.");
|
||||
codedMessages.put("R141", "Обнаружен распределяемый массив '%s', передаваемый в качестве параметра в процедуру.");
|
||||
codedMessages.put("R153", "Обнаружен не распределяемый массив '%s', передаваемый в качестве параметра в процедуру.");
|
||||
codedMessages.put("R142", "Для массива '%s' не удается найти единого распределения, внутренняя ошибка системы.");
|
||||
//3021
|
||||
codedMessages.put("R151", "Пустые области распараллеливания не допускаются.");
|
||||
//3022
|
||||
codedMessages.put("R171", "Невозможно определить правила выравнивания для массива '%s'.");
|
||||
//4001
|
||||
//---TODO ошибки из SAGE
|
||||
//4002
|
||||
codedMessages.put("R143", "Неверное объявление PURE процедуры - отсутствуют операторы INTENT.");
|
||||
//5001
|
||||
codedMessages.put("R165", "В клаузе 'INTERVAL' первый аргумент должен быть 'TIME' или 'ITER', а второй - типа integer.");
|
||||
//5002
|
||||
codedMessages.put("R166", "Директива %s с клаузой '%s' может располагаться только в исполняемой части кода.");
|
||||
//5003
|
||||
codedMessages.put("R167", "Директива CHECKPOINT с клаузой 'FILES' должна содержать одно значение типа integer.");
|
||||
//5004
|
||||
codedMessages.put("R168", "Переменная '%s' в клаузе '%s' должна быть объявлена в той же области видимости.");
|
||||
//5005
|
||||
codedMessages.put("R169", "Недопустимый параметр в клаузе TYPE директивы CHECKPOINT.");
|
||||
//5006
|
||||
codedMessages.put("R170", "Клауза '%s' может быть указана только один раз.");
|
||||
//5007
|
||||
codedMessages.put("R172", "Переменная '%s' не может быть указана одновременно в клаузах 'VARLIST' и 'EXCEPT'.");
|
||||
}
|
||||
int idxOfCode = coded.indexOf(':');
|
||||
if (idxOfCode == -1)
|
||||
return coded; // наверно не ошибка, если вдруг передано сообщение без кода
|
||||
else {
|
||||
String code = coded.substring(0, idxOfCode);
|
||||
String message = coded.substring(idxOfCode + 1);
|
||||
if (codedMessages.containsKey(code)) {
|
||||
String original = codedMessages.get(code);
|
||||
if (message == "")
|
||||
return original;
|
||||
else {
|
||||
String[] splited = message.split("#");
|
||||
int idx = 0;
|
||||
int sum = 0;
|
||||
do {
|
||||
idx = original.indexOf('%', idx);
|
||||
if (idx != -1) {
|
||||
sum++;
|
||||
idx += 2;
|
||||
}
|
||||
} while (idx != -1);
|
||||
if (sum != splited.length && !message.equals(""))
|
||||
throw new PassException("Ошибка при декодировании собщений на русском языке");
|
||||
idx = 0;
|
||||
String result = "";
|
||||
for (int z = 0; z < sum; ++z) {
|
||||
int newIdx = original.indexOf('%', idx);
|
||||
result += original.substring(idx, newIdx) + splited[z];
|
||||
idx = newIdx + 2;
|
||||
}
|
||||
result += original.substring(idx);
|
||||
for (Map.Entry<String, String> entry : codedMessages2.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
String value = entry.getValue();
|
||||
idx = 0;
|
||||
do {
|
||||
int newIdx = result.indexOf(key, idx);
|
||||
if (newIdx != -1)
|
||||
result = result.substring(idx, newIdx) + value + result.substring(newIdx + key.length() + 1);
|
||||
else
|
||||
idx = -1;
|
||||
} while (idx != -1);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
} else {
|
||||
return "Ошибка при декодировании сообщений на русском языке - код <" + code +
|
||||
"> не найден. Попробуйте использовать английский язык."
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void setGroup(int group_in) {
|
||||
group = group_in;
|
||||
switch (group) {
|
||||
case 0:
|
||||
group_s += "m0000";
|
||||
break;
|
||||
case parser_group: //сообщения от парсера.
|
||||
group_s += "parser";
|
||||
break;
|
||||
default:
|
||||
group_s += group;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
if (Current.HasFile() && Current.getFile().name.equals(file)) {
|
||||
Object o = Current.get(Current.FileGraphElement);
|
||||
return !(o instanceof FileObjectWithMessages) || ((FileObjectWithMessages) o).HasMessage(this);
|
||||
} else return false;
|
||||
}
|
||||
}
|
||||
80
src/ProjectData/Messages/MessagesDBTable.java
Normal file
80
src/ProjectData/Messages/MessagesDBTable.java
Normal file
@@ -0,0 +1,80 @@
|
||||
package ProjectData.Messages;
|
||||
import Common.Current;
|
||||
import Common.Database.DataSet;
|
||||
import Common.Database.iDBTable;
|
||||
import Common.UI.DataSetControlForm;
|
||||
import Common.UI.Tables.ColumnFilter;
|
||||
import Common.UI.Tables.TableRenderers;
|
||||
|
||||
import javax.swing.table.TableModel;
|
||||
import javax.swing.table.TableRowSorter;
|
||||
import java.util.Comparator;
|
||||
//https://stackoverflow.com/questions/2026965/can-i-add-a-button-to-a-jtable-column-header
|
||||
//https://stackoverflow.com/questions/7137786/how-can-i-put-a-control-in-the-jtableheader-of-a-jtable/29963916#29963916
|
||||
//https://stackoverflow.com/questions/7137786/how-can-i-put-a-control-in-the-jtableheader-of-a-jtable ->>
|
||||
public class MessagesDBTable<M extends Message> extends iDBTable<M> {
|
||||
public MessagesDBTable(Class<M> d_in) {
|
||||
super(d_in);
|
||||
}
|
||||
@Override
|
||||
protected DataSetControlForm createUI() {
|
||||
DataSet dataset = this;
|
||||
return new DataSetControlForm(this) {
|
||||
@Override
|
||||
public void ShowCurrentObject() throws Exception {
|
||||
super.ShowCurrentObject();
|
||||
Current.getFile().form.getEditor().gotoLine(getCurrent().line);
|
||||
}
|
||||
@Override
|
||||
protected void AdditionalInitColumns() {
|
||||
columns.get(0).setVisible(false);
|
||||
columns.get(3).setMinWidth(700);
|
||||
columns.get(3).setRenderer(TableRenderers.RendererWrapText);
|
||||
}
|
||||
@Override
|
||||
public void MouseAction2() throws Exception {
|
||||
ShowCurrentObject();
|
||||
}
|
||||
@Override
|
||||
public void CreateControl() {
|
||||
super.CreateControl();
|
||||
columnsFilters.put(3, new ColumnFilter(dataset, 3));
|
||||
control.setRowSorter(null);
|
||||
TableRowSorter<TableModel> sorter = new TableRowSorter<>(control.getModel());
|
||||
sorter.setSortable(3, false);
|
||||
control.setRowSorter(sorter);
|
||||
/*
|
||||
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
|
||||
for (int i = 0; i < 6; ++i)
|
||||
sorter.setSortable(i, false);
|
||||
sortKeys.add(new RowSorter.SortKey(6, SortOrder.DESCENDING));
|
||||
sortKeys.add(new RowSorter.SortKey(7, SortOrder.DESCENDING));
|
||||
*/
|
||||
|
||||
// sorter.setSortKeys(sortKeys);
|
||||
// sorter.sort();
|
||||
}
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public Object getFieldAt(M object, int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 1:
|
||||
return object.group_s;
|
||||
case 2:
|
||||
return object.line;
|
||||
case 3:
|
||||
return object.value;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public String[] getUIColumnNames() {
|
||||
return new String[]{"группа", "строка", "текст"};
|
||||
}
|
||||
@Override
|
||||
public Comparator<M> getComparator() {
|
||||
return Comparator.comparingInt(o -> o.line);
|
||||
}
|
||||
}
|
||||
14
src/ProjectData/Messages/Notes/MessageNote.java
Normal file
14
src/ProjectData/Messages/Notes/MessageNote.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package ProjectData.Messages.Notes;
|
||||
import ProjectData.Messages.Message;
|
||||
public class MessageNote extends Message {
|
||||
public MessageNote(String file_in, int line_in, String value_in, int group_in) throws Exception {
|
||||
super(file_in, line_in, value_in, group_in);
|
||||
}
|
||||
public MessageNote() {
|
||||
}
|
||||
public static String filterValue = "";
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return super.isVisible()&&value.contains(filterValue);
|
||||
}
|
||||
}
|
||||
25
src/ProjectData/Messages/Notes/NotesDBTable.java
Normal file
25
src/ProjectData/Messages/Notes/NotesDBTable.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package ProjectData.Messages.Notes;
|
||||
import Common.Current;
|
||||
import ProjectData.Messages.MessagesDBTable;
|
||||
public class NotesDBTable extends MessagesDBTable<MessageNote> {
|
||||
public NotesDBTable() {
|
||||
super(MessageNote.class);
|
||||
// setUIContent(UI.getMainWindow().notesPanel);
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "примечание";
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.Notes;
|
||||
}
|
||||
public void changeColumnFilterValue(int columnIndex, String text) {
|
||||
if (columnIndex == 3)
|
||||
MessageNote.filterValue = text;
|
||||
}
|
||||
public Object getColumnFilterValue(int columnIndex) {
|
||||
return MessageNote.filterValue;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package ProjectData.Messages.Recommendations;
|
||||
import Common.Database.iDBObject;
|
||||
import Common.Utils.Utils;
|
||||
import GlobalData.Settings.SettingName;
|
||||
import Visual_DVM_2021.Passes.PassCode_2021;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
public class MessageRecommendation extends iDBObject {
|
||||
//рекомендация может касаться, либо настройки либо прохода. так же может быть просто текстовой.
|
||||
@Description("DEFAULT 'Text'")
|
||||
public RecommendationType type = RecommendationType.Text;
|
||||
@Description("DEFAULT 'Undefined'")
|
||||
public String argName = "Undefined";//либо имя настройки либо имя прохода
|
||||
@Description("DEFAULT ''")
|
||||
public String argValue = ""; //Либо значение настройки либо аргумент для прохода
|
||||
@Description("DEFAULT ''")
|
||||
public String text = ""; //текст
|
||||
public MessageRecommendation() {
|
||||
}
|
||||
public MessageRecommendation(PassCode_2021 passCode_in) {
|
||||
type = RecommendationType.Transformation;
|
||||
argName = passCode_in.toString();
|
||||
text = "Выполните преобразование " + Utils.Quotes(passCode_in.getDescription());
|
||||
}
|
||||
public MessageRecommendation(SettingName settingName_in, String settingValue_in) {
|
||||
type = RecommendationType.Setting;
|
||||
argName = settingName_in.toString();
|
||||
argValue = settingValue_in;
|
||||
if (argValue.equals("1"))
|
||||
text = "Включите настройку SAPFOR " + Utils.Quotes(settingName_in.getDescription());
|
||||
else if (argValue.equals("0"))
|
||||
text = "Отключите настройку SAPFOR " + Utils.Quotes(settingName_in.getDescription());
|
||||
else
|
||||
text = "Задайте значение " + Utils.DQuotes(argValue) + " для настройки SAPFOR " + Utils.Quotes(settingName_in.getDescription());
|
||||
}
|
||||
public MessageRecommendation(String text_in) {
|
||||
type = RecommendationType.Text;
|
||||
text = text_in;
|
||||
}
|
||||
public boolean isMatch(MessageRecommendation recommendation_in) {
|
||||
return type.equals(recommendation_in.type) &&
|
||||
argName.equals(recommendation_in.argName) &&
|
||||
argValue.equals(recommendation_in.argValue);
|
||||
}
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package ProjectData.Messages.Recommendations;
|
||||
public enum RecommendationType {
|
||||
Setting,
|
||||
Analysis,
|
||||
Transformation,
|
||||
Text;
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package ProjectData.Messages.Recommendations;
|
||||
import Common.Current;
|
||||
import Common.Database.iDBTable;
|
||||
import Common.UI.DataSetControlForm;
|
||||
import Common.UI.Tables.TableRenderers;
|
||||
import GlobalData.Settings.SettingName;
|
||||
import Visual_DVM_2021.Passes.PassCode_2021;
|
||||
public class RecommendationsDBTable extends iDBTable<MessageRecommendation> {
|
||||
//group=1 - настройка
|
||||
//group=2 - преобразование
|
||||
public RecommendationsDBTable() {
|
||||
super(MessageRecommendation.class);
|
||||
// setUIContent(UI.getMainWindow().errorsPanel);
|
||||
}
|
||||
@Override
|
||||
protected DataSetControlForm createUI() {
|
||||
return new DataSetControlForm(this){
|
||||
@Override
|
||||
protected void AdditionalInitColumns() {
|
||||
columns.get(0).setVisible(false);
|
||||
columns.get(1).setMinWidth(700);
|
||||
columns.get(1).setRenderer(TableRenderers.RendererWrapText);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
@Override
|
||||
public String[] getUIColumnNames() {
|
||||
return new String[]{"текст"};
|
||||
}
|
||||
@Override
|
||||
public Object getFieldAt(MessageRecommendation object, int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 1:
|
||||
return object.text;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "рекомендация";
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.Recommendations;
|
||||
}
|
||||
public void addRecommendation(int group_in) {
|
||||
MessageRecommendation result = null;
|
||||
switch (group_in) {
|
||||
/*
|
||||
case 1013:
|
||||
//процедура. понять как извлекать ее из сообщения, и сунуть как аргумент преобразованию.
|
||||
break;
|
||||
*/
|
||||
case 1015:
|
||||
result = new MessageRecommendation(PassCode_2021.SPF_RemoveUnusedFunctions);
|
||||
break;
|
||||
case 1018:
|
||||
result = new MessageRecommendation(PassCode_2021.SPF_LoopEndDoConverterPass);
|
||||
break;
|
||||
case 1020:
|
||||
result = new MessageRecommendation(SettingName.KEEP_DVM_DIRECTIVES, "1");
|
||||
break;
|
||||
case 1027:
|
||||
case 1060:
|
||||
result = new MessageRecommendation(PassCode_2021.SPF_CorrectCodeStylePass);
|
||||
break;
|
||||
case 1041:
|
||||
case 3012:
|
||||
case 3013:
|
||||
case 3014:
|
||||
case 3015:
|
||||
case 3017:
|
||||
case 3018:
|
||||
result = new MessageRecommendation(PassCode_2021.SPF_ResolveParallelRegionConflicts);
|
||||
break;
|
||||
case 1061:
|
||||
result = new MessageRecommendation(PassCode_2021.SPF_InsertIncludesPass);
|
||||
break;
|
||||
case 3020:
|
||||
result = new MessageRecommendation(PassCode_2021.SPF_DuplicateFunctionChains);
|
||||
break;
|
||||
}
|
||||
MessageRecommendation finalResult = result;
|
||||
if ((result != null) && (Data.values().stream().noneMatch(recommendation -> recommendation.isMatch(finalResult)))) {
|
||||
try {
|
||||
getDb().Insert(result);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
17
src/ProjectData/Messages/Warnings/MessageWarning.java
Normal file
17
src/ProjectData/Messages/Warnings/MessageWarning.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package ProjectData.Messages.Warnings;
|
||||
import ProjectData.Messages.Message;
|
||||
public class MessageWarning extends Message {
|
||||
|
||||
|
||||
public MessageWarning(String file_in, int line_in, String value_in, int group_in) throws Exception {
|
||||
super(file_in, line_in, value_in, group_in);
|
||||
}
|
||||
public MessageWarning() {
|
||||
}
|
||||
public static String filterValue = "";
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return super.isVisible()&&value.contains(filterValue);
|
||||
}
|
||||
|
||||
}
|
||||
25
src/ProjectData/Messages/Warnings/WarningsDBTable.java
Normal file
25
src/ProjectData/Messages/Warnings/WarningsDBTable.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package ProjectData.Messages.Warnings;
|
||||
import Common.Current;
|
||||
import ProjectData.Messages.MessagesDBTable;
|
||||
public class WarningsDBTable extends MessagesDBTable<MessageWarning> {
|
||||
//https://stackoverflow.com/questions/13079777/editable-jtableheader
|
||||
public WarningsDBTable() {
|
||||
super(MessageWarning.class);
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "предупреждение";
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.Warnings;
|
||||
}
|
||||
// применить значение фильтра к фильру объекта напирмер Message.filterValue = text;
|
||||
public void changeColumnFilterValue(int columnIndex, String text) {
|
||||
if (columnIndex == 3)
|
||||
MessageWarning.filterValue = text;
|
||||
}
|
||||
public Object getColumnFilterValue(int columnIndex) {
|
||||
return MessageWarning.filterValue;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user