Bladeren bron

Merge pull request #11436 from AvaloniaUI/refactor/style-setters-internalize

Make styling internals internal
Max Katz 2 jaren geleden
bovenliggende
commit
192c40cbe0
33 gewijzigde bestanden met toevoegingen van 139 en 136 verwijderingen
  1. 18 0
      src/Avalonia.Base/Diagnostics/AppliedStyle.cs
  2. 2 2
      src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs
  3. 2 2
      src/Avalonia.Base/StyledElement.cs
  4. 1 2
      src/Avalonia.Base/Styling/Activators/IStyleActivator.cs
  5. 1 2
      src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs
  6. 6 6
      src/Avalonia.Base/Styling/ChildSelector.cs
  7. 6 6
      src/Avalonia.Base/Styling/DescendentSelector.cs
  8. 0 24
      src/Avalonia.Base/Styling/ISetter.cs
  9. 1 1
      src/Avalonia.Base/Styling/ISetterInstance.cs
  10. 2 2
      src/Avalonia.Base/Styling/ISetterValue.cs
  11. 1 2
      src/Avalonia.Base/Styling/IStyleInstance.cs
  12. 6 6
      src/Avalonia.Base/Styling/NestingSelector.cs
  13. 6 6
      src/Avalonia.Base/Styling/NotSelector.cs
  14. 7 7
      src/Avalonia.Base/Styling/NthChildSelector.cs
  15. 1 1
      src/Avalonia.Base/Styling/NthLastChildSelector.cs
  16. 6 6
      src/Avalonia.Base/Styling/OrSelector.cs
  17. 6 6
      src/Avalonia.Base/Styling/PropertyEqualsSelector.cs
  18. 7 7
      src/Avalonia.Base/Styling/Selector.cs
  19. 2 2
      src/Avalonia.Base/Styling/SelectorMatch.cs
  20. 2 2
      src/Avalonia.Base/Styling/Setter.cs
  21. 12 0
      src/Avalonia.Base/Styling/SetterBase.cs
  22. 3 3
      src/Avalonia.Base/Styling/StyleBase.cs
  23. 6 6
      src/Avalonia.Base/Styling/TemplateSelector.cs
  24. 6 6
      src/Avalonia.Base/Styling/TypeNameAndClassSelector.cs
  25. 1 1
      src/Avalonia.Controls/ContextMenu.cs
  26. 1 1
      src/Avalonia.Controls/Control.cs
  27. 1 1
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs
  28. 2 2
      src/Avalonia.Diagnostics/Diagnostics/ViewModels/StyleViewModel.cs
  29. 1 1
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs
  30. 2 2
      src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs
  31. 1 1
      src/Markup/Avalonia.Markup/Data/TemplateBinding.cs
  32. 18 18
      tests/Avalonia.Benchmarks/Styling/SelectorBenchmark.cs
  33. 2 2
      tests/Avalonia.UnitTests/StyleHelpers.cs

+ 18 - 0
src/Avalonia.Base/Diagnostics/AppliedStyle.cs

@@ -0,0 +1,18 @@
+using Avalonia.Styling;
+
+namespace Avalonia.Diagnostics
+{
+    public class AppliedStyle
+    {
+        private readonly IStyleInstance _instance;
+
+        internal AppliedStyle(IStyleInstance instance)
+        {
+            _instance = instance;
+        }
+
+        public bool HasActivator => _instance.HasActivator;
+        public bool IsActive => _instance.IsActive;
+        public StyleBase Style => (StyleBase)_instance.Source;
+    }
+}

+ 2 - 2
src/Avalonia.Base/Diagnostics/StyleDiagnostics.cs

@@ -11,9 +11,9 @@ namespace Avalonia.Diagnostics
         /// <summary>
         /// Currently applied styles.
         /// </summary>
-        public IReadOnlyList<IStyleInstance> AppliedStyles { get; }
+        public IReadOnlyList<AppliedStyle> AppliedStyles { get; }
 
-        public StyleDiagnostics(IReadOnlyList<IStyleInstance> appliedStyles)
+        public StyleDiagnostics(IReadOnlyList<AppliedStyle> appliedStyles)
         {
             AppliedStyles = appliedStyles;
         }

