From d743fa471fc593782973f25482b796fca5411f8b Mon Sep 17 00:00:00 2001 From: sfaqer Date: Sat, 21 Oct 2023 21:16:19 +1000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=20=D0=B2=20=D0=BC=D0=BE=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F,?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=B6=D0=B8=D1=82=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=BB=D0=B5=D1=81=D0=B0=20=D0=BA=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D1=8B=D0=B5=20=D0=B1=D1=8B=D0=BB=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D1=80=D0=B5=D0=B3=D0=B8=D1=81=D1=82=D1=80=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=B2=20=D1=81=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=BC=D0=B5=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 1 + ...20\267\320\260\321\202\320\276\321\200.os" | 136 ++++++++++++++++++ ...20\264\320\265\320\273\320\272\320\260.os" | 127 +--------------- 3 files changed, 142 insertions(+), 122 deletions(-) create mode 100644 "src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\265\320\275\320\270\320\267\320\260\321\202\320\276\321\200.os" diff --git a/packagedef b/packagedef index b744924..5411f40 100644 --- a/packagedef +++ b/packagedef @@ -21,6 +21,7 @@ .ЗависитОт("fluent", "0.5.0") .ЗависитОт("reflector", "0.7.1") .ЗависитОт("semaphore", "1.1.0") + .ЗависитОт("collectionos", "0.3.0") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("asserts") diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\265\320\275\320\270\320\267\320\260\321\202\320\276\321\200.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\265\320\275\320\270\320\267\320\260\321\202\320\276\321\200.os" new file mode 100644 index 0000000..dbdb1f3 --- /dev/null +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\321\201\320\265\320\275\320\270\320\267\320\260\321\202\320\276\321\200.os" @@ -0,0 +1,136 @@ +#Использовать collectionos +#Использовать annotations + +#Область ОписаниеПеременных + +Перем ФабрикаЖелудей; +Перем КонтейнерАннотаций; +Перем Поделка; +Перем СистемныеНапильники; +Перем ПросканированныеТипы; +Перем Рефлектор; + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +Процедура ПросканироватьИзвестныеТипы() Экспорт + + ПросканироватьТипы( + Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)) + .ВыгрузитьКолонку("Значение") + ); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПросканироватьТипы(Типы) + + РазворачивательАннотаций = КонтейнерАннотаций.ПолучитьРазворачивательАннотаций(); + + // Двойной проход по типам для предварительного добавления аннотаций, которые могут быть нужны + // для добавления остальных типов желудей. + Для Каждого ТипЖелудя Из Типы Цикл + + Если ПросканированныеТипы.Содержит(ТипЖелудя) Тогда + Продолжить; + КонецЕсли; + + Методы = Рефлектор.ПолучитьТаблицуМетодов(ТипЖелудя); + + Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда + ДобавитьАннотацию(ТипЖелудя); + ПросканированныеТипы.Добавить(ТипЖелудя); + КонецЕсли; + + КонецЦикла; + + Для Каждого ТипЖелудя Из Типы Цикл + + Если ПросканированныеТипы.Содержит(ТипЖелудя) Тогда + Продолжить; + КонецЕсли; + + Методы = Рефлектор.ПолучитьТаблицуМетодов(ТипЖелудя); + + Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда + Продолжить; + КонецЕсли; + + РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, ТипЖелудя); + + Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Желудь").Количество() > 0 Тогда + ДобавитьЖелудь(ТипЖелудя); + ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Дуб").Количество() > 0 Тогда + ДобавитьДуб(ТипЖелудя); + ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Напильник").Количество() > 0 Тогда + ДобавитьНапильник(ТипЖелудя); + ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Рогатка").Количество() > 0 Тогда + ДобавитьРогатку(ТипЖелудя); + ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Заготовка").Количество() > 0 Тогда + ДобавитьЗаготовку(ТипЖелудя); + Иначе // BSLLS:EmptyCodeBlock-off + // no-op + КонецЕсли; + + ПросканированныеТипы.Добавить(ТипЖелудя); + + КонецЦикла; + +КонецПроцедуры + +Процедура ДобавитьЖелудь(Тип, Имя = "") + ФабрикаЖелудей.ДобавитьЖелудь(Тип, Имя); +КонецПроцедуры + +Процедура ДобавитьДуб(Тип) + ФабрикаЖелудей.ДобавитьДуб(Тип); +КонецПроцедуры + +Процедура ДобавитьНапильник(Тип) + + Если СистемныеНапильники.Содержит(Тип) Тогда + ФабрикаЖелудей.ДобавитьСистемныйНапильник(Тип); + Иначе + ФабрикаЖелудей.ДобавитьНапильник(Тип); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьЗаготовку(Тип) + + ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЗаготовку(Тип); + + Заготовка = Поделка.НайтиЖелудь(ОпределениеЗаготовки.Имя()); + Заготовка.ПриИнициализацииПоделки(Поделка); + +КонецПроцедуры + +Процедура ДобавитьРогатку(Тип) + ФабрикаЖелудей.ДобавитьРогатку(Тип); +КонецПроцедуры + +Процедура ДобавитьАннотацию(Тип) + КонтейнерАннотаций.ДобавитьАннотацию(Тип); +КонецПроцедуры + +#КонецОбласти + +Процедура ПриСозданииОбъекта(пПоделка, пФабрикаЖелудей, пКонтейнерАннотаций) + + ФабрикаЖелудей = пФабрикаЖелудей; + КонтейнерАннотаций = пКонтейнерАннотаций; + Поделка = пПоделка; + + СистемныеНапильники = Новый МножествоСоответствие; + СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомПластилинаНаПолях")); + СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомФинальныйШтрих")); + + ПросканированныеТипы = Новый МножествоСоответствие; + + Рефлектор = Новый Рефлектор; + +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index 660a976..7846e49 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -11,7 +11,7 @@ Перем ФабрикаЖелудей; Перем СостояниеПриложения; Перем НапильникиБылиПроинициализированы; -Перем СистемныеНапильники; +Перем Осенизатор; Перем Лог; Перем МенеджерПараметров; @@ -192,7 +192,7 @@ Процедура ЗапуститьПриложение() Экспорт ПроверитьСостояниеИнициализация(); - + Осенизатор.ПросканироватьИзвестныеТипы(); СостояниеПриложения = СостоянияПриложения.Выполнение(); ЗапускательПриложения = НайтиЖелудь("ЗапускательПриложения"); @@ -204,65 +204,6 @@ #Область СлужебныеПроцедурыИФункции -Функция ДобавитьЖелудьСлужебный(Тип, Имя = "") - ПроверитьСостояниеИнициализация(); - ФабрикаЖелудей.ДобавитьЖелудь(Тип, Имя); - - Возврат ЭтотОбъект; -КонецФункции - -Функция ДобавитьДубСлужебный(Тип) - ПроверитьСостояниеИнициализация(); - ФабрикаЖелудей.ДобавитьДуб(Тип); - - Возврат ЭтотОбъект; -КонецФункции - -Функция ДобавитьНапильникСлужебный(Тип) - - Если СистемныеНапильники.Найти(Тип) <> Неопределено Тогда - ФабрикаЖелудей.ДобавитьСистемныйНапильник(Тип); - Иначе - ПроверитьСостояниеИнициализация(); - ФабрикаЖелудей.ДобавитьНапильник(Тип); - КонецЕсли; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция ДобавитьЗаготовкуСлужебный(Тип) - - ПроверитьСостояниеИнициализация(); - - ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЗаготовку(Тип); - - Заготовка = НайтиЖелудь(ОпределениеЗаготовки.Имя()); - Заготовка.ПриИнициализацииПоделки(ЭтотОбъект); - - Возврат ЭтотОбъект; - -КонецФункции - -Функция ДобавитьРогаткуСлужебный(Тип) - - ПроверитьСостояниеИнициализация(); - - ФабрикаЖелудей.ДобавитьРогатку(Тип); - - Возврат ЭтотОбъект; - -КонецФункции - -Функция ДобавитьАннотациюСлужебный(Тип) - - ПроверитьСостояниеИнициализация(); - КонтейнерАннотаций.ДобавитьАннотацию(Тип); - - Возврат ЭтотОбъект; - -КонецФункции - Функция ИнициализироватьКомпанейскийЖелудь(Имя, ПрилепляемыеЧастицы) Желудь = Неопределено; @@ -322,62 +263,6 @@ КонецПроцедуры -Функция ПросканироватьИзвестныеТипы() - - Рефлектор = Новый Рефлектор; - - ПросканироватьТипы(Рефлектор.ИзвестныеТипы(Новый Структура("Пользовательский", Истина)).ВыгрузитьКолонку("Значение")); - - Возврат ЭтотОбъект; - -КонецФункции - -Процедура ПросканироватьТипы(Типы) - - РазворачивательАннотаций = КонтейнерАннотаций.ПолучитьРазворачивательАннотаций(); - - // Двойной проход по типам для предварительного добавления аннотаций, которые могут быть нужны - // для добавления остальных типов желудей. - Для Каждого ТипЖелудя Из Типы Цикл - - РефлекторОбъекта = Новый РефлекторОбъекта(ТипЖелудя); - Методы = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь); - - Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда - ДобавитьАннотациюСлужебный(ТипЖелудя); - КонецЕсли; - - КонецЦикла; - - Для Каждого ТипЖелудя Из Типы Цикл - - РефлекторОбъекта = Новый РефлекторОбъекта(ТипЖелудя); - Методы = РефлекторОбъекта.ПолучитьТаблицуМетодов(, Ложь); - - Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда - Продолжить; - КонецЕсли; - - РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, ТипЖелудя); - - Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Желудь").Количество() > 0 Тогда - ДобавитьЖелудьСлужебный(ТипЖелудя); - ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Дуб").Количество() > 0 Тогда - ДобавитьДубСлужебный(ТипЖелудя); - ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Напильник").Количество() > 0 Тогда - ДобавитьНапильникСлужебный(ТипЖелудя); - ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Рогатка").Количество() > 0 Тогда - ДобавитьРогаткуСлужебный(ТипЖелудя); - ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Заготовка").Количество() > 0 Тогда - ДобавитьЗаготовкуСлужебный(ТипЖелудя); - Иначе // BSLLS:EmptyCodeBlock-off - // no-op - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - Процедура ИнициализироватьМенеджерПараметров(СоветДругогоМастера) МенеджерПараметров = Новый МенеджерПараметров(); @@ -413,10 +298,6 @@ Процедура ПриСозданииОбъекта(Знач СоветДругогоМастера = Неопределено) - СистемныеНапильники = Новый Массив; - СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомПластилинаНаПолях")); - СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомФинальныйШтрих")); - Если СоветДругогоМастера = Неопределено Тогда СоветДругогоМастера = Новый СоветДругогоМастера(); КонецЕсли; @@ -433,7 +314,9 @@ ИнициализироватьМенеджерПараметров(СоветДругогоМастера); - ПросканироватьИзвестныеТипы(); + Осенизатор = Новый Осенизатор(ЭтотОбъект, ФабрикаЖелудей, КонтейнерАннотаций); + + Осенизатор.ПросканироватьИзвестныеТипы(); КонецПроцедуры