Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BFPP #78

Merged
merged 7 commits into from
Jan 20, 2024
44 changes: 44 additions & 0 deletions src/internal/Классы/_ПриемкаПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Перем _Поделка;

Check warning on line 1 in src/internal/Классы/_ПриемкаПриемка.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/_ПриемкаПриемка.os#L1

Добавьте описание переменной

Перем _ИнтерфейсПриемка;

Check warning on line 3 in src/internal/Классы/_ПриемкаПриемка.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/_ПриемкаПриемка.os#L3

Добавьте описание переменной

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоПриемка = ОпределениеЖелудя.Прозвища().Найти("Приемка") <> Неопределено;
Если НЕ ЭтоПриемка Тогда
Возврат;
КонецЕсли;

Если НЕ _ИнтерфейсПриемка.Реализован(ОпределениеЖелудя.Методы()) Тогда
ТекстСообщения = СтрШаблон(
"Определение желудя %1 не реализует методы интерфейса &Приемка",
ОпределениеЖелудя.Имя()
);
ВызватьИсключение ТекстСообщения;
КонецЕсли;

Приемка = _Поделка.НайтиЖелудь(ОпределениеЖелудя.Имя());

ВсеОпределенияЖелудей = _Поделка.ПолучитьОпределенияЖелудей();
Для Каждого КлючИЗначение Из ВсеОпределенияЖелудей Цикл

ИмяЖелудя = КлючИЗначение.Ключ;

Если ИмяЖелудя = ОпределениеЖелудя.Имя() Тогда
Продолжить;
КонецЕсли;

Приемка.ПриДобавленииОпределенияЖелудя(ОпределениеЖелудя);

КонецЦикла;

КонецПроцедуры
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved

&Приемка("ПриемкаПриемка")
Процедура ПриСозданииОбъекта(&Пластилин Поделка)
_Поделка = Поделка;

_ИнтерфейсПриемка = Новый ИнтерфейсОбъекта()
.ПроцедураИнтерфейса("ПриДобавленииОпределенияЖелудя", 1);

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
&Аннотация("Заготовка")
&Прозвище("Заготовка")
&Спецификация("Инициализация")
Процедура ПриСозданииОбъекта(Значение = "")

Expand Down
6 changes: 6 additions & 0 deletions src/internal/Классы/АннотацияПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
&Аннотация("Приемка")
&Прозвище("Приемка")
&Характер("Компанейский")
&Спецификация("Инициализация")
Процедура ПриСозданииОбъекта(Значение = "")
КонецПроцедуры
48 changes: 37 additions & 11 deletions src/internal/Классы/Осенизатор.os
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
Перем УправляющийПрилепляемымиКоллекциями;
Перем Поделка;
Перем СистемныеНапильники;
Перем Приемки;

Check warning on line 11 in src/internal/Классы/Осенизатор.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/Осенизатор.os#L11

Добавьте описание переменной
Перем ПросканированныеТипы;
Перем Рефлектор;

Expand All @@ -30,13 +31,19 @@

КонецЦикла;

Для Каждого Приемка Из Приемки Цикл
УдалитьОбработчик ФабрикаЖелудей.ПриДобавленииОпределенияЖелудя, Приемка.ПриДобавленииОпределенияЖелудя;
КонецЦикла;

Приемки.Очистить();
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ПросканироватьТипы(Типы)

Check failure on line 46 in src/internal/Классы/Осенизатор.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/Осенизатор.os#L46

Уменьшите когнитивную сложность "ПросканироватьТипы" с 19 до 15

РазворачивательАннотаций = КонтейнерАннотаций.ПолучитьРазворачивательАннотаций();

Expand All @@ -50,7 +57,7 @@

Методы = Рефлектор.ПолучитьТаблицуМетодов(ТипЖелудя);

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Аннотация") Тогда
ДобавитьАннотацию(ТипЖелудя);
ПросканированныеТипы.Добавить(ТипЖелудя);
КонецЕсли;
Expand All @@ -65,24 +72,26 @@

Методы = Рефлектор.ПолучитьТаблицуМетодов(ТипЖелудя);

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Аннотация") Тогда
Продолжить;
КонецЕсли;

РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, ТипЖелудя);

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Желудь").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Желудь") Тогда
ДобавитьЖелудь(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Дуб").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Дуб") Тогда
ДобавитьДуб(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Напильник").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Напильник") Тогда
ДобавитьНапильник(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Рогатка").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Рогатка") Тогда
ДобавитьРогатку(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Заготовка").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Заготовка") Тогда
ДобавитьЗаготовку(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "ПрилепляемаяКоллекция").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "ПрилепляемаяКоллекция") Тогда
ДобавитьПрилепляемуюКоллекцию(ТипЖелудя);
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Приемка") Тогда
ДобавитьПриемку(ТипЖелудя);
Иначе // BSLLS:EmptyCodeBlock-off
// no-op
КонецЕсли;
Expand All @@ -94,7 +103,7 @@
КонецПроцедуры

Процедура ДобавитьЖелудь(Тип, Имя = "")
ФабрикаЖелудей.ДобавитьЖелудь(Тип, Имя);
ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, Имя, "Желудь");
КонецПроцедуры

Процедура ДобавитьДуб(Тип)
Expand All @@ -113,15 +122,15 @@

Процедура ДобавитьЗаготовку(Тип)

ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЗаготовку(Тип);
ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Заготовка");

Заготовка = Поделка.НайтиЖелудь(ОпределениеЗаготовки.Имя());
Заготовка.ПриИнициализацииПоделки(Поделка);

КонецПроцедуры

Процедура ДобавитьРогатку(Тип)
ФабрикаЖелудей.ДобавитьРогатку(Тип);
ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Рогатка");
КонецПроцедуры

Процедура ДобавитьАннотацию(Тип)
Expand All @@ -132,6 +141,21 @@
УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип);
КонецПроцедуры

Процедура ДобавитьПриемку(Тип)

ОпределениеПриемки = ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Приемка");

Приемка = Поделка.НайтиЖелудь(ОпределениеПриемки.Имя());
ДобавитьОбработчик ФабрикаЖелудей.ПриДобавленииОпределенияЖелудя, Приемка.ПриДобавленииОпределенияЖелудя;

Приемки.Добавить(Приемка);

КонецПроцедуры

Функция ЕстьМетодСАннотацией(Методы, ИмяАннотации)
Возврат РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, ИмяАннотации).Количество() > 0;
КонецФункции

#КонецОбласти

Процедура ПриСозданииОбъекта(пПоделка, пФабрикаЖелудей, пКонтейнерАннотаций, пУправляющийПрилепляемымиКоллекциями)
Expand All @@ -147,6 +171,8 @@
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомПластилинаНаПолях"));
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомФинальныйШтрих"));

Приемки = Новый Массив;

ПросканированныеТипы = Новый МножествоСоответствие();

Рефлектор = Новый Рефлектор;
Expand Down
24 changes: 24 additions & 0 deletions src/internal/Классы/ПриемкаЗаготовка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#Использовать reflector

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоЗаготовка = ОпределениеЖелудя.Прозвища().Найти("Заготовка") <> Неопределено;
Если НЕ ЭтоЗаготовка Тогда
Возврат;
КонецЕсли;

РефлекторОбъекта = Новый РефлекторОбъекта(ОпределениеЖелудя.ТипЖелудя());

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриИнициализацииПоделки", 1),
"Заготовка должна иметь процедуру ПриИнициализацииПоделки(Поделка)"
)
.ЭтоИстина();

КонецПроцедуры

&Приемка
Процедура ПриСозданииОбъекта()

КонецПроцедуры
24 changes: 24 additions & 0 deletions src/internal/Классы/ПриемкаРогатка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#Использовать reflector

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоРогатка = ОпределениеЖелудя.Прозвища().Найти("Рогатка") <> Неопределено;
Если НЕ ЭтоРогатка Тогда
Возврат;
КонецЕсли;

РефлекторОбъекта = Новый РефлекторОбъекта(ОпределениеЖелудя.ТипЖелудя());

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриЗапускеПриложения", 0),
"Рогатка должна иметь процедуру ПриЗапускеПриложения()"
)
.ЭтоИстина();

КонецПроцедуры

&Приемка
Процедура ПриСозданииОбъекта()

КонецПроцедуры