32 _context = context ??
throw new ArgumentNullException(nameof(context));
50 return _context.GetOrCreateModuleSymbol(module);
58 protected internal ImmutableArray<IkvmReflectionModuleSymbol> ResolveModuleSymbols(Module[] modules)
61 for (
int i = 0; i < modules.Length; i++)
62 a.Add(ResolveModuleSymbol(modules[i]));
64 return a.DrainToImmutable();
72 protected internal IEnumerable<IkvmReflectionModuleSymbol> ResolveModuleSymbols(IEnumerable<Module> modules)
74 foreach (var module
in modules)
75 yield
return ResolveModuleSymbol(module);
83 protected internal Module[] UnpackModuleSymbols(IModuleSymbol[] modules)
85 var a =
new Module[modules.Length];
86 for (
int i = 0; i < modules.Length; i++)
87 a[i] = ((IkvmReflectionModuleSymbol)modules[i]).UnderlyingModule;
99 return member.MemberType
switch
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(),
122 for (
int i = 0; i < types.Length; i++)
133 protected internal MemberInfo[] UnpackMemberSymbols(
IMemberSymbol[] members)
135 var a =
new MemberInfo[members.Length];
136 for (
int i = 0; i < members.Length; i++)
137 a[i] = ((IkvmReflectionMemberSymbol)members[i]).UnderlyingMember;
147 protected virtual internal IkvmReflectionTypeSymbol ResolveTypeSymbol(Type type)
149 return _context.GetOrCreateTypeSymbol(type);
157 protected internal IkvmReflectionTypeSymbol[] ResolveTypeSymbols(Type[] types)
159 var a =
new IkvmReflectionTypeSymbol[types.Length];
160 for (
int i = 0; i < types.Length; i++)
161 a[i] = ResolveTypeSymbol(types[i]);
171 protected internal IEnumerable<IkvmReflectionTypeSymbol> ResolveTypeSymbols(IEnumerable<Type> types)
173 foreach (var type
in types)
174 yield
return ResolveTypeSymbol(type);
182 protected internal Type[] UnpackTypeSymbols(ITypeSymbol[] types)
184 var a =
new Type[types.Length];
185 for (
int i = 0; i < types.Length; i++)
186 a[i] = ((IkvmReflectionTypeSymbol)types[i]).UnderlyingType;
196 protected virtual internal IkvmReflectionMethodBaseSymbol ResolveMethodBaseSymbol(MethodBase method)
198 if (method.IsConstructor)
199 return ResolveConstructorSymbol((ConstructorInfo)method);
201 return ResolveMethodSymbol((MethodInfo)method);
209 protected virtual internal IkvmReflectionConstructorSymbol ResolveConstructorSymbol(ConstructorInfo ctor)
211 return _context.GetOrCreateConstructorSymbol(ctor);
219 protected internal IkvmReflectionConstructorSymbol[] ResolveConstructorSymbols(ConstructorInfo[] ctors)
221 var a =
new IkvmReflectionConstructorSymbol[ctors.Length];
222 for (
int i = 0; i < ctors.Length; i++)
223 a[i] = ResolveConstructorSymbol(ctors[i]);
233 protected virtual internal IkvmReflectionMethodSymbol ResolveMethodSymbol(MethodInfo method)
235 return _context.GetOrCreateMethodSymbol(method);
243 protected internal IkvmReflectionMethodSymbol[] ResolveMethodSymbols(MethodInfo[] methods)
245 var a =
new IkvmReflectionMethodSymbol[methods.Length];
246 for (
int i = 0; i < methods.Length; i++)
247 a[i] = ResolveMethodSymbol(methods[i]);
257 protected virtual internal IkvmReflectionParameterSymbol ResolveParameterSymbol(ParameterInfo parameter)
259 return _context.GetOrCreateParameterSymbol(parameter);
267 protected internal IkvmReflectionParameterSymbol[] ResolveParameterSymbols(ParameterInfo[] parameters)
269 var a =
new IkvmReflectionParameterSymbol[parameters.Length];
270 for (
int i = 0; i < parameters.Length; i++)
271 a[i] = ResolveParameterSymbol(parameters[i]);
281 protected virtual internal IkvmReflectionFieldSymbol ResolveFieldSymbol(FieldInfo field)
283 return _context.GetOrCreateFieldSymbol(field);
291 protected internal IkvmReflectionFieldSymbol[] ResolveFieldSymbols(FieldInfo[] fields)
293 var a =
new IkvmReflectionFieldSymbol[fields.Length];
294 for (
int i = 0; i < fields.Length; i++)
295 a[i] = ResolveFieldSymbol(fields[i]);
305 protected virtual internal IkvmReflectionPropertySymbol ResolvePropertySymbol(PropertyInfo property)
307 return _context.GetOrCreatePropertySymbol(property);
315 protected internal IkvmReflectionPropertySymbol[] ResolvePropertySymbols(PropertyInfo[] properties)
317 var a =
new IkvmReflectionPropertySymbol[properties.Length];
318 for (
int i = 0; i < properties.Length; i++)
319 a[i] = ResolvePropertySymbol(properties[i]);
329 protected virtual internal IkvmReflectionEventSymbol ResolveEventSymbol(EventInfo @event)
331 return _context.GetOrCreateEventSymbol(@event);
339 protected internal IkvmReflectionEventSymbol[] ResolveEventSymbols(EventInfo[] events)
341 var a =
new IkvmReflectionEventSymbol[events.Length];
342 for (
int i = 0; i < events.Length; i++)
343 a[i] = ResolveEventSymbol(events[i]);
353 protected internal ImmutableArray<CustomAttributeSymbol> ResolveCustomAttributes(IList<CustomAttributeData> attributes)
356 for (
int i = 0; i < attributes.Count; i++)
357 a.Add(ResolveCustomAttribute(attributes[i]));
359 return a.DrainToImmutable();
367 protected internal CustomAttributeSymbol ResolveCustomAttribute(CustomAttributeData customAttributeData)
370 ResolveTypeSymbol(customAttributeData.AttributeType),
371 ResolveConstructorSymbol(customAttributeData.Constructor),
372 ResolveCustomAttributeTypedArguments(customAttributeData.ConstructorArguments),
373 ResolveCustomAttributeNamedArguments(customAttributeData.NamedArguments));
381 ImmutableArray<CustomAttributeSymbolTypedArgument> ResolveCustomAttributeTypedArguments(IList<CustomAttributeTypedArgument> args)
384 for (
int i = 0; i < args.Count; i++)
385 a.Add(ResolveCustomAttributeTypedArgument(args[i]));
387 return a.DrainToImmutable();
405 ImmutableArray<CustomAttributeSymbolNamedArgument> ResolveCustomAttributeNamedArguments(IList<CustomAttributeNamedArgument> args)
408 for (
int i = 0; i < args.Count; i++)
409 a.Add(ResolveCustomAttributeNamedArgument(args[i]));
411 return a.DrainToImmutable();