diff --git "a/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" "b/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" index ac566a3..7400c17 100644 --- "a/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" +++ "b/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.md" @@ -83,9 +83,10 @@ // * Параметры - ТаблицаЗначений - Таблица параметров аннотации: // ** Имя - Строка - Имя параметра аннотации. // ** Значение - Строка - Значение параметра аннотации. -// ИмяТипаСАннотацией - Строка - Имя типа, к которому применяется аннотация. +// ПредставлениеВладельцаАннотации - Строка - Строковое представление типа или объекта +// к которому применяется аннотация. // -Процедура Проверить(Аннотация, ИмяТипаСАннотацией) Экспорт +Процедура Проверить(Аннотация, ПредставлениеВладельцаАннотации) Экспорт ``` ### СоздатьОбъектАннотации diff --git "a/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.md" "b/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.md" index 6c7b385..7dfed9f 100644 --- "a/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.md" +++ "b/docs/api/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.md" @@ -21,9 +21,10 @@ // ** Параметры - ТаблицаЗначений - Таблица параметров аннотации: // *** Имя - Строка - Имя параметра аннотации. // *** Значение - Строка - Значение параметра аннотации. -// ТипВладельцаСвойства - Тип - Тип владельца свойства. +// ВладелецСвойства - Тип - Тип владельца свойства. +// - Сценарий - Экземпляр владельца свойства. // -Процедура РазвернутьАннотацииСвойства(Свойство, ТипВладельцаСвойства) Экспорт +Процедура РазвернутьАннотацииСвойства(Свойство, ВладелецСвойства) Экспорт ``` ## РазвернутьАннотацииСвойств @@ -40,8 +41,9 @@ // ** Параметры - ТаблицаЗначений - Таблица параметров аннотации: // *** Имя - Строка - Имя параметра аннотации. // *** Значение - Строка - Значение параметра аннотации. -// ТипВладельцаСвойств - Тип - Тип владельца свойств. +// ВладелецСвойства - Тип - Тип владельца свойства. +// - Сценарий - Экземпляр владельца свойства. // -Процедура РазвернутьАннотацииСвойств(Свойства, ТипВладельцаСвойств) Экспорт +Процедура РазвернутьАннотацииСвойств(Свойства, ВладелецСвойства) Экспорт ``` diff --git a/packagedef b/packagedef index 8890133..052a3a3 100644 --- a/packagedef +++ b/packagedef @@ -1,9 +1,9 @@ Описание.Имя("annotations") - .Версия("1.0.1") + .Версия("1.1.0") .Автор("Nikita Fedkin") .АдресАвтора("nixel2007@gmail.com") .Описание("Аннотации как объекты первого класса") - .ВерсияСреды("1.8.3") + .ВерсияСреды("1.9.2") .ВключитьФайл("src") .ВключитьФайл("docs") .ВключитьФайл("tasks") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" index d8e82fe..8e1a89f 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\236\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\270.os" @@ -40,7 +40,7 @@ // Возвращаемое значение: // ТаблицаЗначений - таблица параметров аннотации: // * Имя - Строка - Имя параметра. -// * ПоЗначению - Булево - Признак получения пораметра по значению. +// * ПоЗначению - Булево - Признак получения параметра по значению. // * ЕстьЗначениеПоУмолчанию - Булево - Признак наличия значения по умолчанию. // * ЗначениеПоУмолчанию - Произвольный - Значение по умолчанию. // * Аннотации - ТаблицаЗначений - Таблица аннотаций со следующими колонками: @@ -85,16 +85,17 @@ // * Параметры - ТаблицаЗначений - Таблица параметров аннотации: // ** Имя - Строка - Имя параметра аннотации. // ** Значение - Строка - Значение параметра аннотации. -// ИмяТипаСАннотацией - Строка - Имя типа, к которому применяется аннотация. +// ПредставлениеВладельцаАннотации - Строка - Строковое представление типа или объекта +// к которому применяется аннотация. // -Процедура Проверить(Аннотация, ИмяТипаСАннотацией) Экспорт +Процедура Проверить(Аннотация, ПредставлениеВладельцаАннотации) Экспорт ПривестиИменаПараметров(Аннотация); - АннотацияСодержитОбязательныеПараметры(Аннотация, ИмяТипаСАннотацией); - АннотацияСодержитМаксимумОдинПараметрСИменемПоУмолчанию(Аннотация, ИмяТипаСАннотацией); - АннотацияНеСодержитНеизвестныеПараметры(Аннотация, ИмяТипаСАннотацией); - ПовторяемыеПараметрыЗаданыКорректно(Аннотация, ИмяТипаСАннотацией); + АннотацияСодержитОбязательныеПараметры(Аннотация, ПредставлениеВладельцаАннотации); + АннотацияСодержитМаксимумОдинПараметрСИменемПоУмолчанию(Аннотация, ПредставлениеВладельцаАннотации); + АннотацияНеСодержитНеизвестныеПараметры(Аннотация, ПредставлениеВладельцаАннотации); + ПовторяемыеПараметрыЗаданыКорректно(Аннотация, ПредставлениеВладельцаАннотации); КонецПроцедуры @@ -148,7 +149,7 @@ КонецПроцедуры -Процедура АннотацияСодержитОбязательныеПараметры(Аннотация, ИмяТипаСАннотацией) +Процедура АннотацияСодержитОбязательныеПараметры(Аннотация, ПредставлениеВладельцаАннотации) Для Каждого ОпределениеПараметраАннотации Из Параметры Цикл @@ -159,7 +160,7 @@ ВызватьИсключение СтрШаблон( "Аннотация %1 в классе %2 не содержит параметр %3", Аннотация.Имя, - ИмяТипаСАннотацией, + ПредставлениеВладельцаАннотации, ОпределениеПараметраАннотации.Имя ); КонецЕсли; @@ -168,7 +169,7 @@ КонецПроцедуры -Процедура АннотацияСодержитМаксимумОдинПараметрСИменемПоУмолчанию(Аннотация, ИмяТипаСАннотацией) +Процедура АннотацияСодержитМаксимумОдинПараметрСИменемПоУмолчанию(Аннотация, ПредставлениеВладельцаАннотации) КоличествоПараметровСИменемПоУмолчанию = 0; Для Каждого ПараметрАннотации Из Аннотация.Параметры Цикл @@ -183,7 +184,7 @@ ВызватьИсключение СтрШаблон( "Аннотация %1 в классе %2 имеет более одного параметра без имени или с именем ""Значение""", Аннотация.Имя, - ИмяТипаСАннотацией + ПредставлениеВладельцаАннотации ); КонецЕсли; @@ -191,7 +192,7 @@ КонецПроцедуры -Процедура АннотацияНеСодержитНеизвестныеПараметры(Аннотация, ИмяТипаСАннотацией) +Процедура АннотацияНеСодержитНеизвестныеПараметры(Аннотация, ПредставлениеВладельцаАннотации) Для Каждого ПараметрАннотации Из Аннотация.Параметры Цикл @@ -202,7 +203,7 @@ ВызватьИсключение СтрШаблон( "Аннотация %1 в классе %2 содержит неизвестный параметр %3", Аннотация.Имя, - ИмяТипаСАннотацией, + ПредставлениеВладельцаАннотации, ИмяПараметраВложеннойАннотации ); КонецЕсли; @@ -211,7 +212,7 @@ КонецПроцедуры -Процедура ПовторяемыеПараметрыЗаданыКорректно(Аннотация, ИмяТипаСАннотацией) +Процедура ПовторяемыеПараметрыЗаданыКорректно(Аннотация, ПредставлениеВладельцаАннотации) ИмяАннотацииПовторяемый = "Повторяемый"; @@ -223,7 +224,7 @@ ВызватьИсключение СтрШаблон( "Аннотация %1 в классе %2 содержит несколько значений параметра %3, но параметр не помечен аннотацией ""%4""", Аннотация.Имя, - ИмяТипаСАннотацией, + ПредставлениеВладельцаАннотации, Параметр.Имя, ИмяАннотацииПовторяемый ); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" index 53e2129..066a6a8 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" @@ -18,15 +18,16 @@ // ** Параметры - ТаблицаЗначений - Таблица параметров аннотации: // *** Имя - Строка - Имя параметра аннотации. // *** Значение - Строка - Значение параметра аннотации. -// ТипВладельцаСвойства - Тип - Тип владельца свойства. +// ВладелецСвойства - Тип - Тип владельца свойства. +// - Сценарий - Экземпляр владельца свойства. // -Процедура РазвернутьАннотацииСвойства(Свойство, ТипВладельцаСвойства) Экспорт +Процедура РазвернутьАннотацииСвойства(Свойство, ВладелецСвойства) Экспорт ОпределенияАннотаций = _КонтейнерАннотаций.ПолучитьОпределенияАннотаций(); Аннотации = Свойство.Аннотации; НакопленныеАннотации = Свойство.Аннотации.СкопироватьКолонки(); - РазвернутьАннотации(ОпределенияАннотаций, Аннотации, НакопленныеАннотации, ТипВладельцаСвойства, Свойство); + РазвернутьАннотации(ОпределенияАннотаций, Аннотации, НакопленныеАннотации, ВладелецСвойства, Свойство); Свойство.Аннотации = НакопленныеАннотации; @@ -43,12 +44,13 @@ // ** Параметры - ТаблицаЗначений - Таблица параметров аннотации: // *** Имя - Строка - Имя параметра аннотации. // *** Значение - Строка - Значение параметра аннотации. -// ТипВладельцаСвойств - Тип - Тип владельца свойств. +// ВладелецСвойства - Тип - Тип владельца свойства. +// - Сценарий - Экземпляр владельца свойства. // -Процедура РазвернутьАннотацииСвойств(Свойства, ТипВладельцаСвойств) Экспорт +Процедура РазвернутьАннотацииСвойств(Свойства, ВладелецСвойства) Экспорт Для Каждого Свойство Из Свойства Цикл - РазвернутьАннотацииСвойства(Свойство, ТипВладельцаСвойств); + РазвернутьАннотацииСвойства(Свойство, ВладелецСвойства); КонецЦикла; КонецПроцедуры @@ -57,7 +59,7 @@ ОпределенияАннотаций, Аннотации, НакопленныеАннотации, - ТипВладельцаСвойств, + ВладелецСвойства, Свойство, УровеньВложенности = 1 ) @@ -77,9 +79,9 @@ Если ОпределениеАннотации = Неопределено Тогда _Лог.Отладка( - "Обнаружена незарегистрированная аннотация ""%1"" в типе ""%2"" на свойстве ""%3""", + "Обнаружена незарегистрированная аннотация ""%1"" у владельца ""%2"" на свойстве ""%3""", Аннотация.Имя, - ТипВладельцаСвойств, + ВладелецСвойства, Свойство.Имя ); @@ -91,7 +93,7 @@ // Проверяем только аннотации на самом верхнем уровне вложенности, // т.к. остальные проверяются при регистрации аннотации. Если УровеньВложенности = 1 Тогда - ОпределениеАннотации.Проверить(Аннотация, ТипВладельцаСвойств); + ОпределениеАннотации.Проверить(Аннотация, Строка(ВладелецСвойства)); КонецЕсли; ОбъектАннотации = ОпределениеАннотации.СоздатьОбъектАннотации(Аннотация); @@ -100,7 +102,7 @@ ОбъектАннотации.ПриРазворачиванииАннотации( ОпределениеАннотации, ПодчиненныеАннотации, - ТипВладельцаСвойств, + ВладелецСвойства, Свойство ); КонецЕсли; @@ -110,7 +112,7 @@ ОпределенияАннотаций, ПодчиненныеАннотации, НакопленныеАннотации, - ТипВладельцаСвойств, + ВладелецСвойства, Свойство, УровеньВложенности + 1 ); diff --git "a/tests/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" "b/tests/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" index a511204..5e49ce6 100644 --- "a/tests/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" +++ "b/tests/\320\240\320\260\320\267\320\262\320\276\321\200\320\260\321\207\320\270\320\262\320\260\321\202\320\265\320\273\321\214\320\220\320\275\320\275\320\276\321\202\320\260\321\206\320\270\320\271.os" @@ -3,19 +3,27 @@ #Использовать asserts &Тест -Процедура РазвернутьАннотацииСвойств() Экспорт - +&Параметры(Ложь) +&Параметры(Истина) +Процедура РазвернутьАннотацииСвойств(ВладелецОбъект) Экспорт + + Если ВладелецОбъект Тогда + ВладелецАннотаций = Новый ВладелецАннотаций(); + Иначе + ВладелецАннотаций = Тип("ВладелецАннотаций"); + КонецЕсли; + // Дано КонтейнерАннотаций = Новый КонтейнерАннотаций(); Рефлектор = Новый Рефлектор(); - ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(Тип("ВладелецАннотаций")); + ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ВладелецАннотаций); Методы = РаботаСАннотациями.НайтиМетодыСАннотацией(ТаблицаМетодов, "АннотацияВерхнеуровневая"); - + // Когда КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияТестоваяАннотация")); КонтейнерАннотаций.ДобавитьАннотацию(Тип("АннотацияВерхнеуровневая")); РазворачивательАннотаций = КонтейнерАннотаций.ПолучитьРазворачивательАннотаций(); - РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, Тип("ВладелецАннотаций")); + РазворачивательАннотаций.РазвернутьАннотацииСвойств(Методы, ВладелецАннотаций); Аннотации = Методы[0].Аннотации; @@ -23,5 +31,5 @@ Ожидаем.Что(Аннотации.Количество()).Равно(3); Ожидаем.Что(Аннотации[2].Имя).Равно("тестоваяаннотация"); Ожидаем.Что(Аннотации[2].Параметры[0].Значение).Равно(1); - + КонецПроцедуры