Browse Source

#358 Separate automatically-loaded assemblies from manually loaded assemblies

The assembly list is not automatically sorted into explicit/auto loaded
groups at the moment. Sorting the list loses the tree state (expanded
nodes/selections)...
pull/569/head
Ed Harvey 10 years ago
parent
commit
60fe27f744
  1. 2
      ILSpy/AssemblyList.cs
  2. 19
      ILSpy/LoadedAssembly.cs
  3. 37
      ILSpy/TreeNodes/AssemblyTreeNode.cs
  4. 13
      ILSpy/TreeNodes/ILSpyTreeNode.cs

2
ILSpy/AssemblyList.cs

@ -88,7 +88,7 @@ namespace ICSharpCode.ILSpy @@ -88,7 +88,7 @@ namespace ICSharpCode.ILSpy
return new XElement(
"List",
new XAttribute("name", this.ListName),
assemblies.Select(asm => new XElement("Assembly", asm.FileName))
assemblies.Where(asm => !asm.IsAutoLoaded).Select(asm => new XElement("Assembly", asm.FileName))
);
}

19
ILSpy/LoadedAssembly.cs

@ -103,7 +103,9 @@ namespace ICSharpCode.ILSpy @@ -103,7 +103,9 @@ namespace ICSharpCode.ILSpy
public bool HasLoadError {
get { return assemblyTask.IsFaulted; }
}
public bool IsAutoLoaded { get; set; }
ModuleDefinition LoadAssembly(object state)
{
var stream = state as Stream;
@ -253,7 +255,9 @@ namespace ICSharpCode.ILSpy @@ -253,7 +255,9 @@ namespace ICSharpCode.ILSpy
file = Path.Combine(dir, name.Name + ".exe");
}
if (file != null) {
return assemblyList.OpenAssembly(file);
var loaded = assemblyList.OpenAssembly(file);
loaded.IsAutoLoaded = true;
return loaded;
} else {
return null;
}
@ -298,15 +302,24 @@ namespace ICSharpCode.ILSpy @@ -298,15 +302,24 @@ namespace ICSharpCode.ILSpy
{
public override int Compare(LoadedAssembly x, LoadedAssembly y)
{
// correctly loaded assemblies sort first, then assemblies with errors
// sort order:
// explicitly loaded assemblies
// auto-loaded assemblies
// assemblies with errors
if (x.IsLoaded && y.HasLoadError)
return -1;
if (x.HasLoadError && y.IsLoaded)
return 1;
if (!x.IsAutoLoaded && y.IsAutoLoaded)
return -1;
if (x.IsAutoLoaded && !y.IsAutoLoaded)
return 1;
// within above groups, sort by assembly name
return x.Text.CompareTo(y.Text);
}
}
}
}

37
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -63,6 +63,13 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -63,6 +63,13 @@ namespace ICSharpCode.ILSpy.TreeNodes
get { return assembly; }
}
public override bool IsAutoLoaded
{
get {
return assembly.IsAutoLoaded;
}
}
public override object Text
{
get { return HighlightSearchMatch(assembly.Text); }
@ -310,6 +317,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -310,6 +317,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
}
}
[ExportContextMenuEntryAttribute(Header = "_Load Dependencies")]
sealed class LoadDependencies : IContextMenuEntry
{
@ -340,4 +348,33 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -340,4 +348,33 @@ namespace ICSharpCode.ILSpy.TreeNodes
MainWindow.Instance.RefreshDecompiledView();
}
}
[ExportContextMenuEntryAttribute(Header = "_Add To Main List")]
sealed class AddToMainList : IContextMenuEntry
{
public bool IsVisible(TextViewContext context)
{
if (context.SelectedTreeNodes == null)
return false;
return context.SelectedTreeNodes.Where(n => n is AssemblyTreeNode).Any(n=>((AssemblyTreeNode)n).IsAutoLoaded);
}
public bool IsEnabled(TextViewContext context)
{
return true;
}
public void Execute(TextViewContext context)
{
if (context.SelectedTreeNodes == null)
return;
foreach (var node in context.SelectedTreeNodes) {
var loadedAssm = ((AssemblyTreeNode)node).LoadedAssembly;
if (!loadedAssm.HasLoadError) {
loadedAssm.IsAutoLoaded = false;
node.RaisePropertyChanged("Foreground");
}
}
}
}
}

13
ILSpy/TreeNodes/ILSpyTreeNode.cs

@ -170,11 +170,22 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -170,11 +170,22 @@ namespace ICSharpCode.ILSpy.TreeNodes
public virtual bool IsPublicAPI {
get { return true; }
}
public virtual bool IsAutoLoaded
{
get { return false; }
}
public override System.Windows.Media.Brush Foreground {
get {
if (IsPublicAPI)
return base.Foreground;
if (IsAutoLoaded) {
// HACK: should not be hard coded?
return System.Windows.Media.Brushes.SteelBlue;
}
else {
return base.Foreground;
}
else
return System.Windows.SystemColors.GrayTextBrush;
}

Loading…
Cancel
Save