Browse Source

properly remove <Module> during decompilation process

pull/728/head
Siegfried Pammer 11 years ago
parent
commit
a5237ffad6
  1. 19
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 26
      ICSharpCode.Decompiler/Tests/Helpers/RemoveEmptyNamespace.cs
  3. 1
      ICSharpCode.Decompiler/Tests/Helpers/Tester.cs
  4. 1
      ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj

19
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -87,15 +87,22 @@ namespace ICSharpCode.Decompiler.CSharp @@ -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))
{
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);
foreach (var typeDef in g)
{
syntaxTree.AddChild(ns, SyntaxTree.MemberRole);
groupNode = ns;
}
foreach (var typeDef in g) {
if (typeDef.Name == "<Module>" && typeDef.Members.Count == 0)
continue;
var typeDecl = Decompile(typeDef);
ns.AddMember(typeDecl);
groupNode.AddChild(typeDecl, SyntaxTree.MemberRole);
}
syntaxTree.AddChild(ns, SyntaxTree.MemberRole);
}
return syntaxTree;
}

26
ICSharpCode.Decompiler/Tests/Helpers/RemoveEmptyNamespace.cs

@ -1,26 +0,0 @@ @@ -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<object, object>
{
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);
}
}
}

1
ICSharpCode.Decompiler/Tests/Helpers/Tester.cs

@ -58,7 +58,6 @@ namespace ICSharpCode.Decompiler.Tests.Helpers @@ -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());

1
ICSharpCode.Decompiler/Tests/ICSharpCode.Decompiler.Tests.csproj

@ -90,7 +90,6 @@ @@ -90,7 +90,6 @@
<Compile Include="ExceptionHandling.cs" />
<Compile Include="Helpers\CodeAssert.cs" />
<Compile Include="Helpers\RemoveCompilerAttribute.cs" />
<Compile Include="Helpers\RemoveEmptyNamespace.cs" />
<Compile Include="Helpers\Tester.cs" />
<Compile Include="TestCases\HelloWorld.cs" />
<Compile Include="TestRunner.cs" />

Loading…
Cancel
Save