From d799fdb492332609d17389b8458ef87e50f9ca4f Mon Sep 17 00:00:00 2001 From: wwh1004 Date: Wed, 10 Mar 2021 14:17:18 +0800 Subject: [PATCH 1/2] fix ConnectionIdRewritePass field assignment and event mapping can in the same block --- .../Rewrite/ConnectionIdRewritePass.cs | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs b/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs index fe22c32ab..ea9bb77ef 100644 --- a/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs +++ b/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs @@ -57,13 +57,15 @@ namespace ILSpy.BamlDecompiler.Rewrite foreach (var annotation in element.Annotations()) { int index; + bool found = false; if ((index = fieldAssignments.FindIndex(item => item.key.Contains(annotation.Id))) > -1) { var xName = ctx.GetKnownNamespace("Name", XamlContext.KnownNamespace_Xaml, element); if (element.Attribute("Name") is null && element.Attribute(xName) is null) element.Add(new XAttribute(xName, fieldAssignments[index].value.FieldName)); + found = true; } - else if ((index = eventMappings.FindIndex(item => item.key.Contains(annotation.Id))) > -1) + if ((index = eventMappings.FindIndex(item => item.key.Contains(annotation.Id))) > -1) { foreach (var entry in eventMappings[index].value) { @@ -80,8 +82,9 @@ namespace ILSpy.BamlDecompiler.Rewrite element.Add(new XAttribute(xmlns + entry.EventName, entry.MethodName)); } } + found = true; } - else + if (!found) { element.Add(new XComment($"Unknown connection ID: {annotation.Id}")); } @@ -164,14 +167,11 @@ namespace ILSpy.BamlDecompiler.Rewrite { fieldAssignments.Add((section.Labels, field)); } - else + events.Clear(); + FindEvents(section.Body, events); + if (events.Count > 0) { - events.Clear(); - FindEvents(section.Body, events); - if (events.Count > 0) - { - eventMappings.Add((section.Labels, events.ToArray())); - } + eventMappings.Add((section.Labels, events.ToArray())); } } } @@ -194,14 +194,11 @@ namespace ILSpy.BamlDecompiler.Rewrite { fieldAssignments.Add((new LongSet(id), field)); } - else + events.Clear(); + FindEvents(inst, events); + if (events.Count > 0) { - events.Clear(); - FindEvents(inst, events); - if (events.Count > 0) - { - eventMappings.Add((new LongSet(id), events.ToArray())); - } + eventMappings.Add((new LongSet(id), events.ToArray())); } } } From ab33c6927c5db22b48d665e0a905b37e9f22a2f9 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 18 Mar 2021 20:58:29 +0100 Subject: [PATCH 2/2] Refactor code duplication in ConnectionIdRewritePass --- .../Rewrite/ConnectionIdRewritePass.cs | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs b/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs index ea9bb77ef..f1797c8fe 100644 --- a/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs +++ b/ILSpy.BamlDecompiler/Rewrite/ConnectionIdRewritePass.cs @@ -162,17 +162,7 @@ namespace ILSpy.BamlDecompiler.Rewrite { foreach (var section in ilSwitch.Sections) { - var field = FindField(section.Body); - if (!(field is null)) - { - fieldAssignments.Add((section.Labels, field)); - } - events.Clear(); - FindEvents(section.Body, events); - if (events.Count > 0) - { - eventMappings.Add((section.Labels, events.ToArray())); - } + Add(section.Labels, section.Body); } } else @@ -189,17 +179,22 @@ namespace ILSpy.BamlDecompiler.Rewrite ? ifInst.FalseInst : ifInst.TrueInst; - var field = FindField(inst); - if (!(field is null)) - { - fieldAssignments.Add((new LongSet(id), field)); - } - events.Clear(); - FindEvents(inst, events); - if (events.Count > 0) - { - eventMappings.Add((new LongSet(id), events.ToArray())); - } + Add(new LongSet(id), inst); + } + } + + void Add(LongSet ids, ILInstruction inst) + { + var field = FindField(inst); + if (!(field is null)) + { + fieldAssignments.Add((ids, field)); + } + events.Clear(); + FindEvents(inst, events); + if (events.Count > 0) + { + eventMappings.Add((ids, events.ToArray())); } } }