package ProjectData.Messages; import Common.Constants; import Common.Current; import Common.Global; import Common.Utils.Utils; import GlobalData.Settings.SettingName; import ProjectData.SapforData.FileObject; import ProjectData.SapforData.FileObjectWithMessages; import Visual_DVM_2021.Passes.PassException; import java.util.HashMap; import java.util.Map; public class Message extends FileObject { private static HashMap codedMessages; private static HashMap 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); if ((group == Constants.parser_group) || (Current.mode != Current.Mode.Normal)) { value = value_in; } else { value = !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' было выполнено в предположении, что выражения '%s' и '%s' различны"); //2020 codedMessages.put("R193", ""); codedMessages.put("R194", "Нельзя удалить приватную переменную '%s' - не удалось найти достигающее определение для оператора"); //2022 codedMessages.put("R196", "Невозможно выполнить преобразование циклов из-за зависимостей между операторами."); //2023 codedMessages.put("R197", "Преобразование не может быть выполнено - не произошло никаких изменений в коде"); codedMessages.put("R198", "Нельзя удалить приватную переменную '%s' - обращения к ней имеют разное выравнивание с циклом"); codedMessages.put("R199", "Зависимость по скаляру с типом lastprivate препятствует распараллеливанию данного цикла"); codedMessages.put("R200", "Добавлена lastprivate переменная '%s' к циклу на строке %d"); codedMessages.put("R202", "Ссылка '%s' имеет отличный от оригинального массива размер"); //2025 codedMessages.put("R203", "Нельзя удалить приватную переменную '%s' - она используется в вызове функции %s"); //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'."); //3024 codedMessages.put("R204", "Пересечение памяти массивов препятствует распараллеливанию цикла"); //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("")) { Utils.CopyToClipboard(message); throw new PassException("Ошибка при декодировании сообщений на русском языке\n" + "message=" + Utils.Brackets(message)); } 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 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 Constants.parser_group: //сообщения от парсера. group_s += "parser"; break; case Constants.compiler_group: group_s += "compiler"; 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; } }