Skip to content

Commit

Permalink
Черновая версия BFPP
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Dec 11, 2023
1 parent d299804 commit 1200310
Show file tree
Hide file tree
Showing 10 changed files with 146 additions and 55 deletions.
42 changes: 42 additions & 0 deletions src/internal/Классы/_ПриемкаПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
Перем _Поделка;

Check warning on line 1 in src/internal/Классы/_ПриемкаПриемка.os

View check run for this annotation

sonar.openbsl.ru qa-bot / autumn Sonarqube Results

src/internal/Классы/_ПриемкаПриемка.os#L1

Добавьте описание переменной

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоПриемка = ОпределениеЖелудя.Прозвища().Найти("Приемка") <> Неопределено;
Если НЕ ЭтоПриемка Тогда
Возврат;
КонецЕсли;

ИнтерфейсПриемка = Новый ИнтерфейсОбъекта()
.ПроцедураИнтерфейса("ПриДобавленииОпределенияЖелудя", 1);

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

Приемка = _Поделка.НайтиЖелудь(ОпределениеЖелудя.Имя());

ВсеОпределенияЖелудей = _Поделка.ПолучитьОпределенияЖелудей();
Для Каждого КлючИЗначение Из ВсеОпределенияЖелудей Цикл

ИмяЖелудя = КлючИЗначение.Ключ;

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

Приемка.ПриДобавленииОпределенияЖелудя(ОпределениеЖелудя);

КонецЦикла;

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

&Приемка("ПриемкаПриемка")
&Порядок(0)
Процедура ПриСозданииОбъекта(&Пластилин Поделка)
_Поделка = Поделка;
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
&Аннотация("Заготовка")
&Прозвище("Заготовка")
&Спецификация("Инициализация")
Процедура ПриСозданииОбъекта(Значение = "")

Expand Down
4 changes: 4 additions & 0 deletions src/internal/Классы/АннотацияПриемка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
&Аннотация("Приемка")
&Спецификация("Инициализация")
Процедура ПриСозданииОбъекта(Значение = "")
КонецПроцедуры
32 changes: 21 additions & 11 deletions src/internal/Классы/Осенизатор.os
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@

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

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Аннотация") Тогда
ДобавитьАннотацию(ТипЖелудя);
ПросканированныеТипы.Добавить(ТипЖелудя);
КонецЕсли;
Expand All @@ -65,24 +65,26 @@

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

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Аннотация").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Аннотация") Тогда
Продолжить;
КонецЕсли;

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

Если РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Желудь").Количество() > 0 Тогда
Если ЕстьМетодСАннотацией(Методы, "Желудь") Тогда
ДобавитьЖелудь(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Дуб").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Дуб") Тогда
ДобавитьДуб(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Напильник").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Напильник") Тогда
ДобавитьНапильник(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Рогатка").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Рогатка") Тогда
ДобавитьРогатку(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "Заготовка").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Заготовка") Тогда
ДобавитьЗаготовку(ТипЖелудя);
ИначеЕсли РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, "ПрилепляемаяКоллекция").Количество() > 0 Тогда
ИначеЕсли ЕстьМетодСАннотацией(Методы, "ПрилепляемаяКоллекция") Тогда
ДобавитьПрилепляемуюКоллекцию(ТипЖелудя);
ИначеЕсли ЕстьМетодСАннотацией(Методы, "Приемка") Тогда
ДобавитьПриемку(ТипЖелудя);
Иначе // BSLLS:EmptyCodeBlock-off
// no-op
КонецЕсли;
Expand All @@ -94,7 +96,7 @@
КонецПроцедуры

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

Процедура ДобавитьДуб(Тип)
Expand All @@ -113,15 +115,15 @@

Процедура ДобавитьЗаготовку(Тип)

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

Заготовка = Поделка.НайтиЖелудь(ОпределениеЗаготовки.Имя());
Заготовка.ПриИнициализацииПоделки(Поделка);

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

Процедура ДобавитьРогатку(Тип)
ФабрикаЖелудей.ДобавитьРогатку(Тип);
ФабрикаЖелудей.ДобавитьЖителяЛеса(Тип, "", "Рогатка");
КонецПроцедуры

Процедура ДобавитьАннотацию(Тип)
Expand All @@ -132,6 +134,14 @@
УправляющийПрилепляемымиКоллекциями.ДобавитьПрилепляемуюКоллекцию(Тип);
КонецПроцедуры

Процедура ДобавитьПриемку(Тип)
ФабрикаЖелудей.ДобавитьПриемку(Тип);
КонецПроцедуры

Функция ЕстьМетодСАннотацией(Методы, ИмяАннотации)
Возврат РаботаСАннотациями.НайтиМетодыСАннотацией(Методы, ИмяАннотации).Количество() > 0;
КонецФункции

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

Процедура ПриСозданииОбъекта(пПоделка, пФабрикаЖелудей, пКонтейнерАннотаций, пУправляющийПрилепляемымиКоллекциями)
Expand Down
24 changes: 24 additions & 0 deletions src/internal/Классы/ПриемкаЗаготовка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#Использовать reflector

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоЗаготовка = ОпределениеЖелудя.Прозвища().Найти("Заготовка") <> Неопределено;
Если НЕ ЭтоЗаготовка Тогда
Возврат;
КонецЕсли;

