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

Выделение библиотеки annotations #65

Merged
merged 11 commits into from
Oct 7, 2023
Merged
Show file tree
Hide file tree
Changes from 3 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: 1 addition & 3 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
.ВключитьФайл("tests")
.ВключитьФайл("LICENSE.md")
.ВключитьФайл("README.md")
.ЗависитОт("annotations", "0.1.0")
.ЗависитОт("asserts", "1.4.0")
.ЗависитОт("configor", "0.7.1")
.ЗависитОт("logos", "1.4.0")
Expand All @@ -27,14 +28,11 @@
.РазработкаЗависитОт("fs")

.ОпределяетКласс("Поделка", "src/Классы/Поделка.os")
.ОпределяетКласс("РазворачивательАннотаций", "src/Классы/РазворачивательАннотаций.os")
.ОпределяетКласс("Завязь", "src/Классы/Завязь.os")
.ОпределяетКласс("ОпределениеЖелудя", "src/Классы/ОпределениеЖелудя.os")
.ОпределяетКласс("ОпределениеАннотации", "src/Классы/ОпределениеАннотации.os")
.ОпределяетКласс("ПрилепляемаяЧастица", "src/Классы/ПрилепляемаяЧастица.os")
.ОпределяетКласс("Табакерка", "src/Классы/Табакерка.os")
.ОпределяетМодуль("Осень", "src/Модули/Осень.os")
.ОпределяетМодуль("РаботаСАннотациями", "src/Модули/РаботаСАннотациями.os")
.ОпределяетМодуль("ТипыПрилепляемыхЖелудей", "src/Модули/ТипыПрилепляемыхЖелудей.os")
.ОпределяетМодуль("ТипыПрилепляемыхЧастиц", "src/Модули/ТипыПрилепляемыхЧастиц.os")
.ОпределяетМодуль("ХарактерыЖелудей", "src/Модули/ХарактерыЖелудей.os")
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
&Аннотация("ВремениИнициализации")
nixel2007 marked this conversation as resolved.
Show resolved Hide resolved
Процедура ПриСозданииОбъекта()
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
&Аннотация("Заготовка")
&ВремениИнициализации
Процедура ПриСозданииОбъекта(Значение = "")

КонецПроцедуры
13 changes: 13 additions & 0 deletions src/internal/Классы/СлужебныйДубОсени.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
&Завязь
&ВремениИнициализации
Функция РазворачивательАннотаций(&Пластилин Поделка) Экспорт
Рефлектор = Новый Рефлектор();
КонтейнерАннотаций = Рефлектор.ПолучитьСвойство(Поделка, "КонтейнерАннотаций");
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Знаю, что грязновато, но контейнер в публичный апи я пока отдавать не хочу

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А завязь всегда снглтоны регает?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А у тебя же в поделке Разворачиватель сразу закешированный лежит, зачем через контейнер обращаться? Или я опять не понял?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Синглтон завязи зависит от характера же.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я убрал разворачиватель из полей поделки, там теперь контейнер только, а разворачиватель локально достаётся в одном месте

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Типа

&Завязь
&Характер() 

?

Т.е по дефолту синглтон?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я убрал разворачиватель из полей поделки, там теперь контейнер только, а разворачиватель локально достаётся в одном месте

Может ты конечно подумал что так сделал, но не сделал

image

image

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да, по дефолту синглтон, как и жёлудь.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это ж не поле, а локальная переменная)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это ж не поле, а локальная переменная)

Перепутал, в фабрике поле.)


Возврат КонтейнерАннотаций.ПолучитьРазворачивательАннотаций();
КонецФункции

&Дуб
&ВремениИнициализации
Процедура ПриСозданииОбъекта()
КонецПроцедуры
92 changes: 17 additions & 75 deletions src/internal/Классы/ФабрикаЖелудей.os
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#Использовать annotations
#Использовать asserts
#Использовать fluent
#Использовать reflector
Expand All @@ -9,11 +10,6 @@
// РазворачивательАннотаций - разворачиватель аннотаций свойств и методов желудей.
Перем РазворачивательАннотаций;

// Соответствие, в котором хранятся все определения аннотаций.
// * Ключ - Строка - имя аннотации.
// * Значение - ОпределениеАннотации - определение аннотации.
Перем ОпределенияАннотаций;

// Соответствие, в котором хранятся все определения желудей.
// * Ключ - Строка - имя желудя.
// * Значение - ОпределениеЖелудя - определение желудя.
Expand Down Expand Up @@ -43,10 +39,6 @@
Возврат Новый ФиксированноеСоответствие(ОпределенияЖелудейПоИмени);
КонецФункции

Функция ПолучитьОпределенияАннотаций() Экспорт
Возврат Новый ФиксированноеСоответствие(ОпределенияАннотаций);
КонецФункции

Функция ПолучитьОпределениеЖелудя(Имя) Экспорт
НайденноеОпределение = ОпределенияЖелудейПоИмени.Получить(Имя);
Если НайденноеОпределение <> Неопределено Тогда
Expand All @@ -71,10 +63,6 @@
Возврат НайденноеОпределение;
КонецФункции

Функция ПолучитьОпределениеАннотации(Имя) Экспорт
Возврат ОпределенияАннотаций.Получить(НРег(Имя));
КонецФункции

