diff --git a/package-loader.os b/package-loader.os index 5f6906a..6dba364 100644 --- a/package-loader.os +++ b/package-loader.os @@ -11,7 +11,8 @@ Если Осень <> Неопределено Тогда ОбработатьКаталогКлассов(ОбъединитьПути(Путь, "src/Заготовки"), СтандартнаяОбработка, Отказ); ОбработатьКаталогКлассов(ОбъединитьПути(Путь, "src/Классы"), СтандартнаяОбработка, Отказ); - + ОбработатьКаталогМодулей(ОбъединитьПути(Путь, "src/Модули"), СтандартнаяОбработка, Отказ); + Осень.ДобавитьЗаготовкуДляАвтоИнициализации("ИнициализацияАсинх"); Иначе ВызватьИсключение "Некорректный порядок импорта библиотек. Сначала подключите autumn"; @@ -35,6 +36,30 @@ КонецПроцедуры +Процедура ОбработатьКаталогМодулей(Знач Путь, СтандартнаяОбработка, Отказ) + + КаталогМодулей = Новый Файл(Путь); + + Если КаталогМодулей.Существует() Тогда + Файлы = НайтиФайлы(КаталогМодулей.ПолноеИмя, "*.os"); + Для Каждого Файл Из Файлы Цикл + Вывести(СтрШаблон(" модуль (по соглашению) %1, файл %2", Файл.ИмяБезРасширения, Файл.ПолноеИмя)); + СтандартнаяОбработка = Ложь; + Попытка + ДобавитьМодульЕслиРанееНеДобавляли(Файл.ПолноеИмя, Файл.ИмяБезРасширения); + Исключение + Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда + ВызватьИсключение; + КонецЕсли; + СтандартнаяОбработка = Истина; + Вывести("Предупреждение: + |" + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + Процедура ДобавитьКлассЕслиРанееНеДобавляли(ПутьФайла, ИмяКласса) Вывести("Добавляю класс, если ранее не добавляли " + ИмяКласса); Если ВыдаватьОшибкуПриЗагрузкеУжеСуществующихКлассовМодулей Тогда @@ -60,6 +85,21 @@ КонецЕсли; КонецПроцедуры +Процедура ДобавитьМодульЕслиРанееНеДобавляли(ПутьФайла, ИмяМодуля) + Вывести("Добавляю модуль, если ранее не добавляли " + ИмяМодуля); + + МодульУжеЕсть = КэшМодулей.Найти(ИмяМодуля) <> Неопределено; + Если Не МодульУжеЕсть Тогда + + Вывести("Добавляю модуль, т.к. он не найден - " + ИмяМодуля); + ДобавитьМодуль(ПутьФайла, ИмяМодуля); + КэшМодулей.Добавить(ИмяМодуля); + Иначе + Вывести("Пропускаю загрузку модуля " + ИмяМодуля); + + КонецЕсли; +КонецПроцедуры + Процедура Вывести(Знач Сообщение) Если ПоказатьСообщенияЗагрузки Тогда Сообщить(Сообщение);