From 80d94305872f81088c2812111bf726739d2ff274 Mon Sep 17 00:00:00 2001 From: mfogliatto <2962955+mfogliatto@users.noreply.github.com> Date: Mon, 25 May 2026 08:02:58 +0000 Subject: [PATCH 1/2] fix: cache project tag lookups to avoid redundant XML parsing Fixes mfogliatto/ReferenceCop#51 --- .../Providers/ProjectTagProvider.cs | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/ReferenceCop/Providers/ProjectTagProvider.cs b/src/ReferenceCop/Providers/ProjectTagProvider.cs index 2253082..319ec64 100644 --- a/src/ReferenceCop/Providers/ProjectTagProvider.cs +++ b/src/ReferenceCop/Providers/ProjectTagProvider.cs @@ -1,5 +1,6 @@ namespace ReferenceCop { + using System.Collections.Concurrent; using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; @@ -12,20 +13,25 @@ public class ProjectTagProvider : IProjectTagProvider internal const string ProjectTagNode = "ProjectTag"; internal const string UnknownProjectTag = "Unknown"; + private readonly ConcurrentDictionary _cache = new(); + public string GetProjectTag(string projectFilePath) { - if (!File.Exists(projectFilePath)) + return _cache.GetOrAdd(projectFilePath, path => { - return UnknownProjectTag; - } + if (!File.Exists(path)) + { + return UnknownProjectTag; + } - var projectFile = XDocument.Load(projectFilePath); - var projectTag = projectFile - .Descendants(PropertyGroupNode) - .Elements(ProjectTagNode) - .FirstOrDefault()?.Value; + var projectFile = XDocument.Load(path); + var projectTag = projectFile + .Descendants(PropertyGroupNode) + .Elements(ProjectTagNode) + .FirstOrDefault()?.Value; - return projectTag ?? UnknownProjectTag; + return projectTag ?? UnknownProjectTag; + }); } } } From 74dbb45cc1f01c98e82a0a8df0ec51464fa851f1 Mon Sep 17 00:00:00 2001 From: mfogliatto <2962955+mfogliatto@users.noreply.github.com> Date: Mon, 25 May 2026 19:17:24 +0000 Subject: [PATCH 2/2] fix: resolve C# 7.3 and StyleCop violations in ProjectTagProvider - Replace target-typed new() with explicit ConcurrentDictionary() - Rename _cache to cache (SA1309) - Add this. prefix to field access (SA1101) - Ensure space after new keyword (SA1000) --- src/ReferenceCop/Providers/ProjectTagProvider.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ReferenceCop/Providers/ProjectTagProvider.cs b/src/ReferenceCop/Providers/ProjectTagProvider.cs index 319ec64..d012229 100644 --- a/src/ReferenceCop/Providers/ProjectTagProvider.cs +++ b/src/ReferenceCop/Providers/ProjectTagProvider.cs @@ -13,11 +13,11 @@ public class ProjectTagProvider : IProjectTagProvider internal const string ProjectTagNode = "ProjectTag"; internal const string UnknownProjectTag = "Unknown"; - private readonly ConcurrentDictionary _cache = new(); + private readonly ConcurrentDictionary cache = new ConcurrentDictionary(); public string GetProjectTag(string projectFilePath) { - return _cache.GetOrAdd(projectFilePath, path => + return this.cache.GetOrAdd(projectFilePath, path => { if (!File.Exists(path)) {