From b6bde6cbc946ff814b103b6d9158e655ff4c8fe0 Mon Sep 17 00:00:00 2001 From: Pranav K Date: Tue, 16 Jun 2020 12:43:24 -0700 Subject: [PATCH] Annotate ObjectPool with nullable (#22823) * Annotate ObjectPool with nullable * fixup --- .../ref/Microsoft.Extensions.ObjectPool.csproj | 1 + .../ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs | 6 +++--- .../Microsoft.Extensions.ObjectPool.netstandard2.0.cs | 6 +++--- src/ObjectPool/src/DefaultObjectPool.cs | 9 +++++---- src/ObjectPool/src/DisposableObjectPool.cs | 5 ++--- src/ObjectPool/src/IPooledObjectPolicy.cs | 2 +- src/ObjectPool/src/LeakTrackingObjectPool.cs | 5 ++--- .../src/Microsoft.Extensions.ObjectPool.csproj | 1 + src/ObjectPool/src/ObjectPool.cs | 6 ++++-- src/ObjectPool/src/PooledObjectPolicy.cs | 2 +- .../test/Microsoft.Extensions.ObjectPool.Tests.csproj | 1 + src/ObjectPool/test/ThreadingTest.cs | 6 +++--- 12 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.csproj b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.csproj index 2755e1d1cf..7b9e941610 100644 --- a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.csproj +++ b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.csproj @@ -3,6 +3,7 @@ netstandard2.0;$(DefaultNetCoreTargetFramework) $(DefaultNetCoreTargetFramework) + annotations diff --git a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs index b3b72bec86..ff431bda14 100644 --- a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs +++ b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs @@ -22,7 +22,7 @@ namespace Microsoft.Extensions.ObjectPool public override T Create() { throw null; } public override bool Return(T obj) { throw null; } } - public partial interface IPooledObjectPolicy + public partial interface IPooledObjectPolicy where T : notnull { T Create(); bool Return(T obj); @@ -40,7 +40,7 @@ namespace Microsoft.Extensions.ObjectPool } public static partial class ObjectPool { - public static Microsoft.Extensions.ObjectPool.ObjectPool Create(Microsoft.Extensions.ObjectPool.IPooledObjectPolicy policy = null) where T : class, new() { throw null; } + public static Microsoft.Extensions.ObjectPool.ObjectPool Create(Microsoft.Extensions.ObjectPool.IPooledObjectPolicy? policy = null) where T : class, new() { throw null; } } public abstract partial class ObjectPoolProvider { @@ -59,7 +59,7 @@ namespace Microsoft.Extensions.ObjectPool public abstract T Get(); public abstract void Return(T obj); } - public abstract partial class PooledObjectPolicy : Microsoft.Extensions.ObjectPool.IPooledObjectPolicy + public abstract partial class PooledObjectPolicy : Microsoft.Extensions.ObjectPool.IPooledObjectPolicy where T : notnull { protected PooledObjectPolicy() { } public abstract T Create(); diff --git a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netstandard2.0.cs b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netstandard2.0.cs index b3b72bec86..ff431bda14 100644 --- a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netstandard2.0.cs +++ b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netstandard2.0.cs @@ -22,7 +22,7 @@ namespace Microsoft.Extensions.ObjectPool public override T Create() { throw null; } public override bool Return(T obj) { throw null; } } - public partial interface IPooledObjectPolicy + public partial interface IPooledObjectPolicy where T : notnull { T Create(); bool Return(T obj); @@ -40,7 +40,7 @@ namespace Microsoft.Extensions.ObjectPool } public static partial class ObjectPool { - public static Microsoft.Extensions.ObjectPool.ObjectPool Create(Microsoft.Extensions.ObjectPool.IPooledObjectPolicy policy = null) where T : class, new() { throw null; } + public static Microsoft.Extensions.ObjectPool.ObjectPool Create(Microsoft.Extensions.ObjectPool.IPooledObjectPolicy? policy = null) where T : class, new() { throw null; } } public abstract partial class ObjectPoolProvider { @@ -59,7 +59,7 @@ namespace Microsoft.Extensions.ObjectPool public abstract T Get(); public abstract void Return(T obj); } - public abstract partial class PooledObjectPolicy : Microsoft.Extensions.ObjectPool.IPooledObjectPolicy + public abstract partial class PooledObjectPolicy : Microsoft.Extensions.ObjectPool.IPooledObjectPolicy where T : notnull { protected PooledObjectPolicy() { } public abstract T Create(); diff --git a/src/ObjectPool/src/DefaultObjectPool.cs b/src/ObjectPool/src/DefaultObjectPool.cs index f5627b7898..be514c0e63 100644 --- a/src/ObjectPool/src/DefaultObjectPool.cs +++ b/src/ObjectPool/src/DefaultObjectPool.cs @@ -1,8 +1,9 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; using System.Threading; @@ -18,10 +19,10 @@ namespace Microsoft.Extensions.ObjectPool private protected readonly ObjectWrapper[] _items; private protected readonly IPooledObjectPolicy _policy; private protected readonly bool _isDefaultPolicy; - private protected T _firstItem; + private protected T? _firstItem; // This class was introduced in 2.1 to avoid the interface call where possible - private protected readonly PooledObjectPolicy _fastPolicy; + private protected readonly PooledObjectPolicy? _fastPolicy; /// /// Creates an instance of . @@ -97,7 +98,7 @@ namespace Microsoft.Extensions.ObjectPool [DebuggerDisplay("{Element}")] private protected struct ObjectWrapper { - public T Element; + public T? Element; } } } diff --git a/src/ObjectPool/src/DisposableObjectPool.cs b/src/ObjectPool/src/DisposableObjectPool.cs index 17ada443e5..e0e1a5cef5 100644 --- a/src/ObjectPool/src/DisposableObjectPool.cs +++ b/src/ObjectPool/src/DisposableObjectPool.cs @@ -1,8 +1,7 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Runtime.CompilerServices; using System.Threading; namespace Microsoft.Extensions.ObjectPool @@ -82,7 +81,7 @@ namespace Microsoft.Extensions.ObjectPool } } - private void DisposeItem(T item) + private void DisposeItem(T? item) { if (item is IDisposable disposable) { diff --git a/src/ObjectPool/src/IPooledObjectPolicy.cs b/src/ObjectPool/src/IPooledObjectPolicy.cs index 458131e824..998d146ada 100644 --- a/src/ObjectPool/src/IPooledObjectPolicy.cs +++ b/src/ObjectPool/src/IPooledObjectPolicy.cs @@ -7,7 +7,7 @@ namespace Microsoft.Extensions.ObjectPool /// Represents a policy for managing pooled objects. /// /// The type of object which is being pooled. - public interface IPooledObjectPolicy + public interface IPooledObjectPolicy where T : notnull { /// /// Create a . diff --git a/src/ObjectPool/src/LeakTrackingObjectPool.cs b/src/ObjectPool/src/LeakTrackingObjectPool.cs index 243d44d2da..4bae02babc 100644 --- a/src/ObjectPool/src/LeakTrackingObjectPool.cs +++ b/src/ObjectPool/src/LeakTrackingObjectPool.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; @@ -31,8 +31,7 @@ namespace Microsoft.Extensions.ObjectPool public override void Return(T obj) { - Tracker tracker; - if (_trackers.TryGetValue(obj, out tracker)) + if (_trackers.TryGetValue(obj, out var tracker)) { _trackers.Remove(obj); tracker.Dispose(); diff --git a/src/ObjectPool/src/Microsoft.Extensions.ObjectPool.csproj b/src/ObjectPool/src/Microsoft.Extensions.ObjectPool.csproj index b2cc5954ce..1e5d45e9e0 100644 --- a/src/ObjectPool/src/Microsoft.Extensions.ObjectPool.csproj +++ b/src/ObjectPool/src/Microsoft.Extensions.ObjectPool.csproj @@ -8,6 +8,7 @@ pooling true true + enable diff --git a/src/ObjectPool/src/ObjectPool.cs b/src/ObjectPool/src/ObjectPool.cs index 0a82ed6f53..306629147c 100644 --- a/src/ObjectPool/src/ObjectPool.cs +++ b/src/ObjectPool/src/ObjectPool.cs @@ -1,6 +1,8 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Diagnostics.CodeAnalysis; + namespace Microsoft.Extensions.ObjectPool { /// @@ -28,7 +30,7 @@ namespace Microsoft.Extensions.ObjectPool public static class ObjectPool { /// - public static ObjectPool Create(IPooledObjectPolicy policy = null) where T : class, new() + public static ObjectPool Create(IPooledObjectPolicy? policy = null) where T : class, new() { var provider = new DefaultObjectPoolProvider(); return provider.Create(policy ?? new DefaultPooledObjectPolicy()); diff --git a/src/ObjectPool/src/PooledObjectPolicy.cs b/src/ObjectPool/src/PooledObjectPolicy.cs index 855b764967..c1dbd72d0c 100644 --- a/src/ObjectPool/src/PooledObjectPolicy.cs +++ b/src/ObjectPool/src/PooledObjectPolicy.cs @@ -3,7 +3,7 @@ namespace Microsoft.Extensions.ObjectPool { - public abstract class PooledObjectPolicy : IPooledObjectPolicy + public abstract class PooledObjectPolicy : IPooledObjectPolicy where T : notnull { public abstract T Create(); diff --git a/src/ObjectPool/test/Microsoft.Extensions.ObjectPool.Tests.csproj b/src/ObjectPool/test/Microsoft.Extensions.ObjectPool.Tests.csproj index cc308fa8a0..bef91a57eb 100644 --- a/src/ObjectPool/test/Microsoft.Extensions.ObjectPool.Tests.csproj +++ b/src/ObjectPool/test/Microsoft.Extensions.ObjectPool.Tests.csproj @@ -2,6 +2,7 @@ $(DefaultNetCoreTargetFramework);net472 + enable diff --git a/src/ObjectPool/test/ThreadingTest.cs b/src/ObjectPool/test/ThreadingTest.cs index dbab7a5301..c106ef6550 100644 --- a/src/ObjectPool/test/ThreadingTest.cs +++ b/src/ObjectPool/test/ThreadingTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Threading; @@ -8,8 +8,8 @@ namespace Microsoft.Extensions.ObjectPool { public class ThreadingTest { - private CancellationTokenSource _cts; - private DefaultObjectPool _pool; + private CancellationTokenSource _cts = default!; + private DefaultObjectPool _pool = default!; private bool _foundError; [Fact]