Skip to content

Commit

Permalink
Fix AmbigousMatchException between duplicated types Core and Controls
Browse files Browse the repository at this point in the history
  • Loading branch information
jsuarezruiz committed Apr 22, 2022
1 parent 39743b6 commit f2bd820
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 30 deletions.
10 changes: 5 additions & 5 deletions src/Controls/src/Core/Element.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
namespace Microsoft.Maui.Controls
{
/// <include file="../../docs/Microsoft.Maui.Controls/Element.xml" path="Type[@FullName='Microsoft.Maui.Controls.Element']/Docs" />
public abstract partial class Element : BindableObject, IElement, INameScope, IElementController, IVisualTreeElement
public abstract partial class Element : BindableObject, IElementDefinition, INameScope, IElementController, IVisualTreeElement
{
internal static readonly ReadOnlyCollection<Element> EmptyChildren = new ReadOnlyCollection<Element>(Array.Empty<Element>());

Expand Down Expand Up @@ -164,7 +164,7 @@ internal Element ParentOverride

Dictionary<BindableProperty, string> DynamicResources => _dynamicResources ?? (_dynamicResources = new Dictionary<BindableProperty, string>());

void IElement.AddResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
void IElementDefinition.AddResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
{
_changeHandlers = _changeHandlers ?? new List<Action<object, ResourcesChangedEventArgs>>(2);
_changeHandlers.Add(onchanged);
Expand All @@ -186,7 +186,7 @@ public Element Parent

if (RealParent != null)
{
((IElement)RealParent).RemoveResourcesChangedListener(OnParentResourcesChanged);
((IElementDefinition)RealParent).RemoveResourcesChangedListener(OnParentResourcesChanged);

if (value != null && (RealParent is Layout || RealParent is IControlTemplated))
Application.Current?.FindMauiContext()?.CreateLogger<Element>()?.LogWarning($"{this} is already a child of {RealParent}. Remove {this} from {RealParent} before adding to {value}.");
Expand All @@ -196,7 +196,7 @@ public Element Parent
if (RealParent != null)
{
OnParentResourcesChanged(RealParent.GetMergedResources());
((IElement)RealParent).AddResourcesChangedListener(OnParentResourcesChanged);
((IElementDefinition)RealParent).AddResourcesChangedListener(OnParentResourcesChanged);
}

object context = value != null ? value.BindingContext : null;
Expand All @@ -220,7 +220,7 @@ public Element Parent

internal bool IsTemplateRoot { get; set; }

void IElement.RemoveResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
void IElementDefinition.RemoveResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
{
if (_changeHandlers == null)
return;
Expand Down
12 changes: 6 additions & 6 deletions src/Controls/src/Core/ElementTemplate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
namespace Microsoft.Maui.Controls
{
/// <include file="../../docs/Microsoft.Maui.Controls/ElementTemplate.xml" path="Type[@FullName='Microsoft.Maui.Controls.ElementTemplate']/Docs" />
public class ElementTemplate : IElement
public class ElementTemplate : IElementDefinition
{
List<Action<object, ResourcesChangedEventArgs>> _changeHandlers;
Element _parent;
Expand Down Expand Up @@ -37,7 +37,7 @@ internal ElementTemplate(
/// <include file="../../docs/Microsoft.Maui.Controls/ElementTemplate.xml" path="//Member[@MemberName='LoadTemplate']/Docs" />
public Func<object> LoadTemplate { get; set; }

void IElement.AddResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
void IElementDefinition.AddResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
{
_changeHandlers = _changeHandlers ?? new List<Action<object, ResourcesChangedEventArgs>>(1);
_changeHandlers.Add(onchanged);
Expand All @@ -47,22 +47,22 @@ void IElement.AddResourcesChangedListener(Action<object, ResourcesChangedEventAr
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]
internal Type Type => _type;

Element IElement.Parent
Element IElementDefinition.Parent
{
get { return _parent; }
set
{
if (_parent == value)
return;
if (_parent != null)
((IElement)_parent).RemoveResourcesChangedListener(OnResourcesChanged);
((IElementDefinition)_parent).RemoveResourcesChangedListener(OnResourcesChanged);
_parent = value;
if (_parent != null)
((IElement)_parent).AddResourcesChangedListener(OnResourcesChanged);
((IElementDefinition)_parent).AddResourcesChangedListener(OnResourcesChanged);
}
}

void IElement.RemoveResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
void IElementDefinition.RemoveResourcesChangedListener(Action<object, ResourcesChangedEventArgs> onchanged)
{
if (_changeHandlers == null)
return;
Expand Down
6 changes: 3 additions & 3 deletions src/Controls/src/Core/GestureElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public GestureElement()
{
void AddItems()
{
foreach (IElement item in args.NewItems.OfType<IElement>())
foreach (IElementDefinition item in args.NewItems.OfType<IElementDefinition>())
{
ValidateGesture(item as IGestureRecognizer);
item.Parent = this;
Expand All @@ -28,7 +28,7 @@ void AddItems()

void RemoveItems()
{
foreach (IElement item in args.OldItems.OfType<IElement>())
foreach (IElementDefinition item in args.OldItems.OfType<IElementDefinition>())
item.Parent = null;
}

Expand All @@ -45,7 +45,7 @@ void RemoveItems()
RemoveItems();
break;
case NotifyCollectionChangedAction.Reset:
foreach (IElement item in _gestureRecognizers.OfType<IElement>())
foreach (IElementDefinition item in _gestureRecognizers.OfType<IElementDefinition>())
item.Parent = this;
break;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Microsoft.Maui.Controls
{
internal interface IElement
internal interface IElementDefinition
{
Element Parent { get; set; }

Expand Down
2 changes: 1 addition & 1 deletion src/Controls/src/Core/Page.cs
Original file line number Diff line number Diff line change
Expand Up @@ -561,7 +561,7 @@ void OnToolbarItemsCollectionChanged(object sender, NotifyCollectionChangedEvent
{
if (args.Action != NotifyCollectionChangedAction.Add)
return;
foreach (IElement item in args.NewItems)
foreach (IElementDefinition item in args.NewItems)
item.Parent = this;
}

Expand Down
4 changes: 2 additions & 2 deletions src/Controls/src/Core/ResourcesExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace Microsoft.Maui.Controls
{
static class ResourcesExtensions
{
public static IEnumerable<KeyValuePair<string, object>> GetMergedResources(this IElement element)
public static IEnumerable<KeyValuePair<string, object>> GetMergedResources(this IElementDefinition element)
{
Dictionary<string, object> resources = null;
while (element != null)
Expand Down Expand Up @@ -48,7 +48,7 @@ public static IEnumerable<KeyValuePair<string, object>> GetMergedResources(this
return resources;
}

public static bool TryGetResource(this IElement element, string key, out object value)
public static bool TryGetResource(this IElementDefinition element, string key, out object value)
{
while (element != null)
{
Expand Down
24 changes: 12 additions & 12 deletions src/Controls/src/Core/View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,19 +81,19 @@ protected internal View()
{
_gestureRecognizers.CollectionChanged += (sender, args) =>
{
void AddItems(IEnumerable<IElement> elements)
void AddItems(IEnumerable<IElementDefinition> elements)
{
foreach (IElement item in elements)
foreach (IElementDefinition item in elements)
{
ValidateGesture(item as IGestureRecognizer);
item.Parent = this;
GestureController.CompositeGestureRecognizers.Add(item as IGestureRecognizer);
}
}

void RemoveItems(IEnumerable<IElement> elements)
void RemoveItems(IEnumerable<IElementDefinition> elements)
{
foreach (IElement item in elements)
foreach (IElementDefinition item in elements)
{
item.Parent = null;
GestureController.CompositeGestureRecognizers.Remove(item as IGestureRecognizer);
Expand All @@ -103,28 +103,28 @@ void RemoveItems(IEnumerable<IElement> elements)
switch (args.Action)
{
case NotifyCollectionChangedAction.Add:
AddItems(args.NewItems.OfType<IElement>());
AddItems(args.NewItems.OfType<IElementDefinition>());
break;
case NotifyCollectionChangedAction.Remove:
RemoveItems(args.OldItems.OfType<IElement>());
RemoveItems(args.OldItems.OfType<IElementDefinition>());
break;
case NotifyCollectionChangedAction.Replace:
AddItems(args.NewItems.OfType<IElement>());
RemoveItems(args.OldItems.OfType<IElement>());
AddItems(args.NewItems.OfType<IElementDefinition>());
RemoveItems(args.OldItems.OfType<IElementDefinition>());
break;
case NotifyCollectionChangedAction.Reset:

List<IElement> remove = new List<IElement>();
List<IElement> add = new List<IElement>();
List<IElementDefinition> remove = new List<IElementDefinition>();
List<IElementDefinition> add = new List<IElementDefinition>();

foreach (IElement item in _gestureRecognizers.OfType<IElement>())
foreach (IElementDefinition item in _gestureRecognizers.OfType<IElementDefinition>())
{
if (!_gestureRecognizers.Contains((IGestureRecognizer)item))
add.Add(item);
item.Parent = this;
}

foreach (IElement item in GestureController.CompositeGestureRecognizers.OfType<IElement>())
foreach (IElementDefinition item in GestureController.CompositeGestureRecognizers.OfType<IElementDefinition>())
{
if (_gestureRecognizers.Contains((IGestureRecognizer)item))
item.Parent = this;
Expand Down

0 comments on commit f2bd820

Please sign in to comment.