diff --git a/src/Polly.Core/ResilienceStrategy.DebuggerProxy.cs b/src/Polly.Core/ResilienceStrategy.DebuggerProxy.cs deleted file mode 100644 index c81abf44f57..00000000000 --- a/src/Polly.Core/ResilienceStrategy.DebuggerProxy.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace Polly; - -public abstract partial class ResilienceStrategy -{ - internal sealed class DebuggerProxy - { - private readonly ResilienceStrategy _resilienceStrategy; - - public DebuggerProxy(ResilienceStrategy resilienceStrategy) => _resilienceStrategy = resilienceStrategy; - - [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - public IEnumerable Strategies => UnwrapStrategies(_resilienceStrategy); - - private IEnumerable UnwrapStrategies(ResilienceStrategy strategy) - { - if (strategy is ResilienceStrategyPipeline pipeline) - { - return pipeline.Strategies; - } - - if (strategy is ReloadableResilienceStrategy reloadableResilienceStrategy) - { - var list = new List - { - strategy - }; - list.AddRange(UnwrapStrategies(reloadableResilienceStrategy.Strategy)); - - return list; - } - - return new[] { strategy }; - } - } -} diff --git a/src/Polly.Core/ResilienceStrategy.TResult.Async.cs b/src/Polly.Core/ResilienceStrategy.TResult.Async.cs index 8d9bafd51f8..32f1730fb39 100644 --- a/src/Polly.Core/ResilienceStrategy.TResult.Async.cs +++ b/src/Polly.Core/ResilienceStrategy.TResult.Async.cs @@ -10,7 +10,6 @@ namespace Polly; /// Resilience strategy supports various types of callbacks of result type /// and provides a unified way to execute them. This includes overloads for synchronous and asynchronous callbacks. /// -[DebuggerTypeProxy(typeof(ResilienceStrategy<>.DebuggerProxy))] public partial class ResilienceStrategy { internal ResilienceStrategy(ResilienceStrategy strategy) => Strategy = strategy; diff --git a/src/Polly.Core/ResilienceStrategy.TResult.DebuggerProxy.cs b/src/Polly.Core/ResilienceStrategy.TResult.DebuggerProxy.cs deleted file mode 100644 index 44eff368d65..00000000000 --- a/src/Polly.Core/ResilienceStrategy.TResult.DebuggerProxy.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace Polly; - -public partial class ResilienceStrategy -{ - internal sealed class DebuggerProxy - { - private readonly ResilienceStrategy.DebuggerProxy _proxy; - - public DebuggerProxy(ResilienceStrategy strategy) => _proxy = new ResilienceStrategy.DebuggerProxy(strategy.Strategy); - - [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] - public IEnumerable Strategies => _proxy.Strategies; - } -} diff --git a/src/Polly.Core/ResilienceStrategy.cs b/src/Polly.Core/ResilienceStrategy.cs index ac415d04e6b..6ab5449f124 100644 --- a/src/Polly.Core/ResilienceStrategy.cs +++ b/src/Polly.Core/ResilienceStrategy.cs @@ -9,7 +9,6 @@ namespace Polly; /// Resilience strategy supports various types of callbacks and provides a unified way to execute them. /// This includes overloads for synchronous and asynchronous callbacks, generic and non-generic callbacks. /// -[DebuggerTypeProxy(typeof(DebuggerProxy))] public abstract partial class ResilienceStrategy { /// diff --git a/src/Polly.Core/Utils/ResilienceStrategyPipeline.DebuggerProxy.cs b/src/Polly.Core/Utils/ResilienceStrategyPipeline.DebuggerProxy.cs new file mode 100644 index 00000000000..d8094e8d25c --- /dev/null +++ b/src/Polly.Core/Utils/ResilienceStrategyPipeline.DebuggerProxy.cs @@ -0,0 +1,14 @@ +namespace Polly.Utils; + +internal partial class ResilienceStrategyPipeline +{ + internal sealed class DebuggerProxy + { + private readonly ResilienceStrategyPipeline _resilienceStrategy; + + public DebuggerProxy(ResilienceStrategyPipeline resilienceStrategy) => _resilienceStrategy = resilienceStrategy; + + [DebuggerBrowsable(DebuggerBrowsableState.RootHidden)] + public IEnumerable Strategies => _resilienceStrategy.Strategies; + } +} diff --git a/src/Polly.Core/Utils/ResilienceStrategyPipeline.cs b/src/Polly.Core/Utils/ResilienceStrategyPipeline.cs index e483d3c043c..695dc9e6629 100644 --- a/src/Polly.Core/Utils/ResilienceStrategyPipeline.cs +++ b/src/Polly.Core/Utils/ResilienceStrategyPipeline.cs @@ -8,7 +8,8 @@ namespace Polly.Utils; /// A pipeline of strategies. /// [DebuggerDisplay("ResilienceStrategyPipeline, Strategies = {Strategies.Count}")] -internal sealed class ResilienceStrategyPipeline : ResilienceStrategy +[DebuggerTypeProxy(typeof(DebuggerProxy))] +internal sealed partial class ResilienceStrategyPipeline : ResilienceStrategy { private readonly ResilienceStrategy _pipeline; diff --git a/test/Polly.Core.Tests/ResilienceStrategyTests.cs b/test/Polly.Core.Tests/ResilienceStrategyTests.cs index 2e5e52dd56e..af6dc7fe9f2 100644 --- a/test/Polly.Core.Tests/ResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/ResilienceStrategyTests.cs @@ -1,4 +1,3 @@ -using Moq; using Polly.Utils; namespace Polly.Core.Tests; @@ -39,12 +38,8 @@ public void DebuggerProxy_Ok() new TestResilienceStrategy(), new TestResilienceStrategy() }); - var reloadable = new ReloadableResilienceStrategy(pipeline, () => default, () => pipeline, TestUtilities.CreateResilienceTelemetry(Mock.Of())); - new ResilienceStrategy.DebuggerProxy(NullResilienceStrategy.Instance).Strategies.Should().HaveCount(1); - new ResilienceStrategy.DebuggerProxy(pipeline).Strategies.Should().HaveCount(2); - new ResilienceStrategy.DebuggerProxy(reloadable).Strategies.Should().HaveCount(3); - new ResilienceStrategy.DebuggerProxy(NullResilienceStrategy.Instance).Strategies.Should().HaveCount(1); + new ResilienceStrategyPipeline.DebuggerProxy(pipeline).Strategies.Should().HaveCount(2); } public class ExecuteParameters : ExecuteParameters