Skip to content

Commit

Permalink
Merge pull request #78 from autumn-library/feature/bfpp
Browse files Browse the repository at this point in the history
BFPP
  • Loading branch information
nixel2007 committed Jan 20, 2024
2 parents 5d4ce25 + 38b8dc4 commit a753b23
Show file tree
Hide file tree
Showing 9 changed files with 188 additions and 98 deletions.
44 changes: 44 additions & 0 deletions src/internal/Классы/_ПриемкаПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
Перем _Поделка;

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

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

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

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

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

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

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

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

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

КонецЦикла;

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

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

_ИнтерфейсПриемка = Новый ИнтерфейсОбъекта()
.ПроцедураИнтерфейса("ПриДобавленииОпределенияЖелудя", 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 @@
Перем УправляющийПрилепляемымиКоллекциями;
Перем Поделка;
Перем СистемныеНапильники;
Перем Приемки;
Перем ПросканированныеТипы;
Перем Рефлектор;

Expand All @@ -30,6 +31,12 @@

КонецЦикла;

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

Приемки.Очистить();

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

#КонецОбласти
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),
"Рогатка должна иметь процедуру ПриЗапускеПриложения()"
)
.ЭтоИстина();

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

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

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

0 comments on commit a753b23

Please sign in to comment.