Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TypeBuilderInstantiation.cs
Go to the documentation of this file.
4
6
7internal sealed class TypeBuilderInstantiation : TypeInfo
8{
9 private Type m_type;
10
11 private Type[] m_inst;
12
13 private string m_strFullQualName;
14
16
18
20
21 public override string Name => m_type.Name;
22
23 public override Module Module => m_type.Module;
24
25 public override Guid GUID
26 {
27 get
28 {
29 throw new NotSupportedException();
30 }
31 }
32
33 public override Assembly Assembly => m_type.Assembly;
34
36 {
37 get
38 {
39 throw new NotSupportedException();
40 }
41 }
42
44
45 public override string Namespace => m_type.Namespace;
46
47 public override string AssemblyQualifiedName => TypeNameBuilder.ToString(this, TypeNameBuilder.Format.AssemblyQualifiedName);
48
49 public override Type BaseType
50 {
51 get
52 {
53 Type baseType = m_type.BaseType;
54 if (baseType == null)
55 {
56 return null;
57 }
58 TypeBuilderInstantiation typeBuilderInstantiation = baseType as TypeBuilderInstantiation;
59 if (typeBuilderInstantiation == null)
60 {
61 return baseType;
62 }
63 return typeBuilderInstantiation.Substitute(GetGenericArguments());
64 }
65 }
66
67 public override bool IsTypeDefinition => false;
68
69 public override bool IsSZArray => false;
70
71 public override Type UnderlyingSystemType => this;
72
73 public override bool IsGenericTypeDefinition => false;
74
75 public override bool IsGenericType => true;
76
77 public override bool IsConstructedGenericType => true;
78
79 public override bool IsGenericParameter => false;
80
81 public override int GenericParameterPosition
82 {
83 get
84 {
85 throw new InvalidOperationException();
86 }
87 }
88
89 public override bool ContainsGenericParameters
90 {
91 get
92 {
93 for (int i = 0; i < m_inst.Length; i++)
94 {
96 {
97 return true;
98 }
99 }
100 return false;
101 }
102 }
103
104 public override MethodBase DeclaringMethod => null;
105
106 public override bool IsAssignableFrom([NotNullWhen(true)] TypeInfo typeInfo)
107 {
108 if (typeInfo == null)
109 {
110 return false;
111 }
112 return IsAssignableFrom(typeInfo.AsType());
113 }
114
115 internal static Type MakeGenericType(Type type, Type[] typeArguments)
116 {
117 if (!type.IsGenericTypeDefinition)
118 {
119 throw new InvalidOperationException();
120 }
121 if (typeArguments == null)
122 {
123 throw new ArgumentNullException("typeArguments");
124 }
125 foreach (Type type2 in typeArguments)
126 {
127 if (type2 == null)
128 {
129 throw new ArgumentNullException("typeArguments");
130 }
131 }
132 return new TypeBuilderInstantiation(type, typeArguments);
133 }
134
136 {
137 m_type = type;
138 m_inst = inst;
139 m_hashtable = new Hashtable();
140 }
141
142 public override string ToString()
143 {
144 return TypeNameBuilder.ToString(this, TypeNameBuilder.Format.ToString);
145 }
146
147 public override Type MakePointerType()
148 {
149 return SymbolType.FormCompoundType("*", this, 0);
150 }
151
152 public override Type MakeByRefType()
153 {
154 return SymbolType.FormCompoundType("&", this, 0);
155 }
156
157 public override Type MakeArrayType()
158 {
159 return SymbolType.FormCompoundType("[]", this, 0);
160 }
161
162 public override Type MakeArrayType(int rank)
163 {
164 if (rank <= 0)
165 {
166 throw new IndexOutOfRangeException();
167 }
168 string format = ((rank == 1) ? "[]" : ("[" + new string(',', rank - 1) + "]"));
169 return SymbolType.FormCompoundType(format, this, 0);
170 }
171
172 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
173 public override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
174 {
175 throw new NotSupportedException();
176 }
177
178 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2055:UnrecognizedReflectionPattern", Justification = "The entire TypeBuilderInstantiation is serving the MakeGenericType implementation. Currently this is not supported by linker. Once it is supported the outercall (Type.MakeGenericType)will validate that the types fullfill the necessary requirements of annotations on type parameters.As such the actual internals of the implementation are not interesting.")]
179 private Type Substitute(Type[] substitutes)
180 {
181 Type[] genericArguments = GetGenericArguments();
182 Type[] array = new Type[genericArguments.Length];
183 for (int i = 0; i < array.Length; i++)
184 {
185 Type type = genericArguments[i];
186 if (type is TypeBuilderInstantiation typeBuilderInstantiation)
187 {
188 array[i] = typeBuilderInstantiation.Substitute(substitutes);
189 }
191 {
192 array[i] = substitutes[type.GenericParameterPosition];
193 }
194 else
195 {
196 array[i] = type;
197 }
198 }
200 }
201
202 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
203 protected override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
204 {
205 throw new NotSupportedException();
206 }
207
208 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)]
209 public override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
210 {
211 throw new NotSupportedException();
212 }
213
214 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)]
215 protected override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
216 {
217 throw new NotSupportedException();
218 }
219
220 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)]
221 public override MethodInfo[] GetMethods(BindingFlags bindingAttr)
222 {
223 throw new NotSupportedException();
224 }
225
226 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
227 public override FieldInfo GetField(string name, BindingFlags bindingAttr)
228 {
229 throw new NotSupportedException();
230 }
231
232 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields)]
233 public override FieldInfo[] GetFields(BindingFlags bindingAttr)
234 {
235 throw new NotSupportedException();
236 }
237
238 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
239 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2063:UnrecognizedReflectionPattern", Justification = "Linker doesn't recognize always throwing method. https://github.com/mono/linker/issues/2025")]
240 [return: DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
241 public override Type GetInterface(string name, bool ignoreCase)
242 {
243 throw new NotSupportedException();
244 }
245
246 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.Interfaces)]
247 public override Type[] GetInterfaces()
248 {
249 throw new NotSupportedException();
250 }
251
252 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
253 public override EventInfo GetEvent(string name, BindingFlags bindingAttr)
254 {
255 throw new NotSupportedException();
256 }
257
258 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents)]
259 public override EventInfo[] GetEvents()
260 {
261 throw new NotSupportedException();
262 }
263
264 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
265 protected override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
266 {
267 throw new NotSupportedException();
268 }
269
270 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties)]
271 public override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
272 {
273 throw new NotSupportedException();
274 }
275
276 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
277 public override Type[] GetNestedTypes(BindingFlags bindingAttr)
278 {
279 throw new NotSupportedException();
280 }
281
282 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes)]
283 public override Type GetNestedType(string name, BindingFlags bindingAttr)
284 {
285 throw new NotSupportedException();
286 }
287
288 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties | DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
289 public override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
290 {
291 throw new NotSupportedException();
292 }
293
294 public override InterfaceMapping GetInterfaceMap([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods)] Type interfaceType)
295 {
296 throw new NotSupportedException();
297 }
298
299 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
300 public override EventInfo[] GetEvents(BindingFlags bindingAttr)
301 {
302 throw new NotSupportedException();
303 }
304
305 [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors | DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.NonPublicMethods | DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.NonPublicFields | DynamicallyAccessedMemberTypes.PublicNestedTypes | DynamicallyAccessedMemberTypes.NonPublicNestedTypes | DynamicallyAccessedMemberTypes.PublicProperties | DynamicallyAccessedMemberTypes.NonPublicProperties | DynamicallyAccessedMemberTypes.PublicEvents | DynamicallyAccessedMemberTypes.NonPublicEvents)]
306 public override MemberInfo[] GetMembers(BindingFlags bindingAttr)
307 {
308 throw new NotSupportedException();
309 }
310
312 {
313 return m_type.Attributes;
314 }
315
316 protected override bool IsArrayImpl()
317 {
318 return false;
319 }
320
321 protected override bool IsByRefImpl()
322 {
323 return false;
324 }
325
326 protected override bool IsPointerImpl()
327 {
328 return false;
329 }
330
331 protected override bool IsPrimitiveImpl()
332 {
333 return false;
334 }
335
336 protected override bool IsCOMObjectImpl()
337 {
338 return false;
339 }
340
341 public override Type GetElementType()
342 {
343 throw new NotSupportedException();
344 }
345
346 protected override bool HasElementTypeImpl()
347 {
348 return false;
349 }
350
351 public override Type[] GetGenericArguments()
352 {
353 return m_inst;
354 }
355
356 protected override bool IsValueTypeImpl()
357 {
358 return m_type.IsValueType;
359 }
360
362 {
363 return m_type;
364 }
365
366 [RequiresUnreferencedCode("If some of the generic arguments are annotated (either with DynamicallyAccessedMembersAttribute, or generic constraints), trimming can't validate that the requirements of those annotations are met.")]
367 public override Type MakeGenericType(params Type[] inst)
368 {
370 }
371
372 public override bool IsAssignableFrom([NotNullWhen(true)] Type c)
373 {
374 throw new NotSupportedException();
375 }
376
377 public override bool IsSubclassOf(Type c)
378 {
379 throw new NotSupportedException();
380 }
381
382 public override object[] GetCustomAttributes(bool inherit)
383 {
384 throw new NotSupportedException();
385 }
386
387 public override object[] GetCustomAttributes(Type attributeType, bool inherit)
388 {
389 throw new NotSupportedException();
390 }
391
392 public override bool IsDefined(Type attributeType, bool inherit)
393 {
394 throw new NotSupportedException();
395 }
396}
static Type FormCompoundType(string format, Type baseType, int curIndex)
override bool IsDefined(Type attributeType, bool inherit)
override PropertyInfo GetPropertyImpl(string name, BindingFlags bindingAttr, Binder binder, Type returnType, Type[] types, ParameterModifier[] modifiers)
override bool IsAssignableFrom([NotNullWhen(true)] TypeInfo typeInfo)
static Type MakeGenericType(Type type, Type[] typeArguments)
override object InvokeMember(string name, BindingFlags invokeAttr, Binder binder, object target, object[] args, ParameterModifier[] modifiers, CultureInfo culture, string[] namedParameters)
override FieldInfo GetField(string name, BindingFlags bindingAttr)
override MethodInfo[] GetMethods(BindingFlags bindingAttr)
override Type[] GetNestedTypes(BindingFlags bindingAttr)
override bool IsAssignableFrom([NotNullWhen(true)] Type c)
override PropertyInfo[] GetProperties(BindingFlags bindingAttr)
override object[] GetCustomAttributes(Type attributeType, bool inherit)
override EventInfo[] GetEvents(BindingFlags bindingAttr)
override Type GetInterface(string name, bool ignoreCase)
override MemberInfo[] GetMembers(BindingFlags bindingAttr)
override InterfaceMapping GetInterfaceMap([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods|DynamicallyAccessedMemberTypes.NonPublicMethods)] Type interfaceType)
override MemberInfo[] GetMember(string name, MemberTypes type, BindingFlags bindingAttr)
override Type GetNestedType(string name, BindingFlags bindingAttr)
override MethodInfo GetMethodImpl(string name, BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
override ConstructorInfo GetConstructorImpl(BindingFlags bindingAttr, Binder binder, CallingConventions callConvention, Type[] types, ParameterModifier[] modifiers)
override FieldInfo[] GetFields(BindingFlags bindingAttr)
override EventInfo GetEvent(string name, BindingFlags bindingAttr)
override ConstructorInfo[] GetConstructors(BindingFlags bindingAttr)
virtual Type AsType()
Definition TypeInfo.cs:106
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Arg_NotGenericTypeDefinition
Definition SR.cs:348
Definition SR.cs:7
bool IsValueType
Definition Type.cs:234
TypeAttributes Attributes
Definition Type.cs:173
virtual Type MakeGenericType(params Type[] typeArguments)
Definition Type.cs:1074
string? Namespace
Definition Type.cs:43
Assembly Assembly
Definition Type.cs:49
override? Type DeclaringType
Definition Type.cs:55
Type? BaseType
Definition Type.cs:295
override? Type ReflectedType
Definition Type.cs:59
new Module Module
Definition Type.cs:51