РефлекторОбъекта = Новый РефлекторОбъекта(ОпределениеЖелудя.ТипЖелудя());

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриИнициализацииПоделки", 1),
"Заготовка должна иметь процедуру ПриИнициализацииПоделки(Поделка)"
)
.ЭтоИстина();

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

&Приемка
Процедура ПриСозданииОбъекта()

КонецПроцедуры
24 changes: 24 additions & 0 deletions src/internal/Классы/ПриемкаРогатка.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#Использовать reflector

Процедура ПриДобавленииОпределенияЖелудя(Знач ОпределениеЖелудя) Экспорт

ЭтоРогатка = ОпределениеЖелудя.Прозвища().Найти("Рогатка") <> Неопределено;
Если НЕ ЭтоРогатка Тогда
Возврат;
КонецЕсли;

РефлекторОбъекта = Новый РефлекторОбъекта(ОпределениеЖелудя.ТипЖелудя());

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриЗапускеПриложения", 0),
"Рогатка должна иметь процедуру ПриЗапускеПриложения()"
)
.ЭтоИстина();

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

&Приемка
Процедура ПриСозданииОбъекта()

КонецПроцедуры
60 changes: 21 additions & 39 deletions src/internal/Классы/ФабрикаЖелудей.os
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
// Массив из ОпределениеЖелудя - Список инициализируемых в данный момент напильников.
Перем ИнициализируемыеНапильники;

// Массив из ОпределениеЖелудя - Список определений желудей, являющихся приемками.
Перем ОпределенияПриемок;

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

#Область СлужебныйПрограммныйИнтерфейс
Expand Down Expand Up @@ -104,14 +107,6 @@

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

Функция ДобавитьЖелудь(ТипЖелудя, Имя) Экспорт

ОпределениеЖелудя = ДобавитьЖителяЛеса(ТипЖелудя, Имя, "Желудь");

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

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

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

ОпределениеЖелудя = ДобавитьЖителяЛеса(ТипДуба, "", "Дуб");
Expand Down Expand Up @@ -161,36 +156,6 @@

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

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

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

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриЗапускеПриложения", 0),
"Рогатка должна иметь процедуру ПриЗапускеПриложения()"
)
.ЭтоИстина();

Возврат ОпределениеРогатки;
КонецФункции

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

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

Ожидаем
.Что(
РефлекторОбъекта.ЕстьПроцедура("ПриИнициализацииПоделки", 1),
"Заготовка должна иметь процедуру ПриИнициализацииПоделки(Поделка)"
)
.ЭтоИстина();

Возврат ОпределениеЗаготовки;
КонецФункции

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

Expand All @@ -207,6 +172,15 @@
Возврат ОпределениеНапильника;
КонецФункции

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

ОпределениеПриемки = ДобавитьЖителяЛеса(ТипПриемки, "", "Приемка");
ОпределенияПриемок.Добавить(ОпределениеПриемки);

Возврат ОпределениеПриемки;

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

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

ОпределениеЖелудя = Поделка.ПолучитьОпределениеЖелудя(ИмяЖелудя);
Expand Down Expand Up @@ -314,7 +288,7 @@
Возврат Количество;
КонецФункции

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

РефлекторОбъекта = Новый РефлекторОбъекта(ТипЖителяЛеса);
АннотацияНадКонструкторомКаноническая = НРег(АннотацияНадКонструктором);
Expand Down Expand Up @@ -363,6 +337,11 @@
);
СохранитьОпределениеЖелудя(ОпределениеЖелудя);

Для Каждого ОпределениеПриемки Из ОпределенияПриемок Цикл
Приемка = Поделка.НайтиЖелудь(ОпределениеПриемки.Имя());
Приемка.ПриДобавленииОпределенияЖелудя(ОпределениеЖелудя);
КонецЦикла;

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

КонецФункции
Expand Down Expand Up @@ -611,6 +590,9 @@

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

ОпределенияПриемок = Новый Массив();

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

#КонецОбласти
3 changes: 0 additions & 3 deletions src/Классы/Поделка.os
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
Функция НайтиЖелудь(Имя, ПрилепляемыеЧастицы = Неопределено) Экспорт

Если ВРег(Имя) = ВРег("Поделка") Тогда
ПроверитьСостояниеВыполнение();
Возврат ЭтотОбъект;
КонецЕсли;

Expand Down Expand Up @@ -87,8 +86,6 @@

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

ПроверитьСостояниеВыполнение();

Если ВРег(Имя) = ВРег("Поделка") Тогда

Если ТипЖелудя <> "Массив" Тогда
Expand Down
2 changes: 0 additions & 2 deletions src/Классы/Табакерка.os
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#Использовать "../internal"

Перем _ПрилепляторЧастиц;
Перем _БазоваяПрилепляемаяЧастица;

Expand Down
9 changes: 9 additions & 0 deletions tests/Поделка.os
Original file line number Diff line number Diff line change
Expand Up @@ -879,3 +879,12 @@
.ВыбрасываетИсключение("Неизвестная прилепляемая коллекция Нечто");

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

ПередЗапускомТеста();
Попытка
ИмяЖелудяАвтоматическиОпределяетсяИзТипа();
Исключение
ПослеЗапускаТеста();
Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;

0 comments on commit 1200310

Please sign in to comment.