IKVM11  11
Java SE 11 Virtual Machine for .NET
Loading...
Searching...
No Matches
IkvmReflectionSymbol.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Collections.Immutable;
4
6
7using ConstructorInfo = IKVM.Reflection.ConstructorInfo;
8using EventInfo = IKVM.Reflection.EventInfo;
9using FieldInfo = IKVM.Reflection.FieldInfo;
10using MemberInfo = IKVM.Reflection.MemberInfo;
11using MethodBase = IKVM.Reflection.MethodBase;
12using MethodInfo = IKVM.Reflection.MethodInfo;
13using Module = IKVM.Reflection.Module;
14using ParameterInfo = IKVM.Reflection.ParameterInfo;
15using PropertyInfo = IKVM.Reflection.PropertyInfo;
16using Type = IKVM.Reflection.Type;
17
19{
20
22 {
23
24 readonly IkvmReflectionSymbolContext _context;
25
31 {
32 _context = context ?? throw new ArgumentNullException(nameof(context));
33 }
34
38 protected IkvmReflectionSymbolContext Context => _context;
39
41 public virtual bool IsMissing => false;
42
48 protected virtual internal IkvmReflectionModuleSymbol ResolveModuleSymbol(Module module)
49 {
50 return _context.GetOrCreateModuleSymbol(module);
51 }
52
58 protected internal ImmutableArray<IkvmReflectionModuleSymbol> ResolveModuleSymbols(Module[] modules)
59 {
60 var a = ImmutableArray.CreateBuilder<IkvmReflectionModuleSymbol>(modules.Length);
61 for (int i = 0; i < modules.Length; i++)
62 a.Add(ResolveModuleSymbol(modules[i]));
63
64 return a.DrainToImmutable();
65 }
66
72 protected internal IEnumerable<IkvmReflectionModuleSymbol> ResolveModuleSymbols(IEnumerable<Module> modules)
73 {
74 foreach (var module in modules)
75 yield return ResolveModuleSymbol(module);
76 }
77
83 protected internal Module[] UnpackModuleSymbols(IModuleSymbol[] modules)
84 {
85 var a = new Module[modules.Length];
86 for (int i = 0; i < modules.Length; i++)
87 a[i] = ((IkvmReflectionModuleSymbol)modules[i]).UnderlyingModule;
88
89 return a;
90 }
91
97 protected virtual IkvmReflectionMemberSymbol ResolveMemberSymbol(MemberInfo member)
98 {
99 return member.MemberType switch
100 {
101 MemberTypes.Constructor => ResolveConstructorSymbol((ConstructorInfo)member),
102 MemberTypes.Event => ResolveEventSymbol((EventInfo)member),
103 MemberTypes.Field => ResolveFieldSymbol((FieldInfo)member),
104 MemberTypes.Method => ResolveMethodSymbol((MethodInfo)member),
105 MemberTypes.Property => ResolvePropertySymbol((PropertyInfo)member),
106 MemberTypes.TypeInfo => ResolveTypeSymbol((Type)member),
107 MemberTypes.NestedType => ResolveTypeSymbol((Type)member),
108 MemberTypes.Custom => throw new NotImplementedException(),
109 MemberTypes.All => throw new NotImplementedException(),
110 _ => throw new InvalidOperationException(),
111 };
112 }
113
119 protected internal IkvmReflectionMemberSymbol[] ResolveMemberSymbols(MemberInfo[] types)
120 {
121 var a = new IkvmReflectionMemberSymbol[types.Length];
122 for (int i = 0; i < types.Length; i++)
123 a[i] = ResolveMemberSymbol(types[i]);
124
125 return a;
126 }
127
133 protected internal MemberInfo[] UnpackMemberSymbols(IMemberSymbol[] members)
134 {
135 var a = new MemberInfo[members.Length];
136 for (int i = 0; i < members.Length; i++)
137 a[i] = ((IkvmReflectionMemberSymbol)members[i]).UnderlyingMember;
138
139 return a;
140 }
141
147 protected virtual internal IkvmReflectionTypeSymbol ResolveTypeSymbol(Type type)
148 {
149 return _context.GetOrCreateTypeSymbol(type);
150 }
151
157 protected internal IkvmReflectionTypeSymbol[] ResolveTypeSymbols(Type[] types)
158 {
159 var a = new IkvmReflectionTypeSymbol[types.Length];
160 for (int i = 0; i < types.Length; i++)
161 a[i] = ResolveTypeSymbol(types[i]);
162
163 return a;
164 }
165
171 protected internal IEnumerable<IkvmReflectionTypeSymbol> ResolveTypeSymbols(IEnumerable<Type> types)
172 {
173 foreach (var type in types)
174 yield return ResolveTypeSymbol(type);
175 }
176
182 protected internal Type[] UnpackTypeSymbols(ITypeSymbol[] types)
183 {
184 var a = new Type[types.Length];
185 for (int i = 0; i < types.Length; i++)
186 a[i] = ((IkvmReflectionTypeSymbol)types[i]).UnderlyingType;
187
188 return a;
189 }
190
196 protected virtual internal IkvmReflectionMethodBaseSymbol ResolveMethodBaseSymbol(MethodBase method)
197 {
198 if (method.IsConstructor)
199 return ResolveConstructorSymbol((ConstructorInfo)method);
200 else
201 return ResolveMethodSymbol((MethodInfo)method);
202 }
203
209 protected virtual internal IkvmReflectionConstructorSymbol ResolveConstructorSymbol(ConstructorInfo ctor)
210 {
211 return _context.GetOrCreateConstructorSymbol(ctor);
212 }
213
219 protected internal IkvmReflectionConstructorSymbol[] ResolveConstructorSymbols(ConstructorInfo[] ctors)
220 {
221 var a = new IkvmReflectionConstructorSymbol[ctors.Length];
222 for (int i = 0; i < ctors.Length; i++)
223 a[i] = ResolveConstructorSymbol(ctors[i]);
224
225 return a;
226 }
227
233 protected virtual internal IkvmReflectionMethodSymbol ResolveMethodSymbol(MethodInfo method)
234 {
235 return _context.GetOrCreateMethodSymbol(method);
236 }
237
243 protected internal IkvmReflectionMethodSymbol[] ResolveMethodSymbols(MethodInfo[] methods)
244 {
245 var a = new IkvmReflectionMethodSymbol[methods.Length];
246 for (int i = 0; i < methods.Length; i++)
247 a[i] = ResolveMethodSymbol(methods[i]);
248
249 return a;
250 }
251
257 protected virtual internal IkvmReflectionParameterSymbol ResolveParameterSymbol(ParameterInfo parameter)
258 {
259 return _context.GetOrCreateParameterSymbol(parameter);
260 }
261
267 protected internal IkvmReflectionParameterSymbol[] ResolveParameterSymbols(ParameterInfo[] parameters)
268 {
269 var a = new IkvmReflectionParameterSymbol[parameters.Length];
270 for (int i = 0; i < parameters.Length; i++)
271 a[i] = ResolveParameterSymbol(parameters[i]);
272
273 return a;
274 }
275
281 protected virtual internal IkvmReflectionFieldSymbol ResolveFieldSymbol(FieldInfo field)
282 {
283 return _context.GetOrCreateFieldSymbol(field);
284 }
285
291 protected internal IkvmReflectionFieldSymbol[] ResolveFieldSymbols(FieldInfo[] fields)
292 {
293 var a = new IkvmReflectionFieldSymbol[fields.Length];
294 for (int i = 0; i < fields.Length; i++)
295 a[i] = ResolveFieldSymbol(fields[i]);
296
297 return a;
298 }
299
305 protected virtual internal IkvmReflectionPropertySymbol ResolvePropertySymbol(PropertyInfo property)
306 {
307 return _context.GetOrCreatePropertySymbol(property);
308 }
309
315 protected internal IkvmReflectionPropertySymbol[] ResolvePropertySymbols(PropertyInfo[] properties)
316 {
317 var a = new IkvmReflectionPropertySymbol[properties.Length];
318 for (int i = 0; i < properties.Length; i++)
319 a[i] = ResolvePropertySymbol(properties[i]);
320
321 return a;
322 }
323
329 protected virtual internal IkvmReflectionEventSymbol ResolveEventSymbol(EventInfo @event)
330 {
331 return _context.GetOrCreateEventSymbol(@event);
332 }
333
339 protected internal IkvmReflectionEventSymbol[] ResolveEventSymbols(EventInfo[] events)
340 {
341 var a = new IkvmReflectionEventSymbol[events.Length];
342 for (int i = 0; i < events.Length; i++)
343 a[i] = ResolveEventSymbol(events[i]);
344
345 return a;
346 }
347
353 protected internal ImmutableArray<CustomAttributeSymbol> ResolveCustomAttributes(IList<CustomAttributeData> attributes)
354 {
355 var a = ImmutableArray.CreateBuilder<CustomAttributeSymbol>(attributes.Count);
356 for (int i = 0; i < attributes.Count; i++)
357 a.Add(ResolveCustomAttribute(attributes[i]));
358
359 return a.DrainToImmutable();
360 }
361
367 protected internal CustomAttributeSymbol ResolveCustomAttribute(CustomAttributeData customAttributeData)
368 {
369 return new CustomAttributeSymbol(
370 ResolveTypeSymbol(customAttributeData.AttributeType),
371 ResolveConstructorSymbol(customAttributeData.Constructor),
372 ResolveCustomAttributeTypedArguments(customAttributeData.ConstructorArguments),
373 ResolveCustomAttributeNamedArguments(customAttributeData.NamedArguments));
374 }
375
381 ImmutableArray<CustomAttributeSymbolTypedArgument> ResolveCustomAttributeTypedArguments(IList<CustomAttributeTypedArgument> args)
382 {
383 var a = ImmutableArray.CreateBuilder<CustomAttributeSymbolTypedArgument>(args.Count);
384 for (int i = 0; i < args.Count; i++)
385 a.Add(ResolveCustomAttributeTypedArgument(args[i]));
386
387 return a.DrainToImmutable();
388 }
389
395 CustomAttributeSymbolTypedArgument ResolveCustomAttributeTypedArgument(CustomAttributeTypedArgument arg)
396 {
397 return new CustomAttributeSymbolTypedArgument(ResolveTypeSymbol(arg.ArgumentType), arg.Value);
398 }
399
405 ImmutableArray<CustomAttributeSymbolNamedArgument> ResolveCustomAttributeNamedArguments(IList<CustomAttributeNamedArgument> args)
406 {
407 var a = ImmutableArray.CreateBuilder<CustomAttributeSymbolNamedArgument>(args.Count);
408 for (int i = 0; i < args.Count; i++)
409 a.Add(ResolveCustomAttributeNamedArgument(args[i]));
410
411 return a.DrainToImmutable();
412 }
413
419 CustomAttributeSymbolNamedArgument ResolveCustomAttributeNamedArgument(CustomAttributeNamedArgument arg)
420 {
421 return new CustomAttributeSymbolNamedArgument(arg.IsField, ResolveMemberSymbol(arg.MemberInfo), arg.MemberName, ResolveCustomAttributeTypedArgument(arg.TypedValue));
422 }
423
424 }
425
426}
Implementation of IModuleSymbol derived from System.Reflection.
Holds references to symbols derived from System.Reflection.
virtual bool IsMissing
Returns true if the symbol is missing.
IkvmReflectionSymbol(IkvmReflectionSymbolContext context)
Initializes a new instance.
virtual IkvmReflectionMemberSymbol ResolveMemberSymbol(MemberInfo member)
Resolves the symbol for the specified type.
IkvmReflectionSymbolContext Context
Gets the associated IkvmReflectionSymbolContext.
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)