Skip to content

Commit

Permalink
Move ArrayBuilder.GetInstance helpers to Microsoft.CodeAnalysis.Poole…
Browse files Browse the repository at this point in the history
…dObjects package
  • Loading branch information
tmat committed Jan 30, 2025
1 parent 250065a commit fd5e475
Show file tree
Hide file tree
Showing 10 changed files with 43 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
M:System.IO.Path.GetTempPath(); Cannot be used safely in APIs or compiler server as underlying environment variables can change during build.
P:System.Environment.CurrentDirectory; Cannot be used safely in APIs or compiler server as underlying environment variables can change during build.
P:System.Environment.CurrentDirectory; Cannot be used safely in APIs or compiler server as underlying environment variables can change during build.
M:Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.GetInstance(Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder{`0}@)"; Explicitly free ArrayBuilder instance instead. Implicit try-finally blocks might negatively affect performance.
M:Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.GetInstance(System.Int32,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder{`0}@)"; Explicitly free ArrayBuilder instance instead. Implicit try-finally blocks might negatively affect performance.
M:Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder`1.GetInstance(System.Int32,`0,Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder{`0}@)"; Explicitly free ArrayBuilder instance instead. Implicit try-finally blocks might negatively affect performance.
21 changes: 20 additions & 1 deletion src/Dependencies/PooledObjects/ArrayBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace Microsoft.CodeAnalysis.PooledObjects
{
[DebuggerDisplay("Count = {Count,nq}")]
[DebuggerTypeProxy(typeof(ArrayBuilder<>.DebuggerProxy))]
internal sealed partial class ArrayBuilder<T> : IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>
internal sealed partial class ArrayBuilder<T> : IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IPooled
{
/// <summary>
/// See <see cref="Free()"/> for an explanation of this constant value.
Expand Down Expand Up @@ -720,5 +720,24 @@ public ImmutableArray<S> SelectDistinct<S>(Func<T, S> selector)
set.Free();
return result.ToImmutableAndFree();
}

public static PooledDisposer<ArrayBuilder<T>> GetInstance(out ArrayBuilder<T> instance)
{
instance = GetInstance();
return new PooledDisposer<ArrayBuilder<T>>(instance);
}

public static PooledDisposer<ArrayBuilder<T>> GetInstance(int capacity, out ArrayBuilder<T> instance)
{
instance = GetInstance(capacity);
return new PooledDisposer<ArrayBuilder<T>>(instance);
}

public static PooledDisposer<ArrayBuilder<T>> GetInstance(int capacity, T fillWithValue, out ArrayBuilder<T> instance)
{
instance = GetInstance(capacity, fillWithValue);
return new PooledDisposer<ArrayBuilder<T>>(instance);
}
}

}
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)ArrayBuilder.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ArrayBuilder.Enumerator.cs" />
<Compile Include="$(MSBuildThisFileDirectory)IPooled.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPool`1.cs" />
<Compile Include="$(MSBuildThisFileDirectory)PooledDelegates.cs" />
<Compile Include="$(MSBuildThisFileDirectory)PooledDictionary.cs" />
<Compile Include="$(MSBuildThisFileDirectory)PooledDisposer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)PooledHashSet.cs" />
<Compile Include="$(MSBuildThisFileDirectory)PooledStringBuilder.cs" />
</ItemGroup>
Expand Down
14 changes: 14 additions & 0 deletions src/Dependencies/PooledObjects/PooledDisposer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System;

namespace Microsoft.CodeAnalysis.PooledObjects;

internal readonly partial struct PooledDisposer<TPoolable>(TPoolable instance) : IDisposable
where TPoolable : class, IPooled
{
void IDisposable.Dispose()
=> instance?.Free();
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@
<Compile Include="..\..\Compilers\Core\Portable\FileSystem\PathUtilities.cs" Link="Utilities\PathUtilities.cs" />
<Compile Include="..\..\Compilers\Core\Portable\FileSystem\PathKind.cs" Link="Utilities\PathKind.cs" />
<Compile Include="..\..\Compilers\Core\Portable\Collections\ArrayBuilderExtensions.cs" Link="Utilities\ArrayBuilderExtensions.cs" />
<Compile Include="..\..\Dependencies\PooledObjects\PooledDisposer.cs" Link="Utilities\PooledDisposer.cs" />
<Compile Include="..\..\Dependencies\PooledObjects\IPooled.cs" Link="Utilities\IPooled.cs" />
<Compile Include="..\..\Dependencies\PooledObjects\ArrayBuilder.cs" Link="Utilities\ArrayBuilder.cs" />
<Compile Include="..\..\Dependencies\PooledObjects\ArrayBuilder.Enumerator.cs" Link="Utilities\ArrayBuilder.Enumerator.cs" />
<Compile Include="..\..\Dependencies\PooledObjects\ObjectPool`1.cs" Link="Utilities\ObjectPool`1.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@
<Compile Include="..\..\..\Compilers\Core\Portable\CaseInsensitiveComparison.cs" Link="Compiler\CaseInsensitiveComparison.cs" />
<Compile Include="..\..\..\Compilers\Shared\NamedPipeUtil.cs" Link="SharedUtilities\NamedPipeUtil.cs" />
<Compile Include="..\..\..\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ImmutableArrayExtensions.cs" Link="SharedUtilities\ImmutableArrayExtensions.cs" />
<Compile Include="..\..\..\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\ObjectPools\IPooled.cs" Link="SharedUtilities\IPooled.cs" />
<Compile Include="..\..\..\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\ObjectPools\Extensions.cs" Link="SharedUtilities\Extensions.cs" />
<Compile Include="..\..\..\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\ObjectPools\PooledDisposer.cs" Link="SharedUtilities\PooledDisposer.cs" />
<Compile Include="..\..\..\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\ObjectPools\PooledHashSet.cs" Link="SharedUtilities\PooledHashSet.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -609,9 +609,7 @@
<Compile Include="$(MSBuildThisFileDirectory)Extensions\SymbolUsageInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\TypeOrNamespaceUsageInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Extensions\ValueUsageInfo.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPools\ArrayBuilder.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPools\Extensions.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPools\IPooled.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPools\PooledDisposer.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPools\PooledHashSet.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ObjectPools\PooledObject.cs" />
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@
namespace Microsoft.CodeAnalysis.PooledObjects;

[NonCopyable]
internal readonly struct PooledDisposer<TPoolable>(TPoolable instance) : IDisposable
partial struct PooledDisposer<TPoolable>

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI (Correctness Correctness_Analyzers)

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI (Correctness Correctness_Analyzers)

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI (Correctness Correctness_Analyzers)

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI (Correctness Correctness_Analyzers)

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)

Check failure on line 11 in src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs

View check run for this annotation

Azure Pipelines / roslyn-CI

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs#L11

src/Workspaces/SharedUtilitiesAndExtensions/Compiler/Core/ObjectPools/PooledDisposer.cs(11,16): error IDE0040: (NETCORE_ENGINEERING_TELEMETRY=Build) Accessibility modifiers required (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/style-rules/ide0040)
where TPoolable : class, IPooled
{
void IDisposable.Dispose()
=> instance?.Free();
}

0 comments on commit fd5e475

Please sign in to comment.