From e56791fdb0fa7657dff5706bace1997763f9bbee Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 1 Jun 2025 10:22:24 -0700 Subject: [PATCH] Make sure the PmdAnalysis is closed --- .../java/rife/bld/extension/PmdOperation.java | 94 ++++++++++--------- .../{ => pmd}/PmdAnalysisResults.java | 2 +- .../rife/bld/extension/PmdOperationTests.java | 2 + .../{ => pmd}/PmdAnalysisResultsTests.java | 2 +- 4 files changed, 54 insertions(+), 46 deletions(-) rename src/main/java/rife/bld/extension/{ => pmd}/PmdAnalysisResults.java (98%) rename src/test/java/rife/bld/extension/{ => pmd}/PmdAnalysisResultsTests.java (98%) diff --git a/src/main/java/rife/bld/extension/PmdOperation.java b/src/main/java/rife/bld/extension/PmdOperation.java index db90bcc..5bde5a9 100644 --- a/src/main/java/rife/bld/extension/PmdOperation.java +++ b/src/main/java/rife/bld/extension/PmdOperation.java @@ -22,6 +22,7 @@ import net.sourceforge.pmd.lang.LanguageVersion; import net.sourceforge.pmd.lang.rule.RulePriority; import net.sourceforge.pmd.reporting.Report; import rife.bld.BaseProject; +import rife.bld.extension.pmd.PmdAnalysisResults; import rife.bld.operations.AbstractOperation; import rife.bld.operations.exceptions.ExitStatusException; @@ -804,61 +805,66 @@ public class PmdOperation extends AbstractOperation { * @return the number of violations * @throws ExitStatusException if an error occurs */ - @SuppressWarnings("PMD.CloseResource") public PmdAnalysisResults performPmdAnalysis(String commandName, PMDConfiguration config) throws ExitStatusException { - var pmd = PmdAnalysis.create(config); - var report = pmd.performAnalysisAndCollectReport(); + try (var pmd = PmdAnalysis.create(config)) { + var report = pmd.performAnalysisAndCollectReport(); - if (LOGGER.isLoggable(Level.INFO) && !silent()) { - LOGGER.log(Level.INFO, "[{0}] inputPaths{1}", new Object[]{commandName, inputPaths_}); - LOGGER.log(Level.INFO, "[{0}] ruleSets{1}", new Object[]{commandName, ruleSets_}); - } - - var numViolations = report.getViolations().size(); - if (numViolations > 0) { - printViolations(commandName, config, report); - } else if (pmd.getReporter().numErrors() > 0 && failOnError_) { - throw new ExitStatusException(ExitStatusException.EXIT_FAILURE); - } - - int rulesChecked = 0; - var rules = pmd.getRulesets(); - if (!rules.isEmpty()) { - for (var rule : rules) { - rulesChecked += rule.getRules().size(); - } if (LOGGER.isLoggable(Level.INFO) && !silent()) { - LOGGER.info(String.format("[%s] %d rules were checked.", commandName, rulesChecked)); + LOGGER.log(Level.INFO, "[{0}] inputPaths{1}", new Object[]{commandName, inputPaths_}); + LOGGER.log(Level.INFO, "[{0}] ruleSets{1}", new Object[]{commandName, ruleSets_}); } - } - var result = new PmdAnalysisResults( - numViolations, - report.getSuppressedViolations().size(), - pmd.getReporter().numErrors(), - report.getProcessingErrors().size(), - report.getConfigurationErrors().size(), - rulesChecked - ); - - if (result.processingErrors() > 0 && LOGGER.isLoggable(Level.WARNING) && !silent()) { - for (var err : report.getProcessingErrors()) { - LOGGER.warning(String.format("[%s] %s", commandName, err.getMsg())); + var numViolations = report.getViolations().size(); + if (numViolations > 0) { + printViolations(commandName, config, report); + } else if (pmd.getReporter().numErrors() > 0 && failOnError_) { + throw new ExitStatusException(ExitStatusException.EXIT_FAILURE); } - } - if (result.configurationErrors() > 0 && LOGGER.isLoggable(Level.WARNING) && !silent()) { - for (var err : report.getConfigurationErrors()) { - LOGGER.warning(String.format("[%s] %s", commandName, err.issue())); + var rulesChecked = 0; + var rules = pmd.getRulesets(); + if (!rules.isEmpty()) { + for (var rule : rules) { + rulesChecked += rule.getRules().size(); + } } - } - if (LOGGER.isLoggable(Level.FINEST) && !silent()) { - LOGGER.finest(result.toString()); - } + var result = new PmdAnalysisResults( + numViolations, + report.getSuppressedViolations().size(), + pmd.getReporter().numErrors(), + report.getProcessingErrors().size(), + report.getConfigurationErrors().size(), + rulesChecked + ); - return result; + if (!silent()) { + if (LOGGER.isLoggable(Level.INFO)) { + LOGGER.info(String.format("[%s] %d rules were checked.", commandName, result.rulesChecked())); + } + + if (LOGGER.isLoggable(Level.WARNING)) { + if (result.processingErrors() > 0) { + for (var err : report.getProcessingErrors()) { + LOGGER.warning(String.format("[%s] %s", commandName, err.getMsg())); + } + } + + if (result.configurationErrors() > 0) { + for (var err : report.getConfigurationErrors()) { + LOGGER.warning(String.format("[%s] %s", commandName, err.issue())); + } + } + } + + if (LOGGER.isLoggable(Level.FINEST)) { + LOGGER.finest(result.toString()); + } + } + + return result; + } } /** diff --git a/src/main/java/rife/bld/extension/PmdAnalysisResults.java b/src/main/java/rife/bld/extension/pmd/PmdAnalysisResults.java similarity index 98% rename from src/main/java/rife/bld/extension/PmdAnalysisResults.java rename to src/main/java/rife/bld/extension/pmd/PmdAnalysisResults.java index bc7c650..3433ab7 100644 --- a/src/main/java/rife/bld/extension/PmdAnalysisResults.java +++ b/src/main/java/rife/bld/extension/pmd/PmdAnalysisResults.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package rife.bld.extension; +package rife.bld.extension.pmd; /** * Represents the results of a PMD analysis, containing various counts diff --git a/src/test/java/rife/bld/extension/PmdOperationTests.java b/src/test/java/rife/bld/extension/PmdOperationTests.java index c48723c..fdbbf81 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTests.java +++ b/src/test/java/rife/bld/extension/PmdOperationTests.java @@ -622,6 +622,8 @@ class PmdOperationTests { assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)).violations()) .as(ANALYSIS_FAILURE).isGreaterThan(0); + assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)).configurationErrors()) + .as(ANALYSIS_FAILURE).isGreaterThan(0); } @Test diff --git a/src/test/java/rife/bld/extension/PmdAnalysisResultsTests.java b/src/test/java/rife/bld/extension/pmd/PmdAnalysisResultsTests.java similarity index 98% rename from src/test/java/rife/bld/extension/PmdAnalysisResultsTests.java rename to src/test/java/rife/bld/extension/pmd/PmdAnalysisResultsTests.java index 5f632f1..9f4684b 100644 --- a/src/test/java/rife/bld/extension/PmdAnalysisResultsTests.java +++ b/src/test/java/rife/bld/extension/pmd/PmdAnalysisResultsTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package rife.bld.extension; +package rife.bld.extension.pmd; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested;