|
|
@ -1227,16 +1227,15 @@ namespace ICSharpCode.Decompiler.CSharp |
|
|
|
CallOpCode = inst.OpCode |
|
|
|
CallOpCode = inst.OpCode |
|
|
|
}; |
|
|
|
}; |
|
|
|
ResolveResult result = null; |
|
|
|
ResolveResult result = null; |
|
|
|
string methodName; |
|
|
|
string methodName = method.Name; |
|
|
|
if (method.IsLocalFunction) { |
|
|
|
if (method.IsLocalFunction) { |
|
|
|
requireTarget = false; |
|
|
|
requireTarget = false; |
|
|
|
var localFunction = expressionBuilder.ResolveLocalFunction(method); |
|
|
|
var localFunction = expressionBuilder.ResolveLocalFunction(method); |
|
|
|
result = ToMethodGroup(method, localFunction); |
|
|
|
result = ToMethodGroup(method, localFunction); |
|
|
|
target = default; |
|
|
|
target = default; |
|
|
|
|
|
|
|
targetType = default; |
|
|
|
methodName = localFunction.Name; |
|
|
|
methodName = localFunction.Name; |
|
|
|
} else { |
|
|
|
} else if (method.IsExtensionMethod && invokeMethod != null && method.Parameters.Count - 1 == invokeMethod.Parameters.Count) { |
|
|
|
methodName = method.Name; |
|
|
|
|
|
|
|
if (method.IsExtensionMethod && invokeMethod != null && method.Parameters.Count - 1 == invokeMethod.Parameters.Count) { |
|
|
|
|
|
|
|
targetType = method.Parameters[0].Type; |
|
|
|
targetType = method.Parameters[0].Type; |
|
|
|
if (targetType.Kind == TypeKind.ByReference && thisArg is Box thisArgBox) { |
|
|
|
if (targetType.Kind == TypeKind.ByReference && thisArg is Box thisArgBox) { |
|
|
|
targetType = ((ByReferenceType)targetType).ElementType; |
|
|
|
targetType = ((ByReferenceType)targetType).ElementType; |
|
|
@ -1263,7 +1262,7 @@ namespace ICSharpCode.Decompiler.CSharp |
|
|
|
|| (method.IsStatic ? !expressionBuilder.IsCurrentOrContainingType(method.DeclaringTypeDefinition) : !(target.Expression is ThisReferenceExpression)); |
|
|
|
|| (method.IsStatic ? !expressionBuilder.IsCurrentOrContainingType(method.DeclaringTypeDefinition) : !(target.Expression is ThisReferenceExpression)); |
|
|
|
} |
|
|
|
} |
|
|
|
var or = new OverloadResolution(resolver.Compilation, method.Parameters.SelectReadOnlyArray(p => new TypeResolveResult(p.Type))); |
|
|
|
var or = new OverloadResolution(resolver.Compilation, method.Parameters.SelectReadOnlyArray(p => new TypeResolveResult(p.Type))); |
|
|
|
if (!requireTarget) { |
|
|
|
if (!method.IsLocalFunction && !requireTarget) { |
|
|
|
result = resolver.ResolveSimpleName(method.Name, method.TypeArguments, isInvocationTarget: false); |
|
|
|
result = resolver.ResolveSimpleName(method.Name, method.TypeArguments, isInvocationTarget: false); |
|
|
|
if (result is MethodGroupResolveResult mgrr) { |
|
|
|
if (result is MethodGroupResolveResult mgrr) { |
|
|
|
or.AddMethodLists(mgrr.MethodsGroupedByDeclaringType.ToArray()); |
|
|
|
or.AddMethodLists(mgrr.MethodsGroupedByDeclaringType.ToArray()); |
|
|
@ -1289,7 +1288,6 @@ namespace ICSharpCode.Decompiler.CSharp |
|
|
|
target = target.ConvertTo(targetType, expressionBuilder); |
|
|
|
target = target.ConvertTo(targetType, expressionBuilder); |
|
|
|
result = lookup.Lookup(target.ResolveResult, method.Name, method.TypeArguments, false); |
|
|
|
result = lookup.Lookup(target.ResolveResult, method.Name, method.TypeArguments, false); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
Expression targetExpression; |
|
|
|
Expression targetExpression; |
|
|
|
if (requireTarget) { |
|
|
|
if (requireTarget) { |
|
|
|
var mre = new MemberReferenceExpression(target, methodName); |
|
|
|
var mre = new MemberReferenceExpression(target, methodName); |
|
|
|