diff --git a/src/Dependencies/CodeAnalysis.Debugging/CustomDebugInfoReader.cs b/src/Dependencies/CodeAnalysis.Debugging/CustomDebugInfoReader.cs index f452a561929a57e379774d55c377df6d93fb0f07..629482aee14801d571d910427a493b1da89c7308 100644 --- a/src/Dependencies/CodeAnalysis.Debugging/CustomDebugInfoReader.cs +++ b/src/Dependencies/CodeAnalysis.Debugging/CustomDebugInfoReader.cs @@ -123,13 +123,13 @@ public static ImmutableArray DecodeUsingRecord(ImmutableArray bytes var offset = 0; var numCounts = ReadInt16(bytes, ref offset); - var builder = ArrayBuilder.GetInstance(numCounts); + using var builder = ArrayBuilder.GetInstance(numCounts); for (var i = 0; i < numCounts; i++) { builder.Add(ReadInt16(bytes, ref offset)); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } /// @@ -172,7 +172,7 @@ public static ImmutableArray DecodeStateMachineHo var bucketCount = ReadInt32(bytes, ref offset); - var builder = ArrayBuilder.GetInstance(bucketCount); + using var builder = ArrayBuilder.GetInstance(bucketCount); for (var i = 0; i < bucketCount; i++) { var startOffset = ReadInt32(bytes, ref offset); @@ -191,7 +191,7 @@ public static ImmutableArray DecodeStateMachineHo builder.Add(new StateMachineHoistedLocalScope(startOffset, endOffset)); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } /// @@ -234,13 +234,13 @@ public static ImmutableArray DecodeDynamicLocalsRecord(Immutab { const int FlagBytesCount = 64; - var flagsBuilder = ArrayBuilder.GetInstance(FlagBytesCount); - var pooledNameBuilder = PooledStringBuilder.GetInstance(); + using var flagsBuilder = ArrayBuilder.GetInstance(FlagBytesCount); + using var pooledNameBuilder = PooledStringBuilder.GetInstance(); var nameBuilder = pooledNameBuilder.Builder; var offset = 0; var bucketCount = ReadInt32(bytes, ref offset); - var builder = ArrayBuilder.GetInstance(bucketCount); + using var builder = ArrayBuilder.GetInstance(bucketCount); for (var i = 0; i < bucketCount; i++) { @@ -281,9 +281,7 @@ public static ImmutableArray DecodeDynamicLocalsRecord(Immutab nameBuilder.Clear(); } - flagsBuilder.Free(); - pooledNameBuilder.Free(); - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } /// @@ -293,18 +291,18 @@ public static ImmutableArray DecodeTupleElementNamesRecor { var offset = 0; var n = ReadInt32(bytes, ref offset); - var builder = ArrayBuilder.GetInstance(n); + using var builder = ArrayBuilder.GetInstance(n); for (var i = 0; i < n; i++) { builder.Add(DecodeTupleElementNamesInfo(bytes, ref offset)); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } private static TupleElementNamesInfo DecodeTupleElementNamesInfo(ImmutableArray bytes, ref int offset) { var n = ReadInt32(bytes, ref offset); - var builder = ArrayBuilder.GetInstance(n); + using var builder = ArrayBuilder.GetInstance(n); for (var i = 0; i < n; i++) { var value = ReadUtf8String(bytes, ref offset); @@ -314,7 +312,7 @@ private static TupleElementNamesInfo DecodeTupleElementNamesInfo(ImmutableArray< var scopeStart = ReadInt32(bytes, ref offset); var scopeEnd = ReadInt32(bytes, ref offset); var localName = ReadUtf8String(bytes, ref offset); - return new TupleElementNamesInfo(builder.ToImmutableAndFree(), slotIndex, localName, scopeStart, scopeEnd); + return new TupleElementNamesInfo(builder.ToImmutable(), slotIndex, localName, scopeStart, scopeEnd); } /// @@ -427,8 +425,8 @@ private static void SkipRecord(byte[] bytes, ref int offset, int size) var importStrings = getMethodImportStrings(methodToken, arg); Debug.Assert(!importStrings.IsDefault); - var resultBuilder = ArrayBuilder>.GetInstance(groupSizes.Length); - var groupBuilder = ArrayBuilder.GetInstance(); + using var resultBuilder = ArrayBuilder>.GetInstance(groupSizes.Length); + using var groupBuilder = ArrayBuilder.GetInstance(); var pos = 0; foreach (var groupSize in groupSizes) @@ -469,19 +467,17 @@ private static void SkipRecord(byte[] bytes, ref int offset, int size) groupBuilder.Add(importString); } - externAliasStrings = groupBuilder.ToImmutableAndFree(); + externAliasStrings = groupBuilder.ToImmutable(); } else { - groupBuilder.Free(); - if (pos < importStrings.Length) { throw new InvalidOperationException(string.Format("Group size indicates fewer imports than there are import strings (method {0}).", FormatMethodToken(methodToken))); } } - return resultBuilder.ToImmutableAndFree(); + return resultBuilder.ToImmutable(); } /// diff --git a/src/Dependencies/PooledObjects/PooledStringBuilder.cs b/src/Dependencies/PooledObjects/PooledStringBuilder.cs index 800de1fee0f6e7d2cd932c08a80288cbfa006b9d..fa70916bb0e4d8e4d5737c55896d430ee0e6c4ab 100644 --- a/src/Dependencies/PooledObjects/PooledStringBuilder.cs +++ b/src/Dependencies/PooledObjects/PooledStringBuilder.cs @@ -1,5 +1,6 @@ // Copyright (c) Microsoft. 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.Text; @@ -13,7 +14,7 @@ namespace Microsoft.CodeAnalysis.PooledObjects /// ... sb.ToString() ... /// inst.Free(); /// - internal class PooledStringBuilder + internal class PooledStringBuilder : IDisposable { public readonly StringBuilder Builder = new StringBuilder(); private readonly ObjectPool _pool; @@ -90,6 +91,8 @@ public static PooledStringBuilder GetInstance() return builder; } + public void Dispose() => Free(); + public static implicit operator StringBuilder(PooledStringBuilder obj) { return obj.Builder; diff --git a/src/Features/CSharp/Portable/ConvertSwitchStatementToExpression/ConvertSwitchStatementToExpressionCodeFixProvider.cs b/src/Features/CSharp/Portable/ConvertSwitchStatementToExpression/ConvertSwitchStatementToExpressionCodeFixProvider.cs index 90dec47b0ad02ead25298cf844c985358dc37a59..db492fdeef6e1a770be9d28c0b9b5a19fcaa607b 100644 --- a/src/Features/CSharp/Portable/ConvertSwitchStatementToExpression/ConvertSwitchStatementToExpressionCodeFixProvider.cs +++ b/src/Features/CSharp/Portable/ConvertSwitchStatementToExpression/ConvertSwitchStatementToExpressionCodeFixProvider.cs @@ -41,45 +41,38 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context) protected override async Task FixAllAsync(Document document, ImmutableArray diagnostics, SyntaxEditor editor, CancellationToken cancellationToken) { var semanticModel = await document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false); - var spans = ArrayBuilder.GetInstance(diagnostics.Length); - try + using var spans = ArrayBuilder.GetInstance(diagnostics.Length); + foreach (var diagnostic in diagnostics) { - foreach (var diagnostic in diagnostics) - { - cancellationToken.ThrowIfCancellationRequested(); + cancellationToken.ThrowIfCancellationRequested(); - var span = diagnostic.AdditionalLocations[0].SourceSpan; - if (spans.Any((s, nodeSpan) => s.Contains(nodeSpan), span)) - { - // Skip nested switch expressions in case of a fix-all operation. - continue; - } + var span = diagnostic.AdditionalLocations[0].SourceSpan; + if (spans.Any((s, nodeSpan) => s.Contains(nodeSpan), span)) + { + // Skip nested switch expressions in case of a fix-all operation. + continue; + } - spans.Add(span); + spans.Add(span); - var properties = diagnostic.Properties; - var nodeToGenerate = (SyntaxKind)int.Parse(properties[Constants.NodeToGenerateKey]); - var shouldRemoveNextStatement = bool.Parse(properties[Constants.ShouldRemoveNextStatementKey]); + var properties = diagnostic.Properties; + var nodeToGenerate = (SyntaxKind)int.Parse(properties[Constants.NodeToGenerateKey]); + var shouldRemoveNextStatement = bool.Parse(properties[Constants.ShouldRemoveNextStatementKey]); - var switchStatement = (SwitchStatementSyntax)editor.OriginalRoot.FindNode(span); - editor.ReplaceNode(switchStatement, - Rewriter.Rewrite(switchStatement, semanticModel, editor, - nodeToGenerate, shouldMoveNextStatementToSwitchExpression: shouldRemoveNextStatement) - .WithAdditionalAnnotations(Formatter.Annotation)); + var switchStatement = (SwitchStatementSyntax)editor.OriginalRoot.FindNode(span); + editor.ReplaceNode(switchStatement, + Rewriter.Rewrite(switchStatement, semanticModel, editor, + nodeToGenerate, shouldMoveNextStatementToSwitchExpression: shouldRemoveNextStatement) + .WithAdditionalAnnotations(Formatter.Annotation)); - if (shouldRemoveNextStatement) - { - // Already morphed into the top-level switch expression. - var nextStatement = switchStatement.GetNextStatement(); - Debug.Assert(nextStatement.IsKind(SyntaxKind.ThrowStatement, SyntaxKind.ReturnStatement)); - editor.RemoveNode(nextStatement); - } + if (shouldRemoveNextStatement) + { + // Already morphed into the top-level switch expression. + var nextStatement = switchStatement.GetNextStatement(); + Debug.Assert(nextStatement.IsKind(SyntaxKind.ThrowStatement, SyntaxKind.ReturnStatement)); + editor.RemoveNode(nextStatement); } } - finally - { - spans.Free(); - } } private sealed class MyCodeAction : CodeAction.DocumentChangeAction diff --git a/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationCodeFixProvider.cs b/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationCodeFixProvider.cs index 21e9db85522d046374552210267c2e9d8f1a5437..4b548780f3e14fe7c43bc3275713dc0aa3435873 100644 --- a/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationCodeFixProvider.cs +++ b/src/Features/CSharp/Portable/InlineDeclaration/CSharpInlineDeclarationCodeFixProvider.cs @@ -73,11 +73,11 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context) originalNodes, t => { - var additionalNodesToTrack = ArrayBuilder.GetInstance(2); + using var additionalNodesToTrack = ArrayBuilder.GetInstance(2); additionalNodesToTrack.Add(t.identifier); additionalNodesToTrack.Add(t.declarator); - return (t.invocationOrCreation, additionalNodesToTrack.ToImmutableAndFree()); + return (t.invocationOrCreation, additionalNodesToTrack.ToImmutable()); }, (_1, _2, _3) => true, (semanticModel, currentRoot, t, currentNode) diff --git a/src/Features/CSharp/Portable/TypeStyle/UseExplicitTypeCodeFixProvider.cs b/src/Features/CSharp/Portable/TypeStyle/UseExplicitTypeCodeFixProvider.cs index 9c5da21c15d27b9750912addb52621c94beb9a3a..bb2ec19fb4dcafeebae31b64eae9b16de94b6bdf 100644 --- a/src/Features/CSharp/Portable/TypeStyle/UseExplicitTypeCodeFixProvider.cs +++ b/src/Features/CSharp/Portable/TypeStyle/UseExplicitTypeCodeFixProvider.cs @@ -120,7 +120,7 @@ private static ExpressionSyntax GenerateTupleDeclaration(ITypeSymbol typeSymbol, var elements = ((INamedTypeSymbol)typeSymbol).TupleElements; Debug.Assert(elements.Length == parensDesignation.Variables.Count); - var builder = ArrayBuilder.GetInstance(elements.Length); + using var builder = ArrayBuilder.GetInstance(elements.Length); for (var i = 0; i < elements.Length; i++) { var designation = parensDesignation.Variables[i]; @@ -151,7 +151,7 @@ private static ExpressionSyntax GenerateTupleDeclaration(ITypeSymbol typeSymbol, return SyntaxFactory.TupleExpression( SyntaxFactory.Token(SyntaxKind.OpenParenToken).WithTrailingTrivia(), - SyntaxFactory.SeparatedList(builder.ToImmutableAndFree(), separatorBuilder.ToImmutableAndFree()), + SyntaxFactory.SeparatedList(builder.ToImmutable(), separatorBuilder.ToImmutableAndFree()), SyntaxFactory.Token(SyntaxKind.CloseParenToken)) .WithTrailingTrivia(parensDesignation.GetTrailingTrivia()); } diff --git a/src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs b/src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs index 1f15ef282e7738a59364d072328bce9f32e8b3bd..c180905d11909f0ed1475c275d49642c79d686aa 100644 --- a/src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs +++ b/src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs @@ -230,7 +230,7 @@ private static int NonParamsParameterCount(IMethodSymbol method) ImmutableArray NestByOverload() { - var builder = ArrayBuilder.GetInstance(codeFixData.Length); + using var builder = ArrayBuilder.GetInstance(codeFixData.Length); foreach (var data in codeFixData) { // We create the mandatory data.CreateChangedSolutionNonCascading fix first. @@ -259,12 +259,12 @@ ImmutableArray NestByOverload() builder.Add(codeAction); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } ImmutableArray NestByCascading() { - var builder = ArrayBuilder.GetInstance(2); + using var builder = ArrayBuilder.GetInstance(2); var nonCascadingActions = ImmutableArray.CreateRange(codeFixData, data => { @@ -294,7 +294,7 @@ ImmutableArray NestByCascading() builder.Add(new CodeAction.CodeActionWithNestedActions(nestedCascadingTitle, cascadingActions, isInlinable: false)); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } } @@ -303,7 +303,7 @@ ImmutableArray NestByCascading() SeparatedSyntaxList arguments, ImmutableArray> methodsAndArgumentsToAdd) { - var builder = ArrayBuilder.GetInstance(methodsAndArgumentsToAdd.Length); + using var builder = ArrayBuilder.GetInstance(methodsAndArgumentsToAdd.Length); // Order by the furthest argument index to the nearest argument index. The ones with // larger argument indexes mean that we matched more earlier arguments (and thus are @@ -325,7 +325,7 @@ ImmutableArray NestByCascading() builder.Add(codeFixData); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } private static string GetCodeFixTitle(string resourceString, IMethodSymbol methodToUpdate, bool includeParameters) diff --git a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs index 620396bbd131fdf5fc0d32c9b7d4347ddcc33843..f0a5efabcca7f8fe60251d0f8e91ee49753d994a 100644 --- a/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs +++ b/src/Features/Core/Portable/CodeFixes/Suppression/AbstractSuppressionCodeFixProvider.RemoveSuppressionCodeAction.BatchFixer.cs @@ -162,14 +162,14 @@ public BatchFixer(AbstractSuppressionCodeFixProvider suppressionFixProvider) private static async Task> GetAttributeNodesToFixAsync(ImmutableArray attributeRemoveFixes, CancellationToken cancellationToken) { - var builder = ArrayBuilder.GetInstance(attributeRemoveFixes.Length); + using var builder = ArrayBuilder.GetInstance(attributeRemoveFixes.Length); foreach (var attributeRemoveFix in attributeRemoveFixes) { var attributeToRemove = await attributeRemoveFix.GetAttributeToRemoveAsync(cancellationToken).ConfigureAwait(false); builder.Add(attributeToRemove); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } } } diff --git a/src/Features/Core/Portable/CodeRefactorings/SyncNamespace/AbstractChangeNamespaceService.cs b/src/Features/Core/Portable/CodeRefactorings/SyncNamespace/AbstractChangeNamespaceService.cs index 5df6e22ab296c89f135e553a249497bb1ebf18cb..0960cd319db21f9d83652e7b198d53e8fd437e51 100644 --- a/src/Features/Core/Portable/CodeRefactorings/SyncNamespace/AbstractChangeNamespaceService.cs +++ b/src/Features/Core/Portable/CodeRefactorings/SyncNamespace/AbstractChangeNamespaceService.cs @@ -208,40 +208,32 @@ await ChangeNamespaceInSingleDocumentAsync(solutionAfterNamespaceChange, documen // will return false. We use span of namespace declaration found in each document to decide if they are identical. var documents = ids.SelectAsArray(id => solution.GetDocument(id)); - var containers = ArrayBuilder<(DocumentId, SyntaxNode)>.GetInstance(ids.Length); - var spanForContainers = PooledHashSet.GetInstance(); + using var containers = ArrayBuilder<(DocumentId, SyntaxNode)>.GetInstance(ids.Length); + using var spanForContainers = PooledHashSet.GetInstance(); - try + foreach (var document in documents) { - foreach (var document in documents) - { - var container = await TryGetApplicableContainerFromSpanAsync(document, span, cancellationToken).ConfigureAwait(false); - - if (container is TNamespaceDeclarationSyntax) - { - spanForContainers.Add(container.Span); - } - else if (container is TCompilationUnitSyntax) - { - // In case there's no namespace declaration in the document, we used an empty span as key, - // since a valid namespace declaration node can't have zero length. - spanForContainers.Add(default); - } - else - { - return default; - } + var container = await TryGetApplicableContainerFromSpanAsync(document, span, cancellationToken).ConfigureAwait(false); - containers.Add((document.Id, container)); + if (container is TNamespaceDeclarationSyntax) + { + spanForContainers.Add(container.Span); + } + else if (container is TCompilationUnitSyntax) + { + // In case there's no namespace declaration in the document, we used an empty span as key, + // since a valid namespace declaration node can't have zero length. + spanForContainers.Add(default); + } + else + { + return default; } - return spanForContainers.Count == 1 ? containers.ToImmutable() : default; - } - finally - { - containers.Free(); - spanForContainers.Free(); + containers.Add((document.Id, container)); } + + return spanForContainers.Count == 1 ? containers.ToImmutable() : default; } /// @@ -342,13 +334,13 @@ private static ImmutableArray GetAllNamespaceImportsForDeclaringDocument private ImmutableArray CreateImports(Document document, ImmutableArray names, bool withFormatterAnnotation) { var generator = SyntaxGenerator.GetGenerator(document); - var builder = ArrayBuilder.GetInstance(names.Length); + using var builder = ArrayBuilder.GetInstance(names.Length); for (var i = 0; i < names.Length; ++i) { builder.Add(CreateImport(generator, names[i], withFormatterAnnotation)); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } private static SyntaxNode CreateImport(SyntaxGenerator syntaxGenerator, string name, bool withFormatterAnnotation) diff --git a/src/Features/Core/Portable/Diagnostics/DiagnosticHelper.cs b/src/Features/Core/Portable/Diagnostics/DiagnosticHelper.cs index a596bd5710d0c6a4ae3808f4d6c6dbf72dffe885..932bba8b9ae656a3c56defcdf30eda2f85d00c85 100644 --- a/src/Features/Core/Portable/Diagnostics/DiagnosticHelper.cs +++ b/src/Features/Core/Portable/Diagnostics/DiagnosticHelper.cs @@ -145,13 +145,13 @@ private LocalizableStringWithArguments(ObjectReader reader) } else { - var argumentsBuilder = ArrayBuilder.GetInstance(length); + using var argumentsBuilder = ArrayBuilder.GetInstance(length); for (var i = 0; i < length; i++) { argumentsBuilder.Add(reader.ReadString()); } - _formatArguments = argumentsBuilder.ToArrayAndFree(); + _formatArguments = argumentsBuilder.ToArray(); } } diff --git a/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs b/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs index b2707d535471721f6272d8c8fb23d21d9b7cd559..ea22016429b23e402433fc61835de367de00bf20 100644 --- a/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs +++ b/src/Features/Core/Portable/DocumentHighlighting/AbstractDocumentHighlightsService.cs @@ -288,19 +288,19 @@ private static bool ShouldConsiderSymbol(ISymbol symbol) await AddLocationSpan(location, solution, spanSet, tagMap, HighlightSpanKind.Reference, cancellationToken).ConfigureAwait(false); } - var list = ArrayBuilder.GetInstance(tagMap.Count); + using var list = ArrayBuilder.GetInstance(tagMap.Count); foreach (var kvp in tagMap) { - var spans = ArrayBuilder.GetInstance(kvp.Value.Count); + using var spans = ArrayBuilder.GetInstance(kvp.Value.Count); foreach (var span in kvp.Value) { spans.Add(span); } - list.Add(new DocumentHighlights(kvp.Key, spans.ToImmutableAndFree())); + list.Add(new DocumentHighlights(kvp.Key, spans.ToImmutable())); } - return list.ToImmutableAndFree(); + return list.ToImmutable(); } private static bool ShouldIncludeDefinition(ISymbol symbol) diff --git a/src/Features/Core/Portable/EditAndContinue/EditSession.cs b/src/Features/Core/Portable/EditAndContinue/EditSession.cs index 4268e7ae0af76c4401fd11f014b8139e15decd51..d928bd14a3e79fe9429c9d51bd57a5ecce38ed0e 100644 --- a/src/Features/Core/Portable/EditAndContinue/EditSession.cs +++ b/src/Features/Core/Portable/EditAndContinue/EditSession.cs @@ -226,7 +226,7 @@ private async Task> GetBaseActiv { var baseActiveStatements = await BaseActiveStatements.GetValueAsync(cancellationToken).ConfigureAwait(false); var instructionMap = baseActiveStatements.InstructionMap; - var builder = ArrayBuilder.GetInstance(instructionMap.Count); + using var builder = ArrayBuilder.GetInstance(instructionMap.Count); builder.Count = instructionMap.Count; foreach (var activeStatement in instructionMap.Values) @@ -241,7 +241,7 @@ private async Task> GetBaseActiv builder[activeStatement.Ordinal] = new ActiveStatementExceptionRegions(exceptionRegions, isCovered); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } catch (Exception e) when (FatalError.ReportWithoutCrashUnlessCanceled(e)) { diff --git a/src/Features/Core/Portable/GenerateMember/GenerateParameterizedMember/AbstractGenerateDeconstructMethodService.State.cs b/src/Features/Core/Portable/GenerateMember/GenerateParameterizedMember/AbstractGenerateDeconstructMethodService.State.cs index 52aa3e8681fc0ca386b9b41dce1fa65d47feb46d..1c83bf18a7756db9d8f68d5b0dde2a0007c8c6bc 100644 --- a/src/Features/Core/Portable/GenerateMember/GenerateParameterizedMember/AbstractGenerateDeconstructMethodService.State.cs +++ b/src/Features/Core/Portable/GenerateMember/GenerateParameterizedMember/AbstractGenerateDeconstructMethodService.State.cs @@ -91,14 +91,14 @@ internal new class State : } var tupleElements = ((INamedTypeSymbol)targetType).TupleElements; - var builder = ArrayBuilder.GetInstance(tupleElements.Length); + using var builder = ArrayBuilder.GetInstance(tupleElements.Length); foreach (var element in tupleElements) { builder.Add(CodeGenerationSymbolFactory.CreateParameterSymbol( attributes: default, RefKind.Out, isParams: false, element.Type, element.Name)); } - return builder.ToImmutableAndFree(); + return builder.ToImmutable(); } } } diff --git a/src/Features/Core/Portable/Shared/Naming/IdentifierNameParts.cs b/src/Features/Core/Portable/Shared/Naming/IdentifierNameParts.cs index 9a781d3279ac018ac8d6db5da036cc161737ee87..209f45f698292597d9e94023aef999f564392f3d 100644 --- a/src/Features/Core/Portable/Shared/Naming/IdentifierNameParts.cs +++ b/src/Features/Core/Portable/Shared/Naming/IdentifierNameParts.cs @@ -69,13 +69,13 @@ private static string RemovePrefixesAndSuffixes(ISymbol symbol, ImmutableArray CreateWords(ArrayBuilder parts, string name) { - var result = ArrayBuilder.GetInstance(parts.Count); + using var result = ArrayBuilder.GetInstance(parts.Count); foreach (var part in parts) { result.Add(name.Substring(part.Start, part.Length)); } - return result.ToImmutableAndFree(); + return result.ToImmutable(); } } } diff --git a/src/Features/Core/Portable/Wrapping/ChainedExpression/AbstractChainedExpressionWrapper.cs b/src/Features/Core/Portable/Wrapping/ChainedExpression/AbstractChainedExpressionWrapper.cs index ac7cfd202569ec662a579c2c7ef791599a6237c8..27b10d187511019c0362fe666cfc00e090847939 100644 --- a/src/Features/Core/Portable/Wrapping/ChainedExpression/AbstractChainedExpressionWrapper.cs +++ b/src/Features/Core/Portable/Wrapping/ChainedExpression/AbstractChainedExpressionWrapper.cs @@ -234,13 +234,13 @@ private bool IsToken(int tokenKind, ArrayBuilder pieces, int private ImmutableArray GetSubRange( ArrayBuilder pieces, int start, int end) { - var result = ArrayBuilder.GetInstance(end - start); + using var result = ArrayBuilder.GetInstance(end - start); for (var i = start; i < end; i++) { result.Add(pieces[i]); } - return result.ToImmutableAndFree(); + return result.ToImmutable(); } private bool IsDecomposableChainPart(SyntaxNode node)