From 9b7dd37395624f9b024614188e2ee01e12771391 Mon Sep 17 00:00:00 2001 From: Daniel Weber Date: Wed, 30 May 2018 17:32:29 +0200 Subject: [PATCH] Resolve the source of confusion that is DefaultDisposable: Its name is poorly chosen, Disposable.Empty points to DefaultDisposable.Instance and should be the only no-op-disposable used throughout the code. Thus, DefaultDisposable is nested and renamed. --- .../Disposables/DefaultDisposable.cs | 29 ------------------- .../System.Reactive/Disposables/Disposable.cs | 27 +++++++++++++++-- .../Disposables/ScheduledDisposable.cs | 2 +- 3 files changed, 26 insertions(+), 32 deletions(-) delete mode 100644 Rx.NET/Source/src/System.Reactive/Disposables/DefaultDisposable.cs diff --git a/Rx.NET/Source/src/System.Reactive/Disposables/DefaultDisposable.cs b/Rx.NET/Source/src/System.Reactive/Disposables/DefaultDisposable.cs deleted file mode 100644 index eb3603a8b3..0000000000 --- a/Rx.NET/Source/src/System.Reactive/Disposables/DefaultDisposable.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the Apache 2.0 License. -// See the LICENSE file in the project root for more information. - -namespace System.Reactive.Disposables -{ - /// - /// Represents a disposable that does nothing on disposal. - /// - internal sealed class DefaultDisposable : IDisposable - { - /// - /// Singleton default disposable. - /// - public static readonly DefaultDisposable Instance = new DefaultDisposable(); - - private DefaultDisposable() - { - } - - /// - /// Does nothing. - /// - public void Dispose() - { - // no op - } - } -} diff --git a/Rx.NET/Source/src/System.Reactive/Disposables/Disposable.cs b/Rx.NET/Source/src/System.Reactive/Disposables/Disposable.cs index b01dddebff..0891a7204b 100644 --- a/Rx.NET/Source/src/System.Reactive/Disposables/Disposable.cs +++ b/Rx.NET/Source/src/System.Reactive/Disposables/Disposable.cs @@ -11,10 +11,33 @@ namespace System.Reactive.Disposables /// public static class Disposable { + /// + /// Represents a disposable that does nothing on disposal. + /// + private sealed class EmptyDisposable : IDisposable + { + /// + /// Singleton default disposable. + /// + public static readonly EmptyDisposable Instance = new EmptyDisposable(); + + private EmptyDisposable() + { + } + + /// + /// Does nothing. + /// + public void Dispose() + { + // no op + } + } + /// /// Gets the disposable that does nothing when disposed. /// - public static IDisposable Empty => DefaultDisposable.Instance; + public static IDisposable Empty => EmptyDisposable.Instance; /// /// Creates a disposable object that invokes the specified action when disposed. @@ -50,7 +73,7 @@ internal static IDisposable GetValueOrDefault(ref IDisposable fieldRef) var current = Volatile.Read(ref fieldRef); return current == BooleanDisposable.True - ? DefaultDisposable.Instance + ? EmptyDisposable.Instance : current; } diff --git a/Rx.NET/Source/src/System.Reactive/Disposables/ScheduledDisposable.cs b/Rx.NET/Source/src/System.Reactive/Disposables/ScheduledDisposable.cs index 082cbdce27..c873337c1b 100644 --- a/Rx.NET/Source/src/System.Reactive/Disposables/ScheduledDisposable.cs +++ b/Rx.NET/Source/src/System.Reactive/Disposables/ScheduledDisposable.cs @@ -47,7 +47,7 @@ public IDisposable Disposable if (current == BooleanDisposable.True) { - return DefaultDisposable.Instance; // Don't leak the sentinel value. + return Disposables.Disposable.Empty; // Don't leak the sentinel value. } return current;