1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-06-09 23:56:48 +02:00
Files
OpenIntegrations/ci/os/internal/Classes/IntermediateResultProcessingCheck.os
T

118 lines
5.2 KiB
Plaintext

#Использовать "./internal"
#Использовать osparser
Перем БылиОшибки;
Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)
Если ДанныеПроекта_ = Неопределено Тогда
ДанныеПроекта = Новый ProjectData;
Иначе
ДанныеПроекта = ДанныеПроекта_;
КонецЕсли;
CommonTools.СообщитьПроцесс("Intermediate result processing check");
БылиОшибки = Ложь;
Расположение = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.configurationSrc");
ОбщийМассивМодулей = Новый Массив;
ФайлыМодулей = НайтиФайлы(Расположение, "*.bsl", Истина);
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
ПроверитьМодуль(ФайлМодуля);
КонецЦикла;
Если БылиОшибки Тогда
ВызватьИсключение "Processing check failed!";
КонецЕсли;
КонецПроцедуры
Процедура ПроверитьМодуль(Знач ФайлМодуля)
ДокументМодуля = Новый ТекстовыйДокумент();
ДокументМодуля.Прочитать(ФайлМодуля.ПолноеИмя);
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
Парсер = Новый ПарсерВстроенногоЯзыка;
СтруктураМодуля = Парсер.Разобрать(ТекстМодуля);
МассивПризнаков = ПолучитьМассивПризнаков(СтруктураМодуля, ДокументМодуля);
Для Каждого Метод Из СтруктураМодуля.Объявления Цикл
Если Метод.Тип = "ОбъявлениеМетода" Тогда
ТекстМетода = ПолучитьТекстМетода(Метод, ДокументМодуля);
ЧислоВхожденийHttp = 0;
Для Каждого Признак Из МассивПризнаков Цикл
ЧислоВхожденийHttp = ЧислоВхожденийHttp + СтрЧислоВхождений(ТекстМетода, Признак);
КонецЦикла;
ЧислоВхожденийОбработка = СтрЧислоВхождений(ТекстМетода, "НормализоватьПромежуточныйРезультат");
ЧислоВхожденийПропуска = СтрЧислоВхождений(ТекстМетода, "!IRPSkip");
Если ЧислоВхожденийОбработка + ЧислоВхожденийПропуска < ЧислоВхожденийHttp - 1 Тогда
БылиОшибки = Истина;
CommonTools.СообщитьПроцесс(СтрШаблон("Intermediate result processing not found: %1.%2"
, ФайлМодуля.Путь
, Метод.Сигнатура.Имя));
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ПолучитьТекстМетода(Знач Метод, Знач ДокументМодуля)
МассивСтрокМетода = Новый Массив;
Для Н = Метод.Начало.НомерСтроки + 1 По Метод.Конец.НомерСтроки - 1 Цикл
МассивСтрокМетода.Добавить(ДокументМодуля.ПолучитьСтроку(Н));
КонецЦикла;
Возврат СтрСоединить(МассивСтрокМетода, Символы.ПС);
КонецФункции
Функция ПолучитьМассивПризнаков(Знач ДанныеМодуля, Знач ТекстовыйДокументМодуля)
СписокФункций = Новый Массив;
КоличествоФункций = 0;
СписокФункций.Добавить("OPI_HTTPКлиент");
СписокФункций.Добавить("OPI_ЗапросыHTTP");
Пока КоличествоФункций <> СписокФункций.Количество() Цикл
КоличествоФункций = СписокФункций.Количество();
Для Каждого Метод Из ДанныеМодуля.Объявления Цикл
Если Метод.Тип = "ОбъявлениеМетода" Тогда
ТекстМетод = ПолучитьТекстМетода(Метод, ТекстовыйДокументМодуля);
ИмяМетода = Метод.Сигнатура.Имя + "(";
Для Каждого Имя Из СписокФункций Цикл
Если СтрНайти(ТекстМетод, Имя) > 0 И СписокФункций.Найти(ИмяМетода) = Неопределено Тогда
СписокФункций.Добавить(ИмяМетода);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат СписокФункций;
КонецФункции