Skip to content

Commit

Permalink
Merge pull request #69 from sfaqer/feature/knownTypesScan
Browse files Browse the repository at this point in the history
Autumn 4.0
  • Loading branch information
nixel2007 authored Oct 26, 2023
2 parents a718f95 + 8d620be commit 30821c9
Show file tree
Hide file tree
Showing 62 changed files with 737 additions and 775 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/perfomance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
fail-fast: false
matrix:
os: ['ubuntu-latest']
oscript_version: ['1.8.3', 'stable']
oscript_version: ['1.8.5', 'stable', 'dev', 'lts-dev']

steps:
# Загрузка проекта
Expand All @@ -22,7 +22,7 @@ jobs:

# Установка OneScript конкретной версии
- name: Установка OneScript
uses: otymko/setup-onescript@v1.1
uses: otymko/setup-onescript@v1.3
with:
version: ${{ matrix.oscript_version }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:

# Установка OneScript конкретной версии
- name: Установка OneScript
uses: otymko/setup-onescript@v1.1
uses: otymko/setup-onescript@v1.3
with:
version: ${{ matrix.oscript_version }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:

# Установка OneScript конкретной версии
- name: Установка OneScript
uses: otymko/setup-onescript@v1.1
uses: otymko/setup-onescript@v1.3
with:
version: ${{ matrix.oscript_version }}

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
strategy:
fail-fast: false
matrix:
oscript_version: ['1.8.3', 'stable', 'dev']
oscript_version: ['1.8.5', 'stable', 'dev', 'lts-dev']
uses: autumn-library/workflows/.github/workflows/test.yml@main
with:
oscript_version: ${{ matrix.oscript_version }}
5 changes: 3 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@


Описание.Имя("autumn")
.Версия("3.3.0")
.Версия("4.0.0")
.Автор("Nikita Fedkin")
.АдресАвтора("[email protected]")
.Описание("Dependency injection framework для OneScript")
.ВерсияСреды("1.8.3")
.ВерсияСреды("1.8.5")
.ВключитьФайл("src")
.ВключитьФайл("tests")
.ВключитьФайл("LICENSE.md")
Expand All @@ -21,6 +21,7 @@
.ЗависитОт("fluent", "0.5.0")
.ЗависитОт("reflector", "0.7.1")
.ЗависитОт("semaphore", "1.1.0")
.ЗависитОт("collectionos", "0.3.1")

.РазработкаЗависитОт("1testrunner")
.РазработкаЗависитОт("asserts")
Expand Down
21 changes: 5 additions & 16 deletions perfomance_tests/Производительность.os
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Использовать ".."
#Использовать asserts
#Использовать "../tests"
#Использовать "../tests/ТестКлассы"

Перем ВремяНачалаЗамера;
Перем ВремяВыполненияВСекундах;
Expand All @@ -15,9 +15,7 @@

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


КоличествоИтераций = КоличествоИтерацийСозданияОбъектов();
Expand Down Expand Up @@ -45,10 +43,7 @@

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

Желудь = Поделка.НайтиЖелудь("ЖелудьСКомпанейскойТабакеркой");

Expand Down Expand Up @@ -97,10 +92,7 @@

// Дано
Поделка = Новый Поделка();
Поделка
.ДобавитьЖелудь(Тип("КомпанейскийЖелудь"))
.ДобавитьЖелудь(Тип("КомпанейскийЖелудьСПластилиномНаПолях"))
.ЗапуститьПриложение();
Поделка.ЗапуститьПриложение();


КоличествоИтераций = КоличествоИтерацийСозданияОбъектов();
Expand Down Expand Up @@ -128,10 +120,7 @@

// Дано
Поделка = Новый Поделка();
Поделка
.ДобавитьЖелудь(Тип("КомпанейскийЖелудь"))
.ДобавитьЖелудь(Тип("КомпанейскийЖелудьСПластилиномВКонструкторе"))
.ЗапуститьПриложение();
Поделка.ЗапуститьПриложение();


КоличествоИтераций = КоличествоИтерацийСозданияОбъектов();
Expand Down
144 changes: 144 additions & 0 deletions src/internal/Классы/Осенизатор.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
#Использовать collectionos
#Использовать annotations

#Область ОписаниеПеременных

Перем ФабрикаЖелудей;
Перем КонтейнерАннотаций;
Перем Поделка;
Перем СистемныеНапильники;
Перем ПросканированныеТипы;
Перем Рефлектор;

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

#Область СлужебныйПрограммныйИнтерфейс

Процедура ПросканироватьИзвестныеТипы() Экспорт

Пока Истина Цикл

ИзвестныеТипы = Рефлектор
.ИзвестныеТипы(Новый Структура("Пользовательский", Истина));

Если ПросканированныеТипы.Количество() = ИзвестныеТипы.Количество() Тогда
Прервать;
КонецЕсли;

ПросканироватьТипы(ИзвестныеТипы.ВыгрузитьКолонку("Значение"));

КонецЦикла;

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

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

#Область СлужебныеПроцедурыИФункции

Процедура ПросканироватьТипы(Типы)

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

// Двойной проход по типам для предварительного добавления аннотаций, которые могут быть нужны
// для добавления остальных типов желудей.
Для Каждого ТипЖелудя Из Типы Цикл

Если ПросканированныеТипы.Содержит(ТипЖелудя) Тогда
Продолжить;
КонецЕсли;

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

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

КонецЦикла;

Для Каждого ТипЖелудя Из Типы Цикл

Если ПросканированныеТипы.Содержит(ТипЖелудя) Тогда
Продолжить;
КонецЕсли;

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

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

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

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

ПросканированныеТипы.Добавить(ТипЖелудя);

КонецЦикла;

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

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

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

Процедура ДобавитьНапильник(Тип)

Если СистемныеНапильники.Содержит(Тип) Тогда
ФабрикаЖелудей.ДобавитьСистемныйНапильник(Тип);
Иначе
ФабрикаЖелудей.ДобавитьНапильник(Тип);
КонецЕсли;

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

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

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

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

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

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

Процедура ДобавитьАннотацию(Тип)
КонтейнерАннотаций.ДобавитьАннотацию(Тип);
КонецПроцедуры

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

Процедура ПриСозданииОбъекта(пПоделка, пФабрикаЖелудей, пКонтейнерАннотаций)

ФабрикаЖелудей = пФабрикаЖелудей;
КонтейнерАннотаций = пКонтейнерАннотаций;
Поделка = пПоделка;

СистемныеНапильники = Новый МножествоСоответствие();
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомПластилинаНаПолях"));
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомФинальныйШтрих"));

ПросканированныеТипы = Новый МножествоСоответствие();

Рефлектор = Новый Рефлектор;

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

0 comments on commit 30821c9

Please sign in to comment.