+ 2 - 2
src/Avalonia.Base/StyledElement.cs

@@ -420,12 +420,12 @@ namespace Avalonia
 
         internal StyleDiagnostics GetStyleDiagnosticsInternal()
         {
-            var styles = new List<IStyleInstance>();
+            var styles = new List<AppliedStyle>();
 
             foreach (var frame in GetValueStore().Frames)
             {
                 if (frame is IStyleInstance style)
-                    styles.Add(style);
+                    styles.Add(new(style));
             }
 
             return new StyleDiagnostics(styles);

+ 1 - 2
src/Avalonia.Base/Styling/Activators/IStyleActivator.cs

@@ -15,8 +15,7 @@ namespace Avalonia.Styling.Activators
     /// - The activation state can be re-evaluated at any time by calling <see cref="GetIsActive"/>
     /// - No error or completion messages
     /// </remarks>
-    [Unstable]
-    public interface IStyleActivator : IDisposable
+    internal interface IStyleActivator : IDisposable
     {
         /// <summary>
         /// Gets a value indicating whether the style is subscribed.

+ 1 - 2
src/Avalonia.Base/Styling/Activators/IStyleActivatorSink.cs

@@ -5,8 +5,7 @@ namespace Avalonia.Styling.Activators
     /// <summary>
     /// Receives notifications from an <see cref="IStyleActivator"/>.
     /// </summary>
-    [Unstable]
-    public interface IStyleActivatorSink
+    internal interface IStyleActivatorSink
     {
         /// <summary>
         /// Called when the subscribed activator value changes.

+ 6 - 6
src/Avalonia.Base/Styling/ChildSelector.cs

@@ -19,13 +19,13 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool InTemplate => _parent.InTemplate;
+        internal override bool InTemplate => _parent.InTemplate;
 
         /// <inheritdoc/>
-        public override bool IsCombinator => true;
+        internal override bool IsCombinator => true;
 
         /// <inheritdoc/>
-        public override Type? TargetType => null;
+        internal override Type? TargetType => null;
 
         public override string ToString(Style? owner)
         {
@@ -37,7 +37,7 @@ namespace Avalonia.Styling
             return _selectorString;
         }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             var controlParent = ((ILogical)control).LogicalParent;
 
@@ -64,7 +64,7 @@ namespace Avalonia.Styling
             }
         }
 
-        protected override Selector? MovePrevious() => null;
-        protected override Selector? MovePreviousOrParent() => _parent;
+        private protected override Selector? MovePrevious() => null;
+        private protected override Selector? MovePreviousOrParent() => _parent;
     }
 }

+ 6 - 6
src/Avalonia.Base/Styling/DescendentSelector.cs

@@ -17,13 +17,13 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool IsCombinator => true;
+        internal override bool IsCombinator => true;
 
         /// <inheritdoc/>
-        public override bool InTemplate => _parent.InTemplate;
+        internal override bool InTemplate => _parent.InTemplate;
 
         /// <inheritdoc/>
-        public override Type? TargetType => null;
+        internal override Type? TargetType => null;
 
         public override string ToString(Style? owner)
         {
@@ -35,7 +35,7 @@ namespace Avalonia.Styling
             return _selectorString;
         }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             var c = (ILogical)control;
             var descendantMatches = new OrActivatorBuilder();
@@ -69,7 +69,7 @@ namespace Avalonia.Styling
             }
         }
 
-        protected override Selector? MovePrevious() => null;
-        protected override Selector? MovePreviousOrParent() => _parent;
+        private protected override Selector? MovePrevious() => null;
+        private protected override Selector? MovePreviousOrParent() => _parent;
     }
 }

+ 0 - 24
src/Avalonia.Base/Styling/ISetter.cs

