diff --git a/ICSharpCode.Decompiler/Ast/AstBuilder.cs b/ICSharpCode.Decompiler/Ast/AstBuilder.cs index 206e813c5..bafbac349 100644 --- a/ICSharpCode.Decompiler/Ast/AstBuilder.cs +++ b/ICSharpCode.Decompiler/Ast/AstBuilder.cs @@ -70,14 +70,14 @@ namespace ICSharpCode.Decompiler.Ast if (method != null) { if (method.IsGetter || method.IsSetter || method.IsAddOn || method.IsRemoveOn) return true; - if (settings.AnonymousMethods && IsGeneratedMemberName(method.Name) && method.IsCompilerGenerated()) + if (settings.AnonymousMethods && method.HasGeneratedName() && method.IsCompilerGenerated()) return true; } TypeDefinition type = member as TypeDefinition; if (type != null) { if (type.DeclaringType != null) { - if (settings.AnonymousMethods && IsGeneratedMemberName(type.Name) && type.IsCompilerGenerated()) + if (settings.AnonymousMethods && type.HasGeneratedName() && type.IsCompilerGenerated()) return true; if (settings.YieldReturn && YieldReturnDecompiler.IsCompilerGeneratorEnumerator(type)) return true; @@ -92,9 +92,9 @@ namespace ICSharpCode.Decompiler.Ast FieldDefinition field = member as FieldDefinition; if (field != null) { if (field.IsCompilerGenerated()) { - if (settings.AnonymousMethods && (IsGeneratedMemberName(field.Name) || field.Name.StartsWith("CS$<>", StringComparison.Ordinal))) + if (settings.AnonymousMethods && (field.HasGeneratedName() || field.Name.StartsWith("CS$<>", StringComparison.Ordinal))) return true; - if (settings.AutomaticProperties && IsGeneratedMemberName(field.Name) && field.Name.EndsWith("BackingField", StringComparison.Ordinal)) + if (settings.AutomaticProperties && field.HasGeneratedName() && field.Name.EndsWith("BackingField", StringComparison.Ordinal)) return true; } // event-fields are not [CompilerGenerated] @@ -104,11 +104,6 @@ namespace ICSharpCode.Decompiler.Ast return false; } - - static bool IsGeneratedMemberName(string name) - { - return name.StartsWith("<", StringComparison.Ordinal); - } /// /// Runs the C# transformations on the compilation unit. diff --git a/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs b/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs index f7c4420b9..9264000f0 100644 --- a/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs +++ b/ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs @@ -115,7 +115,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms internal static bool IsAnonymousMethod(DecompilerContext context, MethodDefinition method) { - if (method == null || !(method.Name.StartsWith("<", StringComparison.Ordinal) || method.Name.Contains("$"))) + if (method == null || !(method.HasGeneratedName() || method.Name.Contains("$"))) return false; if (!(method.IsCompilerGenerated() || IsPotentialClosure(context, method.DeclaringType))) return false; diff --git a/ICSharpCode.Decompiler/CecilExtensions.cs b/ICSharpCode.Decompiler/CecilExtensions.cs index 89377bf55..2c2198c46 100644 --- a/ICSharpCode.Decompiler/CecilExtensions.cs +++ b/ICSharpCode.Decompiler/CecilExtensions.cs @@ -220,12 +220,17 @@ namespace ICSharpCode.Decompiler { if (type == null) return false; - if (string.IsNullOrEmpty(type.Namespace) && type.Name.StartsWith("<>", StringComparison.Ordinal) && type.Name.Contains("AnonymousType")) { + if (string.IsNullOrEmpty(type.Namespace) && type.HasGeneratedName() && type.Name.Contains("Anon")) { TypeDefinition td = type.Resolve(); return td != null && td.IsCompilerGenerated(); } return false; } + + public static bool HasGeneratedName(this MemberReference member) + { + return member.Name.StartsWith("<", StringComparison.Ordinal); + } public static bool ContainsAnonymousType(this TypeReference type) {