From 4858d66e0151dd5426251bb5b0d93ae8890a2845 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 14 Sep 2026 17:20:18 +0200 Subject: [PATCH 1/2] fix: clear safeSymbols to prevent memory leak across files --- .../java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java index 3820e2a2383..8ebd7183c1b 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java @@ -90,6 +90,7 @@ public class BoxedBooleanExpressionsCheck extends BaseTreeVisitor implements Jav public void scanFile(JavaFileScannerContext context) { ifStatementCache.clear(); firstNullCheckCache.clear(); + safeSymbols.clear(); this.context = context; if (context.getSemanticModel() != null) { scan(context.getTree()); From 3e44512ea3b4808c8c24ea7238cbb8a56668ac3c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 15 Sep 2026 09:45:23 +0200 Subject: [PATCH 2/2] fix: clear static caches after scan to prevent AST retention in long-lived processes Move cache clearing (ifStatementCache, firstNullCheckCache, safeSymbols) from the start of scanFile to a finally block, so the last scanned file's AST is not retained for the lifetime of the plugin classloader in IDE sessions (SonarLint). Co-Authored-By: Claude Opus 4.6 --- .../java/checks/BoxedBooleanExpressionsCheck.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java index 8ebd7183c1b..c29ee75521e 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/BoxedBooleanExpressionsCheck.java @@ -88,12 +88,15 @@ public class BoxedBooleanExpressionsCheck extends BaseTreeVisitor implements Jav @Override public void scanFile(JavaFileScannerContext context) { - ifStatementCache.clear(); - firstNullCheckCache.clear(); - safeSymbols.clear(); this.context = context; - if (context.getSemanticModel() != null) { - scan(context.getTree()); + try { + if (context.getSemanticModel() != null) { + scan(context.getTree()); + } + } finally { + ifStatementCache.clear(); + firstNullCheckCache.clear(); + safeSymbols.clear(); } }