Browse Source

Fix build.

pull/881/merge
Daniel Grunwald 8 years ago
parent
commit
1d029b36cb
  1. 1
      ICSharpCode.Decompiler/IL/ILReader.cs
  2. 3
      ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs
  3. 16
      ILSpy.BamlDecompiler/BamlResourceEntryNode.cs
  4. 2
      ILSpy.BamlDecompiler/BamlResourceNodeFactory.cs
  5. 10
      ILSpy.BamlDecompiler/ConnectMethodDecompiler.cs

1
ICSharpCode.Decompiler/IL/ILReader.cs

@ -312,6 +312,7 @@ namespace ICSharpCode.Decompiler.IL
/// </summary> /// </summary>
public ILFunction ReadIL(Cil.MethodBody body, CancellationToken cancellationToken = default(CancellationToken)) public ILFunction ReadIL(Cil.MethodBody body, CancellationToken cancellationToken = default(CancellationToken))
{ {
cancellationToken.ThrowIfCancellationRequested();
Init(body); Init(body);
ReadInstructions(cancellationToken); ReadInstructions(cancellationToken);
var blockBuilder = new BlockBuilder(body, typeSystem, variableByExceptionHandler); var blockBuilder = new BlockBuilder(body, typeSystem, variableByExceptionHandler);

3
ILSpy.BamlDecompiler.Tests/BamlTestRunner.cs

@ -6,6 +6,7 @@ using System.Collections;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Resources; using System.Resources;
using System.Threading;
using System.Xml.Linq; using System.Xml.Linq;
using ICSharpCode.Decompiler.Tests.Helpers; using ICSharpCode.Decompiler.Tests.Helpers;
using Mono.Cecil; using Mono.Cecil;
@ -113,7 +114,7 @@ namespace ILSpy.BamlDecompiler.Tests
Resource res = assembly.MainModule.Resources.First(); Resource res = assembly.MainModule.Resources.First();
Stream bamlStream = LoadBaml(res, name + ".baml"); Stream bamlStream = LoadBaml(res, name + ".baml");
Assert.IsNotNull(bamlStream); Assert.IsNotNull(bamlStream);
XDocument document = BamlResourceEntryNode.LoadIntoDocument(resolver, assembly, bamlStream); XDocument document = BamlResourceEntryNode.LoadIntoDocument(resolver, assembly, bamlStream, CancellationToken.None);
XamlIsEqual(File.ReadAllText(sourcePath), document.ToString()); XamlIsEqual(File.ReadAllText(sourcePath), document.ToString());
} }

16
ILSpy.BamlDecompiler/BamlResourceEntryNode.cs

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml.Linq; using System.Xml.Linq;
@ -32,7 +33,7 @@ namespace ILSpy.BamlDecompiler
() => { () => {
AvalonEditTextOutput output = new AvalonEditTextOutput(); AvalonEditTextOutput output = new AvalonEditTextOutput();
try { try {
if (LoadBaml(output)) if (LoadBaml(output, token))
highlighting = HighlightingManager.Instance.GetDefinitionByExtension(".xml"); highlighting = HighlightingManager.Instance.GetDefinitionByExtension(".xml");
} catch (Exception ex) { } catch (Exception ex) {
output.Write(ex.ToString()); output.Write(ex.ToString());
@ -44,33 +45,34 @@ namespace ILSpy.BamlDecompiler
return true; return true;
} }
bool LoadBaml(AvalonEditTextOutput output) bool LoadBaml(AvalonEditTextOutput output, CancellationToken cancellationToken)
{ {
var asm = this.Ancestors().OfType<AssemblyTreeNode>().FirstOrDefault().LoadedAssembly; var asm = this.Ancestors().OfType<AssemblyTreeNode>().FirstOrDefault().LoadedAssembly;
Data.Position = 0; Data.Position = 0;
XDocument xamlDocument = LoadIntoDocument(asm.GetAssemblyResolver(), asm.AssemblyDefinition, Data); XDocument xamlDocument = LoadIntoDocument(asm.GetAssemblyResolver(), asm.AssemblyDefinition, Data, cancellationToken);
output.Write(xamlDocument.ToString()); output.Write(xamlDocument.ToString());
return true; return true;
} }
internal static XDocument LoadIntoDocument(IAssemblyResolver resolver, AssemblyDefinition asm, Stream stream) internal static XDocument LoadIntoDocument(IAssemblyResolver resolver, AssemblyDefinition asm, Stream stream, CancellationToken cancellationToken)
{ {
cancellationToken.ThrowIfCancellationRequested();
XDocument xamlDocument; XDocument xamlDocument;
using (XmlBamlReader reader = new XmlBamlReader(stream, new CecilTypeResolver(resolver, asm))) { using (XmlBamlReader reader = new XmlBamlReader(stream, new CecilTypeResolver(resolver, asm))) {
xamlDocument = XDocument.Load(reader); xamlDocument = XDocument.Load(reader);
ConvertConnectionIds(xamlDocument, asm); ConvertConnectionIds(xamlDocument, asm, cancellationToken);
ConvertToEmptyElements(xamlDocument.Root); ConvertToEmptyElements(xamlDocument.Root);
MoveNamespacesToRoot(xamlDocument, reader.XmlnsDefinitions); MoveNamespacesToRoot(xamlDocument, reader.XmlnsDefinitions);
return xamlDocument; return xamlDocument;
} }
} }
static void ConvertConnectionIds(XDocument xamlDocument, AssemblyDefinition asm) static void ConvertConnectionIds(XDocument xamlDocument, AssemblyDefinition asm, CancellationToken cancellationToken)
{ {
var attr = xamlDocument.Root.Attribute(XName.Get("Class", XmlBamlReader.XWPFNamespace)); var attr = xamlDocument.Root.Attribute(XName.Get("Class", XmlBamlReader.XWPFNamespace));
if (attr != null) { if (attr != null) {
string fullTypeName = attr.Value; string fullTypeName = attr.Value;
var mappings = new ConnectMethodDecompiler(asm).DecompileEventMappings(fullTypeName); var mappings = new ConnectMethodDecompiler(asm).DecompileEventMappings(fullTypeName, cancellationToken);
RemoveConnectionIds(xamlDocument.Root, mappings); RemoveConnectionIds(xamlDocument.Root, mappings);
} }
} }

2
ILSpy.BamlDecompiler/BamlResourceNodeFactory.cs

@ -35,7 +35,7 @@ namespace ILSpy.BamlDecompiler
public string WriteResourceToFile(LoadedAssembly assembly, string fileName, Stream stream, DecompilationOptions options) public string WriteResourceToFile(LoadedAssembly assembly, string fileName, Stream stream, DecompilationOptions options)
{ {
var document = BamlResourceEntryNode.LoadIntoDocument(assembly.GetAssemblyResolver(), assembly.AssemblyDefinition, stream); var document = BamlResourceEntryNode.LoadIntoDocument(assembly.GetAssemblyResolver(), assembly.AssemblyDefinition, stream, options.CancellationToken);
fileName = Path.ChangeExtension(fileName, ".xaml"); fileName = Path.ChangeExtension(fileName, ".xaml");
document.Save(Path.Combine(options.SaveAsProjectDirectory, fileName)); document.Save(Path.Combine(options.SaveAsProjectDirectory, fileName));
return fileName; return fileName;

10
ILSpy.BamlDecompiler/ConnectMethodDecompiler.cs

@ -4,7 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using ICSharpCode.Decompiler; using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.CSharp; using ICSharpCode.Decompiler.CSharp;
using ICSharpCode.Decompiler.IL; using ICSharpCode.Decompiler.IL;
@ -34,7 +34,7 @@ namespace ILSpy.BamlDecompiler
this.assembly = assembly; this.assembly = assembly;
} }
public Dictionary<long, EventRegistration[]> DecompileEventMappings(string fullTypeName) public Dictionary<long, EventRegistration[]> DecompileEventMappings(string fullTypeName, CancellationToken cancellationToken)
{ {
var result = new Dictionary<long, EventRegistration[]>(); var result = new Dictionary<long, EventRegistration[]>();
TypeDefinition type = this.assembly.MainModule.GetType(fullTypeName); TypeDefinition type = this.assembly.MainModule.GetType(fullTypeName);
@ -57,9 +57,11 @@ namespace ILSpy.BamlDecompiler
// decompile method and optimize the switch // decompile method and optimize the switch
var typeSystem = new DecompilerTypeSystem(method.Module); var typeSystem = new DecompilerTypeSystem(method.Module);
var ilReader = new ILReader(typeSystem); var ilReader = new ILReader(typeSystem);
var function = ilReader.ReadIL(method.Body); var function = ilReader.ReadIL(method.Body, cancellationToken);
var context = new ILTransformContext { Settings = new DecompilerSettings(), TypeSystem = typeSystem }; var context = new ILTransformContext(function, typeSystem) {
CancellationToken = cancellationToken
};
function.RunTransforms(CSharpDecompiler.GetILTransforms(), context); function.RunTransforms(CSharpDecompiler.GetILTransforms(), context);
var block = function.Body.Children.OfType<Block>().First(); var block = function.Body.Children.OfType<Block>().First();

Loading…
Cancel
Save