diff --git a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.csproj b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.csproj index 2755e1d1cf69..7b9e941610fe 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 b3b72bec86e3..ff431bda1438 100644 --- a/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs +++ b/src/ObjectPool/ref/Microsoft.Extensions.ObjectPool.netcoreapp.cs @@ -22,7 +22,7 @@ public DefaultPooledObjectPolicy() { } 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 @@ public override void Return(T obj) { } } 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 @@ protected 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 b3b72bec86e3..ff431bda1438 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 @@ public DefaultPooledObjectPolicy() { } 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 @@ public override void Return(T obj) { } } 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 @@ protected 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 f5627b7898bb..be514c0e633f 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 @@ public class DefaultObjectPool : ObjectPool where T : class 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 @@ public override void Return(T obj) [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 17ada443e508..e0e1a5cef563 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 @@ public void Dispose() } } - 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 458131e8247f..998d146ada8a 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 243d44d2daca..4bae02babc93 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 @@ public override T Get() 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 b2cc5954ce25..1e5d45e9e0f8 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 0a82ed6f5392..306629147c60 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 @@ public abstract class ObjectPool where T : class 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 855b76496778..c1dbd72d0c1d 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 cc308fa8a009..bef91a57ebc7 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 dbab7a530133..c106ef6550fd 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]