From 05f48afbdf4256361dab52fe11027b171d24d2c1 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Wed, 11 Oct 2023 10:30:25 +1000 Subject: [PATCH 1/3] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D1=82=D0=B8=D0=BF=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=B2=D0=B0=D1=82=D1=87=D0=B8?= =?UTF-8?q?=D0=BA=D0=B0=20"=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=20=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D0=B5=D0=B9=20=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++ packagedef | 2 +- ...20\260\320\275\320\275\321\213\320\265.os" | 2 + ...20\260\321\202\320\276\321\200\320\260.os" | 14 ++++- ...20\265\321\202\320\276\320\264\320\260.os" | 6 +- ...20\260\321\202\320\276\321\200\320\260.os" | 57 +++++++++++++++++++ 6 files changed, 83 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 73a352a..1de567e 100644 --- a/README.md +++ b/README.md @@ -480,6 +480,12 @@ docs - todo; #### После Перехватчик вызывается после выполнения перехватываемого метода +#### ПослеВызоваИсключения +Перехватчик вызывается если перехватываемый метод упал в исключение, в момент перед пробросом исключения + +#### ПередСинхронизациейПолей +Перехватчик вызывается в самом начале, перед синхронизацией полей декоратора и оригинального метода + ### Перечисление ТипыПодключенияБибилотек #### ПоИмени diff --git a/packagedef b/packagedef index b2c9f4a..1a28bca 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@ // BSLLS:CodeOutOfRegion-off Описание.Имя("decorator") - .Версия("1.6.0") + .Версия("1.7.0") .Автор("Nikita Gryzlov") .АдресАвтора("nixel2007@gmail.com") .Описание("Библиотека для создания декораторов над объектами") diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" index 37e4680..a2f0a03 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" @@ -52,6 +52,8 @@ |// {АннотацияМетода} |{Функция} Декоратор_ИмяМетода(Декоратор_ОписаниеПараметровМетода) // {Экспорт} | +| // {Декоратор_ПередСинхронизациейПолей} +| | Если {Декоратор_ЭтоДекорируемыйМетод} Тогда | ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); | Иначе diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index f8c7b8e..db8a70b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -474,7 +474,9 @@ ЗаменяемаяСтрокаПеред = "// {Декоратор_ПередВызовомМетода}"; ЗаменяемаяСтрокаПосле = "// {Декоратор_ПослеВызоваМетода}"; - ЗаменяемаяСтрокаПередИсключением = "// {Декоратор_ПослеВызоваИсключения}"; + + ЗаменяемаяСтрокаПередИсключением = "// {Декоратор_ПослеВызоваИсключения}"; + ЗаменяемаяСтрокаПередСинхронизациейПолей = "// {Декоратор_ПередСинхронизациейПолей}"; ТекстМетода = СтрЗаменить( ТекстМетода, @@ -494,6 +496,12 @@ СтрСоединить(ТекстыПерехватчиков.Получить(ТипыПерехватчиковМетода.ПослеВызоваИсключения), Символы.ПС) ); + ТекстМетода = СтрЗаменить( + ТекстМетода, + ЗаменяемаяСтрокаПередСинхронизациейПолей, + СтрСоединить(ТекстыПерехватчиков.Получить(ТипыПерехватчиковМетода.ПередСинхронизациейПолей), Символы.ПС) + ); + КонецПроцедуры Функция ТекстыПерехватчиков(ИмяМетода) @@ -502,7 +510,9 @@ Результат.Вставить(ТипыПерехватчиковМетода.Перед, Новый Массив); Результат.Вставить(ТипыПерехватчиковМетода.После, Новый Массив); - Результат.Вставить(ТипыПерехватчиковМетода.ПослеВызоваИсключения, Новый Массив); + + Результат.Вставить(ТипыПерехватчиковМетода.ПослеВызоваИсключения, Новый Массив); + Результат.Вставить(ТипыПерехватчиковМетода.ПередСинхронизациейПолей, Новый Массив); Для каждого Перехватчик Из ПерехватчикиМетодов Цикл diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\270\320\277\321\213\320\237\320\265\321\200\320\265\321\205\320\262\320\260\321\202\321\207\320\270\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264\320\260.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\270\320\277\321\213\320\237\320\265\321\200\320\265\321\205\320\262\320\260\321\202\321\207\320\270\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264\320\260.os" index 4454082..bd7ea01 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\270\320\277\321\213\320\237\320\265\321\200\320\265\321\205\320\262\320\260\321\202\321\207\320\270\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264\320\260.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\242\320\270\320\277\321\213\320\237\320\265\321\200\320\265\321\205\320\262\320\260\321\202\321\207\320\270\320\272\320\276\320\262\320\234\320\265\321\202\320\276\320\264\320\260.os" @@ -1,7 +1,11 @@ Перем Перед Экспорт; Перем После Экспорт; + Перем ПослеВызоваИсключения Экспорт; +Перем ПередСинхронизациейПолей Экспорт; Перед = "Перед"; После = "После"; -ПослеВызоваИсключения = "ПослеВызоваИсключения"; + +ПослеВызоваИсключения = "ПослеВызоваИсключения"; +ПередСинхронизациейПолей = "ПередСинхронизациейПолей"; diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index 973cd3e..66d70d6 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -794,3 +794,60 @@ Ожидаем.Что(Декоратор.СчетчикПерехватчикаПослеВызоваИсключения).Равно(1); КонецПроцедуры + +&Тест +Процедура ПерехватчикиПередСинхронизациейПолейДекорируемыхФункцийРаботаютКорректно() Экспорт + + // Дано + МойКласс = Новый МойКласс; + МойКласс.Поле = 123; + + ПерехватчикПередСинхронизациейПолей = Новый Перехватчик("ВернутьЭтотОбъект") + .ТипПерехватчика(ТипыПерехватчиковМетода.ПередСинхронизациейПолей) + .Тело("Поле = 124;"); + + Декоратор = Новый ПостроительДекоратора(МойКласс) + .Перехватчик(ПерехватчикПередСинхронизациейПолей) + .Построить(); + + // Когда + + Результат = Декоратор.ВернутьЭтотОбъект(); + + // Тогда + + Ожидаем.Что(Результат.Поле).Равно(124); + Ожидаем.Что(МойКласс.Поле).Равно(124); + +КонецПроцедуры + +&Тест +Процедура ПерехватчикиПередСинхронизациейПолейДобавленныхФункцийРаботаютКорректно() Экспорт + + // Дано + МойКласс = Новый МойКласс; + МойКласс.Поле = 123; + + НовыйМетод = Новый Метод("ВернутьСебя") + .Публичный() + .ТелоМетода("Возврат ЭтотОбъект;"); + + ПерехватчикПередСинхронизациейПолей = Новый Перехватчик("ВернутьСебя") + .ТипПерехватчика(ТипыПерехватчиковМетода.ПередСинхронизациейПолей) + .Тело("Декоратор_ИсходныйОбъект.Поле = 124;"); + + Декоратор = Новый ПостроительДекоратора(МойКласс) + .Метод(НовыйМетод) + .Перехватчик(ПерехватчикПередСинхронизациейПолей) + .Построить(); + + // Когда + + Результат = Декоратор.ВернутьСебя(); + + // Тогда + + Ожидаем.Что(Результат.Поле).Равно(124); + Ожидаем.Что(МойКласс.Поле).Равно(124); + +КонецПроцедуры From 00e3895bb5c197211dbdb142efafa2df37b60b08 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Wed, 11 Oct 2023 15:37:18 +1000 Subject: [PATCH 2/3] =?UTF-8?q?1.=20=D0=9E=D0=BF=D1=80=D0=B5=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5?= =?UTF-8?q?=D0=B4=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B8=20=D1=81=D0=B8=D0=BD=D1=85=D1=80=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=BE=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B2=20=D0=BC=D0=BE=D0=BC=D0=B5=D0=BD=D1=82=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=BF=D0=B8=D0=BB=D1=8F=D1=86=D0=B8=D0=B8=20=D1=81=D0=BA?= =?UTF-8?q?=D1=80=D0=B8=D0=BF=D1=82=D0=B0=202.=20=D0=92=D0=BE=D1=81=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=B7=20#13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\260\320\275\320\275\321\213\320\265.os" | 19 ++---------- ...20\260\321\202\320\276\321\200\320\260.os" | 31 ++++++++++++++++--- ...20\260\321\202\320\276\321\200\320\260.os" | 25 +++++++++++++-- ...20\260\321\202\320\276\321\200\320\260.os" | 2 +- 4 files changed, 54 insertions(+), 23 deletions(-) diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" index a2f0a03..52827a9 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\321\215\321\210\320\270\321\200\321\203\320\265\320\274\321\213\320\265\320\224\320\260\320\275\320\275\321\213\320\265.os" @@ -53,12 +53,7 @@ |{Функция} Декоратор_ИмяМетода(Декоратор_ОписаниеПараметровМетода) // {Экспорт} | | // {Декоратор_ПередСинхронизациейПолей} -| -| Если {Декоратор_ЭтоДекорируемыйМетод} Тогда -| ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); -| Иначе -| ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); -| КонецЕсли; +| // {Декоратор_СинхронизироватьПоляПеред} | | Декоратор_ВозвращаемоеИзМетодаЗначение = NULL; | @@ -70,11 +65,7 @@ | | Исключение | -| Если {Декоратор_ЭтоДекорируемыйМетод} Тогда -| ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); -| Иначе -| ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); -| КонецЕсли; +| // {Декоратор_СинхронизироватьПоляПосле} | | // {Декоратор_ПослеВызоваИсключения} | @@ -82,11 +73,7 @@ | | КонецПопытки; | -| Если {Декоратор_ЭтоДекорируемыйМетод} Тогда -| ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); -| Иначе -| ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект); -| КонецЕсли; +| // {Декоратор_СинхронизироватьПоляПосле} | | Если Декоратор_ВозвращаемоеИзМетодаЗначение = Декоратор_ИсходныйОбъект Тогда | Декоратор_ВозвращаемоеИзМетодаЗначение = ЭтотОбъект; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index 4985986..f220b4b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\275\321\201\321\202\321\200\321\203\320\272\321\202\320\276\321\200\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -438,9 +438,20 @@ НовыйМетод = СтрЗаменить(НовыйМетод, "// {Экспорт}", "Экспорт"); НовыйМетод = СтрЗаменить(НовыйМетод, "{Функция}", "Функция"); НовыйМетод = СтрЗаменить(НовыйМетод, "{КонецФункции}", "КонецФункции"); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Истина"); НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_ТекстМетода}", ТекстМетода); - + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПеред}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект);" + ); + ДобавитьПерехватчикиМетода(ИмяМетода, НовыйМетод, Истина); НовыйМетод = НовыйМетод + Символы.ПС; @@ -473,10 +484,22 @@ НовыйМетод = СтрЗаменить(НовыйМетод, "// {Экспорт}", "Экспорт"); НовыйМетод = СтрЗаменить(НовыйМетод, "{Функция}", "Функция"); НовыйМетод = СтрЗаменить(НовыйМетод, "{КонецФункции}", "КонецФункции"); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Ложь"); НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_ВыполняемаяСтрока}", ВыполняемаяСтрока); НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_ВозвращаемоеЗначение}", ВозвращаемоеЗначение); - + + // Для будущих археологов, если вы подумаете что нужно тут добавить + // ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); + // то проверьте что работает АктивнаяЗапись в библиотеки entity + // сейчас этого куска нет потому что при его наличии в декораторе задавятся поля + // декоратора которые были заполнены не через методы, а просто установкой свойств. + НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_СинхронизироватьПоляПеред}", ""); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); + ДобавитьПерехватчикиМетода(ИмяМетода, НовыйМетод); ОбластьМетодов = ОбластьМетодов + НовыйМетод; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index db8a70b..32de382 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -442,7 +442,17 @@ НовыйМетод = Метод.Описание(); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Истина"); + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПеред}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект);" + ); ДобавитьПерехватчикиМетода(ИмяМетода, НовыйМетод); @@ -458,7 +468,18 @@ НовыйМетод = Метод.Описание(); - НовыйМетод = СтрЗаменить(НовыйМетод, "{Декоратор_ЭтоДекорируемыйМетод}", "Ложь"); + // Для будущих археологов, если вы подумаете что нужно тут добавить + // ОбработкаДекоратора.СинхронизироватьПоля(Декоратор_ИсходныйОбъект, ЭтотОбъект); + // то проверьте что работает АктивнаяЗапись в библиотеки entity + // сейчас этого куска нет потому что при его наличии в декораторе задавятся поля + // декоратора которые были заполнены не через методы, а просто установкой свойств. + НовыйМетод = СтрЗаменить(НовыйМетод, "// {Декоратор_СинхронизироватьПоляПеред}", ""); + + НовыйМетод = СтрЗаменить( + НовыйМетод, + "// {Декоратор_СинхронизироватьПоляПосле}", + "ОбработкаДекоратора.СинхронизироватьПоля(ЭтотОбъект, Декоратор_ИсходныйОбъект);" + ); ДобавитьПерехватчикиМетода(Метод.ИмяМетода(), НовыйМетод); diff --git "a/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index 66d70d6..0d59eaf 100644 --- "a/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/tests/\320\242\320\265\321\201\321\202\321\213_\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -834,7 +834,7 @@ ПерехватчикПередСинхронизациейПолей = Новый Перехватчик("ВернутьСебя") .ТипПерехватчика(ТипыПерехватчиковМетода.ПередСинхронизациейПолей) - .Тело("Декоратор_ИсходныйОбъект.Поле = 124;"); + .Тело("Поле = 124;"); Декоратор = Новый ПостроительДекоратора(МойКласс) .Метод(НовыйМетод) From 011cf4cd5c664e775ec1b6a35418a3877af3ebd4 Mon Sep 17 00:00:00 2001 From: sfaqer Date: Wed, 11 Oct 2023 16:09:34 +1000 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D1=8F=D1=8E?= =?UTF-8?q?=D1=89=D0=B0=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=87=D0=B8=D0=BA=D0=B8=20"=D0=9F=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=D0=92=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0=D0=98=D1=81=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F"=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B0=20=D0=BA=20=D0=BD?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=BC=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\276\321\200\320\260\321\202\320\276\321\200\320\260.os" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" index 32de382..95e8e9f 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\276\321\201\321\202\321\200\320\276\320\270\321\202\320\265\320\273\321\214\320\224\320\265\320\272\320\276\321\200\320\260\321\202\320\276\321\200\320\260.os" @@ -496,7 +496,7 @@ ЗаменяемаяСтрокаПеред = "// {Декоратор_ПередВызовомМетода}"; ЗаменяемаяСтрокаПосле = "// {Декоратор_ПослеВызоваМетода}"; - ЗаменяемаяСтрокаПередИсключением = "// {Декоратор_ПослеВызоваИсключения}"; + ЗаменяемаяСтрокаПослеИсключения = "// {Декоратор_ПослеВызоваИсключения}"; ЗаменяемаяСтрокаПередСинхронизациейПолей = "// {Декоратор_ПередСинхронизациейПолей}"; ТекстМетода = СтрЗаменить( @@ -513,7 +513,7 @@ ТекстМетода = СтрЗаменить( ТекстМетода, - ЗаменяемаяСтрокаПередИсключением, + ЗаменяемаяСтрокаПослеИсключения, СтрСоединить(ТекстыПерехватчиков.Получить(ТипыПерехватчиковМетода.ПослеВызоваИсключения), Символы.ПС) );