Skip to content

Commit

Permalink
Аннотация "ОсобоеОбращение" для указания списка напильников, которые …
Browse files Browse the repository at this point in the history
…могут применяться на желуде
  • Loading branch information
nixel2007 committed Feb 21, 2024
1 parent f94038f commit 868a3c3
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#Использовать asserts

Перем _ПрименяетсяТолькоНа;

Check warning on line 3 in src/internal/Классы/АннотацияНапильник.os

View check run for this annotation

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

src/internal/Классы/АннотацияНапильник.os#L3

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

Функция ПрименяетсяТолькоНа() Экспорт
Expand All @@ -7,5 +9,10 @@
&Аннотация("Напильник")
&Прозвище("Напильник")
Процедура ПриСозданииОбъекта(Значение = "", &Повторяемый ПрименяетсяТолькоНа = Неопределено)

Для Каждого МестоПрименения Из ПрименяетсяТолькоНа Цикл
Ожидаем.Что(МестоПрименения, "Ограничение применения напильника должно быть задано строкой").ИмеетТип("Строка");
КонецЦикла;

_ПрименяетсяТолькоНа = ПрименяетсяТолькоНа;
КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#Использовать asserts

Перем _ПрименятьТолькоНапильники;

Check warning on line 3 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

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

src/internal/Классы/АннотацияОсобоеОбращение.os#L3

Добавьте описание переменной
Перем _НеПрименятьНапильники;

Check warning on line 4 in src/internal/Классы/АннотацияОсобоеОбращение.os

View check run for this annotation

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

src/internal/Классы/АннотацияОсобоеОбращение.os#L4

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

Функция НапильникПрименяется(ИмяНапильника) Экспорт

Если _ПрименятьТолькоНапильники.Количество() > 0 Тогда
Возврат _ПрименятьТолькоНапильники.Найти(ИмяНапильника) <> Неопределено;
Иначе
Возврат _НеПрименятьНапильники.Найти(ИмяНапильника) = Неопределено;
КонецЕсли;

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

&Аннотация("ОсобоеОбращение")
Процедура ПриСозданииОбъекта(
&Повторяемый ПрименятьТолькоНапильник = Неопределено,
&Повторяемый НеПрименятьНапильник = Неопределено
)

Для Каждого МестоПрименения Из ПрименятьТолькоНапильник Цикл
Ожидаем.Что(МестоПрименения, "Ограничение ""только"" применения напильника должно быть задано строкой")
.ИмеетТип("Строка");
КонецЦикла;

Для Каждого МестоПрименения Из НеПрименятьНапильник Цикл
Ожидаем.Что(МестоПрименения, "Ограничение ""не"" применения напильника должно быть задано строкой")
.ИмеетТип("Строка");
КонецЦикла;

Если ПрименятьТолькоНапильник.Количество() > 0 И НеПрименятьНапильник.Количество() > 0 Тогда
ВызватьИсключение "Нельзя одновременно задавать ограничения ""только"" и ""не""";
КонецЕсли;

_ПрименятьТолькоНапильники = ПрименятьТолькоНапильник;
_НеПрименятьНапильники = НеПрименятьНапильник;

КонецПроцедуры
39 changes: 27 additions & 12 deletions src/internal/Классы/ФабрикаЖелудей.os
Original file line number Diff line number Diff line change
Expand Up @@ -613,33 +613,48 @@

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

АннотацииЗавязи = ОпределениеЖелудя.Завязь().ДанныеМетода().Аннотации;
АннотацияОсобоеОбращение = РаботаСАннотациями.НайтиАннотацию(АннотацииЗавязи, "ОсобоеОбращение");
ОпределениеАннотацииОсобоеОбращение = Поделка.ПолучитьОпределениеАннотации("ОсобоеОбращение");
Если АннотацияОсобоеОбращение <> Неопределено Тогда
ОбъектАннотацииОсобоеОбращение = ОпределениеАннотацииОсобоеОбращение.СоздатьОбъектАннотации(АннотацияОсобоеОбращение);
КонецЕсли;

Для Каждого ОпределениеНапильника Из ОпределенияНапильников Цикл

КорневаяАннотация = ОпределениеНапильника.КорневаяАннотация();
ПрименяетсяТолькоНа = КорневаяАннотация.ПрименяетсяТолькоНа();

