Skip to content

Commit 73eb8ab

Browse files
committed
Refactor MethodData to use direct MethodInfo property
Replaced GetMethodInfo() calls with direct MethodInfo access in MethodData and related classes for improved performance and clarity. Made many MethodData properties public for broader API access. Added MethodInfo property to WellKnownMethodDescriptor. Refactored explicit interface implementation detection logic for greater reliability and maintainability. Updated EventData to use new explicit interface implementation logic.
1 parent c0d57b6 commit 73eb8ab

7 files changed

Lines changed: 189 additions & 122 deletions

File tree

‎src/BionicCode.Utilities.Reflection/DelegateProvider.cs‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public static MethodData GetOrCreateFastMethodInvoker(MethodData targetMethodDat
129129
Expression.ArrayIndex(argsParam, Expression.Constant(index)),
130130
parameter.ParameterTypeData.UnwrapType())).ToArray();
131131

132-
MethodInfo methodInfo = methodData.GetMethodInfo();
132+
MethodInfo methodInfo = methodData.MethodInfo;
133133
Expression call = methodData.IsStatic
134134
? Expression.Call(methodInfo, callArgs)
135135
: Expression.Call(instance!, methodInfo, callArgs); // instance required for non-static :contentReference[oaicite:7]{index=7}
@@ -244,7 +244,7 @@ public static MethodData GetOrCreateFastMethodInvoker<TTarget, TResult>(MethodDa
244244
Expression.ArrayIndex(argsParam, Expression.Constant(index)),
245245
parameter.ParameterTypeData.UnwrapType())).ToArray();
246246

247-
MethodInfo methodInfo = methodData.GetMethodInfo();
247+
MethodInfo methodInfo = methodData.MethodInfo;
248248
Expression call = methodData.IsStatic
249249
? Expression.Call(methodInfo, callArgs)
250250
: Expression.Call(instanceExpression, methodInfo, callArgs); // instance required for non-static :contentReference[oaicite:7]{index=7}
@@ -386,7 +386,7 @@ public static MethodData GetOrCreateFastVoidMethodInvoker<TTarget>(MethodData ta
386386
Expression.ArrayIndex(argsParam, Expression.Constant(index)),
387387
parameter.ParameterTypeData.UnwrapType())).ToArray();
388388

389-
MethodInfo methodInfo = methodData.GetMethodInfo();
389+
MethodInfo methodInfo = methodData.MethodInfo;
390390
Expression call = methodData.IsStatic
391391
? Expression.Call(methodInfo, callArgs)
392392
: Expression.Call(instanceExpression, methodInfo, callArgs); // instance required for non-static :contentReference[oaicite:7]{index=7}
@@ -2008,7 +2008,7 @@ private static Expression CreateTargetTypeMismatchExceptionExpression(PropertyDa
20082008
MethodData toFullyQualifiedSignatureNameExtensionMethodData = helperExtensionsCommonTypeData.Methods[extensionMethodName, new MethodParameterInfo(typeCacheKey)];
20092009

20102010
// BUG::Call GetType on target and pass to extension method
2011-
MethodCallExpression extensionMethodCall = Expression.Call(toFullyQualifiedSignatureNameExtensionMethodData.GetMethodInfo(), target);
2011+
MethodCallExpression extensionMethodCall = Expression.Call(toFullyQualifiedSignatureNameExtensionMethodData.MethodInfo, target);
20122012

20132013
Expression message = Expression.Call(
20142014
stringConcat5,

‎src/BionicCode.Utilities.Reflection/EventData.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ internal sealed class EventData : MemberData
3838
private readonly WellKnownEventDescriptor _descriptor;
3939
private RuntimeTypeHandle? _declaringTypeHandle;
4040
private RuntimeTypeHandle? _implementingTypeHandle;
41+
private bool? _isExplicitInterfaceImplementation;
4142

4243
internal EventData(SymbolReflectionInfoCacheKey symbolInfoDataCacheKey)
4344
: base(symbolInfoDataCacheKey.EventDescriptor.EventName, SymbolKind.MemberEvent, symbolInfoDataCacheKey)
@@ -177,7 +178,6 @@ internal EventInfo EventInfo
177178
private set => _eventInfo = value;
178179
}
179180

180-
private bool? _isExplicitInterfaceImplementation;
181181
/// <inheritdoc/>
182182
internal override bool IsExplicitInterfaceImplementation
183183
=> _isExplicitInterfaceImplementation ??= IsExplicitImplementation(this);

0 commit comments

Comments
 (0)