IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
ReflectionSymbol.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Collections.Immutable;
4using System.Reflection;
5
7{
8
12 abstract class ReflectionSymbol : ISymbol
13 {
14
15 readonly ReflectionSymbolContext _context;
16
22 {
23 _context = context ?? throw new ArgumentNullException(nameof(context));
24 }
25
29 protected ReflectionSymbolContext Context => _context;
30
32 public virtual bool IsMissing => false;
33
39 protected virtual internal ReflectionModuleSymbol ResolveModuleSymbol(Module module)
40 {
41 return _context.GetOrCreateModuleSymbol(module);
42 }
43
49 protected internal ImmutableArray<ReflectionModuleSymbol> ResolveModuleSymbols(Module[] modules)
50 {
51 var a = ImmutableArray.CreateBuilder<ReflectionModuleSymbol>(modules.Length);
52 for (int i = 0; i < modules.Length; i++)
53 a.Add(ResolveModuleSymbol(modules[i]));
54
55 return a.DrainToImmutable();
56 }
57
63 protected internal IEnumerable<ReflectionModuleSymbol> ResolveModuleSymbols(IEnumerable<Module> modules)
64 {
65 foreach (var module in modules)
66 yield return ResolveModuleSymbol(module);
67 }
68
74 protected internal Module[] UnpackModuleSymbols(IModuleSymbol[] modules)
75 {
76 var a = new Module[modules.Length];
77 for (int i = 0; i < modules.Length; i++)
78 a[i] = ((ReflectionModuleSymbol)modules[i]).UnderlyingModule;
79
80 return a;
81 }
82
89 {
90 return member.MemberType switch
91 {
92 MemberTypes.Constructor => ResolveConstructorSymbol((ConstructorInfo)member),
93 MemberTypes.Event => ResolveEventSymbol((EventInfo)member),
94 MemberTypes.Field => ResolveFieldSymbol((FieldInfo)member),
95 MemberTypes.Method => ResolveMethodSymbol((MethodInfo)member),
96 MemberTypes.Property => ResolvePropertySymbol((PropertyInfo)member),
97 MemberTypes.TypeInfo => ResolveTypeSymbol((Type)member),
98 MemberTypes.NestedType => ResolveTypeSymbol((Type)member),
99 MemberTypes.Custom => throw new NotImplementedException(),
100 MemberTypes.All => throw new NotImplementedException(),
101 _ => throw new InvalidOperationException(),
102 };
103 }
104
110 protected internal ReflectionMemberSymbol[] ResolveMemberSymbols(MemberInfo[] types)
111 {
112 var a = new ReflectionMemberSymbol[types.Length];
113 for (int i = 0; i < types.Length; i++)
114 a[i] = ResolveMemberSymbol(types[i]);
115
116 return a;
117 }
118
124 protected internal MemberInfo[] UnpackMemberSymbols(IMemberSymbol[] members)
125 {
126 var a = new MemberInfo[members.Length];
127 for (int i = 0; i < members.Length; i++)
128 a[i] = ((ReflectionMemberSymbol)members[i]).UnderlyingMember;
129
130 return a;
131 }
132
138 protected virtual internal ReflectionTypeSymbol ResolveTypeSymbol(Type type)
139 {
140 return _context.GetOrCreateTypeSymbol(type);
141 }
142
148 protected internal ReflectionTypeSymbol[] ResolveTypeSymbols(Type[] types)
149 {
150 var a = new ReflectionTypeSymbol[types.Length];
151 for (int i = 0; i < types.Length; i++)
152 a[i] = ResolveTypeSymbol(types[i]);
153
154 return a;
155 }
156
162 protected internal IEnumerable<ReflectionTypeSymbol> ResolveTypeSymbols(IEnumerable<Type> types)
163 {
164 foreach (var type in types)
165 yield return ResolveTypeSymbol(type);
166 }
167
173 protected internal Type[] UnpackTypeSymbols(ITypeSymbol[] types)
174 {
175 var a = new Type[types.Length];
176 for (int i = 0; i < types.Length; i++)
177 a[i] = ((ReflectionTypeSymbol)types[i]).UnderlyingType;
178
179 return a;
180 }
181
187 protected virtual internal ReflectionMethodBaseSymbol ResolveMethodBaseSymbol(MethodBase method)
188 {
189 if (method.IsConstructor)
190 return ResolveConstructorSymbol((ConstructorInfo)method);
191 else
192 return ResolveMethodSymbol((MethodInfo)method);
193 }
194
200 protected virtual internal ReflectionConstructorSymbol ResolveConstructorSymbol(ConstructorInfo ctor)
201 {
202 return _context.GetOrCreateConstructorSymbol(ctor);
203 }
204
210 protected internal ReflectionConstructorSymbol[] ResolveConstructorSymbols(ConstructorInfo[] ctors)
211 {
212 var a = new ReflectionConstructorSymbol[ctors.Length];
213 for (int i = 0; i < ctors.Length; i++)
214 a[i] = ResolveConstructorSymbol(ctors[i]);
215
216 return a;
217 }
218
224 protected virtual internal ReflectionMethodSymbol ResolveMethodSymbol(MethodInfo method)
225 {
226 return _context.GetOrCreateMethodSymbol(method);
227 }
228
234 protected internal ReflectionMethodSymbol[] ResolveMethodSymbols(MethodInfo[] methods)
235 {
236 var a = new ReflectionMethodSymbol[methods.Length];
237 for (int i = 0; i < methods.Length; i++)
238 a[i] = ResolveMethodSymbol(methods[i]);
239
240 return a;
241 }
242
248 protected virtual internal ReflectionParameterSymbol ResolveParameterSymbol(ParameterInfo parameter)
249 {
250 return _context.GetOrCreateParameterSymbol(parameter);
251 }
252
258 protected internal ReflectionParameterSymbol[] ResolveParameterSymbols(ParameterInfo[] parameters)
259 {
260 var a = new ReflectionParameterSymbol[parameters.Length];
261 for (int i = 0; i < parameters.Length; i++)
262 a[i] = ResolveParameterSymbol(parameters[i]);
263
264 return a;
265 }
266
272 protected virtual internal ReflectionFieldSymbol ResolveFieldSymbol(FieldInfo field)
273 {
274 return _context.GetOrCreateFieldSymbol(field);
275 }
276
282 protected internal ReflectionFieldSymbol[] ResolveFieldSymbols(FieldInfo[] fields)
283 {
284 var a = new ReflectionFieldSymbol[fields.Length];
285 for (int i = 0; i < fields.Length; i++)
286 a[i] = ResolveFieldSymbol(fields[i]);
287
288 return a;
289 }
290
296 protected virtual internal ReflectionPropertySymbol ResolvePropertySymbol(PropertyInfo property)
297 {
298 return _context.GetOrCreatePropertySymbol(property);
299 }
300
306 protected internal ReflectionPropertySymbol[] ResolvePropertySymbols(PropertyInfo[] properties)
307 {
308 var a = new ReflectionPropertySymbol[properties.Length];
309 for (int i = 0; i < properties.Length; i++)
310 a[i] = ResolvePropertySymbol(properties[i]);
311
312 return a;
313 }
314
320 protected virtual internal ReflectionEventSymbol ResolveEventSymbol(EventInfo @event)
321 {
322 return _context.GetOrCreateEventSymbol(@event);
323 }
324
330 protected internal ReflectionEventSymbol[] ResolveEventSymbols(EventInfo[] events)
331 {
332 var a = new ReflectionEventSymbol[events.Length];
333 for (int i = 0; i < events.Length; i++)
334 a[i] = ResolveEventSymbol(events[i]);
335
336 return a;
337 }
338
344 protected internal ImmutableArray<CustomAttributeSymbol> ResolveCustomAttributes(IList<CustomAttributeData> attributes, Predicate<CustomAttributeData>? filter = null)
345 {
346 var a = ImmutableArray.CreateBuilder<CustomAttributeSymbol>(attributes.Count);
347 for (int i = 0; i < attributes.Count; i++)
348 if (filter == null || filter(attributes[i]))
349 a.Add(ResolveCustomAttribute(attributes[i]));
350
351 return a.DrainToImmutable();
352 }
353
360 protected internal CustomAttributeSymbol ResolveCustomAttribute(CustomAttributeData customAttributeData)
361 {
362 return new CustomAttributeSymbol(
363 ResolveTypeSymbol(customAttributeData.AttributeType),
364 ResolveConstructorSymbol(customAttributeData.Constructor),
365 ResolveCustomAttributeTypedArguments(customAttributeData.ConstructorArguments),
366 ResolveCustomAttributeNamedArguments(customAttributeData.NamedArguments));
367 }
368
374 ImmutableArray<CustomAttributeSymbolTypedArgument> ResolveCustomAttributeTypedArguments(IList<CustomAttributeTypedArgument> args)
375 {
376 var a = new CustomAttributeSymbolTypedArgument[args.Count];
377 for (int i = 0; i < args.Count; i++)
378 a[i] = ResolveCustomAttributeTypedArgument(args[i]);
379
380 return a.ToImmutableArray();
381 }
382
388 CustomAttributeSymbolTypedArgument ResolveCustomAttributeTypedArgument(CustomAttributeTypedArgument arg)
389 {
390 return new CustomAttributeSymbolTypedArgument(ResolveTypeSymbol(arg.ArgumentType), arg.Value);
391 }
392
398 ImmutableArray<CustomAttributeSymbolNamedArgument> ResolveCustomAttributeNamedArguments(IList<CustomAttributeNamedArgument> args)
399 {
400 var a = new CustomAttributeSymbolNamedArgument[args.Count];
401 for (int i = 0; i < args.Count; i++)
402 a[i] = ResolveCustomAttributeNamedArgument(args[i]);
403
404 return ImmutableArray.Create(a);
405 }
406
412 CustomAttributeSymbolNamedArgument ResolveCustomAttributeNamedArgument(CustomAttributeNamedArgument arg)
413 {
414 return new CustomAttributeSymbolNamedArgument(arg.IsField, ResolveMemberSymbol(arg.MemberInfo), arg.MemberName, ResolveCustomAttributeTypedArgument(arg.TypedValue));
415 }
416
417 }
418
419}
IKVM.Reflection.Module Module
IKVM.Reflection.Type Type
IKVM.Reflection.ConstructorInfo ConstructorInfo
IKVM.Reflection.EventInfo EventInfo
IKVM.Reflection.FieldInfo FieldInfo
IKVM.Reflection.MemberInfo MemberInfo
IKVM.Reflection.PropertyInfo PropertyInfo
IKVM.Reflection.MethodInfo MethodInfo
IKVM.Reflection.ParameterInfo ParameterInfo
IKVM.Reflection.MethodBase MethodBase
Obtains information about the attributes of a member and provides access to member metadata.
Implementation of IModuleSymbol derived from System.Reflection.
Holds references to symbols derived from System.Reflection.
virtual ReflectionMemberSymbol ResolveMemberSymbol(MemberInfo member)
Resolves the symbol for the specified type.
ReflectionSymbolContext Context
Gets the associated ReflectionSymbolContext.
ReflectionSymbol(ReflectionSymbolContext context)
Initializes a new instance.
virtual bool IsMissing
Returns true if the symbol is missing.
Obtains information about the attributes of a member and provides access to member metadata.
Provides common properties and methods for managed symbols.
Definition ISymbol.cs:8
readonly record struct CustomAttributeSymbolTypedArgument(ITypeSymbol ArgumentType, object? Value)
readonly record struct CustomAttributeSymbolNamedArgument(bool IsField, IMemberSymbol MemberInfo, string MemberName, CustomAttributeSymbolTypedArgument TypedValue)
readonly record struct CustomAttributeSymbol(ITypeSymbol AttributeType, IConstructorSymbol Constructor, ImmutableArray< CustomAttributeSymbolTypedArgument > ConstructorArguments, ImmutableArray< CustomAttributeSymbolNamedArgument > NamedArguments)