@@ -1,24 +0,0 @@
-using System;
-using Avalonia.Metadata;
-
-namespace Avalonia.Styling
-{
-    /// <summary>
-    /// Represents a setter for a <see cref="Style"/>.
-    /// </summary>
-    [NotClientImplementable]
-    public interface ISetter
-    {
-        /// <summary>
-        /// Instances a setter on a control.
-        /// </summary>
-        /// <param name="styleInstance">The style which contains the setter.</param>
-        /// <param name="target">The control.</param>
-        /// <returns>An <see cref="ISetterInstance"/>.</returns>
-        /// <remarks>
-        /// This method should return an <see cref="ISetterInstance"/> which can be used to apply
-        /// the setter to the specified control.
-        /// </remarks>
-        ISetterInstance Instance(IStyleInstance styleInstance, StyledElement target);
-    }
-}

+ 1 - 1
src/Avalonia.Base/Styling/ISetterInstance.cs

@@ -3,7 +3,7 @@
 namespace Avalonia.Styling
 {
     /// <summary>
-    /// Represents an <see cref="ISetter"/> that has been instanced on a control.
+    /// Represents a <see cref="Setter"/> that has been instanced on a control.
     /// </summary>
     [Unstable]
     public interface ISetterInstance

+ 2 - 2
src/Avalonia.Base/Styling/ISetterValue.cs

@@ -3,13 +3,13 @@
 namespace Avalonia.Styling
 {
     /// <summary>
-    /// Customizes the behavior of a class when added as a value to an <see cref="ISetter"/>.
+    /// Customizes the behavior of a class when added as a value to a <see cref="SetterBase"/>.
     /// </summary>
     public interface ISetterValue
     {
         /// <summary>
         /// Notifies that the object has been added as a setter value.
         /// </summary>
-        void Initialize(ISetter setter);
+        void Initialize(SetterBase setter);
     }
 }

+ 1 - 2
src/Avalonia.Base/Styling/IStyleInstance.cs

@@ -5,8 +5,7 @@ namespace Avalonia.Styling
     /// <summary>
     /// Represents a <see cref="Style"/> that has been instanced on a control.
     /// </summary>
-    [Unstable]
-    public interface IStyleInstance
+    internal interface IStyleInstance
     {
         /// <summary>
         /// Gets the source style.

+ 6 - 6
src/Avalonia.Base/Styling/NestingSelector.cs

@@ -7,13 +7,13 @@ namespace Avalonia.Styling
     /// </summary>
     internal class NestingSelector : Selector
     {
-        public override bool InTemplate => false;
-        public override bool IsCombinator => false;
-        public override Type? TargetType => null;
+        internal override bool InTemplate => false;
+        internal override bool IsCombinator => false;
+        internal override Type? TargetType => null;
 
         public override string ToString(Style? owner) => owner?.Parent?.ToString() ?? "^";
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             if (parent is Style s && s.Selector is not null)
             {
@@ -32,7 +32,7 @@ namespace Avalonia.Styling
                 "Nesting selector was specified but cannot determine parent selector.");
         }
 
-        protected override Selector? MovePrevious() => null;
-        protected override Selector? MovePreviousOrParent() => null;
+        private protected override Selector? MovePrevious() => null;
+        private protected override Selector? MovePreviousOrParent() => null;
     }
 }

+ 6 - 6
src/Avalonia.Base/Styling/NotSelector.cs

@@ -26,13 +26,13 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool InTemplate => _argument.InTemplate;
+        internal override bool InTemplate => _argument.InTemplate;
 
         /// <inheritdoc/>
-        public override bool IsCombinator => false;
+        internal override bool IsCombinator => false;
 
         /// <inheritdoc/>
-        public override Type? TargetType => _previous?.TargetType;
+        internal override Type? TargetType => _previous?.TargetType;
 
         /// <inheritdoc/>
         public override string ToString(Style? owner)
@@ -45,7 +45,7 @@ namespace Avalonia.Styling
             return _selectorString;
         }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             var innerResult = _argument.Match(control, parent, subscribe);
 
@@ -66,7 +66,7 @@ namespace Avalonia.Styling
             }
         }
 
-        protected override Selector? MovePrevious() => _previous;
-        protected override Selector? MovePreviousOrParent() => _previous;
+        private protected override Selector? MovePrevious() => _previous;
+        private protected override Selector? MovePreviousOrParent() => _previous;
     }
 }

+ 7 - 7
src/Avalonia.Base/Styling/NthChildSelector.cs

@@ -12,7 +12,7 @@ namespace Avalonia.Styling
     /// <remarks>
     /// Element indices are 1-based.
     /// </remarks>
