Browse Source

Expand nesting selectors in Style.ToString.

Steven Kirk 3 years ago
parent
commit
6f3a649737

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

@@ -27,11 +27,11 @@ namespace Avalonia.Styling
         /// <inheritdoc/>
         public override Type? TargetType => null;
 
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
-                _selectorString = _parent.ToString() + " > ";
+                _selectorString = _parent.ToString(owner) + " > ";
             }
 
             return _selectorString;

+ 1 - 7
src/Avalonia.Base/Styling/ControlTheme.cs

@@ -52,13 +52,7 @@ namespace Avalonia.Styling
             return result;
         }
 
-        public override string ToString()
-        {
-            if (TargetType is not null)
-                return "ControlTheme: " + TargetType.Name;
-            else
-                return "ControlTheme";
-        }
+        public override string ToString() => TargetType?.Name ?? "ControlTheme";
 
         internal override void SetParent(StyleBase? parent)
         {

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

@@ -25,11 +25,11 @@ namespace Avalonia.Styling
         /// <inheritdoc/>
         public override Type? TargetType => null;
 
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
-                _selectorString = _parent.ToString() + ' ';
+                _selectorString = _parent.ToString(owner) + ' ';
             }
 
             return _selectorString;

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

@@ -11,7 +11,7 @@ namespace Avalonia.Styling
         public override bool IsCombinator => false;
         public override Type? TargetType => null;
 
-        public override string ToString() => "^";
+        public override string ToString(Style? owner) => owner?.Parent?.ToString() ?? "^";
 
         protected override SelectorMatch Evaluate(IStyleable control, IStyle? parent, bool subscribe)
         {

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

@@ -35,11 +35,11 @@ namespace Avalonia.Styling
         public override Type? TargetType => _previous?.TargetType;
 
         /// <inheritdoc/>
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
-                _selectorString = $"{_previous?.ToString()}:not({_argument})";
+                _selectorString = $"{_previous?.ToString(owner)}:not({_argument})";
             }
 
             return _selectorString;

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

@@ -107,10 +107,10 @@ namespace Avalonia.Styling
         protected override Selector? MovePrevious() => _previous;
         protected override Selector? MovePreviousOrParent() => _previous;
 
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             var expectedCapacity = NthLastChildSelectorName.Length + 8;
-            var stringBuilder = new StringBuilder(_previous?.ToString(), expectedCapacity);
+            var stringBuilder = new StringBuilder(_previous?.ToString(owner), expectedCapacity);
             
             stringBuilder.Append(':');
             stringBuilder.Append(_reversed ? NthLastChildSelectorName : NthChildSelectorName);

+ 3 - 2
src/Avalonia.Base/Styling/OrSelector.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using Avalonia.Styling.Activators;
 
 #nullable enable
@@ -55,11 +56,11 @@ namespace Avalonia.Styling
         }
 
         /// <inheritdoc/>
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
-                _selectorString = string.Join(", ", _selectors);
+                _selectorString = string.Join(", ", _selectors.Select(x => x.ToString(owner)));
             }
 
             return _selectorString;

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

@@ -38,7 +38,7 @@ namespace Avalonia.Styling
         public override Type? TargetType => _previous?.TargetType;
 
         /// <inheritdoc/>
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
@@ -46,7 +46,7 @@ namespace Avalonia.Styling
 
                 if (_previous != null)
                 {
-                    builder.Append(_previous.ToString());
+                    builder.Append(_previous.ToString(owner));
                 }
 
                 builder.Append('[');

+ 9 - 0
src/Avalonia.Base/Styling/Selector.cs

@@ -67,6 +67,15 @@ namespace Avalonia.Styling
             return match;
         }
 
+        public override string ToString() => ToString(null);
+
+        /// <summary>
+        /// Gets a string representing the selector, with the nesting separator (`^`) replaced with
+        /// the parent selector.
+        /// </summary>
+        /// <param name="owner">The owner style.</param>
+        public abstract string ToString(Style? owner);
+
         /// <summary>
         /// Evaluates the selector for a match.
         /// </summary>

+ 1 - 11
src/Avalonia.Base/Styling/Style.cs

@@ -68,17 +68,7 @@ namespace Avalonia.Styling
         /// Returns a string representation of the style.
         /// </summary>
         /// <returns>A string representation of the style.</returns>
-        public override string ToString()
-        {
-            if (Selector != null)
-            {
-                return "Style: " + Selector.ToString();
-            }
-            else
-            {
-                return "Style";
-            }
-        }
+        public override string ToString() => Selector?.ToString(this) ?? "Style";
 
         internal override void SetParent(StyleBase? parent)
         {

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

@@ -26,11 +26,11 @@ namespace Avalonia.Styling
         /// <inheritdoc/>
         public override Type? TargetType => null;
 
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
-                _selectorString = _parent.ToString() + " /template/ ";
+                _selectorString = _parent.ToString(owner) + " /template/ ";
             }
 
             return _selectorString;

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

@@ -84,11 +84,11 @@ namespace Avalonia.Styling
         public IList<string> Classes => _classes.Value;
 
         /// <inheritdoc/>
-        public override string ToString()
+        public override string ToString(Style? owner)
         {
             if (_selectorString == null)
             {
-                _selectorString = BuildSelectorString();
+                _selectorString = BuildSelectorString(owner);
             }
 
             return _selectorString;
@@ -143,13 +143,13 @@ namespace Avalonia.Styling
         protected override Selector? MovePrevious() => _previous;
         protected override Selector? MovePreviousOrParent() => _previous;
 
-        private string BuildSelectorString()
+        private string BuildSelectorString(Style? owner)
         {
             var builder = new StringBuilder();
 
             if (_previous != null)
             {
-                builder.Append(_previous.ToString());
+                builder.Append(_previous.ToString(owner));
             }
 
             if (TargetType != null)