|
|
|
@ -2,8 +2,9 @@ |
|
|
|
using System.Collections.Generic; |
|
|
|
using System.Diagnostics.CodeAnalysis; |
|
|
|
using System.Linq; |
|
|
|
using Avalonia.Data.Core; |
|
|
|
using Avalonia.Markup.Parsers; |
|
|
|
using Avalonia.Utilities; |
|
|
|
using XamlX; |
|
|
|
using XamlX.Ast; |
|
|
|
using XamlX.Transform; |
|
|
|
using XamlX.Transform.Transformers; |
|
|
|
@ -22,7 +23,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers |
|
|
|
|
|
|
|
if (binding.Arguments.Count > 0 && binding.Arguments[0] is XamlAstTextNode bindingPathText) |
|
|
|
{ |
|
|
|
var (nodes, _) = BindingExpressionGrammar.Parse(bindingPathText.Text); |
|
|
|
var nodes = GetBindingPath(bindingPathText); |
|
|
|
|
|
|
|
if (convertedNode != null) |
|
|
|
{ |
|
|
|
@ -47,7 +48,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers |
|
|
|
|
|
|
|
if (bindingPathAssignment != null && bindingPathAssignment.Values[0] is XamlAstTextNode pathValue) |
|
|
|
{ |
|
|
|
var (nodes, _) = BindingExpressionGrammar.Parse(pathValue.Text); |
|
|
|
var nodes = GetBindingPath(pathValue); |
|
|
|
|
|
|
|
if (nodes.Count == 1 && nodes[0] is BindingExpressionGrammar.EmptyExpressionNode) |
|
|
|
{ |
|
|
|
@ -77,6 +78,18 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers |
|
|
|
return node; |
|
|
|
} |
|
|
|
|
|
|
|
private static List<BindingExpressionGrammar.INode> GetBindingPath(XamlAstTextNode node) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
return BindingExpressionGrammar.Parse(node.Text).Nodes; |
|
|
|
} |
|
|
|
catch (ExpressionParseException ex) |
|
|
|
{ |
|
|
|
throw new XamlTransformException($"Failed to parse binding path '{node.Text}': {ex.Message}", node, ex); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private static BindingExpressionGrammar.INode? ConvertLongFormPropertiesToBindingExpressionNode( |
|
|
|
AstTransformationContext context, |
|
|
|
XamlAstObjectNode binding) |
|
|
|
|