Skip to content

Commit 1c59761

Browse files
authored
Merge pull request #1237 from Absolemus/latest
Получение через рефлектор значений по умолчанию для параметров
2 parents 628c5f6 + 1f56a4b commit 1c59761

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

src/ScriptEngine.HostedScript/Library/Reflector.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ private static IEnumerable<MethodInfo> ConvertToOsMethods(IEnumerable<System.Ref
252252
osParam.IsByValue = parameterInfo.GetCustomAttribute<ByRefAttribute>() != null;
253253
osParam.HasDefaultValue = parameterInfo.HasDefaultValue;
254254
osParam.DefaultValueIndex = -1;
255+
osParam.DefaultValue = parameterInfo.DefaultValue as IValue;
255256

256257
// On Mono 5.20 we can't use GetCustomAttributes<T> because it fails with InvalidCast.
257258
// Here's a workaround with home-made attribute Type filter.

src/ScriptEngine/Machine/Reflection/ClassBuilder.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,10 +180,9 @@ private ReflectedMethodInfo CreateMethodInfo(MethodInfo methInfo)
180180
reflectedParam.SetPosition(i);
181181
if (currentParam.HasDefaultValue)
182182
{
183-
183+
reflectedParam.SetDefaultValue(currentParam.DefaultValue);
184184
}
185185

186-
reflectedParam.SetDefaultValue(unknownVal);
187186
if (currentParam.Annotations != null)
188187
{
189188
foreach (var annotation in currentParam.Annotations)

tests/reflector.os

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеПубличногоСвойства");
3636

3737
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию");
38+
ВсеТесты.Добавить("ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию_ИзТипаОбъекта");
3839

3940
Возврат ВсеТесты;
4041
КонецФункции
@@ -498,4 +499,30 @@
498499
юТест.ПроверитьРавенство(Параметры[4].ЗначениеПоУмолчанию, "Строка");
499500
юТест.ПроверитьРавенство(ТипЗнч(Параметры[4].ЗначениеПоУмолчанию), Тип("Строка"));
500501

502+
КонецПроцедуры
503+
504+
Процедура ТестДолжен_ПроверитьМетод_ПолучитьТаблицуМетодов_ПроверитьЗначенияПоУмолчанию_ИзТипаОбъекта() Экспорт
505+
Пример = ПолучитьОбъектДляПроверки("test_reflector");
506+
507+
Рефлектор = Новый Рефлектор;
508+
ТаблицаМетодов = Рефлектор.ПолучитьТаблицуМетодов(ТипЗнч(Пример));
509+
510+
МетодСРазнымиПараметрами = ТаблицаМетодов.Найти("МетодСРазнымиПараметрами", "Имя");
511+
Параметры = МетодСРазнымиПараметрами.Параметры;
512+
юТест.ПроверитьРавенство(Параметры[0].ЕстьЗначениеПоУмолчанию, Ложь);
513+
юТест.ПроверитьРавенство(Параметры[0].ЗначениеПоУмолчанию, Неопределено);
514+
юТест.ПроверитьРавенство(ТипЗнч(Параметры[0].ЗначениеПоУмолчанию), Тип("Неопределено"));
515+
юТест.ПроверитьРавенство(Параметры[1].ЕстьЗначениеПоУмолчанию, Истина);
516+
юТест.ПроверитьРавенство(Параметры[1].ЗначениеПоУмолчанию, Неопределено);
517+
юТест.ПроверитьРавенство(ТипЗнч(Параметры[1].ЗначениеПоУмолчанию), Тип("Неопределено"));
518+
юТест.ПроверитьРавенство(Параметры[2].ЕстьЗначениеПоУмолчанию, Истина);
519+
юТест.ПроверитьРавенство(Параметры[2].ЗначениеПоУмолчанию, Истина);
520+
юТест.ПроверитьРавенство(ТипЗнч(Параметры[2].ЗначениеПоУмолчанию), Тип("Булево"));
521+
юТест.ПроверитьРавенство(Параметры[3].ЕстьЗначениеПоУмолчанию, Истина);
522+
юТест.ПроверитьРавенство(Параметры[3].ЗначениеПоУмолчанию, 1);
523+
юТест.ПроверитьРавенство(ТипЗнч(Параметры[3].ЗначениеПоУмолчанию), Тип("Число"));
524+
юТест.ПроверитьРавенство(Параметры[4].ЕстьЗначениеПоУмолчанию, Истина);
525+
юТест.ПроверитьРавенство(Параметры[4].ЗначениеПоУмолчанию, "Строка");
526+
юТест.ПроверитьРавенство(ТипЗнч(Параметры[4].ЗначениеПоУмолчанию), Тип("Строка"));
527+
501528
КонецПроцедуры

0 commit comments

Comments
 (0)