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 @@ @@ -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 @@ -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 {
get {
return model.AssemblyName;

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

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

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

@ -218,7 +218,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -218,7 +218,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public static IAssemblyModel CreateAssemblyModelFromFile(string fileName)
{
try {
var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
loader.LazyLoad = true;
@ -231,13 +230,14 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -231,13 +230,14 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName;
}
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);
IAssemblyModel unresolvedModel = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(unresolvedContext);
if (unresolvedModel is IUpdateableAssemblyModel) {
@ -246,15 +246,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -246,15 +246,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
return unresolvedModel;
}
}
void AppendAssemblyFileToList(string assemblyFile)
{
IAssemblyModel assemblyModel = CreateAssemblyModelFromFile(assemblyFile);
IAssemblyModel assemblyModel = SafelyCreateAssemblyModelFromFile(assemblyFile);
if (assemblyModel != null) {
AssemblyList.Assemblies.Add(assemblyModel);
} else {
// TODO Throw exception?
}
}

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

@ -9,7 +9,7 @@ using Microsoft.Win32; @@ -9,7 +9,7 @@ using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
/// <summary>
/// Description of OpenAssemblyFromFileCommand.
/// OpenAssemblyFromFileCommand.
/// </summary>
class OpenAssemblyFromFileCommand : SimpleCommand
{
@ -23,14 +23,20 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -23,14 +23,20 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
openFileDialog.CheckPathExists = true;
if (openFileDialog.ShowDialog() ?? false)
{
try {
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>
/// Description of OpenAssemblyFromGACCommand.
/// OpenAssemblyFromGACCommand.
/// </summary>
class OpenAssemblyFromGACCommand : SimpleCommand
{
@ -42,7 +48,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -42,7 +48,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
if (gacDialog.ShowDialog() ?? false)
{
foreach (string assemblyFile in gacDialog.SelectedFileNames) {
try {
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 @@ -50,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
}
/// <summary>
/// Description of RemoveAssemblyCommand.
/// RemoveAssemblyCommand.
/// </summary>
class RemoveAssemblyCommand : SimpleCommand
{
@ -68,18 +80,4 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -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