From 77deecdc1335e1859832269192b5d595309bc822 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Feb 2024 18:59:31 +0100 Subject: [PATCH 01/13] =?UTF-8?q?=D0=A4=D0=B8=D0=BB=D1=8C=D1=82=D1=80?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BC=D0=B5=D1=81=D1=82=20=D1=81?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=B0=D1=82=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BD=D0=B0=D0=BF=D0=B8=D0=BB=D1=8C=D0=BD=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=20=D0=BE=D1=81=D0=BD=D0=BE=D0=B2=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0=20=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=D1=82=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\273\321\214\320\275\320\270\320\272.os" | 10 ++- ...20\273\321\203\320\264\320\265\320\271.os" | 81 +++++++++++++++++-- ...20\265\320\273\321\203\320\264\321\217.os" | 10 ++- ...20\264\320\265\320\273\320\272\320\260.os" | 22 +++++ ...20\265\320\273\321\203\320\264\320\265.os" | 11 +++ ...20\273\321\217\321\210\320\260\321\205.os" | 11 +++ 6 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 "tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" index af76f38..bdac2b9 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" @@ -1,5 +1,11 @@ +Перем _ПрименяетсяТолькоНа; + +Функция ПрименяетсяТолькоНа() Экспорт + Возврат _ПрименяетсяТолькоНа; +КонецФункции + &Аннотация("Напильник") &Прозвище("Напильник") -Процедура ПриСозданииОбъекта(Значение = "") - +Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено) + _ПрименяетсяТолькоНа = ПрименяетсяТолькоНа; КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index fe4c871..62d32ad 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -106,12 +106,13 @@ Функция ДобавитьДуб(ТипДуба) Экспорт + ИмяКорневойАннотации = "Завязь"; ОпределениеЖелудя = ДобавитьЖителяЛеса(ТипДуба, "", "Дуб"); - МетодыЗавязи = ОпределениеЖелудя.НайтиМетодыСАннотациями("Завязь"); + МетодыЗавязи = ОпределениеЖелудя.НайтиМетодыСАннотациями(ИмяКорневойАннотации); Для Каждого МетодЗавязи Из МетодыЗавязи Цикл - ИмяЖелудя = ПрочитатьИмяЖелудя(МетодЗавязи.Аннотации, "Завязь", МетодЗавязи.Имя); + ИмяЖелудя = ПрочитатьИмяЖелудя(МетодЗавязи.Аннотации, ИмяКорневойАннотации, МетодЗавязи.Имя); ТипЖелудя = ПрочитатьТипЖелудя(МетодЗавязи, МетодЗавязи.Аннотации); ОпределениеЗавязи = СоздатьОпределениеЖелудя( @@ -119,7 +120,8 @@ ТипЖелудя, ТипДуба, МетодЗавязи, - МетодЗавязи.Аннотации + МетодЗавязи.Аннотации, + ИмяКорневойАннотации ); СохранитьОпределениеЖелудя(ОпределениеЗавязи); @@ -208,7 +210,10 @@ ИнициализируемыеНапильники.Удалить(ИндексНапильника); Иначе Если НЕ ОпределениеЖелудя.Спецификация() = СостоянияПриложения.Инициализация() Тогда - Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл + + ПрименяемыеНапильники = ОпределитьПрименяемыеНапильники(ОпределениеЖелудя); + + Для Каждого ОпределениеНапильника Из ПрименяемыеНапильники Цикл Если ОпределениеНапильника.Имя() = ОпределениеЖелудя.Имя() Тогда Продолжить; @@ -301,7 +306,8 @@ ТипЖителяЛеса, ТипЖителяЛеса, Конструктор, - Аннотации + Аннотации, + АннотацияНадКонструктором ); СохранитьОпределениеЖелудя(ОпределениеЖелудя); @@ -313,7 +319,14 @@ КонецФункции -Функция СоздатьОпределениеЖелудя(ИмяЖелудя, ТипЖелудя, ТипВладельцаСвойств, Конструктор, Аннотации) +Функция СоздатьОпределениеЖелудя( + ИмяЖелудя, + ТипЖелудя, + ТипВладельцаСвойств, + Конструктор, + Аннотации, + ИмяКорневойАннотации +) Завязь = СоздатьЗавязь(ТипВладельцаСвойств, Конструктор); @@ -323,6 +336,7 @@ Порядок = ПрочитатьПорядок(Аннотации); Верховный = ПрочитатьПризнакВерховногоЖелудя(Аннотации); Спецификация = ПрочитатьСпецификацию(Аннотации); + КорневаяАннотация = ПрочитатьКорневуюАннотацию(Аннотации, ИмяКорневойАннотации); // TODO: Унести в Приемку &Дуб // Если Спецификация = СостоянияПриложения.Инициализация() @@ -345,13 +359,16 @@ Прозвища, Порядок, Верховный, - Спецификация + Спецификация, + КорневаяАннотация ); Возврат ОпределениеЖелудя; КонецФункции +#Область СозданиеЗавязи + Функция СоздатьЗавязь(ТипВладельцаСвойств, Конструктор) Если НРег(Конструктор.Имя) = НРег("ПриСозданииОбъекта") @@ -385,6 +402,10 @@ КонецФункции +#КонецОбласти + +#Область ЧтениеПараметровЖелудя + Функция ПрочитатьИмяЖелудя(Аннотации, АннотацияНадМетодом, ЗначениеПоУмолчанию) Аннотация = РаботаСАннотациями.НайтиАннотацию(Аннотации, АннотацияНадМетодом); @@ -503,6 +524,19 @@ КонецФункции +Функция ПрочитатьКорневуюАннотацию(Аннотации, ИмяКорневойАннотации) + + КорневаяАннотация = РаботаСАннотациями.НайтиАннотацию(Аннотации, ИмяКорневойАннотации); + ОпределениеАннотации = Поделка.ПолучитьОпределениеАннотации(КорневаяАннотация.Имя); + + ОбъектАннотации = ОпределениеАннотации.СоздатьОбъектАннотации(КорневаяАннотация); + + Возврат ОбъектАннотации; + +КонецФункции + +#КонецОбласти + Процедура ДобавитьОпределениеНапильника(ОпределениеНапильника, Системный = Ложь) Порядок = ОпределениеНапильника.Порядок(); @@ -563,6 +597,39 @@ КонецПроцедуры +Функция ОпределитьПрименяемыеНапильники(ОпределениеЖелудя) + + ПрименяемыеНапильники = Новый Массив; + ПрозвищаЖелудя = ОпределениеЖелудя.Прозвища(); + + Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл + + КорневаяАннотация = ОпределениеНапильника.КорневаяАннотация(); + ПрименяетсяТолькоНа = КорневаяАннотация.ПрименяетсяТолькоНа(); + + Если ПрименяетсяТолькоНа.Количество() = 0 Тогда + ПрименяемыеНапильники.Добавить(ОпределениеНапильника); + Продолжить; + КонецЕсли; + + Если ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда + ПрименяемыеНапильники.Добавить(ОпределениеНапильника); + Продолжить; + КонецЕсли; + + Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл + Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда + ПрименяемыеНапильники.Добавить(ОпределениеНапильника); + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + Возврат ПрименяемыеНапильники; + +КонецФункции + #КонецОбласти #Область Инициализация diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\226\320\265\320\273\321\203\320\264\321\217.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\226\320\265\320\273\321\203\320\264\321\217.os" index 2a92608..1f99cb1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\226\320\265\320\273\321\203\320\264\321\217.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\226\320\265\320\273\321\203\320\264\321\217.os" @@ -11,6 +11,7 @@ Перем _Верховный; Перем _Порядок; Перем _Спецификация; +Перем _КорневаяАннотация; Перем _РефлекторОбъекта; Перем _РазворачивательАннотаций; @@ -62,6 +63,10 @@ Возврат _Спецификация; КонецФункции +Функция КорневаяАннотация() Экспорт + Возврат _КорневаяАннотация; +КонецФункции + Функция Свойства() Экспорт Если Свойства = Неопределено Тогда Свойства = ?(ЭтоПримитивныйТип, Новый ТаблицаЗначений, _РефлекторОбъекта.ПолучитьТаблицуСвойств(Неопределено, Истина)); @@ -98,7 +103,8 @@ Прозвища, Порядок, Верховный, - Спецификация + Спецификация, + КорневаяАннотация ) Ожидаем.Что(РазворачивательАннотаций).ИмеетТип("РазворачивательАннотаций"); Ожидаем.Что(ТипЖелудя).ИмеетТип("Тип"); @@ -112,6 +118,7 @@ Ожидаем.Что(Порядок).ИмеетТип("Число"); Ожидаем.Что(Верховный).ИмеетТип("Булево"); Ожидаем.Что(Спецификация).ИмеетТип("Строка"); + Ожидаем.Что(КорневаяАннотация).Не_().ИмеетТип("СтрокаТаблицыЗначений"); Если Спецификация = СостоянияПриложения.Инициализация() Тогда ТекстСообщения = СтрШаблон( @@ -134,6 +141,7 @@ _Порядок = Порядок; _Верховный = Верховный; _Спецификация = Спецификация; + _КорневаяАннотация = КорневаяАннотация; _РазворачивательАннотаций = РазворачивательАннотаций; _РефлекторОбъекта = Новый РефлекторОбъекта(ТипЖелудя); diff --git "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index 53da288..bd3b4b5 100644 --- "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -879,3 +879,25 @@ .ВыбрасываетИсключение("Неизвестная прилепляемая коллекция Нечто"); КонецПроцедуры + +&Тест +Процедура ФильтрНапильниковПрименяетсяТолькоНаРаботает() Экспорт + + // Дано + Поделка = Новый Поделка; + Поделка.ЗапуститьПриложение(); + + НапильникПоПрозвищам = Поделка.НайтиЖелудь("НапильникПрименяющийсяТолькоНаКругляшах"); + НапильникПоИмени = Поделка.НайтиЖелудь("НапильникПрименяющийсяТолькоНаКонкретномЖелуде"); + + // Когда + Кругляши = Поделка.НайтиЖелуди("Кругляш"); + Мелкие = Поделка.НайтиЖелуди("Мелкий"); + СлучайныйЖелудьСПрозвищами = Поделка.НайтиЖелудь("МногоимённыйЖелудь"); + СлучайныйОдиночныйЖелудь = Поделка.НайтиЖелудь("КомпанейскийЖелудь"); + + // Тогда + Ожидаем.Что(НапильникПоПрозвищам.СработалоРаз).Равно(Кругляши.Количество()); + Ожидаем.Что(НапильникПоИмени.СработалоРаз).Равно(1); + +КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" new file mode 100644 index 0000000..62fb287 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" @@ -0,0 +1,11 @@ +Перем СработалоРаз Экспорт; + +Функция ОбработатьЖелудь(Желудь, ОпределениеЖелудя) Экспорт // BSLLS:UnusedParameters-off + СработалоРаз = СработалоРаз + 1; + Возврат Желудь; +КонецФункции + +&Напильник(ПрименяетсяТолькоНа = "КомпанейскийЖелудь") +Процедура ПриСозданииОбъекта() + СработалоРаз = 0; +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" new file mode 100644 index 0000000..9c119f9 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" @@ -0,0 +1,11 @@ +Перем СработалоРаз Экспорт; + +Функция ОбработатьЖелудь(Желудь, ОпределениеЖелудя) Экспорт // BSLLS:UnusedParameters-off + СработалоРаз = СработалоРаз + 1; + Возврат Желудь; +КонецФункции + +&Напильник(ПрименяетсяТолькоНа = "Кругляш") +Процедура ПриСозданииОбъекта() + СработалоРаз = 0; +КонецПроцедуры \ No newline at end of file From 095d509fc4b9958996178dab9ccd7dedea8a8507 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Feb 2024 19:08:59 +0100 Subject: [PATCH 02/13] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BA=D1=8D=D1=88?= =?UTF-8?q?=D0=B0=20=D0=B2=D0=BE=20=D1=81=D0=BB=D0=B0=D0=B2=D1=83=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B5=D0=B9=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=B6=D0=B5=D0=BB=D1=83=D0=B4=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\273\321\203\320\264\320\265\320\271.os" | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index 62d32ad..b23861e 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -27,9 +27,15 @@ // Соответствие, в котором хранятся все определения желудей, являющихся напильниками. // * Ключ - Строка - имя желудя. -// * Значение - ОпределениеЖелудя - определение желудя. +// * Значение - ОпределениеЖелудя - определение напильника. Перем ОпределенияНапильниковПоИмени; +// Соответствие - Соответствие, в котором хранится список применяемых к конкретному +// желудю напильников. +// * Ключ - Строка - имя желудя. +// * Значение - ОпределениеЖелудя - определение напильника. +Перем КэшПрименяемыхНапильников; + // Массив из ОпределениеЖелудя - Список инициализируемых в данный момент напильников. Перем ИнициализируемыеНапильники; @@ -559,6 +565,7 @@ // Реинициализация сортированного списка напильников для возможности их использования в заготовках. ОпределенияНапильников = ПолучитьСписокОпределенийЖелудей("Напильник"); + КэшПрименяемыхНапильников.Очистить(); ОпределенияНапильниковПоИмени.Вставить(ОпределениеНапильника.Имя(), ОпределениеНапильника); КонецПроцедуры @@ -599,6 +606,11 @@ Функция ОпределитьПрименяемыеНапильники(ОпределениеЖелудя) + ПрименяемыеНапильники = КэшПрименяемыхНапильников.Получить(ОпределениеЖелудя.Имя()); + Если ПрименяемыеНапильники <> Неопределено Тогда + Возврат ПрименяемыеНапильники; + КонецЕсли; + ПрименяемыеНапильники = Новый Массив; ПрозвищаЖелудя = ОпределениеЖелудя.Прозвища(); @@ -626,6 +638,8 @@ КонецЦикла; + КэшПрименяемыхНапильников.Вставить(ОпределениеЖелудя.Имя(), ПрименяемыеНапильники); + Возврат ПрименяемыеНапильники; КонецФункции @@ -647,6 +661,7 @@ ОпределенияНапильниковПоИмени = Новый Соответствие(); ОпределенияНапильников = Новый Массив(); + КэшПрименяемыхНапильников = Новый Соответствие(); КонецПроцедуры From 4e3243aea9101a0bed7e59fde325a87fffe29ab6 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Feb 2024 22:03:49 +0100 Subject: [PATCH 03/13] =?UTF-8?q?=D0=90=D0=BD=D0=BD=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20"=D0=9E=D1=81=D0=BE=D0=B1=D0=BE=D0=B5?= =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D0=B5"=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BF=D0=B8=D0=BB=D1=8C=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2,=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D0=BC=D0=BE=D0=B3?= =?UTF-8?q?=D1=83=D1=82=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D1=8F=D1=82?= =?UTF-8?q?=D1=8C=D1=81=D1=8F=20=D0=BD=D0=B0=20=D0=B6=D0=B5=D0=BB=D1=83?= =?UTF-8?q?=D0=B4=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\273\321\214\320\275\320\270\320\272.os" | 7 ++++ ...21\211\320\265\320\275\320\270\320\265.os" | 39 +++++++++++++++++++ ...20\273\321\203\320\264\320\265\320\271.os" | 39 +++++++++++++------ ...20\264\320\265\320\273\320\272\320\260.os" | 19 +++++++++ ...21\214\320\275\320\270\320\272\320\270.os" | 17 ++++++++ 5 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 "src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" create mode 100644 "tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" index bdac2b9..68f11f1 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" @@ -1,3 +1,5 @@ +#Использовать asserts + Перем _ПрименяетсяТолькоНа; Функция ПрименяетсяТолькоНа() Экспорт @@ -7,5 +9,10 @@ &Аннотация("Напильник") &Прозвище("Напильник") Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено) + + Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл + Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка"); + КонецЦикла; + _ПрименяетсяТолькоНа = ПрименяетсяТолькоНа; КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" new file mode 100644 index 0000000..7c02eca --- /dev/null +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" @@ -0,0 +1,39 @@ +#Использовать asserts + +Перем _ПрименятьТолькоНапильники; +Перем _НеПрименятьНапильники; + +Функция НапильникПрименяется(ИмяНапильника) Экспорт + + Если _ПрименятьТолькоНапильники.Количество() > 0 Тогда + Возврат _ПрименятьТолькоНапильники.Найти(ИмяНапильника) <> Неопределено; + Иначе + Возврат _НеПрименятьНапильники.Найти(ИмяНапильника) = Неопределено; + КонецЕсли; + +КонецФункции + +&Аннотация("ОсобоеОбращение") +Процедура ПриСозданииОбъекта( + &Повторяемый ПрименятьТолькоНапильник = Неопределено, + &Повторяемый НеПрименятьНапильник = Неопределено +) + + Для Каждого МестоПрименения Из ПрименятьТолькоНапильник Цикл + Ожидаем.Что(МестоПрименения, "Ограничение ""только"" применения напильника должно быть задано строкой") + .ИмеетТип("Строка"); + КонецЦикла; + + Для Каждого МестоПрименения Из НеПрименятьНапильник Цикл + Ожидаем.Что(МестоПрименения, "Ограничение ""не"" применения напильника должно быть задано строкой") + .ИмеетТип("Строка"); + КонецЦикла; + + Если ПрименятьТолькоНапильник.Количество() > 0 И НеПрименятьНапильник.Количество() > 0 Тогда + ВызватьИсключение "Нельзя одновременно задавать ограничения ""только"" и ""не"""; + КонецЕсли; + + _ПрименятьТолькоНапильники = ПрименятьТолькоНапильник; + _НеПрименятьНапильники = НеПрименятьНапильник; + +КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index b23861e..9e5a47c 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -613,33 +613,48 @@ ПрименяемыеНапильники = Новый Массив; ПрозвищаЖелудя = ОпределениеЖелудя.Прозвища(); + + АннотацииЗавязи = ОпределениеЖелудя.Завязь().ДанныеМетода().Аннотации; + АннотацияОсобоеОбращение = РаботаСАннотациями.НайтиАннотацию(АннотацииЗавязи, "ОсобоеОбращение"); + ОпределениеАннотацииОсобоеОбращение = Поделка.ПолучитьОпределениеАннотации("ОсобоеОбращение"); + Если АннотацияОсобоеОбращение <> Неопределено Тогда + ОбъектАннотацииОсобоеОбращение = ОпределениеАннотацииОсобоеОбращение.СоздатьОбъектАннотации(АннотацияОсобоеОбращение); + КонецЕсли; Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл КорневаяАннотация = ОпределениеНапильника.КорневаяАннотация(); ПрименяетсяТолькоНа = КорневаяАннотация.ПрименяетсяТолькоНа(); + НапильникМожетПрименяться = Ложь; + Если ПрименяетсяТолькоНа.Количество() = 0 Тогда - ПрименяемыеНапильники.Добавить(ОпределениеНапильника); - Продолжить; + НапильникМожетПрименяться = Истина; + ИначеЕсли ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда + НапильникМожетПрименяться = Истина; + Иначе + + Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл + Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда + НапильникМожетПрименяться = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; - Если ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда - ПрименяемыеНапильники.Добавить(ОпределениеНапильника); - Продолжить; + Если НапильникМожетПрименяться И ОбъектАннотацииОсобоеОбращение <> Неопределено Тогда + НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникПрименяется(ОпределениеНапильника.Имя()); КонецЕсли; - Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл - Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда - ПрименяемыеНапильники.Добавить(ОпределениеНапильника); - Прервать; - КонецЕсли; - КонецЦикла; + Если НапильникМожетПрименяться Тогда + ПрименяемыеНапильники.Добавить(ОпределениеНапильника); + КонецЕсли; КонецЦикла; КэшПрименяемыхНапильников.Вставить(ОпределениеЖелудя.Имя(), ПрименяемыеНапильники); - + Возврат ПрименяемыеНапильники; КонецФункции diff --git "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index bd3b4b5..bf5cd2c 100644 --- "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -901,3 +901,22 @@ Ожидаем.Что(НапильникПоИмени.СработалоРаз).Равно(1); КонецПроцедуры + +&Тест +Процедура ФильтрНапильниковИзЖелудяРаботает() Экспорт + + // Дано + Поделка = Новый Поделка; + Поделка.ЗапуститьПриложение(); + + // Когда + Желудь = Поделка.НайтиЖелудь("ЖелудьИзбирательноПрименяющийНапильники"); + ЖелудьНижнегоУровня = Поделка.НайтиЖелудь("ЖелудьНижнегоУровня"); + + // Тогда + Ожидаем.Что(Желудь.ЖелудьНижнегоУровня, "Желудь должен внедриться в поле") + .Равно(ЖелудьНижнегоУровня); + Ожидаем.Что(Желудь.ВторойЖелудьНижнегоУровня, "Желудь не должен инициализироваться в методе ФинальныйШтрих") + .Равно(Неопределено); + +КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" new file mode 100644 index 0000000..4760462 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" @@ -0,0 +1,17 @@ +&Пластилин +Перем ЖелудьНижнегоУровня Экспорт; + +Перем ВторойЖелудьНижнегоУровня Экспорт; + +&ФинальныйШтрих +Процедура Инит() Экспорт + ВторойЖелудьНижнегоУровня = ЖелудьНижнегоУровня; +КонецПроцедуры + +&Желудь +&ОсобоеОбращение( + ПрименятьТолькоНапильник = "ОбработкаНапильникомПластилинаНаПолях" +) +Процедура ПриСозданииОбъекта() + +КонецПроцедуры \ No newline at end of file From b6d9f67517d529e886db062736ff6230b0671076 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Feb 2024 22:14:12 +0100 Subject: [PATCH 04/13] Fix QF --- ...320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" | 3 +++ ...320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" | 3 +++ ...321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" | 3 +++ 3 files changed, 9 insertions(+) diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" index 4760462..55bf18b 100644 --- "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\230\320\267\320\261\320\270\321\200\320\260\321\202\320\265\320\273\321\214\320\275\320\276\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\270.os" @@ -1,3 +1,6 @@ +// BSLLS:MissingVariablesDescription-off +// BSLLS:ExportVariables-off + &Пластилин Перем ЖелудьНижнегоУровня Экспорт; diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" index 62fb287..8d4fe83 100644 --- "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\320\276\320\275\320\272\321\200\320\265\321\202\320\275\320\276\320\274\320\226\320\265\320\273\321\203\320\264\320\265.os" @@ -1,3 +1,6 @@ +// BSLLS:MissingVariablesDescription-off +// BSLLS:ExportVariables-off + Перем СработалоРаз Экспорт; Функция ОбработатьЖелудь(Желудь, ОпределениеЖелудя) Экспорт // BSLLS:UnusedParameters-off diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" index 9c119f9..60e9b64 100644 --- "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\237\321\200\320\270\320\274\320\265\320\275\321\217\321\216\321\211\320\270\320\271\321\201\321\217\320\242\320\276\320\273\321\214\320\272\320\276\320\235\320\260\320\232\321\200\321\203\320\263\320\273\321\217\321\210\320\260\321\205.os" @@ -1,3 +1,6 @@ +// BSLLS:MissingVariablesDescription-off +// BSLLS:ExportVariables-off + Перем СработалоРаз Экспорт; Функция ОбработатьЖелудь(Желудь, ОпределениеЖелудя) Экспорт // BSLLS:UnusedParameters-off From 14e2fca639f998cd727ffee682cbbd3323116023 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Wed, 21 Feb 2024 22:31:42 +0100 Subject: [PATCH 05/13] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=BF=D0=BE=D0=BB=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BD=D0=B0=D0=BF=D0=B8=D0=BB=D1=8C=D0=BD=D0=B8?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...21\211\320\265\320\275\320\270\320\265.os" | 15 ++++++++++++++ ...20\264\320\265\320\273\320\272\320\260.os" | 18 +++++++++++++++++ ...20\270\320\272\320\260\320\274\320\270.os" | 20 +++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 "tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\236\321\202\320\272\320\273\321\216\321\207\320\265\320\275\320\275\321\213\320\274\320\270\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\260\320\274\320\270.os" diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" index 7c02eca..06de0aa 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" @@ -1,10 +1,15 @@ #Использовать asserts +Перем _ОтключитьВсеНапильники; Перем _ПрименятьТолькоНапильники; Перем _НеПрименятьНапильники; Функция НапильникПрименяется(ИмяНапильника) Экспорт + Если _ОтключитьВсеНапильники Тогда + Возврат Ложь; + КонецЕсли; + Если _ПрименятьТолькоНапильники.Количество() > 0 Тогда Возврат _ПрименятьТолькоНапильники.Найти(ИмяНапильника) <> Неопределено; Иначе @@ -15,6 +20,7 @@ &Аннотация("ОсобоеОбращение") Процедура ПриСозданииОбъекта( + ОтключитьВсеНапильники = Ложь, &Повторяемый ПрименятьТолькоНапильник = Неопределено, &Повторяемый НеПрименятьНапильник = Неопределено ) @@ -29,10 +35,19 @@ .ИмеетТип("Строка"); КонецЦикла; + Если ОтключитьВсеНапильники И ПрименятьТолькоНапильник.Количество() > 0 Тогда + ВызватьИсключение "Нельзя одновременно отключать все напильники и задавать ограничения ""только"""; + КонецЕсли; + + Если ОтключитьВсеНапильники И НеПрименятьНапильник.Количество() > 0 Тогда + ВызватьИсключение "Нельзя одновременно отключать все напильники и задавать ограничения ""не"""; + КонецЕсли; + Если ПрименятьТолькоНапильник.Количество() > 0 И НеПрименятьНапильник.Количество() > 0 Тогда ВызватьИсключение "Нельзя одновременно задавать ограничения ""только"" и ""не"""; КонецЕсли; + _ОтключитьВсеНапильники = ОтключитьВсеНапильники; _ПрименятьТолькоНапильники = ПрименятьТолькоНапильник; _НеПрименятьНапильники = НеПрименятьНапильник; diff --git "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" index bf5cd2c..e711c94 100644 --- "a/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" +++ "b/tests/\320\237\320\276\320\264\320\265\320\273\320\272\320\260.os" @@ -920,3 +920,21 @@ .Равно(Неопределено); КонецПроцедуры + +&Тест +Процедура ОтключениеНапильниковНаЖелудеРаботает() Экспорт + + // Дано + Поделка = Новый Поделка; + Поделка.ЗапуститьПриложение(); + + // Когда + Желудь = Поделка.НайтиЖелудь("ЖелудьСОтключеннымиНапильниками"); + + // Тогда + Ожидаем.Что(Желудь.ЖелудьНижнегоУровня, "Желудь не должен внедриться в поле") + .Равно(Неопределено); + Ожидаем.Что(Желудь.ВторойЖелудьНижнегоУровня, "Желудь не должен инициализироваться в методе ФинальныйШтрих") + .Равно(Неопределено); + +КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\236\321\202\320\272\320\273\321\216\321\207\320\265\320\275\320\275\321\213\320\274\320\270\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\260\320\274\320\270.os" "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\236\321\202\320\272\320\273\321\216\321\207\320\265\320\275\320\275\321\213\320\274\320\270\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\260\320\274\320\270.os" new file mode 100644 index 0000000..859e499 --- /dev/null +++ "b/tests/\320\242\320\265\321\201\321\202\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\273\320\260\321\201\321\201\321\213/\320\226\320\265\320\273\321\203\320\264\321\214\320\241\320\236\321\202\320\272\320\273\321\216\321\207\320\265\320\275\320\275\321\213\320\274\320\270\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272\320\260\320\274\320\270.os" @@ -0,0 +1,20 @@ +// BSLLS:MissingVariablesDescription-off +// BSLLS:ExportVariables-off + +&Пластилин +Перем ЖелудьНижнегоУровня Экспорт; + +Перем ВторойЖелудьНижнегоУровня Экспорт; + +&ФинальныйШтрих +Процедура Инит() Экспорт + ВторойЖелудьНижнегоУровня = ЖелудьНижнегоУровня; +КонецПроцедуры + +&Желудь +&ОсобоеОбращение( + ОтключитьВсеНапильники = Истина +) +Процедура ПриСозданииОбъекта() + +КонецПроцедуры \ No newline at end of file From 1e47b093e3b2c7cd3874dbc97d3ddbc6331db084 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 22 Feb 2024 10:23:50 +0100 Subject: [PATCH 06/13] =?UTF-8?q?=D0=9E=D0=B1=D1=89=D0=B8=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D1=84=D0=BB=D0=BE=D1=83=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20codecov?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index c1b9888..d65ed49 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -10,19 +10,7 @@ jobs: uses: autumn-library/workflows/.github/workflows/sonar.yml@coverage with: github_repository: autumn-library/autumn + codecov: true secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - coverage: - runs-on: ubuntu-latest - needs: [sonar] - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Download artifacts - uses: actions/download-artifact@v4 - - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v4.0.1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - slug: autumn-library/autumn - + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} From 6c9e2f9f1cfbac455d11b0b6849198e9ec95af63 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Fri, 23 Feb 2024 13:09:14 +0100 Subject: [PATCH 07/13] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3,=20=D0=BB=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\273\321\214\320\275\320\270\320\272.os" | 28 +++++++++-- ...21\211\320\265\320\275\320\270\320\265.os" | 2 +- ...20\273\321\203\320\264\320\265\320\271.os" | 47 +++++++++++-------- 3 files changed, 53 insertions(+), 24 deletions(-) diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" index 68f11f1..0a7263f 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" @@ -1,18 +1,40 @@ #Использовать asserts +#Использовать collectionos Перем _ПрименяетсяТолькоНа; -Функция ПрименяетсяТолькоНа() Экспорт - Возврат _ПрименяетсяТолькоНа; +Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт + + НапильникМожетПрименяться = Ложь; + + Если _ПрименяетсяТолькоНа.Количество() = 0 Тогда + НапильникМожетПрименяться = Истина; + ИначеЕсли _ПрименяетсяТолькоНа.Содержит(ОпределениеЖелудя.Имя()) Тогда + НапильникМожетПрименяться = Истина; + Иначе + + Для Каждого ПрозвищеЖелудя Из ОпределениеЖелудя.Прозвища() Цикл + Если _ПрименяетсяТолькоНа.Содержит(ПрозвищеЖелудя) Тогда + НапильникМожетПрименяться = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат НапильникМожетПрименяться; + КонецФункции &Аннотация("Напильник") &Прозвище("Напильник") Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено) + _ПрименяетсяТолькоНа = Новый МножествоСоответствие(); Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка"); + + _ПрименяетсяТолькоНа.Добавить(МестоПрименения); КонецЦикла; - _ПрименяетсяТолькоНа = ПрименяетсяТолькоНа; КонецПроцедуры diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" index 06de0aa..af09401 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\236\321\201\320\276\320\261\320\276\320\265\320\236\320\261\321\200\320\260\321\211\320\265\320\275\320\270\320\265.os" @@ -4,7 +4,7 @@ Перем _ПрименятьТолькоНапильники; Перем _НеПрименятьНапильники; -Функция НапильникПрименяется(ИмяНапильника) Экспорт +Функция НапильникМожетПрименяться(ИмяНапильника) Экспорт Если _ОтключитьВсеНапильники Тогда Возврат Ложь; diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index 9e5a47c..be43380 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -39,6 +39,9 @@ // Массив из ОпределениеЖелудя - Список инициализируемых в данный момент напильников. Перем ИнициализируемыеНапильники; +// Лог - Логгер ФабрикиЖелудей. +Перем Лог; + #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс @@ -606,13 +609,16 @@ Функция ОпределитьПрименяемыеНапильники(ОпределениеЖелудя) - ПрименяемыеНапильники = КэшПрименяемыхНапильников.Получить(ОпределениеЖелудя.Имя()); + ИмяЖелудя = ОпределениеЖелудя.Имя(); + + ПрименяемыеНапильники = КэшПрименяемыхНапильников.Получить(ИмяЖелудя); Если ПрименяемыеНапильники <> Неопределено Тогда Возврат ПрименяемыеНапильники; КонецЕсли; + Лог.Отладка("Кэш применяемых напильников для желудя %1 пуст. Выполняется расчет...", ИмяЖелудя); + ПрименяемыеНапильники = Новый Массив; - ПрозвищаЖелудя = ОпределениеЖелудя.Прозвища(); АннотацииЗавязи = ОпределениеЖелудя.Завязь().ДанныеМетода().Аннотации; АннотацияОсобоеОбращение = РаботаСАннотациями.НайтиАннотацию(АннотацииЗавязи, "ОсобоеОбращение"); @@ -623,28 +629,28 @@ Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл + ИмяНапильника = ОпределениеНапильника.Имя(); + Лог.Отладка("Проверка применения напильника %1", ИмяНапильника); + КорневаяАннотация = ОпределениеНапильника.КорневаяАннотация(); - ПрименяетсяТолькоНа = КорневаяАннотация.ПрименяетсяТолькоНа(); - НапильникМожетПрименяться = Ложь; + НапильникМожетПрименяться = КорневаяАннотация.МожетПрименятьсяНа(ОпределениеЖелудя); - Если ПрименяетсяТолькоНа.Количество() = 0 Тогда - НапильникМожетПрименяться = Истина; - ИначеЕсли ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда - НапильникМожетПрименяться = Истина; - Иначе - - Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл - Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда - НапильникМожетПрименяться = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - КонецЕсли; + Лог.Отладка("Напильник %1 может применяться на желуде %2: %3", + ИмяНапильника, + ИмяЖелудя, + НапильникМожетПрименяться + ); Если НапильникМожетПрименяться И ОбъектАннотацииОсобоеОбращение <> Неопределено Тогда - НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникПрименяется(ОпределениеНапильника.Имя()); + НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникМожетПрименяться(ИмяНапильника); + + Лог.Отладка( + "Желудь %1 требует особого обращения. Напильник %2 применяется: %3", + ИмяЖелудя, + ИмяНапильника, + НапильникМожетПрименяться + ); КонецЕсли; Если НапильникМожетПрименяться Тогда @@ -653,7 +659,7 @@ КонецЦикла; - КэшПрименяемыхНапильников.Вставить(ОпределениеЖелудя.Имя(), ПрименяемыеНапильники); + КэшПрименяемыхНапильников.Вставить(ИмяЖелудя, ПрименяемыеНапильники); Возврат ПрименяемыеНапильники; @@ -678,6 +684,7 @@ ОпределенияНапильников = Новый Массив(); КэшПрименяемыхНапильников = Новый Соответствие(); + Лог = Логирование.ПолучитьЛог("oscript.lib.autumn.core.ФабрикаЖелудей"); КонецПроцедуры #КонецОбласти From e20022de0498df26940775e57f81d095de78da83 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 14 Mar 2024 22:20:41 +0100 Subject: [PATCH 08/13] =?UTF-8?q?=D0=91=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\273\321\203\320\264\320\265\320\271.os" | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index be43380..bedda0a 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -12,7 +12,7 @@ // ПрилепляторЧастиц - объект, который умеет прилеплять частицы к желудям. Перем ПрилепляторЧастиц; -// Соответствие, в котором хранятся все определения желудей. +// Соответствие, в котором хранятся все определения желудей: // * Ключ - Строка - имя желудя. // * Значение - ОпределениеЖелудя - определение желудя. Перем ОпределенияЖелудейПоИмени; @@ -25,13 +25,13 @@ // Массив из ОпределениеЖелудя - Список определений желудей, являющихся напильниками. Перем ОпределенияНапильников; -// Соответствие, в котором хранятся все определения желудей, являющихся напильниками. +// Соответствие, в котором хранятся все определения желудей, являющихся напильниками. // * Ключ - Строка - имя желудя. // * Значение - ОпределениеЖелудя - определение напильника. Перем ОпределенияНапильниковПоИмени; // Соответствие - Соответствие, в котором хранится список применяемых к конкретному -// желудю напильников. +// желудю напильников. // * Ключ - Строка - имя желудя. // * Значение - ОпределениеЖелудя - определение напильника. Перем КэшПрименяемыхНапильников; @@ -225,10 +225,23 @@ Для Каждого ОпределениеНапильника Из ПрименяемыеНапильники Цикл Если ОпределениеНапильника.Имя() = ОпределениеЖелудя.Имя() Тогда + ТекстСообщения = СтрШаблон( + "Напильник %1 не может быть применен сам к себе", + ОпределениеНапильника.Имя() + ); + Лог.Отладка(ТекстСообщения); + Продолжить; КонецЕсли; + Если ИнициализируемыеНапильники.Найти(ОпределениеНапильника.Имя()) <> Неопределено Тогда - // TODO: Сообщение о пропуске запуска напильника на желуде из-за циклической зависимости + ТекстСообщения = СтрШаблон( + "Напильник %1 не может быть применен к желудю %2, так как он уже инициализируется.", + ОпределениеНапильника.Имя(), + ОпределениеЖелудя.Имя() + ); + Лог.Отладка(ТекстСообщения); + Продолжить; КонецЕсли; @@ -685,6 +698,7 @@ КэшПрименяемыхНапильников = Новый Соответствие(); Лог = Логирование.ПолучитьЛог("oscript.lib.autumn.core.ФабрикаЖелудей"); + КонецПроцедуры #КонецОбласти From bf19afbd6635e4332c3ecbdf627ad0b5283004dd Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 14 Mar 2024 22:20:54 +0100 Subject: [PATCH 09/13] =?UTF-8?q?=D0=A2=D1=8E=D0=BD=D0=B8=D0=BD=D0=B3=20Ty?= =?UTF-8?q?po?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .bsl-language-server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bsl-language-server.json b/.bsl-language-server.json index 1487d68..7a1b8e6 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -5,7 +5,7 @@ "listOfIncorrectFirstSymbol": ";" }, "Typo": { - "userWordsToIgnore": "Разворачиватель,Блестяшка,Блестяшек,Блестяшки,Блестяшками,Блестяшку,Блестяшкой,Инит,Структурочка,Запускатель,Осенизатор,Просканированные,Аппендера" + "userWordsToIgnore": "Разворачиватель,Блестяшка,Блестяшек,Блестяшки,Блестяшками,Блестяшку,Блестяшкой,Инит,Структурочка,Запускатель,Осенизатор,Прилеплятор,Просканированные,Аппендера" } } } From a4cf36a3cb34f094046282825669778ba16b5369 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Thu, 14 Mar 2024 22:45:24 +0100 Subject: [PATCH 10/13] =?UTF-8?q?=D0=98=D0=BC=D1=8F=20=D0=B6=D0=B5=D0=BB?= =?UTF-8?q?=D1=83=D0=B4=D1=8F=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=D0=B3=D0=B4=D0=B0=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20=D0=B2=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B7=D0=B2=D0=B8=D1=89=D0=B0=20=D0=B6=D0=B5=D0=BB?= =?UTF-8?q?=D1=83=D0=B4=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\265\320\273\321\203\320\264\320\265\320\271.os" | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" index bedda0a..ca519f7 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\244\320\260\320\261\321\200\320\270\320\272\320\260\320\226\320\265\320\273\321\203\320\264\320\265\320\271.os" @@ -501,16 +501,12 @@ Функция ПрочитатьПрозвища(Аннотации, ЗначениеПоУмолчанию) Результат = Новый Массив; - + Результат.Добавить(ЗначениеПоУмолчанию); + Прозвища = РаботаСАннотациями.НайтиАннотации(Аннотации, "Прозвище"); - Если Прозвища.Количество() = 0 Тогда - Результат.Добавить(ЗначениеПоУмолчанию); - Возврат Результат; - КонецЕсли; - Для Каждого Аннотация Из Прозвища Цикл Прозвище = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(Аннотация); - + Результат.Добавить(Прозвище); КонецЦикла; From 97da09e10bb2f5c3296bec21dcc4982456ccb19c Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 18 Mar 2024 20:36:31 +0100 Subject: [PATCH 11/13] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=81=20=D1=83=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=B7=D0=B2?= =?UTF-8?q?=D0=B8=D1=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\273\321\214\320\275\320\270\320\272.os" | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" index 0a7263f..fd531f7 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" @@ -4,25 +4,17 @@ Перем _ПрименяетсяТолькоНа; Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт + + НапильникМожетПрименяться = Ложь; - НапильникМожетПрименяться = Ложь; - - Если _ПрименяетсяТолькоНа.Количество() = 0 Тогда - НапильникМожетПрименяться = Истина; - ИначеЕсли _ПрименяетсяТолькоНа.Содержит(ОпределениеЖелудя.Имя()) Тогда - НапильникМожетПрименяться = Истина; - Иначе - - Для Каждого ПрозвищеЖелудя Из ОпределениеЖелудя.Прозвища() Цикл - Если _ПрименяетсяТолькоНа.Содержит(ПрозвищеЖелудя) Тогда - НапильникМожетПрименяться = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - КонецЕсли; + Для Каждого Идентификатор Из ОпределениеЖелудя.Прозвища() Цикл + Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда + НапильникМожетПрименяться = Истина; + Прервать; + КонецЕсли; + КонецЦикла; - Возврат НапильникМожетПрименяться; + Возврат НапильникМожетПрименяться; КонецФункции From 01075021c22960564bc7719e754033b6b4cce363 Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 18 Mar 2024 21:11:08 +0100 Subject: [PATCH 12/13] =?UTF-8?q?=D0=94=D0=BE=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index 4d29ee6..ab8c727 100644 --- a/README.md +++ b/README.md @@ -759,6 +759,32 @@ JSON обычно содержит вложенные объекты и масс Метод обработки напильником возвращает желудь, причем не обязательно возвращать *тот же самый* желудь. Вам может захотеться обернуть его в объект-контейнер и накинуть на него несколько новых методов, например, с помощью [decorator](https://github.com/nixel2007/decorator). +Не каждый напильник стоит применять ко всем желудям. Вспоминая замечательный пример с панками, мы можем захотеть добавить напильник для полировки заклепок на напульсниках наших музыкантов. При этом очевидно, что далеко не все носят напульсники, да еще и с заклепками. В задаче ограничения применения напильника поможет повторяемый параметр аннотации `&Напильник` под названием `ПрименяетсяТолькоНа`. В нем можно указать имена или прозвища желудей, к которым применяется данный напильник. + +```bsl +// file: Классы/ПолировщикЗаклепок.os + +&Напильник(ПрименяетсяТолькоНа = "Панк") +Процедура ПриСозданииОбъекта() + +КонецПроцедуры +``` + +С другой стороны сам желудь может захотеть ограничить список напильников, которые могут по нему вжухнуть. Или даже вовсе отключить вжухание всех напильников. Для этого на желудь можно навесить аннотацию `&ОсобоеОбращение`, которая может принимать булев параметр `ОтключитьВсеНапильники`, повторяемый строковый параметр `ПрименятьТолькоНапильник` и опять же повторяемый строковый параметр `НеПрименятьНапильник`. Назначение первого параметра, надеемся, достаточно очевидно, поэтому вот пример работы с одним из других: + +```bsl +// file: Классы/ПозерВНапульсниках.os + +&Желудь +&ОсобоеОбращение( + ПрименятьТолькоНапильник = "ПолировщикЗаклепок" +) +Процедура ПриСозданииОбъекта() +КонецПроцедуры +``` + +Зачем все это может быть нужно? Перфоманса ради, например. В случае большого количества компанейских желудей, которые не нуждаются в обработке напильником, можно отключить работу всех напильников для них. Ведь зачем тратить время на обработку, если она не нужна? При этом можно сохранить все плюшки от внедрения зависимостей и деталек через конструктор. Удобненько. + Напильник в этой удивительной осенней вселенной тоже является желудем, поэтому может иметь зависимости от других желудей. Но тут надо аккуратно - можно окончательно упороться и улететь таки на дно циклических зависимостей. > Чтобы уберечь себя ото дна, все напильники инициализируются перед запуском приложения. Как в жизни - сначала разложил рядом инструменты, а потом начинаешь творить. From 75c6b0813b286a8191d55f515a8d2b66a11299ae Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 18 Mar 2024 22:19:38 +0100 Subject: [PATCH 13/13] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=20=D0=BA=D1=80=D0=BE=D0=BB=D0=B8=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\273\321\214\320\275\320\270\320\272.os" | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" index fd531f7..c0e4ff9 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\321\217\320\235\320\260\320\277\320\270\320\273\321\214\320\275\320\270\320\272.os" @@ -5,16 +5,22 @@ Функция МожетПрименятьсяНа(ОпределениеЖелудя) Экспорт - НапильникМожетПрименяться = Ложь; - - Для Каждого Идентификатор Из ОпределениеЖелудя.Прозвища() Цикл - Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда - НапильникМожетПрименяться = Истина; - Прервать; - КонецЕсли; - КонецЦикла; + НапильникМожетПрименяться = Ложь; + + Если _ПрименяетсяТолькоНа.Количество() = 0 Тогда + НапильникМожетПрименяться = Истина; + Иначе + + Для Каждого Идентификатор Из ОпределениеЖелудя.Прозвища() Цикл + Если _ПрименяетсяТолькоНа.Содержит(Идентификатор) Тогда + НапильникМожетПрименяться = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + КонецЕсли; - Возврат НапильникМожетПрименяться; + Возврат НапильникМожетПрименяться; КонецФункции