diff --git a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs index 8e5e0b19cd..44aa159335 100644 --- a/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs +++ b/src/NetAnalyzers/Core/Microsoft.CodeQuality.Analyzers/ApiDesignGuidelines/TypesThatOwnDisposableFieldsShouldBeDisposable.cs @@ -1,5 +1,6 @@ // Copyright (c) Microsoft. All Rights Reserved. Licensed under the MIT license. See License.txt in the project root for license information. +using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; @@ -71,13 +72,13 @@ private static void AnalyzeSymbolStart(SymbolStartAnalysisContext ctx, DisposeAn return; } - var disposableFieldNamesBuilder = ArrayBuilder.GetInstance(); + var disposableFieldNamesBuilder = new ConcurrentBag(); ctx.RegisterOperationAction(context => AnalyzeOperation(context, namedType, disposableFields, disposableFieldNamesBuilder), OperationKind.SimpleAssignment, OperationKind.FieldInitializer); - ctx.RegisterSymbolEndAction(context => AnalyzeSymbolEnd(context, disposableFieldNamesBuilder.ToImmutableAndFree())); + ctx.RegisterSymbolEndAction(context => AnalyzeSymbolEnd(context, disposableFieldNamesBuilder.ToImmutableArray())); } - private static void AnalyzeOperation(OperationAnalysisContext ctx, INamedTypeSymbol parent, ISet disposableFields, ArrayBuilder disposableFieldNamesBuilder) + private static void AnalyzeOperation(OperationAnalysisContext ctx, INamedTypeSymbol parent, ISet disposableFields, ConcurrentBag disposableFieldNamesBuilder) { if (ctx.Operation is IAssignmentOperation { Target: IFieldReferenceOperation field } assignment && assignment.Value.WalkDownConversion().Kind == OperationKind.ObjectCreation