From ef0b4668cca07b226e3a75a6d972bb0a201ca29a Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Tue, 6 Oct 2026 07:44:01 +0200 Subject: [PATCH] Return symbols for method-group resolve results Dynamic and token-writer reference paths can receive method-group resolve results directly. Returning the first method keeps ResolveResult.GetSymbol aligned with the existing method-group handling used by AST annotations. Assisted-by: OpenAI:openai/gpt-5.5:OpenCode --- .../TypeSystem/TypeSystemExtensions.cs | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs b/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs index 3c879df6a..a8f23076d 100644 --- a/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs +++ b/ICSharpCode.Decompiler/TypeSystem/TypeSystemExtensions.cs @@ -22,6 +22,7 @@ using System.Diagnostics; using System.Linq; using System.Reflection.Metadata; +using ICSharpCode.Decompiler.CSharp.Resolver; using ICSharpCode.Decompiler.IL.Transforms; using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.Semantics; @@ -796,29 +797,22 @@ namespace ICSharpCode.Decompiler.TypeSystem #region ResolveResult public static ISymbol GetSymbol(this ResolveResult rr) { - if (rr is LocalResolveResult) + switch (rr) { - return ((LocalResolveResult)rr).Variable; - } - else if (rr is MemberResolveResult) - { - return ((MemberResolveResult)rr).Member; - } - else if (rr is TypeResolveResult) - { - return ((TypeResolveResult)rr).Type.GetDefinition(); - } - else if (rr is ConversionResolveResult) - { - return ((ConversionResolveResult)rr).Input.GetSymbol(); - } - else if (rr is DynamicMemberResolveResult dynamicMember) - { - return dynamicMember.Symbol; - } - else if (rr is DynamicInvocationResolveResult dynamicInvocation) - { - return dynamicInvocation.Symbol; + case LocalResolveResult lrr: + return lrr.Variable; + case MemberResolveResult mrr: + return mrr.Member; + case TypeResolveResult trr: + return trr.Type.GetDefinition(); + case ConversionResolveResult crr: + return crr.Input.GetSymbol(); + case MethodGroupResolveResult mgrr: + return mgrr.Methods.FirstOrDefault(); + case DynamicMemberResolveResult dynamicMember: + return dynamicMember.Symbol; + case DynamicInvocationResolveResult dynamicInvocation: + return dynamicInvocation.Symbol; } return null;