НапильникМожетПрименяться = Ложь;

Если ПрименяетсяТолькоНа.Количество() = 0 Тогда
ПрименяемыеНапильники.Добавить(ОпределениеНапильника);
Продолжить;
НапильникМожетПрименяться = Истина;

Check warning on line 632 in src/internal/Классы/ФабрикаЖелудей.os

View check run for this annotation

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

src/internal/Классы/ФабрикаЖелудей.os#L632

Синтаксическая конструкция "Если...Тогда...ИначеЕсли..." содержит повторяющиеся блоки кода
ИначеЕсли ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда
НапильникМожетПрименяться = Истина;
Иначе

Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл
Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда
НапильникМожетПрименяться = Истина;
Прервать;
КонецЕсли;
КонецЦикла;

КонецЕсли;

Если ПрименяетсяТолькоНа.Найти(ОпределениеЖелудя.Имя()) <> Неопределено Тогда
ПрименяемыеНапильники.Добавить(ОпределениеНапильника);
Продолжить;
Если НапильникМожетПрименяться И ОбъектАннотацииОсобоеОбращение <> Неопределено Тогда
НапильникМожетПрименяться = ОбъектАннотацииОсобоеОбращение.НапильникПрименяется(ОпределениеНапильника.Имя());
КонецЕсли;

Для Каждого ПрозвищеЖелудя Из ПрозвищаЖелудя Цикл
Если ПрименяетсяТолькоНа.Найти(ПрозвищеЖелудя) <> Неопределено Тогда
ПрименяемыеНапильники.Добавить(ОпределениеНапильника);
Прервать;
КонецЕсли;
КонецЦикла;
Если НапильникМожетПрименяться Тогда
ПрименяемыеНапильники.Добавить(ОпределениеНапильника);
КонецЕсли;

КонецЦикла;

КэшПрименяемыхНапильников.Вставить(ОпределениеЖелудя.Имя(), ПрименяемыеНапильники);

Возврат ПрименяемыеНапильники;

КонецФункции
Expand Down
19 changes: 19 additions & 0 deletions tests/Поделка.os
Original file line number Diff line number Diff line change
Expand Up @@ -901,3 +901,22 @@
Ожидаем.Что(НапильникПоИмени.СработалоРаз).Равно(1);

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

&Тест
Процедура ФильтрНапильниковИзЖелудяРаботает() Экспорт

// Дано
Поделка = Новый Поделка;
Поделка.ЗапуститьПриложение();

// Когда
Желудь = Поделка.НайтиЖелудь("ЖелудьИзбирательноПрименяющийНапильники");
ЖелудьНижнегоУровня = Поделка.НайтиЖелудь("ЖелудьНижнегоУровня");

// Тогда
Ожидаем.Что(Желудь.ЖелудьНижнегоУровня, "Желудь должен внедриться в поле")
.Равно(ЖелудьНижнегоУровня);
Ожидаем.Что(Желудь.ВторойЖелудьНижнегоУровня, "Желудь не должен инициализироваться в методе ФинальныйШтрих")
.Равно(Неопределено);

КонецПроцедуры
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
&Пластилин
Перем ЖелудьНижнегоУровня Экспорт;

Check warning on line 2 in tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os

View check run for this annotation

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

tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os#L2

Не рекомендуется использовать экспортные переменные. Это может стать источником трудновоспроизводимых ошибок

Check warning on line 2 in tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os

View check run for this annotation

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

tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os#L2

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

Перем ВторойЖелудьНижнегоУровня Экспорт;

Check warning on line 4 in tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os

View check run for this annotation

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

tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os#L4

Не рекомендуется использовать экспортные переменные. Это может стать источником трудновоспроизводимых ошибок

Check warning on line 4 in tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os

View check run for this annotation

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

tests/ТестКлассы/Классы/ЖелудьИзбирательноПрименяющийНапильники.os#L4

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

&ФинальныйШтрих
Процедура Инит() Экспорт
ВторойЖелудьНижнегоУровня = ЖелудьНижнегоУровня;
КонецПроцедуры

&Желудь
&ОсобоеОбращение(
ПрименятьТолькоНапильник = "ОбработкаНапильникомПластилинаНаПолях"
)
Процедура ПриСозданииОбъекта()

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

0 comments on commit 868a3c3

Please sign in to comment.