From a5237ffad691a00c404737b184b77cfd84d29a7a Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 15 Nov 2014 14:21:40 +0100 Subject: [PATCH] properly remove during decompilation process --- .../CSharp/CSharpDecompiler.cs | 21 ++++++++++----- .../Tests/Helpers/RemoveEmptyNamespace.cs | 26 ------------------- .../Tests/Helpers/Tester.cs | 1 - .../Tests/ICSharpCode.Decompiler.Tests.csproj | 1 - 4 files changed, 14 insertions(+), 35 deletions(-) delete mode 100644 ICSharpCode.Decompiler/Tests/Helpers/RemoveEmptyNamespace.cs diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index ba52598fd..eccf2463a 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -87,15 +87,22 @@ namespace ICSharpCode.Decompiler.CSharp public SyntaxTree DecompileWholeModuleAsSingleFile() { SyntaxTree syntaxTree = new SyntaxTree(); - foreach (var g in compilation.MainAssembly.TopLevelTypeDefinitions.GroupBy(t => t.Namespace)) - { - NamespaceDeclaration ns = new NamespaceDeclaration(g.Key); - foreach (var typeDef in g) - { + foreach (var g in compilation.MainAssembly.TopLevelTypeDefinitions.GroupBy(t => t.Namespace)) { + AstNode groupNode; + if (string.IsNullOrEmpty(g.Key)) { + groupNode = syntaxTree; + } else { + NamespaceDeclaration ns = new NamespaceDeclaration(g.Key); + syntaxTree.AddChild(ns, SyntaxTree.MemberRole); + groupNode = ns; + } + + foreach (var typeDef in g) { + if (typeDef.Name == "" && typeDef.Members.Count == 0) + continue; var typeDecl = Decompile(typeDef); - ns.AddMember(typeDecl); + groupNode.AddChild(typeDecl, SyntaxTree.MemberRole); } - syntaxTree.AddChild(ns, SyntaxTree.MemberRole); } return syntaxTree; } diff --git a/ICSharpCode.Decompiler/Tests/Helpers/RemoveEmptyNamespace.cs b/ICSharpCode.Decompiler/Tests/Helpers/RemoveEmptyNamespace.cs deleted file mode 100644 index 8f90fda4e..000000000 --- a/ICSharpCode.Decompiler/Tests/Helpers/RemoveEmptyNamespace.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ICSharpCode.NRefactory.CSharp; - -namespace ICSharpCode.Decompiler.Tests.Helpers -{ - class RemoveEmptyNamespace : DepthFirstAstVisitor - { - public override object VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, object data) - { - if (namespaceDeclaration.FullName.Length == 0) { - namespaceDeclaration.Remove(); - return null; - } - return base.VisitNamespaceDeclaration(namespaceDeclaration, data); - } - - public void Run(AstNode node) - { - node.AcceptVisitor(this, null); - } - } -} diff --git a/ICSharpCode.Decompiler/Tests/Helpers/Tester.cs b/ICSharpCode.Decompiler/Tests/Helpers/Tester.cs index cd905dba7..b8c3dc45f 100644 --- a/ICSharpCode.Decompiler/Tests/Helpers/Tester.cs +++ b/ICSharpCode.Decompiler/Tests/Helpers/Tester.cs @@ -58,7 +58,6 @@ namespace ICSharpCode.Decompiler.Tests.Helpers CSharpDecompiler decompiler = new CSharpDecompiler(AssemblyDefinition.ReadAssembly(assemblyFileName).MainModule); var syntaxTree = decompiler.DecompileWholeModuleAsSingleFile(); new Helpers.RemoveCompilerAttribute().Run(syntaxTree); - new Helpers.RemoveEmptyNamespace().Run(syntaxTree); StringWriter output = new StringWriter(); var visitor = new CSharpOutputVisitor(output, FormattingOptionsFactory.CreateSharpDevelop()); diff --git a/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj index d5d3875fc..348ec1a76 100644 --- a/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj +++ b/ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj @@ -90,7 +90,6 @@ -