From 9a4e49a7d4ca6a19d3f548773333c059f9d7e73f Mon Sep 17 00:00:00 2001 From: sonyps5201314 Date: Tue, 28 Oct 2025 00:10:40 +0800 Subject: [PATCH] Fixed an issue where the "CopilotQueriedScopeMention" type in "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\Microsoft.VisualStudio.Copilot.Contracts\Microsoft.VisualStudio.Copilot.dll" could not be decompiled correctly after expanding the judgment logic of IsPrimaryConstructor. --- .../CSharp/RecordDecompiler.cs | 4 ++-- ...ransformFieldAndConstructorInitializers.cs | 22 +------------------ 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs b/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs index fe9c1f01e..b8d55eb83 100644 --- a/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs @@ -293,8 +293,8 @@ namespace ICSharpCode.Decompiler.CSharp for (int i = 0; i < method.Parameters.Count; i++) { var param = unspecializedMethod.Parameters[i]; - //var backingMember = backingMembers.Find(x => x.Name == param.Name); - var backingMember = backingMembers.Count > i ? backingMembers[i] : null; + var backingMember = backingMembers.Find(x => x.Name == param.Name); + //var backingMember = backingMembers.Count > i ? backingMembers[i] : null; if (backingMember != null) { primaryCtorParameterToAutoPropertyOrBackingField.Add(param, backingMember); diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs b/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs index 872e06ca3..b5b7f1aee 100644 --- a/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs +++ b/ICSharpCode.Decompiler/CSharp/Transforms/TransformFieldAndConstructorInitializers.cs @@ -227,10 +227,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms var v = initializer.Annotation()?.Variable; if (v?.Kind == IL.VariableKind.Parameter) { - // remove record ctor parameter assignments - if (!IsPropertyDeclaredByPrimaryCtor(fieldOrPropertyOrEvent, record)) - break; - isStructPrimaryCtor = true; + isStructPrimaryCtor = record?.PrimaryConstructor != null; if (fieldOrPropertyOrEvent is IField f) fieldToVariableMap.Add(f, v); } @@ -282,23 +279,6 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms } } - bool IsPropertyDeclaredByPrimaryCtor(IMember m, RecordDecompiler record) - { - if (record == null) - return false; - switch (m) - { - case IProperty p: - return record.IsPropertyDeclaredByPrimaryConstructor(p); - case IField f: - return record.PrimaryConstructor != null; - case IEvent e: - return record.PrimaryConstructor != null; - default: - return false; - } - } - void RemoveSingleEmptyConstructor(IEnumerable members, ITypeDefinition contextTypeDefinition) { // if we're outside of a type definition skip this altogether