-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #69 from sfaqer/feature/knownTypesScan
Autumn 4.0
- Loading branch information
Showing
62 changed files
with
737 additions
and
775 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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") | ||
|
@@ -21,6 +21,7 @@ | |
.ЗависитОт("fluent", "0.5.0") | ||
.ЗависитОт("reflector", "0.7.1") | ||
.ЗависитОт("semaphore", "1.1.0") | ||
.ЗависитОт("collectionos", "0.3.1") | ||
|
||
.РазработкаЗависитОт("1testrunner") | ||
.РазработкаЗависитОт("asserts") | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
КонецЕсли; | ||
|
||
ПросканированныеТипы.Добавить(ТипЖелудя); | ||
|
||
КонецЦикла; | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьЖелудь(Тип, Имя = "") | ||
ФабрикаЖелудей.ДобавитьЖелудь(Тип, Имя); | ||
КонецПроцедуры | ||
|
||
Процедура ДобавитьДуб(Тип) | ||
ФабрикаЖелудей.ДобавитьДуб(Тип); | ||
КонецПроцедуры | ||
|
||
Процедура ДобавитьНапильник(Тип) | ||
|
||
Если СистемныеНапильники.Содержит(Тип) Тогда | ||
ФабрикаЖелудей.ДобавитьСистемныйНапильник(Тип); | ||
Иначе | ||
ФабрикаЖелудей.ДобавитьНапильник(Тип); | ||
КонецЕсли; | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьЗаготовку(Тип) | ||
|
||
ОпределениеЗаготовки = ФабрикаЖелудей.ДобавитьЗаготовку(Тип); | ||
|
||
Заготовка = Поделка.НайтиЖелудь(ОпределениеЗаготовки.Имя()); | ||
Заготовка.ПриИнициализацииПоделки(Поделка); | ||
|
||
КонецПроцедуры | ||
|
||
Процедура ДобавитьРогатку(Тип) | ||
ФабрикаЖелудей.ДобавитьРогатку(Тип); | ||
КонецПроцедуры | ||
|
||
Процедура ДобавитьАннотацию(Тип) | ||
КонтейнерАннотаций.ДобавитьАннотацию(Тип); | ||
КонецПроцедуры | ||
|
||
#КонецОбласти | ||
|
||
Процедура ПриСозданииОбъекта(пПоделка, пФабрикаЖелудей, пКонтейнерАннотаций) | ||
|
||
ФабрикаЖелудей = пФабрикаЖелудей; | ||
КонтейнерАннотаций = пКонтейнерАннотаций; | ||
Поделка = пПоделка; | ||
|
||
СистемныеНапильники = Новый МножествоСоответствие(); | ||
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомПластилинаНаПолях")); | ||
СистемныеНапильники.Добавить(Тип("ОбработкаНапильникомФинальныйШтрих")); | ||
|
||
ПросканированныеТипы = Новый МножествоСоответствие(); | ||
|
||
Рефлектор = Новый Рефлектор; | ||
|
||
КонецПроцедуры |
Oops, something went wrong.