Browse Source

Added sub-node with error text for unresolved assemblies in ClassBrowser. Such assemblies also don't produce an error message anymore when opening ClassBrowserPad.

newNRILSpyDebugger
Andreas Weizel 12 years ago
parent
commit
50a5cb4274
  1. 27
      src/Main/Base/Project/Dom/ClassBrowser/AssemblyLoadErrorTreeNode.cs
  2. 11
      src/Main/Base/Project/Dom/ClassBrowser/AssemblyTreeNode.cs
  3. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  4. 18
      src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs
  5. 32
      src/Main/SharpDevelop/Dom/ClassBrowser/Commands.cs

27
src/Main/Base/Project/Dom/ClassBrowser/AssemblyLoadErrorTreeNode.cs

@ -0,0 +1,27 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.Core.Presentation;
using ICSharpCode.TreeView;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
public class AssemblyLoadErrorTreeNode : SharpTreeNode
{
public override object Text {
get {
return "(Assembly not loadable)";
}
}
public override object Icon {
get {
return null;
}
}
}
}

11
src/Main/Base/Project/Dom/ClassBrowser/AssemblyTreeNode.cs

@ -36,6 +36,17 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
} }
} }
protected override void LoadChildren()
{
Children.Clear();
if (model.Context.IsValid) {
base.LoadChildren();
} else {
// This assembly could not be loaded correctly, add sub-node with error text
Children.Add(new AssemblyLoadErrorTreeNode());
}
}
public override object Text { public override object Text {
get { get {
return model.AssemblyName; return model.AssemblyName;

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -84,6 +84,7 @@
</Compile> </Compile>
<Compile Include="Designer\IDesignerTypeResolutionService.cs" /> <Compile Include="Designer\IDesignerTypeResolutionService.cs" />
<Compile Include="Designer\TypeResolutionService.cs" /> <Compile Include="Designer\TypeResolutionService.cs" />
<Compile Include="Dom\ClassBrowser\AssemblyLoadErrorTreeNode.cs" />
<Compile Include="Dom\ClassBrowser\AssemblyTreeNode.cs" /> <Compile Include="Dom\ClassBrowser\AssemblyTreeNode.cs" />
<Compile Include="Dom\ClassBrowser\ClassBrowserTreeView.cs" /> <Compile Include="Dom\ClassBrowser\ClassBrowserTreeView.cs" />
<Compile Include="Dom\ClassBrowser\IClassBrowser.cs" /> <Compile Include="Dom\ClassBrowser\IClassBrowser.cs" />

18
src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs

@ -218,7 +218,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public static IAssemblyModel CreateAssemblyModelFromFile(string fileName) public static IAssemblyModel CreateAssemblyModelFromFile(string fileName)
{ {
try {
var loader = new CecilLoader(); var loader = new CecilLoader();
loader.IncludeInternalMembers = true; loader.IncludeInternalMembers = true;
loader.LazyLoad = true; loader.LazyLoad = true;
@ -231,13 +230,14 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName; ((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName;
} }
return model; return model;
} catch (BadImageFormatException ex) {
SD.MessageService.ShowWarningFormatted("{0} is not a valid .NET assembly.", Path.GetFileName(fileName));
} catch (FileNotFoundException ex) {
SD.MessageService.ShowWarningFormatted("{0} is not accessible or doesn't exist anymore.", fileName);
} }
// AssemblyModel for unresolved file references static IAssemblyModel SafelyCreateAssemblyModelFromFile(string fileName)
{
try {
return CreateAssemblyModelFromFile(fileName);
} catch (Exception) {
// Special AssemblyModel for unresolved file references
IEntityModelContext unresolvedContext = new UnresolvedAssemblyEntityModelContext(Path.GetFileName(fileName), fileName); IEntityModelContext unresolvedContext = new UnresolvedAssemblyEntityModelContext(Path.GetFileName(fileName), fileName);
IAssemblyModel unresolvedModel = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(unresolvedContext); IAssemblyModel unresolvedModel = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(unresolvedContext);
if (unresolvedModel is IUpdateableAssemblyModel) { if (unresolvedModel is IUpdateableAssemblyModel) {
@ -246,15 +246,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
return unresolvedModel; return unresolvedModel;
} }
}
void AppendAssemblyFileToList(string assemblyFile) void AppendAssemblyFileToList(string assemblyFile)
{ {
IAssemblyModel assemblyModel = CreateAssemblyModelFromFile(assemblyFile); IAssemblyModel assemblyModel = SafelyCreateAssemblyModelFromFile(assemblyFile);
if (assemblyModel != null) { if (assemblyModel != null) {
AssemblyList.Assemblies.Add(assemblyModel); AssemblyList.Assemblies.Add(assemblyModel);
} else {
// TODO Throw exception?
} }
} }

32
src/Main/SharpDevelop/Dom/ClassBrowser/Commands.cs

@ -9,7 +9,7 @@ using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{ {
/// <summary> /// <summary>
/// Description of OpenAssemblyFromFileCommand. /// OpenAssemblyFromFileCommand.
/// </summary> /// </summary>
class OpenAssemblyFromFileCommand : SimpleCommand class OpenAssemblyFromFileCommand : SimpleCommand
{ {
@ -23,14 +23,20 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
openFileDialog.CheckPathExists = true; openFileDialog.CheckPathExists = true;
if (openFileDialog.ShowDialog() ?? false) if (openFileDialog.ShowDialog() ?? false)
{ {
try {
classBrowser.AssemblyList.Assemblies.Add(ClassBrowserPad.CreateAssemblyModelFromFile(openFileDialog.FileName)); classBrowser.AssemblyList.Assemblies.Add(ClassBrowserPad.CreateAssemblyModelFromFile(openFileDialog.FileName));
} catch (BadImageFormatException) {
SD.MessageService.ShowWarningFormatted("{0} is not a valid .NET assembly.", Path.GetFileName(openFileDialog.FileName));
} catch (FileNotFoundException) {
SD.MessageService.ShowWarningFormatted("{0} is not accessible or doesn't exist anymore.", openFileDialog.FileName);
}
} }
} }
} }
} }
/// <summary> /// <summary>
/// Description of OpenAssemblyFromGACCommand. /// OpenAssemblyFromGACCommand.
/// </summary> /// </summary>
class OpenAssemblyFromGACCommand : SimpleCommand class OpenAssemblyFromGACCommand : SimpleCommand
{ {
@ -42,7 +48,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
if (gacDialog.ShowDialog() ?? false) if (gacDialog.ShowDialog() ?? false)
{ {
foreach (string assemblyFile in gacDialog.SelectedFileNames) { foreach (string assemblyFile in gacDialog.SelectedFileNames) {
try {
classBrowser.AssemblyList.Assemblies.Add(ClassBrowserPad.CreateAssemblyModelFromFile(assemblyFile)); classBrowser.AssemblyList.Assemblies.Add(ClassBrowserPad.CreateAssemblyModelFromFile(assemblyFile));
} catch (BadImageFormatException) {
SD.MessageService.ShowWarningFormatted("{0} is not a valid .NET assembly.", Path.GetFileName(assemblyFile));
} catch (FileNotFoundException) {
SD.MessageService.ShowWarningFormatted("{0} is not accessible or doesn't exist anymore.", assemblyFile);
}
} }
} }
} }
@ -50,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
} }
/// <summary> /// <summary>
/// Description of RemoveAssemblyCommand. /// RemoveAssemblyCommand.
/// </summary> /// </summary>
class RemoveAssemblyCommand : SimpleCommand class RemoveAssemblyCommand : SimpleCommand
{ {
@ -68,18 +80,4 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
} }
} }
} }
/// <summary>
/// Description of RemoveAssemblyCommand.
/// </summary>
class ClassBrowserCollapseAllCommand : SimpleCommand
{
public override void Execute(object parameter)
{
// var classBrowser = SD.GetService<IClassBrowser>() as ClassBrowserPad;
// if (classBrowser != null) {
// classBrowser.TreeView
// }
}
}
} }

Loading…
Cancel
Save