Browse Source

Fix #3689: Only move properties with setters to XAML attributes

pull/3701/head
ElektroKill 7 days ago
parent
commit
ddd53b1c66
No known key found for this signature in database
GPG Key ID: DD0A48B758B3C16A
  1. 24
      ICSharpCode.BamlDecompiler/Rewrite/AttributeRewritePass.cs

24
ICSharpCode.BamlDecompiler/Rewrite/AttributeRewritePass.cs

@ -24,6 +24,7 @@ using System.Collections.Generic; @@ -24,6 +24,7 @@ using System.Collections.Generic;
using System.Xml.Linq;
using ICSharpCode.BamlDecompiler.Xaml;
using ICSharpCode.Decompiler.TypeSystem;
namespace ICSharpCode.BamlDecompiler.Rewrite
{
@ -59,20 +60,25 @@ namespace ICSharpCode.BamlDecompiler.Rewrite @@ -59,20 +60,25 @@ namespace ICSharpCode.BamlDecompiler.Rewrite
bool RewriteElement(XamlContext ctx, XElement parent, XElement elem)
{
var property = elem.Annotation<XamlProperty>();
if (property == null && elem.Name != key)
return false;
if (elem.HasAttributes || elem.HasElements)
return false;
ctx.CancellationToken.ThrowIfCancellationRequested();
var value = elem.Value;
var attrName = elem.Name;
if (attrName != key)
{
var property = elem.Annotation<XamlProperty>();
if (property is null)
return false;
if (property.ResolvedMember is IProperty propertyDef && !propertyDef.CanSet)
return false;
attrName = property.ToXName(ctx, parent, property.IsAttachedTo(parent.Annotation<XamlType>()));
var attr = new XAttribute(attrName, value);
}
ctx.CancellationToken.ThrowIfCancellationRequested();
var attr = new XAttribute(attrName, elem.Value);
var list = new List<XAttribute>(parent.Attributes());
if (attrName == key)
list.Insert(0, attr);
@ -85,4 +91,4 @@ namespace ICSharpCode.BamlDecompiler.Rewrite @@ -85,4 +91,4 @@ namespace ICSharpCode.BamlDecompiler.Rewrite
return true;
}
}
}
}

Loading…
Cancel
Save