From b3b324219eba0296178f8825a7357469d1d07d21 Mon Sep 17 00:00:00 2001 From: Jb Evain Date: Fri, 20 Jan 2012 15:08:29 +0100 Subject: [PATCH] Improve anonymous method cache field detection; refactorings --- ICSharpCode.Decompiler/Ast/AstBuilder.cs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler/Ast/AstBuilder.cs b/ICSharpCode.Decompiler/Ast/AstBuilder.cs index 154517c74..75c3ea029 100644 --- a/ICSharpCode.Decompiler/Ast/AstBuilder.cs +++ b/ICSharpCode.Decompiler/Ast/AstBuilder.cs @@ -92,9 +92,9 @@ namespace ICSharpCode.Decompiler.Ast FieldDefinition field = member as FieldDefinition; if (field != null) { if (field.IsCompilerGenerated()) { - if (settings.AnonymousMethods && (field.HasGeneratedName() || field.Name.StartsWith("CS$<>", StringComparison.Ordinal))) + if (settings.AnonymousMethods && IsAnonymousMethodCacheField(field)) return true; - if (settings.AutomaticProperties && field.HasGeneratedName() && field.Name.EndsWith("BackingField", StringComparison.Ordinal)) + if (settings.AutomaticProperties && IsAutomaticPropertyBackingField(field)) return true; } // event-fields are not [CompilerGenerated] @@ -105,6 +105,16 @@ namespace ICSharpCode.Decompiler.Ast return false; } + static bool IsAutomaticPropertyBackingField(FieldDefinition field) + { + return field.HasGeneratedName() && field.Name.EndsWith("BackingField", StringComparison.Ordinal); + } + + static bool IsAnonymousMethodCacheField(FieldDefinition field) + { + return field.Name.StartsWith("CS$<>", StringComparison.Ordinal) || field.Name.StartsWith("<>f__am", StringComparison.Ordinal); + } + static bool IsClosureType(TypeDefinition type) { return type.HasGeneratedName() && type.IsCompilerGenerated() && (type.Name.Contains("DisplayClass") || type.Name.Contains("AnonStorey"));