-    public class NthChildSelector : Selector
+    internal class NthChildSelector : Selector
     {
         private const string NthChildSelectorName = "nth-child";
         private const string NthLastChildSelectorName = "nth-last-child";
@@ -39,16 +39,16 @@ namespace Avalonia.Styling
 
         }
 
-        public override bool InTemplate => _previous?.InTemplate ?? false;
+        internal override bool InTemplate => _previous?.InTemplate ?? false;
 
-        public override bool IsCombinator => false;
+        internal override bool IsCombinator => false;
 
-        public override Type? TargetType => _previous?.TargetType;
+        internal override Type? TargetType => _previous?.TargetType;
 
         public int Step { get; }
         public int Offset { get; }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             if (!(control is ILogical logical))
             {
@@ -103,8 +103,8 @@ namespace Avalonia.Styling
             return match ? SelectorMatch.AlwaysThisInstance : SelectorMatch.NeverThisInstance;
         }
 
-        protected override Selector? MovePrevious() => _previous;
-        protected override Selector? MovePreviousOrParent() => _previous;
+        private protected override Selector? MovePrevious() => _previous;
+        private protected override Selector? MovePreviousOrParent() => _previous;
 
         public override string ToString(Style? owner)
         {

+ 1 - 1
src/Avalonia.Base/Styling/NthLastChildSelector.cs

@@ -8,7 +8,7 @@ namespace Avalonia.Styling
     /// <remarks>
     /// Element indices are 1-based.
     /// </remarks>
-    public class NthLastChildSelector : NthChildSelector
+    internal class NthLastChildSelector : NthChildSelector
     {
         /// <summary>
         /// Creates an instance of <see cref="NthLastChildSelector"/>

+ 6 - 6
src/Avalonia.Base/Styling/OrSelector.cs

@@ -36,13 +36,13 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool InTemplate => false;
+        internal override bool InTemplate => false;
 
         /// <inheritdoc/>
-        public override bool IsCombinator => false;
+        internal override bool IsCombinator => false;
 
         /// <inheritdoc/>
-        public override Type? TargetType => _targetType ??= EvaluateTargetType();
+        internal override Type? TargetType => _targetType ??= EvaluateTargetType();
 
         /// <inheritdoc/>
         public override string ToString(Style? owner)
@@ -55,7 +55,7 @@ namespace Avalonia.Styling
             return _selectorString;
         }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             var activators = new OrActivatorBuilder();
             var neverThisInstance = false;
@@ -94,8 +94,8 @@ namespace Avalonia.Styling
             }
         }
 
-        protected override Selector? MovePrevious() => null;
-        protected override Selector? MovePreviousOrParent() => null;
+        private protected override Selector? MovePrevious() => null;
+        private protected override Selector? MovePreviousOrParent() => null;
 
         internal override void ValidateNestingSelector(bool inControlTheme)
         {

+ 6 - 6
src/Avalonia.Base/Styling/PropertyEqualsSelector.cs

@@ -28,13 +28,13 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool InTemplate => _previous?.InTemplate ?? false;
+        internal override bool InTemplate => _previous?.InTemplate ?? false;
 
         /// <inheritdoc/>
-        public override bool IsCombinator => false;
+        internal override bool IsCombinator => false;
 
         /// <inheritdoc/>
-        public override Type? TargetType => _previous?.TargetType;
+        internal override Type? TargetType => _previous?.TargetType;
 
         /// <inheritdoc/>
         public override string ToString(Style? owner)
@@ -73,7 +73,7 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             if (subscribe)
             {
@@ -88,8 +88,8 @@ namespace Avalonia.Styling
             
         }
 
-        protected override Selector? MovePrevious() => _previous;
-        protected override Selector? MovePreviousOrParent() => _previous;
+        private protected override Selector? MovePrevious() => _previous;
+        private protected override Selector? MovePreviousOrParent() => _previous;
 
         [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = TrimmingMessages.TypeConvertionSupressWarningMessage)]
         [UnconditionalSuppressMessage("Trimming", "IL2067", Justification = TrimmingMessages.TypeConvertionSupressWarningMessage)]

