You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2026-06-09 23:56:48 +02:00
118 lines
5.2 KiB
Plaintext
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 И СписокФункций.Найти(ИмяМетода) = Неопределено Тогда
|
|
СписокФункций.Добавить(ИмяМетода);
|
|
Прервать;
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
КонецЕсли;
|
|
КонецЦикла;
|
|
|
|
КонецЦикла;
|
|
|
|
Возврат СписокФункций;
|
|
|
|
КонецФункции |