Skip to content

Commit

Permalink
Выделение интерфейса в фабрике для создания завязи из лямбды
Browse files Browse the repository at this point in the history
  • Loading branch information
sfaqer committed Mar 27, 2024
1 parent 3f2cb7a commit ab4092d
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 18 deletions.
57 changes: 47 additions & 10 deletions src/internal/Классы/ФабрикаЖелудей.os
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,51 @@

КонецФункции

Функция ДобавитьЗавязьИзЛямбды(ЛямбдаЗавязи, Контекст = Неопределено) Экспорт

Выражение = Лямбда.Выражение(ЛямбдаЗавязи);

Если ТипЗнч(Контекст) = Тип("Структура") Тогда
Выражение.Контекст(Контекст)
Иначе
Выражение.ЗахватитьОбъект(Контекст);
КонецЕсли;

Объект = Выражение.ВОбъект();

Рефлектор = Новый Рефлектор();

Методы = Рефлектор.ПолучитьТаблицуМетодов(Объект);
Завязи = РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Завязь");

Если Завязи.Количество() <> 1 Тогда

ВызватьИсключение СтрШаблон(
"Лямбда выражения не содержит завязи:
| %1",
ЛямбдаЗавязи
);

КонецЕсли;

Завязь = Завязи[0];

ИмяЖелудя = ПрочитатьИмяЖелудя(Завязь.Аннотации, "Завязь", "");
ТипЖелудя = ПрочитатьТипЖелудя(Завязь, Завязь.Аннотации);

ОпределениеЗавязи = СоздатьОпределениеЖелудя(
ИмяЖелудя,
ТипЖелудя,
Объект,
Завязь,
Завязь.Аннотации
);
СохранитьОпределениеЖелудя(ОпределениеЗавязи);

Возврат ОпределениеЗавязи;

КонецФункции

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

Expand Down Expand Up @@ -374,15 +419,9 @@
// ВызватьИсключение ТекстСообщения;
// КонецЕсли;

Если ТипЗнч(ТипЖелудя) <> Тип("Тип") Тогда
ТипЖелудяДляОпределения = ПрочитатьТипЖелудя(Конструктор, Конструктор.Аннотации);;
Иначе
ТипЖелудяДляОпределения = ТипЖелудя;
КонецЕсли;

ОпределениеЖелудя = Новый ОпределениеЖелудя(
РазворачивательАннотаций,
ТипЖелудяДляОпределения,
ТипЖелудя,
ИмяЖелудя,
Характер,
ПрилепляемыеЧастицы,
Expand Down Expand Up @@ -464,9 +503,7 @@
Аннотация = РаботаСАннотациями.НайтиАннотацию(Аннотации, "Завязь");
ТипЖелудя = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(
Аннотация,
"Тип",
,
Истина
"Тип"
);

Если ТипЖелудя = Неопределено Тогда
Expand Down
10 changes: 2 additions & 8 deletions src/Классы/Поделка.os
Original file line number Diff line number Diff line change
Expand Up @@ -158,14 +158,8 @@
Возврат ЭтотОбъект;
КонецФункции

Функция ДобавитьЗавязь(МетодЗавязи) Экспорт

ФабрикаЖелудей.ДобавитьЖителяЛеса(
Лямбда.Выражение(МетодЗавязи).ВОбъект(),
"",
"Завязь"
);

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

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

0 comments on commit ab4092d

Please sign in to comment.