Функция ПолучитьСписокОпределенийЖелудей(Имя) Экспорт

Результат = Новый Массив;
Expand Down Expand Up @@ -139,7 +127,16 @@
Прозвища = ПрочитатьПрозвища(Аннотации, ИмяЖелудяЗавязи);
Порядок = ПрочитатьПорядок(Аннотации);
Верховный = ПрочитатьПризнакВерховногоЖелудя(Аннотации);
ВремениИнициализации = Ложь;
ВремениИнициализации = ПрочитатьПризнакВремениИнициализации(Аннотации);

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

ОпределениеЗавязи = Новый ОпределениеЖелудя(
РазворачивательАннотаций,
Expand Down Expand Up @@ -179,12 +176,6 @@
Функция ДобавитьЗаготовку(ТипЗаготовки) Экспорт
ОпределениеЗаготовки = ДобавитьЖителяЛеса(ТипЗаготовки, "", "Заготовка");

Для Каждого ПриклепляемаяЧастица Из ОпределениеЗаготовки.ПрилепляемыеЧастицы() Цикл
Ожидаем
.Что(ПриклепляемаяЧастица.ТипЧастицы(), "К заготовке могут прилепляться только детальки.")
.Равно(ТипыПрилепляемыхЧастиц.Деталька());
КонецЦикла;

РефлекторОбъекта = Новый РефлекторОбъекта(ТипЗаготовки);

Ожидаем
Expand Down Expand Up @@ -213,58 +204,6 @@
Возврат ОпределениеНапильника;
КонецФункции

Функция ДобавитьАннотацию(ТипАннотации) Экспорт

ИмяТипаАннотации = Строка(ТипАннотации);

РефлекторОбъекта = Новый РефлекторОбъекта(ТипАннотации);
Методы = РефлекторОбъекта.ПолучитьТаблицуМетодов("Аннотация", Ложь);
Ожидаем.Что(
Методы.Количество(),
"Класс должен иметь ровно один метод с аннотацией &Аннотация"
).Равно(1);

Конструктор = Методы[0];
ОсновнаяАннотация = РаботаСАннотациями.ПолучитьАннотацию(Конструктор, "Аннотация");

ИмяАннотации = РаботаСАннотациями.ПолучитьЗначениеПараметраАннотации(ОсновнаяАннотация, , ИмяТипаАннотации);

Параметры = Конструктор.Параметры;
КоличествоПараметровСИменемПоУмолчанию = 0;
Для Каждого Параметр Из Параметры Цикл
Если ВРег(Параметр.Имя) = ВРег("Значение") Тогда
КоличествоПараметровСИменемПоУмолчанию = КоличествоПараметровСИменемПоУмолчанию + 1;

Если КоличествоПараметровСИменемПоУмолчанию > 1 Тогда
ВызватьИсключение СтрШаблон(
"Аннотация %1 имеет более одного параметра с именем ""Значение""",
ИмяАннотации
);
КонецЕсли;
КонецЕсли;
КонецЦикла;

Аннотации = Конструктор.Аннотации;

Для Каждого ВложеннаяАннотация Из Конструктор.Аннотации Цикл

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

ОпределениеВложеннойАннотации.Проверить(ВложеннаяАннотация, ИмяАннотации);

КонецЦикла;

ОпределениеАннотации = Новый ОпределениеАннотации(ИмяАннотации, ИмяТипаАннотации, Параметры, Аннотации);

ОпределенияАннотаций.Вставить(НРег(ИмяАннотации), ОпределениеАннотации);

Возврат ОпределениеАннотации;

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

Функция НайтиЖелудь(ИмяЖелудя, ПрилепляемыеЧастицы) Экспорт

ОпределениеЖелудя = Поделка.ПолучитьОпределениеЖелудя(ИмяЖелудя);
Expand Down Expand Up @@ -437,7 +376,7 @@
Прозвища = ПрочитатьПрозвища(Аннотации, ИмяЖелудя);
Порядок = ПрочитатьПорядок(Аннотации);
Верховный = ПрочитатьПризнакВерховногоЖелудя(Аннотации);
ВремениИнициализации = АннотацияНадКонструктором = "Заготовка";
ВремениИнициализации = ПрочитатьПризнакВремениИнициализации(Аннотации);

ОпределениеЖелудя = Новый ОпределениеЖелудя(
РазворачивательАннотаций,
Expand Down Expand Up @@ -579,6 +518,10 @@
Возврат РаботаСАннотациями.НайтиАннотацию(Аннотации, "Верховный") <> Неопределено;
КонецФункции

Функция ПрочитатьПризнакВремениИнициализации(Аннотации)
Возврат РаботаСАннотациями.НайтиАннотацию(Аннотации, "ВремениИнициализации") <> Неопределено;
КонецФункции

Процедура ДобавитьОпределениеНапильника(ОпределениеНапильника, Системный = Ложь)

Порядок = ОпределениеНапильника.Порядок();
Expand Down Expand Up @@ -652,8 +595,7 @@
ОпределенияЖелудейПоПрозвищу = Новый Соответствие();

ИнициализируемыеНапильники = Новый Массив();
ОпределенияАннотаций = Новый Соответствие();


ОпределенияНапильниковПоИмени = Новый Соответствие();
ОпределенияНапильников = Новый Массив();
КонецПроцедуры
Expand Down
Loading
Loading