瀏覽代碼

Merge pull request #1363 from dotnet/dev/bartde/rx_nullable_part18

Fix #nullable warnings for FromEvent et al.
Bart J.F. De Smet 5 年之前
父節點
當前提交
cd36d6d28b

+ 1 - 1
Rx.NET/Source/src/System.Reactive/EventPattern.cs

@@ -68,7 +68,7 @@ namespace System.Reactive
                 return true;
             }
 
-            return EqualityComparer<TSender>.Default.Equals(Sender, other.Sender) && EqualityComparer<TEventArgs>.Default.Equals(EventArgs, other.EventArgs);
+            return EqualityComparer<TSender?>.Default.Equals(Sender, other.Sender) && EqualityComparer<TEventArgs>.Default.Equals(EventArgs, other.EventArgs);
         }
 
         /// <summary>

+ 1 - 1
Rx.NET/Source/src/System.Reactive/EventPatternSource.cs

@@ -6,7 +6,7 @@ namespace System.Reactive
 {
     internal sealed class EventPatternSource<TEventArgs> : EventPatternSourceBase<object, TEventArgs>, IEventPatternSource<TEventArgs>
     {
-        public EventPatternSource(IObservable<EventPattern<object, TEventArgs>> source, Action<Action<object, TEventArgs>, /*object,*/ EventPattern<object, TEventArgs>> invokeHandler)
+        public EventPatternSource(IObservable<EventPattern<object, TEventArgs>> source, Action<Action<object?, TEventArgs>, /*object,*/ EventPattern<object, TEventArgs>> invokeHandler)
             : base(source, invokeHandler)
         {
         }

+ 5 - 5
Rx.NET/Source/src/System.Reactive/EventPatternSourceBase.cs

@@ -21,10 +21,10 @@ namespace System.Reactive
             private bool _isAdded;
             private readonly Delegate _handler;
             private readonly object _gate = new object();
-            private readonly Action<TSender, TEventArgs> _invoke;
+            private readonly Action<TSender?, TEventArgs> _invoke;
             private readonly EventPatternSourceBase<TSender, TEventArgs> _sourceBase;
 
-            public Observer(EventPatternSourceBase<TSender, TEventArgs> sourceBase, Delegate handler, Action<TSender, TEventArgs> invoke)
+            public Observer(EventPatternSourceBase<TSender, TEventArgs> sourceBase, Delegate handler, Action<TSender?, TEventArgs> invoke)
             {
                 _handler = handler;
                 _invoke = invoke;
@@ -77,7 +77,7 @@ namespace System.Reactive
 
         private readonly IObservable<EventPattern<TSender, TEventArgs>> _source;
         private readonly Dictionary<Delegate, Stack<IDisposable>> _subscriptions;
-        private readonly Action<Action<TSender, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> _invokeHandler;
+        private readonly Action<Action<TSender?, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> _invokeHandler;
 
         /// <summary>
         /// Creates a new event pattern source.
@@ -85,7 +85,7 @@ namespace System.Reactive
         /// <param name="source">Source sequence to expose as an event.</param>
         /// <param name="invokeHandler">Delegate used to invoke the event for each element of the sequence.</param>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="invokeHandler"/> is <c>null</c>.</exception>
-        protected EventPatternSourceBase(IObservable<EventPattern<TSender, TEventArgs>> source, Action<Action<TSender, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> invokeHandler)
+        protected EventPatternSourceBase(IObservable<EventPattern<TSender, TEventArgs>> source, Action<Action<TSender?, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> invokeHandler)
         {
             _source = source ?? throw new ArgumentNullException(nameof(source));
             _invokeHandler = invokeHandler ?? throw new ArgumentNullException(nameof(invokeHandler));
@@ -98,7 +98,7 @@ namespace System.Reactive
         /// <param name="handler">Event handler to add. The same delegate should be passed to the <see cref="Remove(Delegate)"/> operation in order to remove the event handler.</param>
         /// <param name="invoke">Invocation delegate to raise the event in the derived class.</param>
         /// <exception cref="ArgumentNullException"><paramref name="handler"/> or <paramref name="invoke"/> is <c>null</c>.</exception>
-        protected void Add(Delegate handler, Action<TSender, TEventArgs> invoke)
+        protected void Add(Delegate handler, Action<TSender?, TEventArgs> invoke)
         {
             if (handler == null)
             {

+ 1 - 1
Rx.NET/Source/src/System.Reactive/Internal/ScheduledObserver.cs

@@ -73,7 +73,7 @@ namespace System.Reactive
                         Disposable.TrySetSerial(ref _disposable, StableCompositeDisposable.Create
                         (
                             _dispatcherJob,
-                            _dispatcherEventRelease
+                            _dispatcherEventRelease!
                         ));
                     }
                 }

+ 2 - 2
Rx.NET/Source/src/System.Reactive/Linq/Observable/FromEventPattern.cs

@@ -64,7 +64,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
         public sealed class Handler<TSender, TEventArgs, TResult> : EventProducer<Delegate, TResult>
         {
-            private readonly object _target;
+            private readonly object? _target;
             private readonly Type _delegateType;
             private readonly MethodInfo _addMethod;
             private readonly MethodInfo _removeMethod;
@@ -73,7 +73,7 @@ namespace System.Reactive.Linq.ObservableImpl
             private readonly bool _isWinRT;
 #endif
 
-            public Handler(object target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func<TSender, TEventArgs, TResult> getResult, bool isWinRT, IScheduler scheduler)
+            public Handler(object? target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func<TSender, TEventArgs, TResult> getResult, bool isWinRT, IScheduler scheduler)
                 : base(scheduler)
             {
 #if HAS_WINRT

+ 8 - 8
Rx.NET/Source/src/System.Reactive/Linq/Observable/Generate.cs

@@ -96,7 +96,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
                         if (hasResult)
                         {
-                            ForwardOnNext(result);
+                            ForwardOnNext(result!);
                         }
                         else
                         {
@@ -141,7 +141,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
                     if (hasResult)
                     {
-                        ForwardOnNext(result);
+                        ForwardOnNext(result!);
                         recurse(this);
                     }
                     else
@@ -195,9 +195,9 @@ namespace System.Reactive.Linq.ObservableImpl
 
                 private bool _first;
                 private bool _hasResult;
-                private TResult _result;
+                private TResult? _result;
 
-                private IDisposable _timerDisposable;
+                private IDisposable? _timerDisposable;
 
                 public void Run(IScheduler outerScheduler, TState initialState)
                 {
@@ -216,7 +216,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 {
                     if (_hasResult)
                     {
-                        ForwardOnNext(_result);
+                        ForwardOnNext(_result!);
                     }
 
                     var time = default(DateTimeOffset);
@@ -304,9 +304,9 @@ namespace System.Reactive.Linq.ObservableImpl
 
                 private bool _first;
                 private bool _hasResult;
-                private TResult _result;
+                private TResult? _result;
 
-                private IDisposable _timerDisposable;
+                private IDisposable? _timerDisposable;
 
                 public void Run(IScheduler outerScheduler, TState initialState)
                 {
@@ -325,7 +325,7 @@ namespace System.Reactive.Linq.ObservableImpl
                 {
                     if (_hasResult)
                     {
-                        ForwardOnNext(_result);
+                        ForwardOnNext(_result!);
                     }
 
                     var time = default(TimeSpan);

+ 1 - 1
Rx.NET/Source/src/System.Reactive/Linq/QueryLanguage.Conversions.cs

@@ -70,7 +70,7 @@ namespace System.Reactive.Linq
         {
             return new EventPatternSource<TEventArgs>(
                 source,
-                (h, evt) => h(evt.Sender, evt.EventArgs)
+                static (h, evt) => h(evt.Sender, evt.EventArgs)
             );
         }
 

+ 5 - 12
Rx.NET/Source/src/System.Reactive/Linq/QueryLanguage.Events.cs

@@ -246,7 +246,7 @@ namespace System.Reactive.Linq
 
         private static IObservable<EventPattern<TSender, TEventArgs>> FromEventPattern_<TSender, TEventArgs>(Type type, string eventName, IScheduler scheduler)
         {
-            return FromEventPattern_<TSender, TEventArgs, EventPattern<TSender, TEventArgs>>(type, null, eventName, (sender, args) => new EventPattern<TSender, TEventArgs>(sender, args), scheduler);
+            return FromEventPattern_<TSender, TEventArgs, EventPattern<TSender, TEventArgs>>(type, null, eventName, static (sender, args) => new EventPattern<TSender, TEventArgs>(sender, args), scheduler);
         }
 
         #endregion
@@ -259,14 +259,7 @@ namespace System.Reactive.Linq
         {
             ReflectionUtils.GetEventMethods<TSender, TEventArgs>(targetType, target, eventName, out var addMethod, out var removeMethod, out var delegateType, out var isWinRT);
 
-#if HAS_WINRT
-            if (isWinRT)
-            {
-                return new FromEventPattern.Handler<TSender, TEventArgs, TResult>(target, delegateType, addMethod, removeMethod, getResult, true, scheduler);
-            }
-#endif
-
-            return new FromEventPattern.Handler<TSender, TEventArgs, TResult>(target, delegateType, addMethod, removeMethod, getResult, false, scheduler);
+            return new FromEventPattern.Handler<TSender, TEventArgs, TResult>(target, delegateType, addMethod, removeMethod, getResult, isWinRT, scheduler);
         }
 
         #endregion
@@ -329,7 +322,7 @@ namespace System.Reactive.Linq
 
         private static IObservable<TEventArgs> FromEvent_<TEventArgs>(Action<Action<TEventArgs>> addHandler, Action<Action<TEventArgs>> removeHandler, IScheduler scheduler)
         {
-            return new FromEvent<Action<TEventArgs>, TEventArgs>(h => h, addHandler, removeHandler, scheduler);
+            return new FromEvent<Action<TEventArgs>, TEventArgs>(static h => h, addHandler, removeHandler, scheduler);
         }
 
         #endregion
@@ -348,7 +341,7 @@ namespace System.Reactive.Linq
 
         private static IObservable<Unit> FromEvent_(Action<Action> addHandler, Action<Action> removeHandler, IScheduler scheduler)
         {
-            return new FromEvent<Action, Unit>(h => new Action(() => h(new Unit())), addHandler, removeHandler, scheduler);
+            return new FromEvent<Action, Unit>(static h => new Action(() => h(new Unit())), addHandler, removeHandler, scheduler);
         }
 
         #endregion
@@ -363,7 +356,7 @@ namespace System.Reactive.Linq
 
             if (context != null)
             {
-                return new SynchronizationContextScheduler(context, false);
+                return new SynchronizationContextScheduler(context, alwaysPost: false);
             }
 
             return SchedulerDefaults.ConstantTimeOperations;

+ 2 - 2
Rx.NET/Source/tests/Tests.System.Reactive.ApiApprovals/Api/ApiApprovalTests.Core.verified.cs

@@ -41,8 +41,8 @@ namespace System.Reactive
     }
     public abstract class EventPatternSourceBase<TSender, TEventArgs>
     {
-        protected EventPatternSourceBase(System.IObservable<System.Reactive.EventPattern<TSender, TEventArgs>> source, System.Action<System.Action<TSender, TEventArgs>, System.Reactive.EventPattern<TSender, TEventArgs>> invokeHandler) { }
-        protected void Add(System.Delegate handler, System.Action<TSender, TEventArgs> invoke) { }
+        protected EventPatternSourceBase(System.IObservable<System.Reactive.EventPattern<TSender, TEventArgs>> source, System.Action<System.Action<TSender?, TEventArgs>, System.Reactive.EventPattern<TSender, TEventArgs>> invokeHandler) { }
+        protected void Add(System.Delegate handler, System.Action<TSender?, TEventArgs> invoke) { }
         protected void Remove(System.Delegate handler) { }
     }
     public class EventPattern<TEventArgs> : System.Reactive.EventPattern<object, TEventArgs>