diff --git a/ILSpy/ILLanguage.cs b/ILSpy/ILLanguage.cs index 0e638b265..ea39ee04e 100644 --- a/ILSpy/ILLanguage.cs +++ b/ILSpy/ILLanguage.cs @@ -43,7 +43,7 @@ namespace ICSharpCode.ILSpy } public override string Name { - get { return detectControlStructure ? "IL (structured)" : "IL"; } + get { return "IL"; } } public override string FileExtension { diff --git a/ILSpy/Language.cs b/ILSpy/Language.cs index 23eaf3af0..6ff125d49 100644 --- a/ILSpy/Language.cs +++ b/ILSpy/Language.cs @@ -51,30 +51,38 @@ namespace ICSharpCode.ILSpy public virtual void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, TypeToString(method.DeclaringType) + "." + method.Name); } public virtual void DecompileProperty(PropertyDefinition property, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, TypeToString(property.DeclaringType) + "." + property.Name); } public virtual void DecompileField(FieldDefinition field, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, TypeToString(field.DeclaringType) + "." + field.Name); } public virtual void DecompileEvent(EventDefinition ev, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, TypeToString(ev.DeclaringType) + "." + ev.Name); } public virtual void DecompileType(TypeDefinition type, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, TypeToString(type)); } public virtual void DecompileNamespace(string nameSpace, IEnumerable types, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, nameSpace); } public virtual void DecompileAssembly(AssemblyDefinition assembly, string fileName, ITextOutput output, DecompilationOptions options) { + WriteCommentLine(output, fileName); + WriteCommentLine(output, assembly.Name.FullName); } public virtual void WriteCommentLine(ITextOutput output, string comment) @@ -107,7 +115,6 @@ namespace ICSharpCode.ILSpy public static readonly ReadOnlyCollection AllLanguages = Array.AsReadOnly( new Language[] { new CSharpLanguage(), - new ILLanguage(false), new ILLanguage(true) }); diff --git a/ILSpy/MainWindow.xaml b/ILSpy/MainWindow.xaml index 154630434..9232fc6c6 100644 --- a/ILSpy/MainWindow.xaml +++ b/ILSpy/MainWindow.xaml @@ -29,6 +29,11 @@ + + + + + @@ -39,11 +44,6 @@ - - - - - diff --git a/ILSpy/TreeNodes/AssemblyListTreeNode.cs b/ILSpy/TreeNodes/AssemblyListTreeNode.cs index 0b88d4624..208596222 100644 --- a/ILSpy/TreeNodes/AssemblyListTreeNode.cs +++ b/ILSpy/TreeNodes/AssemblyListTreeNode.cs @@ -20,6 +20,7 @@ using System; using System.Linq; using System.Windows; +using ICSharpCode.Decompiler; using ICSharpCode.TreeView; namespace ICSharpCode.ILSpy.TreeNodes @@ -79,5 +80,16 @@ namespace ICSharpCode.ILSpy.TreeNodes } public Action Select = delegate {}; + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + language.WriteCommentLine(output, "List: " + assemblyList.ListName); + output.WriteLine(); + foreach (AssemblyTreeNode asm in assemblyList.Assemblies) { + language.WriteCommentLine(output, new string('-', 60)); + output.WriteLine(); + asm.Decompile(language, output, options); + } + } } } diff --git a/ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs b/ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs index 6066af61d..79078e0a8 100644 --- a/ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs +++ b/ILSpy/TreeNodes/AssemblyReferenceTreeNode.cs @@ -18,6 +18,7 @@ using System; using System.Linq; +using ICSharpCode.Decompiler; using ICSharpCode.TreeView; using Mono.Cecil; @@ -78,5 +79,10 @@ namespace ICSharpCode.ILSpy.TreeNodes } } } + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + language.WriteCommentLine(output, r.FullName); + } } } diff --git a/ILSpy/TreeNodes/BaseTypesTreeNode.cs b/ILSpy/TreeNodes/BaseTypesTreeNode.cs index d97f2d7c6..1e883f8a2 100644 --- a/ILSpy/TreeNodes/BaseTypesTreeNode.cs +++ b/ILSpy/TreeNodes/BaseTypesTreeNode.cs @@ -19,6 +19,8 @@ using System; using System.Collections.ObjectModel; using System.Linq; + +using ICSharpCode.Decompiler; using ICSharpCode.TreeView; using Mono.Cecil; @@ -58,6 +60,14 @@ namespace ICSharpCode.ILSpy.TreeNodes children.Add(new BaseTypesEntryNode(i, true)); } } + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + EnsureLazyChildren(); + foreach (var child in this.Children) { + child.Decompile(language, output, options); + } + } } sealed class BaseTypesEntryNode : ILSpyTreeNode @@ -117,5 +127,10 @@ namespace ICSharpCode.ILSpy.TreeNodes } } } + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + language.WriteCommentLine(output, language.TypeToString(tr)); + } } } diff --git a/ILSpy/TreeNodes/ILSpyTreeNode.cs b/ILSpy/TreeNodes/ILSpyTreeNode.cs index b61705979..aaf614a6c 100644 --- a/ILSpy/TreeNodes/ILSpyTreeNode.cs +++ b/ILSpy/TreeNodes/ILSpyTreeNode.cs @@ -67,9 +67,7 @@ namespace ICSharpCode.ILSpy.TreeNodes return text + suffix; } - public virtual void Decompile(Language language, ITextOutput output, DecompilationOptions options) - { - } + public abstract void Decompile(Language language, ITextOutput output, DecompilationOptions options); /// /// Used to implement special view logic for some items. @@ -115,7 +113,7 @@ namespace ICSharpCode.ILSpy.TreeNodes /// /// Base class for ILSpy tree nodes. /// - class ILSpyTreeNode : ILSpyTreeNodeBase where T : ILSpyTreeNodeBase + abstract class ILSpyTreeNode : ILSpyTreeNodeBase where T : ILSpyTreeNodeBase { public ILSpyTreeNode() : this(new ObservableCollection()) diff --git a/ILSpy/TreeNodes/ModuleReferenceTreeNode.cs b/ILSpy/TreeNodes/ModuleReferenceTreeNode.cs index 8732b4b84..20cfba942 100644 --- a/ILSpy/TreeNodes/ModuleReferenceTreeNode.cs +++ b/ILSpy/TreeNodes/ModuleReferenceTreeNode.cs @@ -17,6 +17,7 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.Decompiler; using ICSharpCode.TreeView; using Mono.Cecil; @@ -43,5 +44,10 @@ namespace ICSharpCode.ILSpy.TreeNodes public override object Icon { get { return Images.Library; } } + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + language.WriteCommentLine(output, r.Name); + } } } diff --git a/ILSpy/TreeNodes/NamespaceTreeNode.cs b/ILSpy/TreeNodes/NamespaceTreeNode.cs index af9bfd044..f32421603 100644 --- a/ILSpy/TreeNodes/NamespaceTreeNode.cs +++ b/ILSpy/TreeNodes/NamespaceTreeNode.cs @@ -37,11 +37,11 @@ namespace ICSharpCode.ILSpy.TreeNodes { if (name == null) throw new ArgumentNullException("name"); - this.name = name.Length == 0 ? "-" : name; + this.name = name; } public override object Text { - get { return HighlightSearchMatch(name); } + get { return HighlightSearchMatch(name.Length == 0 ? "-" : name); } } public override object Icon { diff --git a/ILSpy/TreeNodes/ReferenceFolderTreeNode.cs b/ILSpy/TreeNodes/ReferenceFolderTreeNode.cs index 2af0d5117..6d9e0bc1d 100644 --- a/ILSpy/TreeNodes/ReferenceFolderTreeNode.cs +++ b/ILSpy/TreeNodes/ReferenceFolderTreeNode.cs @@ -17,6 +17,7 @@ // DEALINGS IN THE SOFTWARE. using System; +using ICSharpCode.Decompiler; using ICSharpCode.TreeView; using Mono.Cecil; @@ -56,5 +57,13 @@ namespace ICSharpCode.ILSpy.TreeNodes foreach (var r in module.ModuleReferences) this.Children.Add(new ModuleReferenceTreeNode(r)); } + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + EnsureLazyChildren(); + foreach (var child in this.Children) { + child.Decompile(language, output, options); + } + } } } diff --git a/ILSpy/TreeNodes/ResourceListTreeNode.cs b/ILSpy/TreeNodes/ResourceListTreeNode.cs index f44046c62..693459a4f 100644 --- a/ILSpy/TreeNodes/ResourceListTreeNode.cs +++ b/ILSpy/TreeNodes/ResourceListTreeNode.cs @@ -17,7 +17,7 @@ namespace ICSharpCode.ILSpy.TreeNodes /// /// Lists the embedded resources in an assembly. /// - class ResourceListTreeNode : ILSpyTreeNode + sealed class ResourceListTreeNode : ILSpyTreeNode { readonly ModuleDefinition module; @@ -48,6 +48,15 @@ namespace ICSharpCode.ILSpy.TreeNodes else return FilterResult.Recurse; } + + public override void Decompile(Language language, ITextOutput output, DecompilationOptions options) + { + EnsureLazyChildren(); + foreach (var child in this.Children) { + child.Decompile(language, output, options); + output.WriteLine(); + } + } } class ResourceTreeNode : ILSpyTreeNode