+ 7 - 7
src/Avalonia.Base/Styling/Selector.cs

@@ -14,7 +14,7 @@ namespace Avalonia.Styling
         /// Gets a value indicating whether either this selector or a previous selector has moved
         /// into a template.
         /// </summary>
-        public abstract bool InTemplate { get; }
+        internal abstract bool InTemplate { get; }
 
         /// <summary>
         /// Gets a value indicating whether this selector is a combinator.
@@ -22,12 +22,12 @@ namespace Avalonia.Styling
         /// <remarks>
         /// A combinator is a selector such as Child or Descendent which links simple selectors.
         /// </remarks>
-        public abstract bool IsCombinator { get; }
+        internal abstract bool IsCombinator { get; }
 
         /// <summary>
         /// Gets the target type of the selector, if available.
         /// </summary>
-        public abstract Type? TargetType { get; }
+        internal abstract Type? TargetType { get; }
 
         /// <summary>
         /// Tries to match the selector with a control.
@@ -41,7 +41,7 @@ namespace Avalonia.Styling
         /// or simply return an immediate result.
         /// </param>
         /// <returns>A <see cref="SelectorMatch"/>.</returns>
-        public SelectorMatch Match(StyledElement control, IStyle? parent = null, bool subscribe = true)
+        internal SelectorMatch Match(StyledElement control, IStyle? parent = null, bool subscribe = true)
         {
             // First match the selector until a combinator is found. Selectors are stored from 
             // right-to-left, so MatchUntilCombinator reverses this order because the type selector
@@ -88,17 +88,17 @@ namespace Avalonia.Styling
         /// or simply return an immediate result.
         /// </param>
         /// <returns>A <see cref="SelectorMatch"/>.</returns>
-        protected abstract SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe);
+        private protected abstract SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe);
 
         /// <summary>
         /// Moves to the previous selector.
         /// </summary>
-        protected abstract Selector? MovePrevious();
+        private protected abstract Selector? MovePrevious();
 
         /// <summary>
         /// Moves to the previous selector or the parent selector.
         /// </summary>
