diff --git a/ICSharpCode.Decompiler/Ast/Transforms/ConvertConstructorCallIntoInitializer.cs b/ICSharpCode.Decompiler/Ast/Transforms/ConvertConstructorCallIntoInitializer.cs index 36f6d4eb5..caf6b4d91 100644 --- a/ICSharpCode.Decompiler/Ast/Transforms/ConvertConstructorCallIntoInitializer.cs +++ b/ICSharpCode.Decompiler/Ast/Transforms/ConvertConstructorCallIntoInitializer.cs @@ -38,5 +38,20 @@ namespace Decompiler.Transforms } return null; } + + public override object VisitTypeDeclaration(TypeDeclaration typeDeclaration, object data) + { + base.VisitTypeDeclaration(typeDeclaration, data); + // Remove single empty constructor: + var ctors = typeDeclaration.Members.OfType().Where(c => (c.Modifiers & Modifiers.Static) == 0).ToArray(); + if (ctors.Length == 1 && ctors[0].Body.Children.Count() == 0 + && ctors[0].Initializer.ConstructorInitializerType == ConstructorInitializerType.Base + && ctors[0].Initializer.Arguments.Count() == 0 + && ctors[0].Modifiers == ((typeDeclaration.Modifiers & Modifiers.Abstract) == Modifiers.Abstract ? Modifiers.Protected : Modifiers.Public)) + { + ctors[0].Remove(); + } + return null; + } } }