From 46e0c4df1f67453a70e969854221ebbe143ea80b Mon Sep 17 00:00:00 2001 From: Tako <53405089+Takoooooo@users.noreply.github.com> Date: Wed, 3 Nov 2021 15:58:52 +0200 Subject: [PATCH] Merge pull request #6849 from workgroupengineering/fixes/Issue_6848 fixes(DevTools): Ambiguous match found Exception # Conflicts: # src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs --- .../ViewModels/AvaloniaPropertyViewModel.cs | 4 +++- .../Diagnostics/ViewModels/ClrPropertyViewModel.cs | 4 +++- .../Diagnostics/ViewModels/ControlDetailsViewModel.cs | 11 +++++++---- .../Diagnostics/ViewModels/PropertyViewModel.cs | 1 + 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs index e4c4ca6115..8ce99d5375 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/AvaloniaPropertyViewModel.cs @@ -19,7 +19,7 @@ namespace Avalonia.Diagnostics.ViewModels Name = property.IsAttached ? $"[{property.OwnerType.Name}.{property.Name}]" : property.Name; - + DeclaringType = property.OwnerType; Update(); } @@ -50,6 +50,8 @@ namespace Avalonia.Diagnostics.ViewModels public override string Group => _group; + public override System.Type? DeclaringType { get; } + // [MemberNotNull(nameof(_type), nameof(_group), nameof(_priority))] public override void Update() { diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs index 65626aeea5..0a851f4a19 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ClrPropertyViewModel.cs @@ -24,7 +24,7 @@ namespace Avalonia.Diagnostics.ViewModels { Name = property.DeclaringType.Name + '.' + property.Name; } - + DeclaringType = property.DeclaringType; Update(); } @@ -55,6 +55,8 @@ namespace Avalonia.Diagnostics.ViewModels public override bool? IsAttached => default; + public override System.Type? DeclaringType { get; } + // [MemberNotNull(nameof(_type))] public override void Update() { diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs index cfc64c8767..88184cb754 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs @@ -24,7 +24,7 @@ namespace Avalonia.Diagnostics.ViewModels private bool _showInactiveStyles; private string? _styleStatus; private object _selectedEntity; - private readonly Stack> _selectedEntitiesStack = new Stack>(); + private readonly Stack<(string Name,object Entry)> _selectedEntitiesStack = new(); private string _selectedEntityName; private string _selectedEntityType; @@ -404,11 +404,14 @@ namespace Avalonia.Diagnostics.ViewModels var property = (_selectedEntity as IControl)?.GetValue(SelectedProperty.Key as AvaloniaProperty); if (property == null) { - property = _selectedEntity.GetType().GetProperty(SelectedProperty.Name)?.GetValue(_selectedEntity); + property = _selectedEntity.GetType().GetProperties() + .FirstOrDefault(pi => pi.Name == _selectedProperty?.Name + && pi.DeclaringType == _selectedProperty.DeclaringType + && pi.PropertyType.Name == _selectedProperty.Type) + ?.GetValue(_selectedEntity); } - if (property == null) return; - _selectedEntitiesStack.Push(new Tuple(SelectedEntityName, SelectedEntity)); + _selectedEntitiesStack.Push(new (SelectedEntityName, SelectedEntity)); NavigateToProperty(property, SelectedProperty.Name); } diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs index fdbd8c1aa3..173dcd165a 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs @@ -15,6 +15,7 @@ namespace Avalonia.Diagnostics.ViewModels public abstract string Name { get; } public abstract string Group { get; } public abstract string Type { get; } + public abstract Type? DeclaringType { get; } public abstract string Value { get; set; } public abstract string Priority { get; } public abstract bool? IsAttached { get; }