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

При добавлении завязи из лямбды мета аннотации теперь корректно разворачиваются #110

Merged
merged 3 commits into from
Jan 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
.ВключитьФайл("tests")
.ВключитьФайл("LICENSE.md")
.ВключитьФайл("README.md")
.ЗависитОт("annotations", "1.0.1")
.ЗависитОт("annotations", "1.1.0")
.ЗависитОт("asserts", "1.4.0")
.ЗависитОт("configor", "0.9.0")
.ЗависитОт("logos", "1.4.0")
Expand All @@ -23,7 +23,7 @@
.ЗависитОт("semaphore", "1.1.0")
.ЗависитОт("collectionos", "0.3.1")
.ЗависитОт("autumn-collections", "0.1.0")
.ЗависитОт("lambdas", "0.2.2")
.ЗависитОт("lambdas", "0.3.0")

.РазработкаЗависитОт("1testrunner")
.РазработкаЗависитОт("asserts")
Expand Down
27 changes: 15 additions & 12 deletions src/internal/Классы/ФабрикаЖелудей.os
Original file line number Diff line number Diff line change
Expand Up @@ -150,14 +150,17 @@
Выражение = Лямбда.Выражение(ЛямбдаЗавязи);

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

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

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

РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, Объект);

Завязи = РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, ИмяКорневойАннотации);

Если Завязи.Количество() <> 1 Тогда
Expand All @@ -178,7 +181,7 @@
ОпределениеЗавязи = СоздатьОпределениеЖелудя(
ИмяЖелудя,
ТипЖелудя,
Объект,
Объект,
Завязь,
Завязь.Аннотации,
ИмяКорневойАннотации
Expand Down Expand Up @@ -396,15 +399,15 @@
Функция СоздатьОпределениеЖелудя(
ИмяЖелудя,
ТипЖелудя,
ТипВладельцаСвойств,
ВладелецСвойств,
Конструктор,
Аннотации,
ИмяКорневойАннотации
)

Завязь = СоздатьЗавязь(ТипВладельцаСвойств, Конструктор);
Завязь = СоздатьЗавязь(ВладелецСвойств, Конструктор);

ПрилепляемыеЧастицы = ПрочитатьПрилепляемыеЧастицыВМетоде(Конструктор, ТипВладельцаСвойств);
ПрилепляемыеЧастицы = ПрочитатьПрилепляемыеЧастицыВМетоде(Конструктор, ВладелецСвойств);
Характер = ПрочитатьХарактерЖелудя(Аннотации);
Прозвища = ПрочитатьПрозвища(Аннотации, ИмяЖелудя);
Порядок = ПрочитатьПорядок(Аннотации);
Expand Down Expand Up @@ -443,20 +446,20 @@

#Область СозданиеЗавязи

Функция СоздатьЗавязь(ТипВладельцаСвойств, Конструктор)
Функция СоздатьЗавязь(ВладелецСвойств, Конструктор)

Если НРег(Конструктор.Имя) = НРег("ПриСозданииОбъекта")
ИЛИ НРег(Конструктор.Имя) = НРег("OnObjectCreation") Тогда

Возврат СоздатьЗавязьЧерезКонструкторОбъекта(ТипВладельцаСвойств, Конструктор);
Возврат СоздатьЗавязьЧерезКонструкторОбъекта(ВладелецСвойств, Конструктор);

ИначеЕсли ТипЗнч(ТипВладельцаСвойств) = Тип("Сценарий") Тогда
ИначеЕсли ТипЗнч(ВладелецСвойств) = Тип("Сценарий") Тогда

Возврат СоздатьЗавязьЧерезМетодЛямбды(ТипВладельцаСвойств, Конструктор);
Возврат СоздатьЗавязьЧерезМетодЛямбды(ВладелецСвойств, Конструктор);

Иначе

Возврат СоздатьЗавязьЧерезМетодЗавязи(ТипВладельцаСвойств, Конструктор);
Возврат СоздатьЗавязьЧерезМетодЗавязи(ВладелецСвойств, Конструктор);

КонецЕсли;

Expand Down Expand Up @@ -526,12 +529,12 @@
Возврат РеальныйТип;
КонецФункции

Функция ПрочитатьПрилепляемыеЧастицыВМетоде(Метод, ТипВладельцаСвойств)
Функция ПрочитатьПрилепляемыеЧастицыВМетоде(Метод, ВладелецСвойств)

ПрилепляемыеЧастицы = Новый Массив;
Для Каждого ПараметрМетода Из Метод.Параметры Цикл

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

ПрилепляемаяЧастица = ПрилепляторЧастиц.ДанныеОПрилепляемойЧастице(ПараметрМетода);
ПрилепляемыеЧастицы.Добавить(ПрилепляемаяЧастица);
Expand Down
41 changes: 41 additions & 0 deletions tests/Поделка.os
Original file line number Diff line number Diff line change
Expand Up @@ -1088,3 +1088,44 @@
.Равно("Привет мир");

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

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

// Дано
Поделка = Новый Поделка();

// Когда
Поделка.ДобавитьЗавязь(
"&МетаЗавязь(""МоёЧисло"", Тип = ""Число"") () -> Возврат 42;"
);

Поделка.ЗапуститьПриложение();

// Тогда
Ожидаем.Что(Поделка.НайтиЖелудь("МоёЧисло"))
.Равно(42);

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

&Тест
Процедура ДобавитьМетаЗавязьСМетаПрозвищем() Экспорт

// Дано
Поделка = Новый Поделка();

// Когда
Поделка.ДобавитьЗавязь(
"&МетаПрозвище(""МоёМетаЧисло"") &МетаЗавязь(""МоёЧисло"", Тип = ""Число"") () -> Возврат 42;"
);

Поделка.ЗапуститьПриложение();

// Тогда
Ожидаем.Что(Поделка.НайтиЖелудь("МоёЧисло"))
.Равно(42);

Ожидаем.Что(Поделка.НайтиЖелудь("МоёМетаЧисло"))
.Равно(42);

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// BSLLS:MissingVariablesDescription-off
// BSLLS:UnusedParameters-off
Перем Имя;

Процедура ПриРазворачиванииАннотации(ОпределениеАннотации, ПодчиненныеАннотации, ТипВладельцаСвойств, Свойство) Экспорт

Аннотация = РаботаСАннотациями.НайтиАннотацию(ПодчиненныеАннотации, "Прозвище");
РаботаСАннотациями.УстановитьЗначениеПараметраАннотации(Аннотация, "Значение", Имя);

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

&Аннотация("МетаПрозвище")
&Прозвище(Значение = "")
Процедура ПриСозданииОбъекта(Значение)
Имя = Значение;
КонецПроцедуры
Loading