From 20ae6239f90611dcc1356465e11f8648bd4ed11d Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 31 Mar 2023 13:18:34 -0700 Subject: [PATCH] Reduce allocations more in public api analyzer --- .../Core/Analyzers/DeclarePublicApiAnalyzer.Impl.cs | 2 +- .../Core/Analyzers/DeclarePublicApiAnalyzer.cs | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.Impl.cs b/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.Impl.cs index a732fb4f92..ef692ecb56 100644 --- a/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.Impl.cs +++ b/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.Impl.cs @@ -586,7 +586,7 @@ string getApiString(ISymbol symbol, SymbolDisplayFormat format) private static bool ContainsPublicApiName(string apiLineText, string publicApiNameToSearch) { - apiLineText = apiLineText.Trim(ObliviousMarker); + apiLineText = apiLineText.TrimStart(ObliviousMarkerArray); // Ensure we don't search in parameter list/return type. var indexOfParamsList = apiLineText.IndexOf('('); diff --git a/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.cs b/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.cs index 8855298ab8..b9f81cd9ba 100644 --- a/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.cs +++ b/src/PublicApiAnalyzers/Core/Analyzers/DeclarePublicApiAnalyzer.cs @@ -49,6 +49,7 @@ public sealed partial class DeclarePublicApiAnalyzer : DiagnosticAnalyzer internal const string FileName = "FileName"; private const char ObliviousMarker = '~'; + private static readonly char[] ObliviousMarkerArray = { ObliviousMarker }; /// /// Boolean option to configure if public API analyzer should bail out silently if public API files are missing. @@ -397,7 +398,7 @@ private static bool ValidateApiFiles(ApiData shippedData, ApiData unshippedData, errors.Add(Diagnostic.Create(descriptor, Location.None, InvalidReasonMisplacedNullableEnable)); } - var publicApiMap = new Dictionary(StringComparer.Ordinal); + using var publicApiMap = PooledDictionary.GetInstance(StringComparer.Ordinal); ValidateApiList(publicApiMap, shippedData.ApiList, isPublic, errors); ValidateApiList(publicApiMap, unshippedData.ApiList, isPublic, errors); @@ -408,7 +409,7 @@ private static void ValidateApiList(Dictionary publicApiMap, Im { foreach (ApiLine cur in apiList) { - string textWithoutOblivious = cur.Text.TrimStart(ObliviousMarker); + string textWithoutOblivious = cur.Text.TrimStart(ObliviousMarkerArray); if (publicApiMap.TryGetValue(textWithoutOblivious, out ApiLine existingLine)) { LinePositionSpan existingLinePositionSpan = existingLine.SourceText.Lines.GetLinePositionSpan(existingLine.Span);