Browse Source

Improve anonymous method cache field detection; refactorings

pull/307/head
Jb Evain 14 years ago
parent
commit
b3b324219e
  1. 14
      ICSharpCode.Decompiler/Ast/AstBuilder.cs

14
ICSharpCode.Decompiler/Ast/AstBuilder.cs

@ -92,9 +92,9 @@ namespace ICSharpCode.Decompiler.Ast @@ -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 @@ -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"));

Loading…
Cancel
Save