Browse Source

Don't show the nested display classes when decompiling a complete type.

pull/37/head
Daniel Grunwald 15 years ago
parent
commit
9f4830f447
  1. 15
      ICSharpCode.Decompiler/Ast/AstBuilder.cs
  2. 11
      ILSpy/CSharpLanguage.cs

15
ICSharpCode.Decompiler/Ast/AstBuilder.cs

@ -24,6 +24,17 @@ namespace Decompiler @@ -24,6 +24,17 @@ namespace Decompiler
this.context = context;
}
public static bool MemberIsHidden(MemberReference member)
{
MethodDefinition method = member as MethodDefinition;
if (method != null && (method.IsGetter || method.IsSetter || method.IsAddOn || method.IsRemoveOn))
return true;
TypeDefinition type = member as TypeDefinition;
if (type != null && type.DeclaringType != null && type.Name.StartsWith("<>c__DisplayClass", StringComparison.Ordinal) && type.IsCompilerGenerated())
return true;
return false;
}
public void GenerateCode(ITextOutput output)
{
GenerateCode(output, null);
@ -131,6 +142,8 @@ namespace Decompiler @@ -131,6 +142,8 @@ namespace Decompiler
// Nested types
foreach(TypeDefinition nestedTypeDef in typeDef.NestedTypes) {
if (MemberIsHidden(nestedTypeDef))
continue;
astType.AddChild(CreateType(nestedTypeDef), TypeDeclaration.MemberRole);
}
@ -415,7 +428,7 @@ namespace Decompiler @@ -415,7 +428,7 @@ namespace Decompiler
// Add methods
foreach(MethodDefinition methodDef in typeDef.Methods) {
if (methodDef.IsSpecialName) continue;
if (methodDef.IsConstructor || MemberIsHidden(methodDef)) continue;
astType.AddChild(CreateMethod(methodDef), TypeDeclaration.MemberRole);
}

11
ILSpy/CSharpLanguage.cs

@ -167,16 +167,7 @@ namespace ICSharpCode.ILSpy @@ -167,16 +167,7 @@ namespace ICSharpCode.ILSpy
public override bool ShowMember(MemberReference member)
{
if (showAllMembers) {
return true;
}
MethodDefinition method = member as MethodDefinition;
if (method != null && (method.IsGetter || method.IsSetter || method.IsAddOn || method.IsRemoveOn))
return false;
TypeDefinition type = member as TypeDefinition;
if (type != null && type.Name.StartsWith("<>c__DisplayClass", StringComparison.Ordinal) && type.IsCompilerGenerated())
return false;
return true;
return showAllMembers || !AstBuilder.MemberIsHidden(member);
}
}
}

Loading…
Cancel
Save