16 Type[]? _genericParametersSource;
28 base(context, module, type, underlyingMethod)
30 _underlyingMethod = underlyingMethod ??
throw new ArgumentNullException(nameof(underlyingMethod));
41 if (genericParameterType is
null)
42 throw new ArgumentNullException(nameof(genericParameterType));
44 Debug.Assert(genericParameterType.DeclaringMethod == _underlyingMethod);
47 _genericParametersSource ??= _underlyingMethod.GetGenericArguments();
54 if (_genericParameters.Length < idx)
55 throw new IndexOutOfRangeException();
58 ref var rec =
ref _genericParameters[idx];
64 throw new InvalidOperationException();
77 if (genericMethodArguments is
null)
78 throw new ArgumentNullException(nameof(genericMethodArguments));
80 if (_underlyingMethod.IsGenericMethodDefinition ==
false)
81 throw new InvalidOperationException();
84 if (_genericParametersSource ==
null)
85 Interlocked.CompareExchange(
ref _genericParametersSource, _underlyingMethod.GetGenericArguments(),
null);
86 if (_genericParametersSource.Length != genericMethodArguments.Length)
87 throw new InvalidOperationException();
90 if (_genericTypes ==
null)
96 foreach (var i
in _genericTypes)
97 if (i.Arguments.SequenceEqual(genericMethodArguments))
101 var sym =
new ReflectionMethodSymbol(
Context, ContainingModule, ContainingType, _underlyingMethod.MakeGenericMethod(genericMethodArguments));
102 _genericTypes.Add((genericMethodArguments, sym));
110 internal MethodInfo UnderlyingMethod => _underlyingMethod;
124 return ResolveMethodSymbol(_underlyingMethod.GetBaseDefinition());
130 return ResolveMethodSymbol(_underlyingMethod.GetGenericMethodDefinition());
136 return ResolveMethodSymbol(_underlyingMethod.MakeGenericMethod(UnpackTypeSymbols(typeArguments)));
Holds references to symbols derived from System.Reflection.