-        protected abstract Selector? MovePreviousOrParent();
+        private protected abstract Selector? MovePreviousOrParent();
 
         internal virtual void ValidateNestingSelector(bool inControlTheme)
         {

+ 2 - 2
src/Avalonia.Base/Styling/SelectorMatch.cs

@@ -8,7 +8,7 @@ namespace Avalonia.Styling
     /// <summary>
     /// Describes how a <see cref="SelectorMatch"/> matches a control and its type.
     /// </summary>
-    public enum SelectorMatchResult
+    internal enum SelectorMatchResult
     {
         /// <summary>
         /// The selector never matches this type.
@@ -43,7 +43,7 @@ namespace Avalonia.Styling
     /// A selector match describes whether and how a <see cref="Selector"/> matches a control, and
     /// in addition whether the selector can ever match a control of the same type.
     /// </remarks>
-    public readonly record struct SelectorMatch
+    internal readonly record struct SelectorMatch
     {
         /// <summary>
         /// A selector match with the result of <see cref="SelectorMatchResult.NeverThisType"/>.

+ 2 - 2
src/Avalonia.Base/Styling/Setter.cs

@@ -14,7 +14,7 @@ namespace Avalonia.Styling
     /// A <see cref="Setter"/> is used to set a <see cref="AvaloniaProperty"/> value on a
     /// <see cref="AvaloniaObject"/> depending on a condition.
     /// </remarks>
-    public class Setter : ISetter, IValueEntry, ISetterInstance, IAnimationSetter
+    public class Setter : SetterBase, IValueEntry, ISetterInstance, IAnimationSetter
     {
         private object? _value;
         private DirectPropertySetterInstance? _direct;
@@ -66,7 +66,7 @@ namespace Avalonia.Styling
         void IValueEntry.Unsubscribe() { }
 
         [UnconditionalSuppressMessage("Trimming", "IL2026", Justification = TrimmingMessages.ImplicitTypeConvertionSupressWarningMessage)]
-        ISetterInstance ISetter.Instance(IStyleInstance instance, StyledElement target)
+        internal override ISetterInstance Instance(IStyleInstance instance, StyledElement target)
         {
             if (target is not AvaloniaObject ao)
                 throw new InvalidOperationException("Don't know how to instance a style on this type.");

+ 12 - 0
src/Avalonia.Base/Styling/SetterBase.cs

@@ -0,0 +1,12 @@
+namespace Avalonia.Styling
+{
+    /// <summary>
+    /// Represents the base class for value setters.
+    /// </summary>
+    public abstract class SetterBase
+    {
+        internal abstract ISetterInstance Instance(
+            IStyleInstance styleInstance,
+            StyledElement target);
+    }
+}

+ 3 - 3
src/Avalonia.Base/Styling/StyleBase.cs

@@ -16,7 +16,7 @@ namespace Avalonia.Styling
         private IResourceHost? _owner;
         private StyleChildren? _children;
         private IResourceDictionary? _resources;
-        private List<ISetter>? _setters;
+        private List<SetterBase>? _setters;
         private List<IAnimation>? _animations;
         private StyleInstance? _sharedInstance;
 
@@ -60,7 +60,7 @@ namespace Avalonia.Styling
             }
         }
 
-        public IList<ISetter> Setters => _setters ??= new List<ISetter>();
+        public IList<SetterBase> Setters => _setters ??= new();
         public IList<IAnimation> Animations => _animations ??= new List<IAnimation>();
 
         bool IResourceNode.HasResources => _resources?.Count > 0;
@@ -69,7 +69,7 @@ namespace Avalonia.Styling
         internal bool HasChildren => _children?.Count > 0;
         internal bool HasSettersOrAnimations => _setters?.Count > 0 || _animations?.Count > 0;
 
-        public void Add(ISetter setter) => Setters.Add(setter);
+        public void Add(SetterBase setter) => Setters.Add(setter);
         public void Add(IStyle style) => Children.Add(style);
 
         public event EventHandler? OwnerChanged;

+ 6 - 6
src/Avalonia.Base/Styling/TemplateSelector.cs

@@ -18,13 +18,13 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool InTemplate => true;
+        internal override bool InTemplate => true;
 
         /// <inheritdoc/>
-        public override bool IsCombinator => true;
+        internal override bool IsCombinator => true;
 
         /// <inheritdoc/>
-        public override Type? TargetType => null;
+        internal override Type? TargetType => null;
 
         public override string ToString(Style? owner)
         {
@@ -36,7 +36,7 @@ namespace Avalonia.Styling
             return _selectorString;
         }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             var templatedParent = control.TemplatedParent as StyledElement;
 
@@ -48,7 +48,7 @@ namespace Avalonia.Styling
             return _parent.Match(templatedParent, parent, subscribe);
         }
 
-        protected override Selector? MovePrevious() => null;
-        protected override Selector? MovePreviousOrParent() => _parent;
+        private protected override Selector? MovePrevious() => null;
+        private protected override Selector? MovePreviousOrParent() => _parent;
     }
 }

+ 6 - 6
src/Avalonia.Base/Styling/TypeNameAndClassSelector.cs

@@ -58,7 +58,7 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override bool InTemplate => _previous?.InTemplate ?? false;
+        internal override bool InTemplate => _previous?.InTemplate ?? false;
 
         /// <summary>
         /// Gets the name of the control to match.
@@ -66,10 +66,10 @@ namespace Avalonia.Styling
         public string? Name { get; set; }
 
         /// <inheritdoc/>
-        public override Type? TargetType => _targetType ?? _previous?.TargetType;
+        internal override Type? TargetType => _targetType ?? _previous?.TargetType;
 
         /// <inheritdoc/>
-        public override bool IsCombinator => false;
+        internal override bool IsCombinator => false;
 
         /// <summary>
         /// Whether the selector matches the concrete <see cref="TargetType"/> or any object which
