From 1f1e95d7a1dffb61aae4a0fe17ce111d1bb3368e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 16 Jul 2022 12:22:20 +0200 Subject: [PATCH] Update RecordDecompiler for Roslyn 4.3.0. --- .../CSharp/RecordDecompiler.cs | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs b/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs index f76cb2fe1..455c8b21b 100644 --- a/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/RecordDecompiler.cs @@ -354,6 +354,17 @@ namespace ICSharpCode.Decompiler.CSharp && IsRecordType(method.Parameters[0].Type); } + private bool IsAllowedAttribute(IAttribute attribute) + { + switch (attribute.AttributeType.ReflectionName) + { + case "System.Runtime.CompilerServices.CompilerGeneratedAttribute": + return true; + default: + return false; + } + } + private bool IsGeneratedCopyConstructor(IMethod method) { /* @@ -362,7 +373,7 @@ namespace ICSharpCode.Decompiler.CSharp leave IL_0000 (nop) */ Debug.Assert(method.IsConstructor && method.Parameters.Count == 1); - if (method.GetAttributes().Any() || method.GetReturnTypeAttributes().Any()) + if (method.GetAttributes().Any(attr => !IsAllowedAttribute(attr)) || method.GetReturnTypeAttributes().Any()) return false; if (method.Accessibility != Accessibility.Protected && (!isSealed || method.Accessibility != Accessibility.Private)) return false; @@ -461,7 +472,7 @@ namespace ICSharpCode.Decompiler.CSharp return false; if (!isSealed && !method.IsOverridable) return false; - if (method.GetAttributes().Any() || method.GetReturnTypeAttributes().Any()) + if (method.GetAttributes().Any(attr => !IsAllowedAttribute(attr)) || method.GetReturnTypeAttributes().Any()) return false; if (method.Accessibility != Accessibility.Protected && (!isSealed || method.Accessibility != Accessibility.Private)) return false; @@ -637,7 +648,7 @@ namespace ICSharpCode.Decompiler.CSharp return false; if (method.IsSealed) return false; - if (method.GetAttributes().Any() || method.GetReturnTypeAttributes().Any()) + if (method.GetAttributes().Any(attr => !IsAllowedAttribute(attr)) || method.GetReturnTypeAttributes().Any()) return false; var body = DecompileBody(method); if (body == null) @@ -711,7 +722,7 @@ namespace ICSharpCode.Decompiler.CSharp return false; if (!isSealed && !method.IsOverridable) return false; - if (method.GetAttributes().Any() || method.GetReturnTypeAttributes().Any()) + if (method.GetAttributes().Any(attr => !IsAllowedAttribute(attr)) || method.GetReturnTypeAttributes().Any()) return false; if (orderedMembers == null) return false; @@ -901,7 +912,7 @@ namespace ICSharpCode.Decompiler.CSharp return false; if (!method.IsOverride || method.IsSealed) return false; - if (method.GetAttributes().Any() || method.GetReturnTypeAttributes().Any()) + if (method.GetAttributes().Any(attr => !IsAllowedAttribute(attr)) || method.GetReturnTypeAttributes().Any()) return false; if (orderedMembers == null) return false;