From 218e6e1acfe33967f253135d2807ee75e54e1ef3 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Mon, 19 Oct 2020 22:41:24 +0200 Subject: [PATCH] Add back the hack for opening assemblies in bundles. --- ILSpy/LoadedPackage.cs | 1 + ILSpy/TreeNodes/PackageFolderTreeNode.cs | 17 +++- .../ResourceNodes/JsonResourceNode.cs | 99 ------------------- .../ResourceNodes/ResourceTreeNode.cs | 1 + .../ResourceNodes/TextResourceNode.cs | 98 ------------------ 5 files changed, 14 insertions(+), 202 deletions(-) delete mode 100644 ILSpy/TreeNodes/ResourceNodes/JsonResourceNode.cs delete mode 100644 ILSpy/TreeNodes/ResourceNodes/TextResourceNode.cs diff --git a/ILSpy/LoadedPackage.cs b/ILSpy/LoadedPackage.cs index d62be05ff..91611b5c4 100644 --- a/ILSpy/LoadedPackage.cs +++ b/ILSpy/LoadedPackage.cs @@ -186,6 +186,7 @@ namespace ICSharpCode.ILSpy public override Stream TryOpenStream() { + Debug.WriteLine("Open bundle member " + Name); return new UnmanagedMemoryStream(view.SafeMemoryMappedViewHandle, entry.Offset, entry.Size); } } diff --git a/ILSpy/TreeNodes/PackageFolderTreeNode.cs b/ILSpy/TreeNodes/PackageFolderTreeNode.cs index 5014ebad3..d2df7e78e 100644 --- a/ILSpy/TreeNodes/PackageFolderTreeNode.cs +++ b/ILSpy/TreeNodes/PackageFolderTreeNode.cs @@ -16,8 +16,10 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +using System; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using ICSharpCode.Decompiler; using ICSharpCode.TreeView; @@ -51,10 +53,6 @@ namespace ICSharpCode.ILSpy.TreeNodes internal static IEnumerable LoadChildrenForFolder(IReadOnlyList folders, IReadOnlyList entries) { - if (folders.Count == 1 && entries.Count == 0) - { - - } foreach (var folder in folders.OrderBy(f => f.Name)) { string newName = folder.Name; @@ -69,7 +67,16 @@ namespace ICSharpCode.ILSpy.TreeNodes } foreach (var entry in entries.OrderBy(e => e.Name)) { - yield return ResourceTreeNode.Create(entry); + if (entry.Name.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + { + var asmList = MainWindow.Instance.CurrentAssemblyList; + var asm = new LoadedAssembly(asmList, entry.Name, Task.Run(entry.TryOpenStream)); + yield return new AssemblyTreeNode(asm); + } + else + { + yield return ResourceTreeNode.Create(entry); + } } } diff --git a/ILSpy/TreeNodes/ResourceNodes/JsonResourceNode.cs b/ILSpy/TreeNodes/ResourceNodes/JsonResourceNode.cs deleted file mode 100644 index 2009d3785..000000000 --- a/ILSpy/TreeNodes/ResourceNodes/JsonResourceNode.cs +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel.Composition; -using System.IO; -using System.Threading.Tasks; - -using ICSharpCode.AvalonEdit.Highlighting; -using ICSharpCode.Decompiler.Metadata; -using ICSharpCode.ILSpy.TextView; -using ICSharpCode.ILSpy.TreeNodes; -using ICSharpCode.ILSpy.ViewModels; - -namespace ICSharpCode.ILSpy.TreeNodes -{ - [Export(typeof(IResourceNodeFactory))] - sealed class JsonResourceNodeFactory : IResourceNodeFactory - { - private readonly static string[] jsonFileExtensions = { ".json" }; - - public ILSpyTreeNode CreateNode(Resource resource) - { - Stream stream = resource.TryOpenStream(); - if (stream == null) - return null; - return CreateNode(resource.Name, stream); - } - - public ILSpyTreeNode CreateNode(string key, object data) - { - if (!(data is Stream)) - return null; - foreach (string fileExt in jsonFileExtensions) - { - if (key.EndsWith(fileExt, StringComparison.OrdinalIgnoreCase)) - return new JsonResourceEntryNode(key, (Stream)data); - } - return null; - } - } - - sealed class JsonResourceEntryNode : ResourceEntryNode - { - string json; - - public JsonResourceEntryNode(string key, Stream data) - : base(key, data) - { - } - - // TODO : add Json Icon - public override object Icon => Images.Resource; - - public override bool View(TabPageModel tabPage) - { - AvalonEditTextOutput output = new AvalonEditTextOutput(); - IHighlightingDefinition highlighting = null; - - tabPage.ShowTextView(textView => textView.RunWithCancellation( - token => Task.Factory.StartNew( - () => { - try { - // cache read XAML because stream will be closed after first read - if (json == null) { - using (var reader = new StreamReader(Data)) { - json = reader.ReadToEnd(); - } - } - output.Write(json); - highlighting = HighlightingManager.Instance.GetDefinitionByExtension(".json"); - } - catch (Exception ex) { - output.Write(ex.ToString()); - } - return output; - }, token) - ).Then(t => textView.ShowNode(t, this, highlighting)) - .HandleExceptions()); - tabPage.SupportsLanguageSwitching = false; - return true; - } - } -} diff --git a/ILSpy/TreeNodes/ResourceNodes/ResourceTreeNode.cs b/ILSpy/TreeNodes/ResourceNodes/ResourceTreeNode.cs index 16e378f43..37630289f 100644 --- a/ILSpy/TreeNodes/ResourceNodes/ResourceTreeNode.cs +++ b/ILSpy/TreeNodes/ResourceNodes/ResourceTreeNode.cs @@ -85,6 +85,7 @@ namespace ICSharpCode.ILSpy.TreeNodes { s.Position = 0; AvalonEditTextOutput output = new AvalonEditTextOutput(); + output.Title = Resource.Name; output.Write(FileReader.OpenStream(s, Encoding.UTF8).ReadToEnd()); string ext; if (type == FileType.Xml) diff --git a/ILSpy/TreeNodes/ResourceNodes/TextResourceNode.cs b/ILSpy/TreeNodes/ResourceNodes/TextResourceNode.cs deleted file mode 100644 index 035b944e8..000000000 --- a/ILSpy/TreeNodes/ResourceNodes/TextResourceNode.cs +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright (c) 2011 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -using System; -using System.ComponentModel.Composition; -using System.IO; -using System.Threading.Tasks; - -using ICSharpCode.AvalonEdit.Highlighting; -using ICSharpCode.Decompiler.Metadata; -using ICSharpCode.ILSpy.TextView; -using ICSharpCode.ILSpy.TreeNodes; -using ICSharpCode.ILSpy.ViewModels; - -namespace ICSharpCode.ILSpy.TreeNodes -{ - [Export(typeof(IResourceNodeFactory))] - sealed class TextResourceNodeFactory : IResourceNodeFactory - { - private readonly static string[] txtFileExtensions = { ".txt", ".md" }; - - public ILSpyTreeNode CreateNode(Resource resource) - { - Stream stream = resource.TryOpenStream(); - if (stream == null) - return null; - return CreateNode(resource.Name, stream); - } - - public ILSpyTreeNode CreateNode(string key, object data) - { - if (!(data is Stream)) - return null; - foreach (string fileExt in txtFileExtensions) - { - if (key.EndsWith(fileExt, StringComparison.OrdinalIgnoreCase)) - return new TextResourceEntryNode(key, (Stream)data); - } - return null; - } - } - - sealed class TextResourceEntryNode : ResourceEntryNode - { - string text; - - public TextResourceEntryNode(string key, Stream data) - : base(key, data) - { - } - - public override object Icon => Images.Resource; - - public override bool View(TabPageModel tabPage) - { - AvalonEditTextOutput output = new AvalonEditTextOutput(); - IHighlightingDefinition highlighting = null; - - tabPage.ShowTextView(textView => textView.RunWithCancellation( - token => Task.Factory.StartNew( - () => { - try { - // cache read text because stream will be closed after first read - if (text == null) { - using (var reader = new StreamReader(Data)) { - text = reader.ReadToEnd(); - } - } - output.Write(text); - highlighting = null; - } - catch (Exception ex) { - output.Write(ex.ToString()); - } - return output; - }, token) - ).Then(t => textView.ShowNode(t, this, highlighting)) - .HandleExceptions()); - tabPage.SupportsLanguageSwitching = false; - return true; - } - } -}