Browse Source

Fixed ExpressionParseException being reported as an internal compiler error (#19817)

pull/19864/head
Tom Edwards 4 months ago
committed by GitHub
parent
commit
28ce901a7f
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 19
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs

19
src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathParser.cs

@ -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)

Loading…
Cancel
Save