Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReflectionMemberAccessor.cs
Go to the documentation of this file.
4
6
8{
9 private class ConstructorContext
10 {
12 private readonly Type _type;
13
18
19 public object CreateInstance()
20 {
22 }
23 }
24
26 {
27 ConstructorInfo constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, Type.EmptyTypes, null);
28 if (type.IsAbstract)
29 {
30 return null;
31 }
32 if (constructor == null && !type.IsValueType)
33 {
34 return null;
35 }
37 }
38
40 {
42 int parameterCount = constructor.GetParameters().Length;
43 if (parameterCount > 64)
44 {
45 return null;
46 }
47 return delegate(object[] arguments)
48 {
49 object[] array = new object[parameterCount];
50 for (int i = 0; i < parameterCount; i++)
51 {
52 array[i] = arguments[i];
53 }
54 try
55 {
56 return (T)constructor.Invoke(array);
57 }
59 {
60 throw ex.InnerException ?? ex;
61 }
62 };
63 }
64
65 public override JsonTypeInfo.ParameterizedConstructorDelegate<T, TArg0, TArg1, TArg2, TArg3> CreateParameterizedConstructor<T, TArg0, TArg1, TArg2, TArg3>(ConstructorInfo constructor)
66 {
68 int parameterCount = constructor.GetParameters().Length;
69 return delegate(TArg0 arg0, TArg1 arg1, TArg2 arg2, TArg3 arg3)
70 {
71 object[] array = new object[parameterCount];
72 for (int i = 0; i < parameterCount; i++)
73 {
74 switch (i)
75 {
76 case 0:
77 array[0] = arg0;
78 break;
79 case 1:
80 array[1] = arg1;
81 break;
82 case 2:
83 array[2] = arg2;
84 break;
85 case 3:
86 array[3] = arg3;
87 break;
88 default:
89 throw new InvalidOperationException();
90 }
91 }
92 return (T)constructor.Invoke(array);
93 };
94 }
95
97 {
100 MethodInfo addMethod = typeFromHandle.GetMethod("Push") ?? typeFromHandle.GetMethod("Enqueue");
101 return delegate(TCollection collection, object element)
102 {
103 addMethod.Invoke(collection, new object[1] { element });
104 };
105 }
106
107 [RequiresUnreferencedCode("System.Collections.Immutable converters use Reflection to find and create Immutable Collection types, which requires unreferenced code.")]
113
114 [RequiresUnreferencedCode("System.Collections.Immutable converters use Reflection to find and create Immutable Collection types, which requires unreferenced code.")]
120
122 {
123 MethodInfo getMethodInfo = propertyInfo.GetMethod;
124 return (object obj) => (TProperty)getMethodInfo.Invoke(obj, null);
125 }
126
128 {
129 MethodInfo setMethodInfo = propertyInfo.SetMethod;
130 return delegate(object obj, TProperty value)
131 {
132 setMethodInfo.Invoke(obj, new object[1] { value });
133 };
134 }
135
137 {
138 return (object obj) => (TProperty)fieldInfo.GetValue(obj);
139 }
140
142 {
143 return delegate(object obj, TProperty value)
144 {
145 fieldInfo.SetValue(obj, value);
146 };
147 }
148}
static ? object CreateInstance([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors|DynamicallyAccessedMemberTypes.NonPublicConstructors)] Type type, BindingFlags bindingAttr, Binder? binder, object?[]? args, CultureInfo? culture)
Definition Activator.cs:17
virtual ? MethodInfo GetMethod
virtual ? MethodInfo SetMethod
ConstructorContext([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type type)
override Func< object, TProperty > CreatePropertyGetter< TProperty >(PropertyInfo propertyInfo)
override JsonTypeInfo.ConstructorDelegate CreateConstructor([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type type)
override Func< object, TProperty > CreateFieldGetter< TProperty >(FieldInfo fieldInfo)
override Action< object, TProperty > CreatePropertySetter< TProperty >(PropertyInfo propertyInfo)
override Func< IEnumerable< TElement >, TCollection > CreateImmutableEnumerableCreateRangeDelegate< TCollection, TElement >()
override JsonTypeInfo.ParameterizedConstructorDelegate< T, TArg0, TArg1, TArg2, TArg3 > CreateParameterizedConstructor< T, TArg0, TArg1, TArg2, TArg3 >(ConstructorInfo constructor)
override Action< object, TProperty > CreateFieldSetter< TProperty >(FieldInfo fieldInfo)
override Func< object[], T > CreateParameterizedConstructor< T >(ConstructorInfo constructor)
override Func< IEnumerable< KeyValuePair< TKey, TValue > >, TCollection > CreateImmutableDictionaryCreateRangeDelegate< TCollection, TKey, TValue >()
static readonly Type[] EmptyTypes
Definition Type.cs:19