Skip to content

Commit cd36d6d

Browse files
authored
Merge pull request #1363 from dotnet/dev/bartde/rx_nullable_part18
Fix #nullable warnings for FromEvent et al.
2 parents 0d475da + 6608005 commit cd36d6d

File tree

9 files changed

+26
-33
lines changed

9 files changed

+26
-33
lines changed

Rx.NET/Source/src/System.Reactive/EventPattern.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public bool Equals(EventPattern<TSender, TEventArgs>? other)
6868
return true;
6969
}
7070

71-
return EqualityComparer<TSender>.Default.Equals(Sender, other.Sender) && EqualityComparer<TEventArgs>.Default.Equals(EventArgs, other.EventArgs);
71+
return EqualityComparer<TSender?>.Default.Equals(Sender, other.Sender) && EqualityComparer<TEventArgs>.Default.Equals(EventArgs, other.EventArgs);
7272
}
7373

7474
/// <summary>

Rx.NET/Source/src/System.Reactive/EventPatternSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace System.Reactive
66
{
77
internal sealed class EventPatternSource<TEventArgs> : EventPatternSourceBase<object, TEventArgs>, IEventPatternSource<TEventArgs>
88
{
9-
public EventPatternSource(IObservable<EventPattern<object, TEventArgs>> source, Action<Action<object, TEventArgs>, /*object,*/ EventPattern<object, TEventArgs>> invokeHandler)
9+
public EventPatternSource(IObservable<EventPattern<object, TEventArgs>> source, Action<Action<object?, TEventArgs>, /*object,*/ EventPattern<object, TEventArgs>> invokeHandler)
1010
: base(source, invokeHandler)
1111
{
1212
}

Rx.NET/Source/src/System.Reactive/EventPatternSourceBase.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ private sealed class Observer : ObserverBase<EventPattern<TSender, TEventArgs>>,
2121
private bool _isAdded;
2222
private readonly Delegate _handler;
2323
private readonly object _gate = new object();
24-
private readonly Action<TSender, TEventArgs> _invoke;
24+
private readonly Action<TSender?, TEventArgs> _invoke;
2525
private readonly EventPatternSourceBase<TSender, TEventArgs> _sourceBase;
2626

27-
public Observer(EventPatternSourceBase<TSender, TEventArgs> sourceBase, Delegate handler, Action<TSender, TEventArgs> invoke)
27+
public Observer(EventPatternSourceBase<TSender, TEventArgs> sourceBase, Delegate handler, Action<TSender?, TEventArgs> invoke)
2828
{
2929
_handler = handler;
3030
_invoke = invoke;
@@ -77,15 +77,15 @@ public void SetResource(IDisposable resource)
7777

7878
private readonly IObservable<EventPattern<TSender, TEventArgs>> _source;
7979
private readonly Dictionary<Delegate, Stack<IDisposable>> _subscriptions;
80-
private readonly Action<Action<TSender, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> _invokeHandler;
80+
private readonly Action<Action<TSender?, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> _invokeHandler;
8181

8282
/// <summary>
8383
/// Creates a new event pattern source.
8484
/// </summary>
8585
/// <param name="source">Source sequence to expose as an event.</param>
8686
/// <param name="invokeHandler">Delegate used to invoke the event for each element of the sequence.</param>
8787
/// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="invokeHandler"/> is <c>null</c>.</exception>
88-
protected EventPatternSourceBase(IObservable<EventPattern<TSender, TEventArgs>> source, Action<Action<TSender, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> invokeHandler)
88+
protected EventPatternSourceBase(IObservable<EventPattern<TSender, TEventArgs>> source, Action<Action<TSender?, TEventArgs>, /*object,*/ EventPattern<TSender, TEventArgs>> invokeHandler)
8989
{
9090
_source = source ?? throw new ArgumentNullException(nameof(source));
9191
_invokeHandler = invokeHandler ?? throw new ArgumentNullException(nameof(invokeHandler));
@@ -98,7 +98,7 @@ protected EventPatternSourceBase(IObservable<EventPattern<TSender, TEventArgs>>
9898
/// <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>
9999
/// <param name="invoke">Invocation delegate to raise the event in the derived class.</param>
100100
/// <exception cref="ArgumentNullException"><paramref name="handler"/> or <paramref name="invoke"/> is <c>null</c>.</exception>
101-
protected void Add(Delegate handler, Action<TSender, TEventArgs> invoke)
101+
protected void Add(Delegate handler, Action<TSender?, TEventArgs> invoke)
102102
{
103103
if (handler == null)
104104
{

Rx.NET/Source/src/System.Reactive/Internal/ScheduledObserver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ private void EnsureDispatcher()
7373
Disposable.TrySetSerial(ref _disposable, StableCompositeDisposable.Create
7474
(
7575
_dispatcherJob,
76-
_dispatcherEventRelease
76+
_dispatcherEventRelease!
7777
));
7878
}
7979
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ protected override TDelegate GetHandler(Action<EventPattern<TSender, TEventArgs>
6464

6565
public sealed class Handler<TSender, TEventArgs, TResult> : EventProducer<Delegate, TResult>
6666
{
67-
private readonly object _target;
67+
private readonly object? _target;
6868
private readonly Type _delegateType;
6969
private readonly MethodInfo _addMethod;
7070
private readonly MethodInfo _removeMethod;
@@ -73,7 +73,7 @@ public sealed class Handler<TSender, TEventArgs, TResult> : EventProducer<Delega
7373
private readonly bool _isWinRT;
7474
#endif
7575

76-
public Handler(object target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func<TSender, TEventArgs, TResult> getResult, bool isWinRT, IScheduler scheduler)
76+
public Handler(object? target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func<TSender, TEventArgs, TResult> getResult, bool isWinRT, IScheduler scheduler)
7777
: base(scheduler)
7878
{
7979
#if HAS_WINRT

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private void Loop(ICancelable cancel)
9696

9797
if (hasResult)
9898
{
99-
ForwardOnNext(result);
99+
ForwardOnNext(result!);
100100
}
101101
else
102102
{
@@ -141,7 +141,7 @@ private void LoopRec(Action<_> recurse)
141141

142142
if (hasResult)
143143
{
144-
ForwardOnNext(result);
144+
ForwardOnNext(result!);
145145
recurse(this);
146146
}
147147
else
@@ -195,9 +195,9 @@ public _(Absolute parent, IObserver<TResult> observer)
195195

196196
private bool _first;
197197
private bool _hasResult;
198-
private TResult _result;
198+
private TResult? _result;
199199

200-
private IDisposable _timerDisposable;
200+
private IDisposable? _timerDisposable;
201201

202202
public void Run(IScheduler outerScheduler, TState initialState)
203203
{
@@ -216,7 +216,7 @@ private IDisposable InvokeRec(IScheduler self, TState state)
216216
{
217217
if (_hasResult)
218218
{
219-
ForwardOnNext(_result);
219+
ForwardOnNext(_result!);
220220
}
221221

222222
var time = default(DateTimeOffset);
@@ -304,9 +304,9 @@ public _(Relative parent, IObserver<TResult> observer)
304304

305305
private bool _first;
306306
private bool _hasResult;
307-
private TResult _result;
307+
private TResult? _result;
308308

309-
private IDisposable _timerDisposable;
309+
private IDisposable? _timerDisposable;
310310

311311
public void Run(IScheduler outerScheduler, TState initialState)
312312
{
@@ -325,7 +325,7 @@ private IDisposable InvokeRec(IScheduler self, TState state)
325325
{
326326
if (_hasResult)
327327
{
328-
ForwardOnNext(_result);
328+
ForwardOnNext(_result!);
329329
}
330330

331331
var time = default(TimeSpan);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public virtual IEventPatternSource<TEventArgs> ToEventPattern<TEventArgs>(IObser
7070
{
7171
return new EventPatternSource<TEventArgs>(
7272
source,
73-
(h, evt) => h(evt.Sender, evt.EventArgs)
73+
static (h, evt) => h(evt.Sender, evt.EventArgs)
7474
);
7575
}
7676

Rx.NET/Source/src/System.Reactive/Linq/QueryLanguage.Events.cs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ public virtual IObservable<EventPattern<TSender, TEventArgs>> FromEventPattern<T
246246

247247
private static IObservable<EventPattern<TSender, TEventArgs>> FromEventPattern_<TSender, TEventArgs>(Type type, string eventName, IScheduler scheduler)
248248
{
249-
return FromEventPattern_<TSender, TEventArgs, EventPattern<TSender, TEventArgs>>(type, null, eventName, (sender, args) => new EventPattern<TSender, TEventArgs>(sender, args), scheduler);
249+
return FromEventPattern_<TSender, TEventArgs, EventPattern<TSender, TEventArgs>>(type, null, eventName, static (sender, args) => new EventPattern<TSender, TEventArgs>(sender, args), scheduler);
250250
}
251251

252252
#endregion
@@ -259,14 +259,7 @@ private static IObservable<TResult> FromEventPattern_<TSender, TEventArgs, TResu
259259
{
260260
ReflectionUtils.GetEventMethods<TSender, TEventArgs>(targetType, target, eventName, out var addMethod, out var removeMethod, out var delegateType, out var isWinRT);
261261

262-
#if HAS_WINRT
263-
if (isWinRT)
264-
{
265-
return new FromEventPattern.Handler<TSender, TEventArgs, TResult>(target, delegateType, addMethod, removeMethod, getResult, true, scheduler);
266-
}
267-
#endif
268-
269-
return new FromEventPattern.Handler<TSender, TEventArgs, TResult>(target, delegateType, addMethod, removeMethod, getResult, false, scheduler);
262+
return new FromEventPattern.Handler<TSender, TEventArgs, TResult>(target, delegateType, addMethod, removeMethod, getResult, isWinRT, scheduler);
270263
}
271264

272265
#endregion
@@ -329,7 +322,7 @@ public virtual IObservable<TEventArgs> FromEvent<TEventArgs>(Action<Action<TEven
329322

330323
private static IObservable<TEventArgs> FromEvent_<TEventArgs>(Action<Action<TEventArgs>> addHandler, Action<Action<TEventArgs>> removeHandler, IScheduler scheduler)
331324
{
332-
return new FromEvent<Action<TEventArgs>, TEventArgs>(h => h, addHandler, removeHandler, scheduler);
325+
return new FromEvent<Action<TEventArgs>, TEventArgs>(static h => h, addHandler, removeHandler, scheduler);
333326
}
334327

335328
#endregion
@@ -348,7 +341,7 @@ public virtual IObservable<Unit> FromEvent(Action<Action> addHandler, Action<Act
348341

349342
private static IObservable<Unit> FromEvent_(Action<Action> addHandler, Action<Action> removeHandler, IScheduler scheduler)
350343
{
351-
return new FromEvent<Action, Unit>(h => new Action(() => h(new Unit())), addHandler, removeHandler, scheduler);
344+
return new FromEvent<Action, Unit>(static h => new Action(() => h(new Unit())), addHandler, removeHandler, scheduler);
352345
}
353346

354347
#endregion
@@ -363,7 +356,7 @@ private static IScheduler GetSchedulerForCurrentContext()
363356

364357
if (context != null)
365358
{
366-
return new SynchronizationContextScheduler(context, false);
359+
return new SynchronizationContextScheduler(context, alwaysPost: false);
367360
}
368361

369362
return SchedulerDefaults.ConstantTimeOperations;

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ protected override void OnNextCore(T value) { }
4141
}
4242
public abstract class EventPatternSourceBase<TSender, TEventArgs>
4343
{
44-
protected EventPatternSourceBase(System.IObservable<System.Reactive.EventPattern<TSender, TEventArgs>> source, System.Action<System.Action<TSender, TEventArgs>, System.Reactive.EventPattern<TSender, TEventArgs>> invokeHandler) { }
45-
protected void Add(System.Delegate handler, System.Action<TSender, TEventArgs> invoke) { }
44+
protected EventPatternSourceBase(System.IObservable<System.Reactive.EventPattern<TSender, TEventArgs>> source, System.Action<System.Action<TSender?, TEventArgs>, System.Reactive.EventPattern<TSender, TEventArgs>> invokeHandler) { }
45+
protected void Add(System.Delegate handler, System.Action<TSender?, TEventArgs> invoke) { }
4646
protected void Remove(System.Delegate handler) { }
4747
}
4848
public class EventPattern<TEventArgs> : System.Reactive.EventPattern<object, TEventArgs>

0 commit comments

Comments
 (0)