Browse Source

Refactor detection of generated member name

pull/307/head
Jb Evain 14 years ago
parent
commit
3d804a162b
  1. 13
      ICSharpCode.Decompiler/Ast/AstBuilder.cs
  2. 2
      ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs
  3. 7
      ICSharpCode.Decompiler/CecilExtensions.cs

13
ICSharpCode.Decompiler/Ast/AstBuilder.cs

@ -70,14 +70,14 @@ namespace ICSharpCode.Decompiler.Ast @@ -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 @@ -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 @@ -104,11 +104,6 @@ namespace ICSharpCode.Decompiler.Ast
return false;
}
static bool IsGeneratedMemberName(string name)
{
return name.StartsWith("<", StringComparison.Ordinal);
}
/// <summary>
/// Runs the C# transformations on the compilation unit.

2
ICSharpCode.Decompiler/Ast/Transforms/DelegateConstruction.cs

@ -115,7 +115,7 @@ namespace ICSharpCode.Decompiler.Ast.Transforms @@ -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;

7
ICSharpCode.Decompiler/CecilExtensions.cs

@ -220,12 +220,17 @@ namespace ICSharpCode.Decompiler @@ -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)
{

Loading…
Cancel
Save