From a08d375ef8ee31266bbdb713a65bf4e91ebb8d6b Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 20:21:47 +0000 Subject: [PATCH] Cache compiled regex patterns in FileMatcher to improve performance Co-authored-by: RoiSoleil <3462260+RoiSoleil@users.noreply.github.com> --- .../moreunit/core/matching/FileMatcher.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/org.moreunit.core/src/org/moreunit/core/matching/FileMatcher.java b/org.moreunit.core/src/org/moreunit/core/matching/FileMatcher.java index 9b9925c1..65d65cf7 100644 --- a/org.moreunit.core/src/org/moreunit/core/matching/FileMatcher.java +++ b/org.moreunit.core/src/org/moreunit/core/matching/FileMatcher.java @@ -8,6 +8,16 @@ public class FileMatcher { + // Use an LRU cache to prevent memory leaks from unbounded growth + private static final int MAX_CACHE_SIZE = 1000; + private static final java.util.Map PATTERN_CACHE = java.util.Collections.synchronizedMap( + new java.util.LinkedHashMap(16, 0.75f, true) { + @Override + protected boolean removeEldestEntry(java.util.Map.Entry eldest) { + return size() > MAX_CACHE_SIZE; + } + }); + private final SrcFile file; private final SearchEngine searchEngine; private final FileMatchSelector matchSelector; @@ -77,6 +87,13 @@ private Pattern createFileNamePattern(SrcFile file, Collection correspon .append("|").append(extension.toUpperCase()) // .append(")"); - return Pattern.compile(sb.toString()); + String regex = sb.toString(); + Pattern pattern = PATTERN_CACHE.get(regex); + if (pattern == null) + { + pattern = Pattern.compile(regex); + PATTERN_CACHE.put(regex, pattern); + } + return pattern; } }