@@ -89,7 +89,7 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle? parent, bool subscribe)
         {
             if (TargetType != null)
             {
@@ -134,8 +134,8 @@ namespace Avalonia.Styling
             return Name == null ? SelectorMatch.AlwaysThisType : SelectorMatch.AlwaysThisInstance;
         }
 
-        protected override Selector? MovePrevious() => _previous;
-        protected override Selector? MovePreviousOrParent() => _previous;
+        private protected override Selector? MovePrevious() => _previous;
+        private protected override Selector? MovePreviousOrParent() => _previous;
 
         private string BuildSelectorString(Style? owner)
         {

+ 1 - 1
src/Avalonia.Controls/ContextMenu.cs

@@ -285,7 +285,7 @@ namespace Avalonia.Controls
             }
         }
 
-        void ISetterValue.Initialize(ISetter setter)
+        void ISetterValue.Initialize(SetterBase setter)
         {
             // ContextMenu can be assigned to the ContextMenu property in a setter. This overrides
             // the behavior defined in Control which requires controls to be wrapped in a <template>.

+ 1 - 1
src/Avalonia.Controls/Control.cs

@@ -213,7 +213,7 @@ namespace Avalonia.Controls
         bool IDataTemplateHost.IsDataTemplatesInitialized => _dataTemplates != null;
 
         /// <inheritdoc/>
-        void ISetterValue.Initialize(ISetter setter)
+        void ISetterValue.Initialize(SetterBase setter)
         {
             if (setter is Setter s && s.Property == ContextFlyoutProperty)
             {

+ 1 - 1
src/Avalonia.Diagnostics/Diagnostics/ViewModels/ControlDetailsViewModel.cs

@@ -64,7 +64,7 @@ namespace Avalonia.Diagnostics.ViewModels
                 // We need to place styles without activator first, such styles will be overwritten by ones with activators.
                 foreach (var appliedStyle in styleDiagnostics.AppliedStyles.OrderBy(s => s.HasActivator))
                 {
-                    var styleSource = appliedStyle.Source;
+                    var styleSource = appliedStyle.Style;
 
                     var setters = new List<SetterViewModel>();
 

+ 2 - 2
src/Avalonia.Diagnostics/Diagnostics/ViewModels/StyleViewModel.cs

@@ -5,11 +5,11 @@ namespace Avalonia.Diagnostics.ViewModels
 {
     internal class StyleViewModel : ViewModelBase
     {
-        private readonly IStyleInstance _styleInstance;
+        private readonly AppliedStyle _styleInstance;
         private bool _isActive;
         private bool _isVisible;
 
-        public StyleViewModel(IStyleInstance styleInstance, string name, List<SetterViewModel> setters)
+        public StyleViewModel(AppliedStyle styleInstance, string name, List<SetterViewModel> setters)
         {
             _styleInstance = styleInstance;
             IsVisible = true;

+ 1 - 1
src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlBindingPathTransformer.cs

@@ -125,7 +125,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
                 var selfType = context.ParentNodes().OfType<XamlAstConstructableObjectNode>().First().Type.GetClrType();
                 
                 // When using self bindings with setters we need to change target type to resolved selector type.
-                if (context.GetAvaloniaTypes().ISetter.IsAssignableFrom(selfType))
+                if (context.GetAvaloniaTypes().SetterBase.IsAssignableFrom(selfType))
                 {
                     selfType = context.ParentNodes().OfType<AvaloniaXamlIlTargetTypeMetadataNode>().First().TargetType.GetClrType();
                 }

+ 2 - 2
src/Markup/Avalonia.Markup.Xaml.Loader/CompilerExtensions/Transformers/AvaloniaXamlIlWellKnownTypes.cs

@@ -104,7 +104,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
         public IXamlType TextDecorationCollection { get; }
         public IXamlType TextDecorations { get; }
         public IXamlType TextTrimming { get; }
-        public IXamlType ISetter { get; }
+        public IXamlType SetterBase { get; }
         public IXamlType IStyle { get; }
         public IXamlType StyleInclude { get; }
         public IXamlType ResourceInclude { get; }
@@ -244,7 +244,7 @@ namespace Avalonia.Markup.Xaml.XamlIl.CompilerExtensions.Transformers
             TextDecorationCollection = cfg.TypeSystem.GetType("Avalonia.Media.TextDecorationCollection");
             TextDecorations = cfg.TypeSystem.GetType("Avalonia.Media.TextDecorations");
             TextTrimming = cfg.TypeSystem.GetType("Avalonia.Media.TextTrimming");
-            ISetter = cfg.TypeSystem.GetType("Avalonia.Styling.ISetter");
+            SetterBase = cfg.TypeSystem.GetType("Avalonia.Styling.SetterBase");
             IStyle = cfg.TypeSystem.GetType("Avalonia.Styling.IStyle");
             StyleInclude = cfg.TypeSystem.GetType("Avalonia.Markup.Xaml.Styling.StyleInclude");
             ResourceInclude = cfg.TypeSystem.GetType("Avalonia.Markup.Xaml.Styling.ResourceInclude");

+ 1 - 1
src/Markup/Avalonia.Markup/Data/TemplateBinding.cs

@@ -109,7 +109,7 @@ namespace Avalonia.Data
         }
 
         /// <inheritdoc/>
-        void ISetterValue.Initialize(ISetter setter) => _isSetterValue = true;
+        void ISetterValue.Initialize(SetterBase setter) => _isSetterValue = true;
 
         protected override void Subscribed()
         {

+ 18 - 18
tests/Avalonia.Benchmarks/Styling/SelectorBenchmark.cs

@@ -37,62 +37,62 @@ namespace Avalonia.Benchmarks.Styling
         }
 
         [Benchmark]
-        public SelectorMatch IsSelector_NoMatch()
+        public void IsSelector_NoMatch()
         {
-            return _isCalendarSelector.Match(_notMatchingControl);
+            _isCalendarSelector.Match(_notMatchingControl);
         }
 
         [Benchmark]
-        public SelectorMatch IsSelector_Match()
+        public void IsSelector_Match()
         {
-            return _isCalendarSelector.Match(_matchingControl);
+            _isCalendarSelector.Match(_matchingControl);
         }
 
         [Benchmark]
-        public SelectorMatch ClassSelector_NoMatch()
+        public void ClassSelector_NoMatch()
         {
-            return _classSelector.Match(_notMatchingControl);
+            _classSelector.Match(_notMatchingControl);
         }
 
         [Benchmark]
-        public SelectorMatch ClassSelector_Match()
+        public void ClassSelector_Match()
         {
-            return _classSelector.Match(_matchingControl);
+            _classSelector.Match(_matchingControl);
         }
 
         [Benchmark]
-        public SelectorMatch OrSelector_One_Match()
+        public void OrSelector_One_Match()
         {
-            return _orSelectorTwo.Match(_matchingControl);
+            _orSelectorTwo.Match(_matchingControl);
         }
 
         [Benchmark]
-        public SelectorMatch OrSelector_Five_Match()
+        public void OrSelector_Five_Match()
         {
-            return _orSelectorFive.Match(_matchingControl);
+            _orSelectorFive.Match(_matchingControl);
         }
     }
 
     internal class AlwaysMatchSelector : Selector
     {
-        public override bool InTemplate => false;
+        internal override bool InTemplate => false;
 
-        public override bool IsCombinator => false;
+        internal override bool IsCombinator => false;
 
-        public override Type TargetType => null;
+        internal override Type TargetType => null;
 
         public override string ToString(Style owner)
         {
             return "Always";
         }
 
-        protected override SelectorMatch Evaluate(StyledElement control, IStyle parent, bool subscribe)
+        private protected override SelectorMatch Evaluate(StyledElement control, IStyle parent, bool subscribe)
         {
             return SelectorMatch.AlwaysThisType;
         }
 
-        protected override Selector MovePrevious() => null;
+        private protected override Selector MovePrevious() => null;
 
-        protected override Selector MovePreviousOrParent() => null;
+        private protected override Selector MovePreviousOrParent() => null;
     }
 }

+ 2 - 2
tests/Avalonia.UnitTests/StyleHelpers.cs

@@ -6,9 +6,9 @@ namespace Avalonia.UnitTests
 {
     public static class StyleHelpers
     {
-        public static SelectorMatchResult TryAttach(Style style, StyledElement element, object? host = null)
+        public static void TryAttach(Style style, StyledElement element, object? host = null)
         {
-            return style.TryAttach(element, host ?? element, PropertyStore.FrameType.Style);
+            style.TryAttach(element, host ?? element, PropertyStore.FrameType.Style);
         }
     }
 }