23 _context = context ??
throw new ArgumentNullException(nameof(context));
41 return _context.GetOrCreateModuleSymbol(module);
49 protected internal ImmutableArray<ReflectionModuleSymbol> ResolveModuleSymbols(
Module[] modules)
52 for (
int i = 0; i < modules.Length; i++)
53 a.Add(ResolveModuleSymbol(modules[i]));
55 return a.DrainToImmutable();
63 protected internal IEnumerable<ReflectionModuleSymbol> ResolveModuleSymbols(IEnumerable<Module> modules)
65 foreach (var module
in modules)
66 yield
return ResolveModuleSymbol(module);
74 protected internal Module[] UnpackModuleSymbols(IModuleSymbol[] modules)
76 var a =
new Module[modules.Length];
77 for (
int i = 0; i < modules.Length; i++)
78 a[i] = ((ReflectionModuleSymbol)modules[i]).UnderlyingModule;
90 return member.MemberType
switch
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(),
113 for (
int i = 0; i < types.Length; i++)
127 for (
int i = 0; i < members.Length; i++)
128 a[i] = ((ReflectionMemberSymbol)members[i]).UnderlyingMember;
138 protected virtual internal ReflectionTypeSymbol ResolveTypeSymbol(
Type type)
140 return _context.GetOrCreateTypeSymbol(type);
148 protected internal ReflectionTypeSymbol[] ResolveTypeSymbols(
Type[] types)
150 var a =
new ReflectionTypeSymbol[types.Length];
151 for (
int i = 0; i < types.Length; i++)
152 a[i] = ResolveTypeSymbol(types[i]);
162 protected internal IEnumerable<ReflectionTypeSymbol> ResolveTypeSymbols(IEnumerable<Type> types)
164 foreach (var type
in types)
165 yield
return ResolveTypeSymbol(type);
173 protected internal Type[] UnpackTypeSymbols(ITypeSymbol[] types)
175 var a =
new Type[types.Length];
176 for (
int i = 0; i < types.Length; i++)
177 a[i] = ((ReflectionTypeSymbol)types[i]).UnderlyingType;
187 protected virtual internal ReflectionMethodBaseSymbol ResolveMethodBaseSymbol(
MethodBase method)
189 if (method.IsConstructor)
192 return ResolveMethodSymbol((
MethodInfo)method);
200 protected virtual internal ReflectionConstructorSymbol ResolveConstructorSymbol(
ConstructorInfo ctor)
202 return _context.GetOrCreateConstructorSymbol(ctor);
210 protected internal ReflectionConstructorSymbol[] ResolveConstructorSymbols(
ConstructorInfo[] ctors)
212 var a =
new ReflectionConstructorSymbol[ctors.Length];
213 for (
int i = 0; i < ctors.Length; i++)
214 a[i] = ResolveConstructorSymbol(ctors[i]);
224 protected virtual internal ReflectionMethodSymbol ResolveMethodSymbol(
MethodInfo method)
226 return _context.GetOrCreateMethodSymbol(method);
234 protected internal ReflectionMethodSymbol[] ResolveMethodSymbols(
MethodInfo[] methods)
236 var a =
new ReflectionMethodSymbol[methods.Length];
237 for (
int i = 0; i < methods.Length; i++)
238 a[i] = ResolveMethodSymbol(methods[i]);
248 protected virtual internal ReflectionParameterSymbol ResolveParameterSymbol(
ParameterInfo parameter)
250 return _context.GetOrCreateParameterSymbol(parameter);
258 protected internal ReflectionParameterSymbol[] ResolveParameterSymbols(
ParameterInfo[] parameters)
260 var a =
new ReflectionParameterSymbol[parameters.Length];
261 for (
int i = 0; i < parameters.Length; i++)
262 a[i] = ResolveParameterSymbol(parameters[i]);
272 protected virtual internal ReflectionFieldSymbol ResolveFieldSymbol(
FieldInfo field)
274 return _context.GetOrCreateFieldSymbol(field);
282 protected internal ReflectionFieldSymbol[] ResolveFieldSymbols(
FieldInfo[] fields)
284 var a =
new ReflectionFieldSymbol[fields.Length];
285 for (
int i = 0; i < fields.Length; i++)
286 a[i] = ResolveFieldSymbol(fields[i]);
296 protected virtual internal ReflectionPropertySymbol ResolvePropertySymbol(
PropertyInfo property)
298 return _context.GetOrCreatePropertySymbol(property);
306 protected internal ReflectionPropertySymbol[] ResolvePropertySymbols(
PropertyInfo[] properties)
308 var a =
new ReflectionPropertySymbol[properties.Length];
309 for (
int i = 0; i < properties.Length; i++)
310 a[i] = ResolvePropertySymbol(properties[i]);
320 protected virtual internal ReflectionEventSymbol ResolveEventSymbol(
EventInfo @event)
322 return _context.GetOrCreateEventSymbol(@event);
330 protected internal ReflectionEventSymbol[] ResolveEventSymbols(
EventInfo[] events)
332 var a =
new ReflectionEventSymbol[events.Length];
333 for (
int i = 0; i < events.Length; i++)
334 a[i] = ResolveEventSymbol(events[i]);
344 protected internal ImmutableArray<CustomAttributeSymbol> ResolveCustomAttributes(IList<CustomAttributeData> attributes, Predicate<CustomAttributeData>? filter =
null)
347 for (
int i = 0; i < attributes.Count; i++)
348 if (filter ==
null || filter(attributes[i]))
349 a.Add(ResolveCustomAttribute(attributes[i]));
351 return a.DrainToImmutable();
360 protected internal CustomAttributeSymbol ResolveCustomAttribute(CustomAttributeData customAttributeData)
363 ResolveTypeSymbol(customAttributeData.AttributeType),
364 ResolveConstructorSymbol(customAttributeData.Constructor),
365 ResolveCustomAttributeTypedArguments(customAttributeData.ConstructorArguments),
366 ResolveCustomAttributeNamedArguments(customAttributeData.NamedArguments));
374 ImmutableArray<CustomAttributeSymbolTypedArgument> ResolveCustomAttributeTypedArguments(IList<CustomAttributeTypedArgument> args)
377 for (
int i = 0; i < args.Count; i++)
378 a[i] = ResolveCustomAttributeTypedArgument(args[i]);
380 return a.ToImmutableArray();
398 ImmutableArray<CustomAttributeSymbolNamedArgument> ResolveCustomAttributeNamedArguments(IList<CustomAttributeNamedArgument> args)
401 for (
int i = 0; i < args.Count; i++)
402 a[i] = ResolveCustomAttributeNamedArgument(args[i]);
404 return ImmutableArray.Create(a);