Compare commits

..

No commits in common. "03fd552702ad05279a9212f937ba60153630fd2e" and "af395dd69b52c21cda09a598cd97d6ec5836dbf7" have entirely different histories.

3 changed files with 40 additions and 51 deletions

View file

@ -32,7 +32,7 @@ public class PmdOperationBuild extends Project {
public PmdOperationBuild() { public PmdOperationBuild() {
pkg = "rife.bld.extension"; pkg = "rife.bld.extension";
name = "bld-pmd"; name = "bld-pmd";
version = version(1, 1, 1); version = version(1, 1, 0);
javaRelease = 17; javaRelease = 17;
@ -48,8 +48,8 @@ public class PmdOperationBuild extends Project {
.include(dependency("net.sourceforge.pmd", "pmd-java", pmd)) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd))
.include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 13))); .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 13)));
scope(test) scope(test)
.include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3))) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 2)))
.include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 2)))
.include(dependency("org.assertj", "assertj-core", version(3, 26, 0))); .include(dependency("org.assertj", "assertj-core", version(3, 26, 0)));
javadocOperation() javadocOperation()

View file

@ -22,7 +22,6 @@ import net.sourceforge.pmd.lang.LanguageVersion;
import net.sourceforge.pmd.lang.rule.RulePriority; import net.sourceforge.pmd.lang.rule.RulePriority;
import rife.bld.BaseProject; import rife.bld.BaseProject;
import rife.bld.operations.AbstractOperation; import rife.bld.operations.AbstractOperation;
import rife.bld.operations.exceptions.ExitStatusException;
import java.io.File; import java.io.File;
import java.net.URI; import java.net.URI;
@ -283,12 +282,9 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
* Performs the PMD code analysis operation. * Performs the PMD code analysis operation.
*/ */
@Override @Override
public void execute() throws Exception { public void execute() {
if (project_ == null) { if (project_ == null) {
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) { throw new IllegalArgumentException("ERROR: project required.");
LOGGER.log(Level.SEVERE, "A project is required to run this operation.");
}
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
} }
var commandName = project_.getCurrentCommandName(); var commandName = project_.getCurrentCommandName();
@ -578,17 +574,17 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
* @throws RuntimeException if an error occurs * @throws RuntimeException if an error occurs
*/ */
@SuppressWarnings({"PMD.CloseResource", "PMD.AvoidInstantiatingObjectsInLoops"}) @SuppressWarnings({"PMD.CloseResource", "PMD.AvoidInstantiatingObjectsInLoops"})
public int performPmdAnalysis(String commandName, PMDConfiguration config) throws ExitStatusException { public int performPmdAnalysis(String commandName, PMDConfiguration config) throws RuntimeException {
var pmd = PmdAnalysis.create(config); var pmd = PmdAnalysis.create(config);
var report = pmd.performAnalysisAndCollectReport(); var report = pmd.performAnalysisAndCollectReport();
if (LOGGER.isLoggable(Level.INFO) && !silent()) { if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.log(Level.INFO, "[{0}] inputPaths{1}", new Object[]{commandName, inputPaths_}); LOGGER.log(Level.INFO, "[{0}] inputPaths{1}", new Object[]{commandName, inputPaths_});
LOGGER.log(Level.INFO, "[{0}] ruleSets{1}", new Object[]{commandName, ruleSets_}); LOGGER.log(Level.INFO, "[{0}] ruleSets{1}", new Object[]{commandName, ruleSets_});
} }
var numErrors = report.getViolations().size(); var numErrors = report.getViolations().size();
if (numErrors > 0) { if (numErrors > 0) {
for (var v : report.getViolations()) { for (var v : report.getViolations()) {
if (LOGGER.isLoggable(Level.WARNING) && !silent()) { if (LOGGER.isLoggable(Level.WARNING)) {
final String msg; final String msg;
if (includeLineNumber_) { if (includeLineNumber_) {
msg = "[{0}] {1}:{2}\n\t{3} ({4})\n\t\t--> {5}"; msg = "[{0}] {1}:{2}\n\t{3} ({4})\n\t\t--> {5}";
@ -611,12 +607,11 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
"[%s] %d rule violations were found. See the report at: %s", commandName, numErrors, "[%s] %d rule violations were found. See the report at: %s", commandName, numErrors,
config.getReportFilePath().toUri()); config.getReportFilePath().toUri());
if (config.isFailOnViolation()) { if (config.isFailOnViolation()) {
if (LOGGER.isLoggable(Level.SEVERE) && !silent()) { throw new RuntimeException(violations); // NOPMD
LOGGER.log(Level.SEVERE, violations); } else {
} if (LOGGER.isLoggable(Level.WARNING)) {
throw new ExitStatusException(ExitStatusException.EXIT_FAILURE);
} else if (LOGGER.isLoggable(Level.WARNING) && !silent()) {
LOGGER.warning(violations); LOGGER.warning(violations);
}
} }
} else { } else {
var rules = pmd.getRulesets(); var rules = pmd.getRulesets();
@ -625,7 +620,7 @@ public class PmdOperation extends AbstractOperation<PmdOperation> {
for (var rule : rules) { for (var rule : rules) {
count += rule.getRules().size(); count += rule.getRules().size();
} }
if (LOGGER.isLoggable(Level.INFO) && !silent()) { if (LOGGER.isLoggable(Level.INFO)) {
LOGGER.info(String.format("[%s] %d rules were checked.", commandName, count)); LOGGER.info(String.format("[%s] %d rules were checked.", commandName, count));
} }
} }

View file

@ -21,7 +21,6 @@ import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.rule.RulePriority; import net.sourceforge.pmd.lang.rule.RulePriority;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import rife.bld.BaseProject; import rife.bld.BaseProject;
import rife.bld.operations.exceptions.ExitStatusException;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -67,7 +66,7 @@ class PmdOperationTest {
} }
@Test @Test
void testAddInputPath() throws ExitStatusException { void testAddInputPath() {
var project = new BaseProject(); var project = new BaseProject();
var pmd = new PmdOperation().fromProject(project); var pmd = new PmdOperation().fromProject(project);
@ -94,12 +93,13 @@ class PmdOperationTest {
project.srcMainDirectory().toPath(), project.srcMainDirectory().toPath(),
project.srcTestDirectory().toPath()); project.srcTestDirectory().toPath());
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.isGreaterThan(0).isEqualTo(err); .isGreaterThan(0).isEqualTo(err);
} }
@Test @Test
void testAddRuleSets() throws ExitStatusException { void testAddRuleSets() {
var pmd = new PmdOperation().fromProject(new BaseProject()); var pmd = new PmdOperation().fromProject(new BaseProject());
assertThat(pmd.ruleSets()).containsExactly(PmdOperation.RULE_SET_DEFAULT); assertThat(pmd.ruleSets()).containsExactly(PmdOperation.RULE_SET_DEFAULT);
@ -122,7 +122,7 @@ class PmdOperationTest {
} }
@Test @Test
void testCache() throws ExitStatusException { void testCache() {
var cache = Path.of("build/pmd/temp-cache"); var cache = Path.of("build/pmd/temp-cache");
var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(List.of(CODE_STYLE_SAMPLE)).cache(cache); var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(List.of(CODE_STYLE_SAMPLE)).cache(cache);
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
@ -143,13 +143,7 @@ class PmdOperationTest {
} }
@Test @Test
void testExecuteNoProject() { void testExecute() {
var pmd = new PmdOperation();
assertThatCode(pmd::execute).isInstanceOf(ExitStatusException.class);
}
@Test
void testExecute() throws ExitStatusException {
var pmd = new PmdOperation().fromProject(new BaseProject()); var pmd = new PmdOperation().fromProject(new BaseProject());
assertThat(pmd.inputPaths()).containsExactly(Paths.get("src/main").toAbsolutePath(), assertThat(pmd.inputPaths()).containsExactly(Paths.get("src/main").toAbsolutePath(),
@ -168,11 +162,11 @@ class PmdOperationTest {
var pmd = newPmdOperation().ruleSets(DOCUMENTATION_XML) var pmd = newPmdOperation().ruleSets(DOCUMENTATION_XML)
.inputPaths(Path.of("src/test/resources/java/Documentation.java")); .inputPaths(Path.of("src/test/resources/java/Documentation.java"));
assertThatCode(() -> pmd.failOnViolation(true).performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) assertThatCode(() -> pmd.failOnViolation(true).performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.isInstanceOf(ExitStatusException.class); .isInstanceOf(RuntimeException.class).hasMessageContaining('[' + TEST + ']');
} }
@Test @Test
void testIgnoreFile() throws ExitStatusException { void testIgnoreFile() {
var pmd = newPmdOperation() var pmd = newPmdOperation()
.ruleSets(ERROR_PRONE_XML, CODE_STYLE_XML) .ruleSets(ERROR_PRONE_XML, CODE_STYLE_XML)
.ignoreFile(Path.of("src/test/resources/ignore.txt")); .ignoreFile(Path.of("src/test/resources/ignore.txt"));
@ -197,7 +191,7 @@ class PmdOperationTest {
} }
@Test @Test
void testInputPaths() throws ExitStatusException { void testInputPaths() {
var pmd = newPmdOperation() var pmd = newPmdOperation()
.ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML)
.inputPaths(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); .inputPaths(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE);
@ -206,20 +200,20 @@ class PmdOperationTest {
} }
@Test @Test
void testJavaBestPractices() throws ExitStatusException { void testJavaBestPractices() {
var pmd = newPmdOperation().ruleSets("category/java/bestpractices.xml") var pmd = newPmdOperation().ruleSets("category/java/bestpractices.xml")
.inputPaths(Path.of("src/test/resources/java/BestPractices.java")); .inputPaths(Path.of("src/test/resources/java/BestPractices.java"));
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
} }
@Test @Test
void testJavaCodeStyle() throws ExitStatusException { void testJavaCodeStyle() {
var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(CODE_STYLE_SAMPLE); var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(CODE_STYLE_SAMPLE);
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
} }
@Test @Test
void testJavaCodeStyleAndErrorProne() throws ExitStatusException { void testJavaCodeStyleAndErrorProne() {
var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(CODE_STYLE_SAMPLE); var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(CODE_STYLE_SAMPLE);
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)))
.as("code style").isGreaterThan(0); .as("code style").isGreaterThan(0);
@ -229,7 +223,7 @@ class PmdOperationTest {
} }
@Test @Test
void testJavaDesign() throws ExitStatusException { void testJavaDesign() {
var pmd = newPmdOperation() var pmd = newPmdOperation()
.ruleSets(DESIGN_XML) .ruleSets(DESIGN_XML)
.inputPaths("src/test/resources/java/Design.java") .inputPaths("src/test/resources/java/Design.java")
@ -238,7 +232,7 @@ class PmdOperationTest {
} }
@Test @Test
void testJavaDocumentation() throws ExitStatusException { void testJavaDocumentation() {
var pmd = newPmdOperation() var pmd = newPmdOperation()
.ruleSets(DOCUMENTATION_XML) .ruleSets(DOCUMENTATION_XML)
.inputPaths(Path.of("src/test/resources/java/Documentation.java")); .inputPaths(Path.of("src/test/resources/java/Documentation.java"));
@ -246,20 +240,20 @@ class PmdOperationTest {
} }
@Test @Test
void testJavaErrorProne() throws ExitStatusException { void testJavaErrorProne() {
var pmd = newPmdOperation().ruleSets(ERROR_PRONE_XML).inputPaths(ERROR_PRONE_SAMPLE); var pmd = newPmdOperation().ruleSets(ERROR_PRONE_XML).inputPaths(ERROR_PRONE_SAMPLE);
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
} }
@Test @Test
void testJavaMultiThreading() throws ExitStatusException { void testJavaMultiThreading() {
var pmd = newPmdOperation().ruleSets("category/java/multithreading.xml") var pmd = newPmdOperation().ruleSets("category/java/multithreading.xml")
.inputPaths(Path.of("src/test/resources/java/MultiThreading.java")); .inputPaths(Path.of("src/test/resources/java/MultiThreading.java"));
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
} }
@Test @Test
void testJavaPerformance() throws ExitStatusException { void testJavaPerformance() {
var pmd = newPmdOperation() var pmd = newPmdOperation()
.ruleSets(PERFORMANCE_XML) .ruleSets(PERFORMANCE_XML)
.inputPaths(Path.of("src/test/resources/java/Performance.java")); .inputPaths(Path.of("src/test/resources/java/Performance.java"));
@ -267,7 +261,7 @@ class PmdOperationTest {
} }
@Test @Test
void testJavaQuickStart() throws ExitStatusException { void testJavaQuickStart() {
var pmd = newPmdOperation().ruleSets(PmdOperation.RULE_SET_DEFAULT) var pmd = newPmdOperation().ruleSets(PmdOperation.RULE_SET_DEFAULT)
.inputPaths(new File("src/test/resources/java/")); .inputPaths(new File("src/test/resources/java/"));
assertThat(pmd.ruleSets()).containsExactly(PmdOperation.RULE_SET_DEFAULT); assertThat(pmd.ruleSets()).containsExactly(PmdOperation.RULE_SET_DEFAULT);
@ -275,14 +269,14 @@ class PmdOperationTest {
} }
@Test @Test
void testJavaSecurity() throws ExitStatusException { void testJavaSecurity() {
var pmd = newPmdOperation().ruleSets(SECURITY_XML) var pmd = newPmdOperation().ruleSets(SECURITY_XML)
.inputPaths(Path.of("src/test/resources/java/Security.java")); .inputPaths(Path.of("src/test/resources/java/Security.java"));
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
} }
@Test @Test
void testLanguageVersions() throws ExitStatusException { void testLanguageVersions() {
var language = LanguageRegistry.PMD.getLanguageById("java"); var language = LanguageRegistry.PMD.getLanguageById("java");
assertThat(language).isNotNull(); assertThat(language).isNotNull();
@ -301,14 +295,14 @@ class PmdOperationTest {
} }
@Test @Test
void testMainOperation() throws ExitStatusException { void testMainOperation() {
var pmd = newPmdOperation().inputPaths(new File("src/main")) var pmd = newPmdOperation().inputPaths(new File("src/main"))
.performPmdAnalysis(TEST, newPmdOperation().initConfiguration(COMMAND_NAME)); .performPmdAnalysis(TEST, newPmdOperation().initConfiguration(COMMAND_NAME));
assertThat(pmd).isEqualTo(0); assertThat(pmd).isEqualTo(0);
} }
@Test @Test
void testPriority() throws ExitStatusException { void testPriority() {
var pmd = newPmdOperation().inputPaths(CODE_STYLE_SAMPLE).minimumPriority(RulePriority.HIGH); var pmd = newPmdOperation().inputPaths(CODE_STYLE_SAMPLE).minimumPriority(RulePriority.HIGH);
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isEqualTo(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isEqualTo(0);
} }
@ -327,7 +321,7 @@ class PmdOperationTest {
} }
@Test @Test
void testReportFile() throws FileNotFoundException, ExitStatusException { void testReportFile() throws FileNotFoundException {
var report = new File("build", "pmd-report-file"); var report = new File("build", "pmd-report-file");
report.deleteOnExit(); report.deleteOnExit();
var pmd = newPmdOperation().ruleSets(List.of(ERROR_PRONE_XML, DESIGN_XML)).reportFile(report); var pmd = newPmdOperation().ruleSets(List.of(ERROR_PRONE_XML, DESIGN_XML)).reportFile(report);
@ -344,7 +338,7 @@ class PmdOperationTest {
} }
@Test @Test
void testReportFormat() throws IOException, ExitStatusException { void testReportFormat() throws IOException {
var pmd = newPmdOperation().ruleSets(ERROR_PRONE_XML).reportFormat("xml").inputPaths(ERROR_PRONE_SAMPLE); var pmd = newPmdOperation().ruleSets(ERROR_PRONE_XML).reportFormat("xml").inputPaths(ERROR_PRONE_SAMPLE);
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);
try (var br = Files.newBufferedReader(pmd.reportFile())) { try (var br = Files.newBufferedReader(pmd.reportFile())) {
@ -353,7 +347,7 @@ class PmdOperationTest {
} }
@Test @Test
void testReportProperties() throws ExitStatusException { void testReportProperties() {
var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML, ERROR_PRONE_XML) var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML, ERROR_PRONE_XML)
.includeLineNumber(true) .includeLineNumber(true)
.reportProperties(new Properties()); .reportProperties(new Properties());
@ -361,14 +355,14 @@ class PmdOperationTest {
} }
@Test @Test
void testRuleSetsConfigFile() throws ExitStatusException { void testRuleSetsConfigFile() {
var pmd = newPmdOperation().ruleSets("src/test/resources/pmd.xml") var pmd = newPmdOperation().ruleSets("src/test/resources/pmd.xml")
.ignoreFile("src/test/resources/ignore-all.txt"); .ignoreFile("src/test/resources/ignore-all.txt");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isEqualTo(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isEqualTo(0);
} }
@Test @Test
void testRuleSetsEmpty() throws ExitStatusException { void testRuleSetsEmpty() {
var pmd = newPmdOperation().ruleSets(""); var pmd = newPmdOperation().ruleSets("");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isEqualTo(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isEqualTo(0);
} }
@ -403,7 +397,7 @@ class PmdOperationTest {
} }
@Test @Test
void testXml() throws ExitStatusException { void testXml() {
var pmd = newPmdOperation().addInputPaths("src/test/resources/pmd.xml") var pmd = newPmdOperation().addInputPaths("src/test/resources/pmd.xml")
.ruleSets("src/test/resources/xml/basic.xml"); .ruleSets("src/test/resources/xml/basic.xml");
assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0);