From 92ebb7f6d8b1485313dbe101d3b3ed8060db87a0 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 12 Aug 2016 19:55:04 +0200 Subject: [PATCH] Log meaningful message for AggregateException. --- src/Avalonia.Base/AvaloniaObject.cs | 2 +- .../Utilities/ExceptionUtilities.cs | 23 +++++++++++++++++++ .../Xaml/ControlBindingTests.cs | 3 ++- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 src/Avalonia.Base/Utilities/ExceptionUtilities.cs diff --git a/src/Avalonia.Base/AvaloniaObject.cs b/src/Avalonia.Base/AvaloniaObject.cs index 72f70cab2a..83b0d4e533 100644 --- a/src/Avalonia.Base/AvaloniaObject.cs +++ b/src/Avalonia.Base/AvaloniaObject.cs @@ -670,7 +670,7 @@ namespace Avalonia "Error binding to {Target}.{Property}: {Message}", this, property, - notification.Error.Message); + ExceptionUtilities.GetMessage(notification.Error)); } } } diff --git a/src/Avalonia.Base/Utilities/ExceptionUtilities.cs b/src/Avalonia.Base/Utilities/ExceptionUtilities.cs new file mode 100644 index 0000000000..fa8c5be788 --- /dev/null +++ b/src/Avalonia.Base/Utilities/ExceptionUtilities.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Avalonia.Utilities +{ + internal static class ExceptionUtilities + { + public static string GetMessage(Exception e) + { + var aggregate = e as AggregateException; + + if (aggregate != null) + { + return string.Join(" | ", aggregate.InnerExceptions.Select(x => x.Message)); + } + + return e.Message; + } + } +} diff --git a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlBindingTests.cs b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlBindingTests.cs index df62a1ed41..029285341b 100644 --- a/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlBindingTests.cs +++ b/tests/Avalonia.Markup.Xaml.UnitTests/Xaml/ControlBindingTests.cs @@ -43,7 +43,8 @@ namespace Avalonia.Markup.Xaml.UnitTests.Xaml pv.Length == 3 && pv[0] is ProgressBar && object.ReferenceEquals(pv[1], ProgressBar.ValueProperty) && - (string)pv[2] == "Could not convert FallbackValue 'bar' to 'System.Double'") + (string)pv[2] == "Object reference not set to an instance of an object. | " + + "Could not convert FallbackValue 'bar' to 'System.Double'") { called = true; }