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

ЗагрузитьСценарий и ЗагрузитьСценарийИзСтроки теряют аннотации полей #1184

Closed
sfaqer opened this issue Jul 12, 2022 · 5 comments

Comments

@sfaqer
Copy link
Contributor

sfaqer commented Jul 12, 2022

Опишите ошибку
В случае если в загружаемом сценарии есть аннотации полей, то после загрузки сценария методами "ЗагрузитьСценарий" и "ЗагрузитьСценарийИзСтроки" аннотации полей будут потеряны

Воспроизведение ошибки

&Тест
Процедура ПроверитьАннотацииПолейЗагрузитьСценарий() Экспорт
	
	Файл = ПолучитьИмяВременногоФайла(".os");

	Запись = Новый ЗаписьТекста(Файл);
	Запись.Записать(ТекстСценария());
	Запись.Закрыть();

	Сценарий = ЗагрузитьСценарий(Файл);

	УдалитьФайлы(Файл);

	ПроверитьАннотацииПоляСценария(Сценарий);
	
КонецПроцедуры

&Тест
Процедура ПроверитьАннотацииПолейЗагрузитьСценарийИзСтроки() Экспорт
	
	Сценарий = ЗагрузитьСценарийИзСтроки(ТекстСценария());

	ПроверитьАннотацииПоляСценария(Сценарий);

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

Функция ТекстСценария()

	Возврат
	"&АннотацияБезПараметра
	|&АннотацияСПараметром(""Значение"")
	|&АннотацияСИменованнымПараметром(ИмяПараметра = ""Значение"")
	|Перем Поле Экспорт;";

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

Процедура ПроверитьАннотацииПоляСценария(Сценарий)
	
	Рефлектор = Новый Рефлектор();

	ТаблицаСвойств = Рефлектор.ПолучитьТаблицуСвойств(Сценарий);

	Если ТаблицаСвойств.Количество() <> 1 Тогда
		ВызватьИсключение "Ожидали, что в таблице свойств будет одно свойство а это не так";
	КонецЕсли;

	КоличествоАннотаций = ТаблицаСвойств[0].Аннотации.Количество();

	Если КоличествоАннотаций <> 3 Тогда
		ВызватьИсключение "Ожидали, что в таблице аннотаций свойства будет 3 аннотации а их там " + КоличествоАннотаций;
	КонецЕсли;
	
	ИмяАннотации = ТаблицаСвойств[0].Аннотации[0].Имя;

	Если ИмяАннотации <> "АннотацияБезПараметра" Тогда
		ВызватьИсключение "Ожидали, что первой аннотацией свойства будет АннотацияБезПараметра а там " + ИмяАннотации;
	КонецЕсли;

	ИмяАннотации = ТаблицаСвойств[0].Аннотации[1].Имя;

	Если ИмяАннотации <> "АннотацияСПараметром" Тогда
		ВызватьИсключение "Ожидали, что второй аннотацией свойства будет АннотацияСПараметром а там " + ИмяАннотации;
	КонецЕсли;

	КоличествоПараметров = ТаблицаСвойств[0].Аннотации[1].Параметры.Количество();

	Если КоличествоПараметров <> 1 Тогда
		ВызватьИсключение "Ожидали, что количество параметров второй аннотации будет равно 1 а их там " + КоличествоПараметров;
	КонецЕсли;

	ПараметрАннотации = ТаблицаСвойств[0].Аннотации[1].Параметры[0];

	Если ПараметрАннотации.Имя <> Неопределено Или ПараметрАннотации.Значение <> "Значение" Тогда

		ВызватьИсключение 
			"Ожидали, что у параметра второй аннотации будет имя Неопределено и строка Значение в поле значение, а там:
			| Имя = " + ПараметрАннотации.Имя + " Значение = " + ПараметрАннотации.Значение;

	КонецЕсли;

	ИмяАннотации = ТаблицаСвойств[0].Аннотации[2].Имя;

	Если ИмяАннотации <> "АннотацияСИменованнымПараметром" Тогда
		ВызватьИсключение "Ожидали, что третьей аннотацией свойства будет АннотацияСИменованнымПараметром а там " + ИмяАннотации;
	КонецЕсли;

	КоличествоПараметров = ТаблицаСвойств[0].Аннотации[2].Параметры.Количество();

	Если КоличествоПараметров <> 1 Тогда
		ВызватьИсключение "Ожидали, что количество параметров третьей аннотации будет равно 1 а их там " + КоличествоПараметров;
	КонецЕсли;

	ПараметрАннотации = ТаблицаСвойств[0].Аннотации[2].Параметры[0];

	Если ПараметрАннотации.Имя <> "ИмяПараметра" Или ПараметрАннотации.Значение <> "Значение" Тогда

		ВызватьИсключение 
			"Ожидали, что у параметра третьей аннотации будет имя ИмяПараметра и строка Значение в поле значение, а там:
			| Имя = " + ПараметрАннотации.Имя + " Значение = " + ПараметрАннотации.Значение;

	КонецЕсли;
	
КонецПроцедуры

Ожидаемое поведение
Ожидается что тест выше проходит

Окружение

  • ОС: Win10 21H2 19044.1766
  • Версия: 1Script Execution Engine. Version 1.8.0.3

Дополнительная информация

sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
6. Минимальная версия движка при тестировании поднята, т.к в старой есть баг с передачей параметров в Новый()
sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
6. Минимальная версия движка при тестировании поднята, т.к в старой есть баг с передачей параметров в Новый()
sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
6. Минимальная версия движка при тестировании поднята, т.к в старой есть баг с передачей параметров в Новый()
sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
6. Минимальная версия движка при тестировании поднята, т.к в старой есть баг с передачей параметров в Новый()
sfaqer added a commit to sfaqer/decorator that referenced this issue Jul 12, 2022
1. Добавлен класс ПостроительДекоратора функционально аналогичный существующему КонструкторДекоратора, старый оставлен для совместимости

2. Добавлены классы хелперы для построения декоратора:
    1. Аннотация
    2. Импорт
    3. Метод
    4. ПараметрМетода
    5. Перехватчик
    6. Поле
    7. Шаг инициалазации

3. Расширены возможности по отношению к прошлой версии:
    1. Добавлена возможность указывать параметры добвляемых методов
    2. Добавлена возможность указывать значения параметров передаваемых в конструктор объекта в случае инициалазации декоратора по типу
    3. Добавлена возможность указывать аннотации:
        1. В полях (пока не работает из-за бага в движке EvilBeaver/OneScript#1184)
        2. В методах
        3. В параметрах метода

4. Добавлены тесты
5. Актуализирован README
6. Минимальная версия движка при тестировании поднята, т.к в старой есть баг с передачей параметров в Новый()
@nixel2007
Copy link
Collaborator

@EvilBeaver не удалось посмотреть?

@EvilBeaver
Copy link
Owner

Нет, не смотрел. Если критично - могу на следующей неделе заглянуть

EvilBeaver added a commit that referenced this issue Aug 29, 2022
Грязный хак получения аннотаций для полей объекта
@EvilBeaver
Copy link
Owner

@nixel2007 @sfaqer в ночной сборке 1.8.1 исправлено https://oscript.io/downloads

@nixel2007
Copy link
Collaborator

Ай красота.

@EvilBeaver
Copy link
Owner

Ай красота.

А ты в код коммита посмотри, там вообще прелесть разливается

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants