Browse Source

Fix #849 - Notify user that referenced assemblies could not be found

pull/848/head
Siegfried Pammer 8 years ago
parent
commit
24bb4d6080
  1. 4
      ILSpy/ILSpy.csproj
  2. 1
      ILSpy/Images/ILSpyNewIconList.txt
  3. BIN
      ILSpy/Images/Warning.png
  4. 1
      ILSpy/Languages/Language.cs
  5. 1
      ILSpy/TreeNodes/AssemblyTreeNode.cs
  6. 1
      ILSpy/TreeNodes/EventTreeNode.cs
  7. 1
      ILSpy/TreeNodes/FieldTreeNode.cs
  8. 3
      ILSpy/TreeNodes/MethodTreeNode.cs
  9. 1
      ILSpy/TreeNodes/NamespaceTreeNode.cs
  10. 1
      ILSpy/TreeNodes/PropertyTreeNode.cs
  11. 1
      ILSpy/TreeNodes/TypeTreeNode.cs
  12. 48
      ILSpy/TreeNodes/UIHelper.cs

4
ILSpy/ILSpy.csproj

@ -204,6 +204,7 @@ @@ -204,6 +204,7 @@
<Compile Include="TreeNodes\Analyzer\AnalyzedPropertyOverridesTreeNode.cs" />
<Compile Include="TreeNodes\Analyzer\AnalyzedPropertyTreeNode.cs" />
<Compile Include="TreeNodes\SearchMsdnContextMenuEntry.cs" />
<Compile Include="TreeNodes\UIHelper.cs" />
<Compile Include="XmlDoc\AddXmlDocTransform.cs" />
<Compile Include="XmlDoc\XmlDocKeyProvider.cs" />
<Compile Include="XmlDoc\XmlDocLoader.cs" />
@ -278,7 +279,7 @@ @@ -278,7 +279,7 @@
<Compile Include="TreeNodes\ResourceNodes\ResourceTreeNode.cs" />
<Compile Include="TreeNodes\ThreadingSupport.cs" />
<Compile Include="TreeNodes\TypeTreeNode.cs" />
<EmbeddedResource Include="TextView\ILAsm-Mode.xshd" />
<EmbeddedResource Include="TextView\ILAsm-Mode.xshd" />
</ItemGroup>
<ItemGroup>
@ -342,6 +343,7 @@ @@ -342,6 +343,7 @@
<Resource Include="Images\OverlayStatic.png" />
<Resource Include="Images\VirtualMethod.png" />
<Resource Include="Images\PInvokeMethod.png" />
<Resource Include="Images\Warning.png" />
</ItemGroup>
<ItemGroup>

1
ILSpy/Images/ILSpyNewIconList.txt

@ -58,3 +58,4 @@ SubTypes.png new (Fugue: arrow-turn-270.png) @@ -58,3 +58,4 @@ SubTypes.png new (Fugue: arrow-turn-270.png)
SuperTypes.png new (Fugue: arrow-turn-090-left.png)
ViewCode.png BitmapResources-data\Icons.16x16.FormsDesigner.ViewCode.png
VirtualMethod.png new (SharpDevelop-Team)
Warning.png new (Fugue: exclamation.png (32x32))

BIN
ILSpy/Images/Warning.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

1
ILSpy/Languages/Language.cs

@ -18,7 +18,6 @@ @@ -18,7 +18,6 @@
using System;
using System.Collections.Generic;
using ICSharpCode.Decompiler;
using Mono.Cecil;

1
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -260,6 +260,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -260,6 +260,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
throw;
}
}
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileAssembly(assembly, output, options);
}

1
ILSpy/TreeNodes/EventTreeNode.cs

@ -108,6 +108,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -108,6 +108,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileEvent(ev, output, options);
}

1
ILSpy/TreeNodes/FieldTreeNode.cs

@ -120,6 +120,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -120,6 +120,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileField(field, output, options);
}

3
ILSpy/TreeNodes/MethodTreeNode.cs

@ -17,7 +17,9 @@ @@ -17,7 +17,9 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Media;
using ICSharpCode.Decompiler;
@ -130,6 +132,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -130,6 +132,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileMethod(method, output, options);
}

1
ILSpy/TreeNodes/NamespaceTreeNode.cs

@ -58,6 +58,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -58,6 +58,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileNamespace(name, this.Children.OfType<TypeTreeNode>().Select(t => t.TypeDefinition), output, options);
}
}

1
ILSpy/TreeNodes/PropertyTreeNode.cs

@ -177,6 +177,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -177,6 +177,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileProperty(property, output, options);
}

1
ILSpy/TreeNodes/TypeTreeNode.cs

@ -123,6 +123,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -123,6 +123,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public override void Decompile(Language language, ITextOutput output, DecompilationOptions options)
{
UIHelper.AddReferenceWarningMessage(this, output, language);
language.DecompileType(type, output, options);
}

48
ILSpy/TreeNodes/UIHelper.cs

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using ICSharpCode.Decompiler;
namespace ICSharpCode.ILSpy.TreeNodes
{
public static class UIHelper
{
public static void AddReferenceWarningMessage(ILSpyTreeNode node, ITextOutput output, Language language)
{
var assemblyNode = node.AncestorsAndSelf().OfType<AssemblyTreeNode>().First();
if (!assemblyNode.LoadedAssembly.LoadedAssemblyReferencesInfo.Any(i => i.Value.HasErrors))
return;
const string line1 = "Warning: Some assembly references could not be loaded. This might lead to incorrect decompilation of some parts,";
const string line2 = "for ex. property getter/setter access. To get optimal decompilation results, please manually add the references to the list of loaded assemblies.";
if (output is ISmartTextOutput fancyOutput) {
fancyOutput.AddUIElement(() => new StackPanel {
Margin = new Thickness(5),
Orientation = Orientation.Horizontal,
Children = {
new Image {
Width = 32,
Height = 32,
Source = Images.LoadImage(language, "Images/Warning.png")
},
new TextBlock {
Margin = new Thickness(5, 0, 0, 0),
Text = line1 + Environment.NewLine + line2
}
}
});
fancyOutput.WriteLine();
fancyOutput.AddButton(Images.ViewCode, "Show assembly load log", delegate {
MainWindow.Instance.SelectNode(assemblyNode.Children.OfType<ReferenceFolderTreeNode>().First());
});
fancyOutput.WriteLine();
} else {
language.WriteCommentLine(output, line1);
language.WriteCommentLine(output, line2);
}
}
}
}
Loading…
Cancel
Save