From 2b6b4a5e829a0a38d6a889eca60e8a064b337ae7 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 27 Aug 2024 12:55:48 -0700 Subject: [PATCH 01/43] Cleaned up API to match bld operations and options APIs --- .../rife/bld/extension/PmdOperationBuild.java | 9 +- .../java/rife/bld/extension/PmdOperation.java | 143 +++++++++++++----- .../rife/bld/extension/PmdOperationTest.java | 80 ++++++++-- 3 files changed, 180 insertions(+), 52 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index c6b4ca9..ed1ec9a 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 4); + version = version(1, 1, 5, "SNAPSHOT"); javaRelease = 17; @@ -44,11 +44,10 @@ public class PmdOperationBuild extends Project { .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 1))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); scope(runtime) - .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, 16))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 10, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 10, 3))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation() diff --git a/src/main/java/rife/bld/extension/PmdOperation.java b/src/main/java/rife/bld/extension/PmdOperation.java index 8aaea0d..ff67cae 100644 --- a/src/main/java/rife/bld/extension/PmdOperation.java +++ b/src/main/java/rife/bld/extension/PmdOperation.java @@ -142,8 +142,7 @@ public class PmdOperation extends AbstractOperation { * @see #inputPaths(Path...) */ public PmdOperation addInputPaths(Path... inputPath) { - inputPaths_.addAll(List.of(inputPath)); - return this; + return inputPaths(List.of(inputPath)); } /** @@ -154,8 +153,7 @@ public class PmdOperation extends AbstractOperation { * @see #inputPaths(File...) */ public PmdOperation addInputPaths(File... inputPath) { - inputPaths_.addAll(Arrays.stream(inputPath).map(File::toPath).toList()); - return this; + return addInputPathsFiles(List.of(inputPath)); } /** @@ -163,11 +161,10 @@ public class PmdOperation extends AbstractOperation { * * @param inputPath one or more paths * @return this operation - * @see #addInputPaths(String...) + * @see #inputPaths(String...) */ public PmdOperation addInputPaths(String... inputPath) { - inputPaths_.addAll(Arrays.stream(inputPath).map(Paths::get).toList()); - return this; + return addInputPathsStrings(List.of(inputPath)); } /** @@ -182,6 +179,28 @@ public class PmdOperation extends AbstractOperation { return this; } + /** + * Adds paths to source files, or directories containing source files to analyze. + * + * @param inputPath a collection of input paths + * @return this operation + * @see #inputPathsFiles(Collection) + */ + public PmdOperation addInputPathsFiles(Collection inputPath) { + return addInputPaths(inputPath.stream().map(File::toPath).toList()); + } + + /** + * Adds paths to source files, or directories containing source files to analyze. + * + * @param inputPath a collection of input paths + * @return this operation + * @see #inputPathsStrings(Collection) + */ + public PmdOperation addInputPathsStrings(Collection inputPath) { + return addInputPaths(inputPath.stream().map(Paths::get).toList()); + } + /** * Adds new rule set paths. *

@@ -203,8 +222,7 @@ public class PmdOperation extends AbstractOperation { * @see #ruleSets(String...) */ public PmdOperation addRuleSet(String... ruleSet) { - ruleSets_.addAll(List.of(ruleSet)); - return this; + return addRuleSet(List.of(ruleSet)); } /** @@ -225,7 +243,7 @@ public class PmdOperation extends AbstractOperation { * * @param ruleSet a collection of rule set paths * @return this operation - * @see #ruleSets(Collection + * @see #ruleSets(Collection) */ public PmdOperation addRuleSet(Collection ruleSet) { ruleSets_.addAll(ruleSet); @@ -240,6 +258,21 @@ public class PmdOperation extends AbstractOperation { return this; } + /** + * Sets the location of the cache file for incremental analysis. + */ + public PmdOperation cache(File cache) { + return cache(cache.toPath()); + } + + /** + * Sets the location of the cache file for incremental analysis. + */ + public PmdOperation cache(String cache) { + return cache(Path.of(cache)); + } + + /** * Sets the default language version to be used for all input files. * @@ -247,8 +280,7 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PmdOperation defaultLanguageVersions(LanguageVersion... languageVersion) { - languageVersions_.addAll(List.of(languageVersion)); - return this; + return languageVersions(List.of(languageVersion)); } /** @@ -268,8 +300,7 @@ public class PmdOperation extends AbstractOperation { *

The valid values are the standard character sets of {@link java.nio.charset.Charset Charset}.

*/ public PmdOperation encoding(String encoding) { - encoding_ = Charset.forName(encoding); - return this; + return encoding(Charset.forName(encoding)); } /** @@ -385,8 +416,7 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PmdOperation ignoreFile(File ignoreFile) { - ignoreFile_ = ignoreFile.toPath(); - return this; + return ignoreFile(ignoreFile.toPath()); } /** @@ -396,8 +426,7 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PmdOperation ignoreFile(String ignoreFile) { - ignoreFile_ = Paths.get(ignoreFile); - return this; + return ignoreFile(Path.of(ignoreFile)); } /** @@ -495,9 +524,7 @@ public class PmdOperation extends AbstractOperation { * @see #addInputPaths(Path...) */ public PmdOperation inputPaths(Path... inputPath) { - inputPaths_.clear(); - inputPaths_.addAll(List.of(inputPath)); - return this; + return inputPaths(List.of(inputPath)); } /** @@ -510,9 +537,7 @@ public class PmdOperation extends AbstractOperation { * @see #addInputPaths(File...) */ public PmdOperation inputPaths(File... inputPath) { - inputPaths_.clear(); - inputPaths_.addAll(Arrays.stream(inputPath).map(File::toPath).toList()); - return this; + return inputPathsFiles(List.of(inputPath)); } /** @@ -525,9 +550,7 @@ public class PmdOperation extends AbstractOperation { * @see #addInputPaths(String...) */ public PmdOperation inputPaths(String... inputPath) { - inputPaths_.clear(); - inputPaths_.addAll(Arrays.stream(inputPath).map(Paths::get).toList()); - return this; + return inputPathsStrings(List.of(inputPath)); } /** @@ -537,7 +560,7 @@ public class PmdOperation extends AbstractOperation { * * @param inputPath a collection of input paths * @return this operation - * @see #addInputPaths(Collection) + * @see #addInputPaths(Path...) */ public PmdOperation inputPaths(Collection inputPath) { inputPaths_.clear(); @@ -554,6 +577,32 @@ public class PmdOperation extends AbstractOperation { return inputPaths_; } + /** + * Sets paths to source files, or directories containing source files to analyze. + *

+ * Previous entries are disregarded. + * + * @param inputPath a collection of input paths + * @return this operation + * @see #addInputPaths(File...) + */ + public PmdOperation inputPathsFiles(Collection inputPath) { + return inputPaths(inputPath.stream().map(File::toPath).toList()); + } + + /** + * Sets paths to source files, or directories containing source files to analyze. + *

+ * Previous entries are disregarded. + * + * @param inputPath a collection of input paths + * @return this operation + * @see #addInputPaths(String...) + */ + public PmdOperation inputPathsStrings(Collection inputPath) { + return inputPaths(inputPath.stream().map(Paths::get).toList()); + } + /** * Sets the default language versions. * @@ -561,8 +610,7 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PmdOperation languageVersions(LanguageVersion... languageVersion) { - languageVersions_.addAll(List.of(languageVersion)); - return this; + return languageVersions(List.of(languageVersion)); } /** @@ -667,10 +715,10 @@ public class PmdOperation extends AbstractOperation { * * @param relativeRoot one or more relative root paths * @return this operations + * @see #relativizeRoots(Collection) */ public PmdOperation relativizeRoots(Path... relativeRoot) { - relativizeRoots_.addAll(List.of(relativeRoot)); - return this; + return relativizeRoots(List.of(relativeRoot)); } /** @@ -678,10 +726,10 @@ public class PmdOperation extends AbstractOperation { * * @param relativeRoot one or more relative root paths * @return this operations + * @see #relativizeRootsFiles(Collection) */ public PmdOperation relativizeRoots(File... relativeRoot) { - relativizeRoots_.addAll(Arrays.stream(relativeRoot).map(File::toPath).toList()); - return this; + return relativizeRootsFiles(List.of(relativeRoot)); } /** @@ -689,10 +737,10 @@ public class PmdOperation extends AbstractOperation { * * @param relativeRoot one or more relative root paths * @return this operations + * @see #relativizeRootsStrings(Collection) */ public PmdOperation relativizeRoots(String... relativeRoot) { - relativizeRoots_.addAll(Arrays.stream(relativeRoot).map(Paths::get).toList()); - return this; + return relativizeRootsStrings(List.of(relativeRoot)); } /** @@ -700,6 +748,7 @@ public class PmdOperation extends AbstractOperation { * * @param relativeRoot a collection of relative root paths * @return this operations + * @see #relativizeRoots(Path...) */ public PmdOperation relativizeRoots(Collection relativeRoot) { relativizeRoots_.addAll(relativeRoot); @@ -715,6 +764,28 @@ public class PmdOperation extends AbstractOperation { return relativizeRoots_; } + /** + * Adds several paths to shorten paths that are output in the report. + * + * @param relativeRoot a collection of relative root paths + * @return this operations + * @see #relativizeRoots(File...) + */ + public PmdOperation relativizeRootsFiles(Collection relativeRoot) { + return relativizeRoots(relativeRoot.stream().map(File::toPath).toList()); + } + + /** + * Adds several paths to shorten paths that are output in the report. + * + * @param relativeRoot a collection of relative root paths + * @return this operations + * @see #relativizeRoots(String...) + */ + public PmdOperation relativizeRootsStrings(Collection relativeRoot) { + return relativizeRoots(relativeRoot.stream().map(Paths::get).toList()); + } + /** * Sets the path to the report page. * diff --git a/src/test/java/rife/bld/extension/PmdOperationTest.java b/src/test/java/rife/bld/extension/PmdOperationTest.java index 6d042a7..d9e08fb 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTest.java +++ b/src/test/java/rife/bld/extension/PmdOperationTest.java @@ -61,13 +61,13 @@ class PmdOperationTest { PmdOperation newPmdOperation() { return new PmdOperation() .inputPaths(Path.of("src/main"), Path.of("src/test")) - .cache(Paths.get("build", COMMAND_NAME, "pmd-cache")) + .cache("build/" + COMMAND_NAME + "/pmd-cache") .failOnViolation(false) .reportFile(Paths.get("build", COMMAND_NAME, "pmd-test-report.txt")); } @Test - void testAddInputPath() throws ExitStatusException { + void testAddInputPaths() throws ExitStatusException { var project = new BaseProject(); var pmd = new PmdOperation().fromProject(project); @@ -82,17 +82,35 @@ class PmdOperationTest { assertThat(pmd.inputPaths()).as("main").containsExactly(project.srcMainDirectory().toPath()); pmd.inputPaths().clear(); - pmd.addInputPaths(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); + pmd = pmd.addInputPaths(project.srcMainDirectory(), project.srcTestDirectory()); - assertThat(pmd.inputPaths()).as("toPath(main, test)").containsExactly(project.srcMainDirectory().toPath(), + assertThat(pmd.inputPaths()).as("main, test").containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); pmd.inputPaths().clear(); - pmd.addInputPaths(List.of(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath())); + pmd = pmd.addInputPathsFiles(List.of(project.srcMainDirectory(), project.srcTestDirectory())); - assertThat(pmd.inputPaths()).as("List(main, test)").containsExactly( - project.srcMainDirectory().toPath(), - project.srcTestDirectory().toPath()); + assertThat(pmd.inputPaths()).as("PathsFiles(main, test)") + .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); + + pmd.inputPaths().clear(); + pmd = pmd.addInputPathsStrings( + List.of(project.srcMainDirectory().getAbsolutePath(), project.srcTestDirectory().getAbsolutePath())); + + assertThat(pmd.inputPaths()).as("PathsStrings(main, test)") + .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); + + pmd.inputPaths().clear(); + pmd = pmd.addInputPaths(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); + + assertThat(pmd.inputPaths()).as("toPath(main, test)") + .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); + + pmd.inputPaths().clear(); + pmd = pmd.addInputPaths(List.of(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath())); + + assertThat(pmd.inputPaths()).as("List(main, test)") + .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) .isGreaterThan(0).isEqualTo(err); @@ -124,7 +142,10 @@ class PmdOperationTest { @Test void testCache() throws ExitStatusException { 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); var f = cache.toFile(); assertThat(f.exists()).as("file exits").isTrue(); @@ -213,7 +234,31 @@ class PmdOperationTest { var pmd = newPmdOperation() .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .inputPaths(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); - assertThat(pmd.inputPaths()).contains(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.inputPaths()).as("paths").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); + + pmd = newPmdOperation() + .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) + .inputPaths(ERROR_PRONE_SAMPLE.toFile(), CODE_STYLE_SAMPLE.toFile()); + assertThat(pmd.inputPaths()).as("toFile()").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); + + pmd = newPmdOperation() + .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) + .inputPaths(ERROR_PRONE_SAMPLE.toString(), CODE_STYLE_SAMPLE.toString()); + assertThat(pmd.inputPaths()).as("toString").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); + + pmd = newPmdOperation() + .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) + .inputPathsFiles(List.of(ERROR_PRONE_SAMPLE.toFile(), CODE_STYLE_SAMPLE.toFile())); + assertThat(pmd.inputPaths()).as("PathsFiles").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); + + pmd = newPmdOperation() + .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) + .inputPathsStrings(List.of(ERROR_PRONE_SAMPLE.toString(), CODE_STYLE_SAMPLE.toString())); + assertThat(pmd.inputPaths()).as("PathsStrings").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); } @@ -235,6 +280,7 @@ class PmdOperationTest { var pmd = newPmdOperation().ruleSets(CODE_STYLE_XML).inputPaths(CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) .as("code style").isGreaterThan(0); + pmd = pmd.ruleSets(ERROR_PRONE_XML).inputPaths(ERROR_PRONE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) .as("code style + error prone").isGreaterThan(0); @@ -245,7 +291,7 @@ class PmdOperationTest { var pmd = newPmdOperation() .ruleSets(DESIGN_XML) .inputPaths("src/test/resources/java/Design.java") - .cache(Path.of("build/pmd/design-cache")); + .cache(new File("build/pmd/design-cache")); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); } @@ -336,6 +382,18 @@ class PmdOperationTest { var config = pmd.initConfiguration(COMMAND_NAME); assertThat(config.getRelativizeRoots()).isEqualTo(pmd.relativizeRoots()); assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz, foo, bar, baz); + + pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) + .relativizeRootsFiles(List.of(foo.toFile(), bar.toFile(), baz.toFile())); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getRelativizeRoots()).as("toFile").isEqualTo(pmd.relativizeRoots()); + assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz); + + pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) + .relativizeRootsStrings(List.of(foo.toString(), bar.toString(), baz.toString())); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getRelativizeRoots()).as("toString").isEqualTo(pmd.relativizeRoots()); + assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz); } @Test From 3e18345efe3d439a80918621dbe468a4ba3e915a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Thu, 29 Aug 2024 21:57:24 -0700 Subject: [PATCH 02/43] Bumped bld to version 2.1.0 --- .idea/libraries/bld.xml | 4 ++-- .idea/libraries/compile.xml | 4 ++-- .idea/libraries/runtime.xml | 4 ++-- .idea/libraries/test.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- lib/bld/bld-wrapper.jar | Bin 29577 -> 30440 bytes lib/bld/bld-wrapper.properties | 2 +- .../rife/bld/extension/PmdOperationBuild.java | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 4dd96bf..5c4010c 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.idea/libraries/compile.xml b/.idea/libraries/compile.xml index 9bd86aa..99cc0c0 100644 --- a/.idea/libraries/compile.xml +++ b/.idea/libraries/compile.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/runtime.xml b/.idea/libraries/runtime.xml index 81feb0b..56ddbf1 100644 --- a/.idea/libraries/runtime.xml +++ b/.idea/libraries/runtime.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.idea/libraries/test.xml b/.idea/libraries/test.xml index 13b6513..f72f7a3 100644 --- a/.idea/libraries/test.xml +++ b/.idea/libraries/test.xml @@ -7,7 +7,7 @@ - - + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 5b2667b..4c33beb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.0.1.jar", + "${HOME}/.bld/dist/bld-2.1.0.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 4f29dea..00dbca3 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.0.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.1.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pmd/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pmd) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pmd/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pmd) [![GitHub CI](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml) diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index fec2c9a8e0ac75ac4f45f4c3ee5d63936ef998fe..3133172c83965f4deeb5ac55a4e662cbbf054ea9 100644 GIT binary patch delta 15855 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

s$*rls@!sHBO;ZCZI;P{yKGwD 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 L_^*Fz5Rm@|(nu+4 diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 8b07b8b..e011e70 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,4 +2,4 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES -bld.version=2.0.1 +bld.version=2.1.0 diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index ed1ec9a..d37be67 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -41,7 +41,7 @@ public class PmdOperationBuild extends Project { var pmd = version(7, 4, 0); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(2, 0, 1))) + .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); From 176929cd290687d9f9fb112a79e4cab5b4921c49 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 30 Aug 2024 11:00:20 -0700 Subject: [PATCH 03/43] Bumped PMD to version 7.5.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index d37be67..beea01b 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -39,7 +39,7 @@ public class PmdOperationBuild extends Project { autoDownloadPurge = true; repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 4, 0); + var pmd = version(7, 5, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From 47c0b14ce9e6c1dae0f46e5c2ff55aea01d0129e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 30 Aug 2024 11:38:44 -0700 Subject: [PATCH 04/43] Minor cleanups --- .../java/rife/bld/extension/PmdOperation.java | 16 +++----- .../rife/bld/extension/PmdOperationTest.java | 38 ++++++++++--------- 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/main/java/rife/bld/extension/PmdOperation.java b/src/main/java/rife/bld/extension/PmdOperation.java index ff67cae..5b4cfde 100644 --- a/src/main/java/rife/bld/extension/PmdOperation.java +++ b/src/main/java/rife/bld/extension/PmdOperation.java @@ -560,7 +560,7 @@ public class PmdOperation extends AbstractOperation { * * @param inputPath a collection of input paths * @return this operation - * @see #addInputPaths(Path...) + * @see #addInputPaths(Collection) */ public PmdOperation inputPaths(Collection inputPath) { inputPaths_.clear(); @@ -584,7 +584,7 @@ public class PmdOperation extends AbstractOperation { * * @param inputPath a collection of input paths * @return this operation - * @see #addInputPaths(File...) + * @see #addInputPathsFiles(Collection) ) */ public PmdOperation inputPathsFiles(Collection inputPath) { return inputPaths(inputPath.stream().map(File::toPath).toList()); @@ -597,7 +597,7 @@ public class PmdOperation extends AbstractOperation { * * @param inputPath a collection of input paths * @return this operation - * @see #addInputPaths(String...) + * @see #addInputPathsStrings(Collection) */ public PmdOperation inputPathsStrings(Collection inputPath) { return inputPaths(inputPath.stream().map(Paths::get).toList()); @@ -804,8 +804,7 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PmdOperation reportFile(File reportFile) { - reportFile_ = reportFile.toPath(); - return this; + return reportFile(reportFile.toPath()); } /** @@ -815,8 +814,7 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PmdOperation reportFile(String reportFile) { - reportFile_ = Paths.get(reportFile); - return this; + return reportFile(Paths.get(reportFile)); } /** @@ -871,9 +869,7 @@ public class PmdOperation extends AbstractOperation { * @see #addRuleSet(String...) */ public PmdOperation ruleSets(String... ruleSet) { - ruleSets_.clear(); - ruleSets_.addAll(List.of(ruleSet)); - return this; + return ruleSets(List.of(ruleSet)); } /** diff --git a/src/test/java/rife/bld/extension/PmdOperationTest.java b/src/test/java/rife/bld/extension/PmdOperationTest.java index d9e08fb..80f7169 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTest.java +++ b/src/test/java/rife/bld/extension/PmdOperationTest.java @@ -76,40 +76,42 @@ class PmdOperationTest { var err = pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME)); - pmd.inputPaths().clear(); - pmd.addInputPaths(project.srcMainDirectory()); - - assertThat(pmd.inputPaths()).as("main").containsExactly(project.srcMainDirectory().toPath()); - pmd.inputPaths().clear(); pmd = pmd.addInputPaths(project.srcMainDirectory(), project.srcTestDirectory()); - assertThat(pmd.inputPaths()).as("main, test").containsExactly(project.srcMainDirectory().toPath(), + assertThat(pmd.inputPaths()).as("File...").containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); pmd.inputPaths().clear(); pmd = pmd.addInputPathsFiles(List.of(project.srcMainDirectory(), project.srcTestDirectory())); - assertThat(pmd.inputPaths()).as("PathsFiles(main, test)") + assertThat(pmd.inputPaths()).as("List(File...)") + .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); + + pmd.inputPaths().clear(); + pmd = pmd.addInputPaths(project.srcMainDirectory().getAbsolutePath(), + project.srcTestDirectory().getAbsolutePath()); + + assertThat(pmd.inputPaths()).as("String...") .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); pmd.inputPaths().clear(); pmd = pmd.addInputPathsStrings( List.of(project.srcMainDirectory().getAbsolutePath(), project.srcTestDirectory().getAbsolutePath())); - assertThat(pmd.inputPaths()).as("PathsStrings(main, test)") + assertThat(pmd.inputPaths()).as("List(String...)") .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); pmd.inputPaths().clear(); pmd = pmd.addInputPaths(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); - assertThat(pmd.inputPaths()).as("toPath(main, test)") + assertThat(pmd.inputPaths()).as("Path...") .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); pmd.inputPaths().clear(); pmd = pmd.addInputPaths(List.of(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath())); - assertThat(pmd.inputPaths()).as("List(main, test)") + assertThat(pmd.inputPaths()).as("List(Path)") .containsExactly(project.srcMainDirectory().toPath(), project.srcTestDirectory().toPath()); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))) @@ -234,31 +236,31 @@ class PmdOperationTest { var pmd = newPmdOperation() .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .inputPaths(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); - assertThat(pmd.inputPaths()).as("paths").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.inputPaths()).as("Path....").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); pmd = newPmdOperation() .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .inputPaths(ERROR_PRONE_SAMPLE.toFile(), CODE_STYLE_SAMPLE.toFile()); - assertThat(pmd.inputPaths()).as("toFile()").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.inputPaths()).as("File...").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); pmd = newPmdOperation() .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .inputPaths(ERROR_PRONE_SAMPLE.toString(), CODE_STYLE_SAMPLE.toString()); - assertThat(pmd.inputPaths()).as("toString").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.inputPaths()).as("String...").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); pmd = newPmdOperation() .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .inputPathsFiles(List.of(ERROR_PRONE_SAMPLE.toFile(), CODE_STYLE_SAMPLE.toFile())); - assertThat(pmd.inputPaths()).as("PathsFiles").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.inputPaths()).as("List(Path...)").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); pmd = newPmdOperation() .ruleSets(PmdOperation.RULE_SET_DEFAULT, CODE_STYLE_XML) .inputPathsStrings(List.of(ERROR_PRONE_SAMPLE.toString(), CODE_STYLE_SAMPLE.toString())); - assertThat(pmd.inputPaths()).as("PathsStrings").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); + assertThat(pmd.inputPaths()).as("List(String...)").containsExactly(ERROR_PRONE_SAMPLE, CODE_STYLE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); } @@ -347,7 +349,7 @@ class PmdOperationTest { var pmd = newPmdOperation() .forceLanguageVersion(language.getLatestVersion()) .defaultLanguageVersions(language.getVersions()) - .languageVersions(language.getVersion("22")) + .languageVersions(language.getDefaultVersion()) .ruleSets(PmdOperation.RULE_SET_DEFAULT); assertThat(pmd.languageVersions()).contains(language.getDefaultVersion()); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); @@ -386,13 +388,13 @@ class PmdOperationTest { pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) .relativizeRootsFiles(List.of(foo.toFile(), bar.toFile(), baz.toFile())); config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getRelativizeRoots()).as("toFile").isEqualTo(pmd.relativizeRoots()); + assertThat(config.getRelativizeRoots()).as("List(File...)").isEqualTo(pmd.relativizeRoots()); assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz); pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) .relativizeRootsStrings(List.of(foo.toString(), bar.toString(), baz.toString())); config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getRelativizeRoots()).as("toString").isEqualTo(pmd.relativizeRoots()); + assertThat(config.getRelativizeRoots()).as("List(String....)").isEqualTo(pmd.relativizeRoots()); assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz); } From d20f3e41b8fb051d32a4cd4d74fdc28d49a13f43 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 30 Aug 2024 11:43:07 -0700 Subject: [PATCH 05/43] Version 1.1.5 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index beea01b..eb8eda4 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 5, "SNAPSHOT"); + version = version(1, 1, 5); javaRelease = 17; From a986add8ee7c8e0077f59d6a5c263472b958dd8f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 29 Sep 2024 04:26:17 -0700 Subject: [PATCH 06/43] Bumped JUnit to version 5.11.1 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index eb8eda4..2f5b91a 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -46,8 +46,8 @@ public class PmdOperationBuild extends Project { scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 0))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 1))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 1))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation() From 22b7ab9220e4f55dac455b3dafdee3e5bc9f8df7 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 29 Sep 2024 04:29:43 -0700 Subject: [PATCH 07/43] Bumped PMD to version 7.6.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 2f5b91a..d22e068 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -39,7 +39,7 @@ public class PmdOperationBuild extends Project { autoDownloadPurge = true; repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 5, 0); + var pmd = version(7, 6, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From 3b0550add2c4198cb5e827dd166999692fead2dc Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 29 Sep 2024 04:31:20 -0700 Subject: [PATCH 08/43] Added GitHub repository --- .../rife/bld/extension/PmdOperationBuild.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index d22e068..dc92299 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -37,6 +37,7 @@ public class PmdOperationBuild extends Project { downloadSources = true; autoDownloadPurge = true; + repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); var pmd = version(7, 6, 0); @@ -59,29 +60,26 @@ public class PmdOperationBuild extends Project { .link("https://javadoc.io/doc/net.sourceforge.pmd/pmd-core/latest/"); publishOperation() - // .repository(MAVEN_LOCAL) .repository(version.isSnapshot() ? repository("rife2-snapshot") : repository("rife2")) + .repository(repository("github")) .info() .groupId("com.uwyn.rife2") .artifactId("bld-pmd") .description("bld Extension to Perform Static Code Analysis with PMD") .url("https://github.com/rife2/bld-pmd") - .developer( - new PublishDeveloper() - .id("ethauvin").name("Erik C. Thauvin") - .email("erik@thauvin.net") - .url("https://erik.thauvin.net/") + .developer(new PublishDeveloper() + .id("ethauvin").name("Erik C. Thauvin") + .email("erik@thauvin.net") + .url("https://erik.thauvin.net/") ) - .license( - new PublishLicense() - .name("The Apache License, Version 2.0") - .url("https://www.apache.org/licenses/LICENSE-2.0.txt") + .license(new PublishLicense() + .name("The Apache License, Version 2.0") + .url("https://www.apache.org/licenses/LICENSE-2.0.txt") ) - .scm( - new PublishScm() - .connection("scm:git:https://github.com/rife2/bld-pmd.git") - .developerConnection("scm:git:git@github.com:rife2/bld-pmd.git") - .url("https://github.com/rife2/bld-pmd") + .scm(new PublishScm() + .connection("scm:git:https://github.com/rife2/bld-pmd.git") + .developerConnection("scm:git:git@github.com:rife2/bld-pmd.git") + .url("https://github.com/rife2/bld-pmd") ) .signKey(property("sign.key")) .signPassphrase(property("sign.passphrase")); From 592c0c514d6c6162bbbe8c26ac5c4d595a210896 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 29 Sep 2024 04:31:57 -0700 Subject: [PATCH 09/43] Cleaned up tests --- .../rife/bld/extension/PmdOperationTest.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/test/java/rife/bld/extension/PmdOperationTest.java b/src/test/java/rife/bld/extension/PmdOperationTest.java index 80f7169..be3894e 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTest.java +++ b/src/test/java/rife/bld/extension/PmdOperationTest.java @@ -19,6 +19,7 @@ package rife.bld.extension; import net.sourceforge.pmd.PMDConfiguration; import net.sourceforge.pmd.lang.LanguageRegistry; import net.sourceforge.pmd.lang.rule.RulePriority; +import org.assertj.core.api.AutoCloseableSoftAssertions; import org.junit.jupiter.api.Test; import rife.bld.BaseProject; import rife.bld.operations.exceptions.ExitStatusException; @@ -382,20 +383,20 @@ class PmdOperationTest { var pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)).relativizeRoots(foo).relativizeRoots(bar.toFile()) .relativizeRoots(baz.toString()).relativizeRoots(List.of(foo, bar, baz)); var config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getRelativizeRoots()).isEqualTo(pmd.relativizeRoots()); - assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz, foo, bar, baz); + assertThat(config.getRelativizeRoots()).isEqualTo(pmd.relativizeRoots()) + .containsExactly(foo, bar, baz, foo, bar, baz); pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) .relativizeRootsFiles(List.of(foo.toFile(), bar.toFile(), baz.toFile())); config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getRelativizeRoots()).as("List(File...)").isEqualTo(pmd.relativizeRoots()); - assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz); + assertThat(config.getRelativizeRoots()).as("List(File...)").isEqualTo(pmd.relativizeRoots()) + .containsExactly(foo, bar, baz); pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) .relativizeRootsStrings(List.of(foo.toString(), bar.toString(), baz.toString())); config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getRelativizeRoots()).as("List(String....)").isEqualTo(pmd.relativizeRoots()); - assertThat(config.getRelativizeRoots()).containsExactly(foo, bar, baz); + assertThat(config.getRelativizeRoots()).as("List(String....)").isEqualTo(pmd.relativizeRoots()) + .containsExactly(foo, bar, baz); } @Test @@ -419,8 +420,11 @@ class PmdOperationTest { void testReportFormat() throws IOException, ExitStatusException { var pmd = newPmdOperation().ruleSets(ERROR_PRONE_XML).reportFormat("xml").inputPaths(ERROR_PRONE_SAMPLE); assertThat(pmd.performPmdAnalysis(TEST, pmd.initConfiguration(COMMAND_NAME))).isGreaterThan(0); - try (var br = Files.newBufferedReader(pmd.reportFile())) { - assertThat(br.readLine()).as("xml report").startsWith(""); + try (var softly = new AutoCloseableSoftAssertions()) { + try (var br = Files.newBufferedReader(pmd.reportFile())) { + softly.assertThat(br.readLine()).as("xml report") + .startsWith(""); + } } } From f46d75c2fedd0fb41d4fd06ab07ae57467154332 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 29 Sep 2024 04:34:30 -0700 Subject: [PATCH 10/43] Version 1.1.6 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index dc92299..f0eeace 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 5); + version = version(1, 1, 6); javaRelease = 17; From 5c33fd2a1592f96b9497612065d4f04465b9c88e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 25 Oct 2024 11:53:21 -0700 Subject: [PATCH 11/43] Bumped JDK to version 23 (GitHub CI testing) --- .github/workflows/bld.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index bf65051..f7e10f8 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [17, 21, 22] + java-version: [17, 21, 23] steps: - name: Checkout source repository From 4af11d862bf0ad55afd2bcbb809ac2020c12455c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 25 Oct 2024 11:54:20 -0700 Subject: [PATCH 12/43] Bumped JUnit to version 5.11.3 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index f0eeace..409c982 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -47,8 +47,8 @@ public class PmdOperationBuild extends Project { scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 1))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 1))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))) .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); javadocOperation() From c7e5731d9e37f8b51f634ba8273ba64ef29d7457 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 25 Oct 2024 11:54:47 -0700 Subject: [PATCH 13/43] Bumped PMD to version 7.7.0 --- config/pmd.xml | 4 ++-- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/config/pmd.xml b/config/pmd.xml index 3d3203c..2641880 100644 --- a/config/pmd.xml +++ b/config/pmd.xml @@ -7,9 +7,9 @@ - - + + diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 409c982..8c8bd5e 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,7 +40,7 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 6, 0); + var pmd = version(7, 7, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From f58d4ac052d1f62e353a5b762a0ad7571fdfb915 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 25 Oct 2024 12:11:31 -0700 Subject: [PATCH 14/43] Version 1.1.7 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 8c8bd5e..c7e57d6 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 6); + version = version(1, 1, 7); javaRelease = 17; From 21edab586bf173aefcb26e44802bf70ae09f6079 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 29 Nov 2024 07:33:22 -0800 Subject: [PATCH 15/43] Bumped PMD to version 7.8.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index c7e57d6..ad9c788 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,7 +40,7 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 7, 0); + var pmd = version(7, 8, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From 586e4a0e19c8ac09aa4404973546fc137042272f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 29 Nov 2024 07:37:53 -0800 Subject: [PATCH 16/43] Version 1.1.8 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index ad9c788..9e7e209 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 7); + version = version(1, 1, 8); javaRelease = 17; From dfdc311607c7788a594ea94c565e05e0b2581754 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 27 Dec 2024 07:18:32 -0800 Subject: [PATCH 17/43] Updated dependencies Bumped PMD to version 7.9.0 Bumped JUnit to version 5.11.4 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 9e7e209..fec016b 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,16 +40,16 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 8, 0); + var pmd = version(7, 9, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 1, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 3))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 3))) - .include(dependency("org.assertj", "assertj-core", version(3, 26, 3))); + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) + .include(dependency("org.assertj", "assertj-core", version(3, 27, 0))); javadocOperation() .javadocOptions() From e7b366eaf0032d5ac0ade2b3d4e543aae53756fd Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 27 Dec 2024 07:19:07 -0800 Subject: [PATCH 18/43] Version 1.1.9 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index fec016b..96c971f 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 8); + version = version(1, 1, 9); javaRelease = 17; From 9184979e2ffaf5bab1d8c48d9c79ee30dd8b9e70 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 13 Jan 2025 07:55:21 -0800 Subject: [PATCH 19/43] Bumped bld to version 2.2.0 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes lib/bld/bld-wrapper.properties | 2 +- .../rife/bld/extension/PmdOperationBuild.java | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 5c4010c..553c281 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index 4c33beb..a3f4fd0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.1.0.jar", + "${HOME}/.bld/dist/bld-2.2.0.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 00dbca3..0bdcd9e 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.1.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pmd/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pmd) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pmd/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pmd) [![GitHub CI](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml) diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index 3133172c83965f4deeb5ac55a4e662cbbf054ea9..ed94afd16519c4e36ee7021c1d0bf621cbef8bb2 100644 GIT binary patch delta 203 zcmaFymhr_~M!o=VW)=|!4h{~6zZ12iCi2y?fas0=CN^NkqnshM0T=HiJZzMV+Mu*Z+4E3GxFi=3=9mcKpf!B$Rxsmuy1l+ qi4(-0EhQdc#-!3 Date: Mon, 13 Jan 2025 07:57:34 -0800 Subject: [PATCH 20/43] Updated copyright for 2025 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- src/main/java/rife/bld/extension/PmdOperation.java | 2 +- src/test/java/rife/bld/extension/PmdOperationTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index c614973..96211ca 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/main/java/rife/bld/extension/PmdOperation.java b/src/main/java/rife/bld/extension/PmdOperation.java index 5b4cfde..0e5ef6f 100644 --- a/src/main/java/rife/bld/extension/PmdOperation.java +++ b/src/main/java/rife/bld/extension/PmdOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/test/java/rife/bld/extension/PmdOperationTest.java b/src/test/java/rife/bld/extension/PmdOperationTest.java index be3894e..08df70f 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTest.java +++ b/src/test/java/rife/bld/extension/PmdOperationTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 the original author or authors. + * Copyright 2023-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 682c50e949ca076477d6d518941be1e71166244c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 13 Jan 2025 07:59:28 -0800 Subject: [PATCH 21/43] Version 1.1.10-SNAPSHOT --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 96211ca..ea86861 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 9); + version = version(1, 1, 10, "SNAPSHOT"); javaRelease = 17; From 28f9d29d9af396244167c0ee08913ac02509ead4 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 14 Jan 2025 10:11:41 -0800 Subject: [PATCH 22/43] Version 1.1.10 --- .idea/icon.svg | 13 +++++++++++++ .../java/rife/bld/extension/PmdOperationBuild.java | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 .idea/icon.svg diff --git a/.idea/icon.svg b/.idea/icon.svg new file mode 100644 index 0000000..81220b4 --- /dev/null +++ b/.idea/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index ea86861..eb43550 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 10, "SNAPSHOT"); + version = version(1, 1, 10); javaRelease = 17; From 71253717bf427a8a84d4c47e257959f4527aa75e Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 31 Jan 2025 14:00:22 -0800 Subject: [PATCH 23/43] Bumped artifact and pages actions to the latest versions --- .github/workflows/pages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml index bf43624..508f6a5 100644 --- a/.github/workflows/pages.yml +++ b/.github/workflows/pages.yml @@ -47,11 +47,11 @@ jobs: uses: actions/configure-pages@v3 - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v3 with: # Upload generated Javadocs repository path: "build/javadoc/" - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 + uses: actions/deploy-pages@v4 From bc60dcbcf856ac73eb18848323a11795055578f8 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 31 Jan 2025 14:00:57 -0800 Subject: [PATCH 24/43] Bumped AssertJ to version 3.27.3 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index eb43550..d7c18ec 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -49,7 +49,7 @@ public class PmdOperationBuild extends Project { scope(test) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) - .include(dependency("org.assertj", "assertj-core", version(3, 27, 2))); + .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() .javadocOptions() From a1d0b30968ce16caae100f4c67300e08adbff1f8 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 31 Jan 2025 14:03:39 -0800 Subject: [PATCH 25/43] Added missing prepend classpath and excludes options --- .../java/rife/bld/extension/PmdOperation.java | 127 +++++++++++++++--- .../rife/bld/extension/PmdOperationTest.java | 24 ++++ 2 files changed, 136 insertions(+), 15 deletions(-) diff --git a/src/main/java/rife/bld/extension/PmdOperation.java b/src/main/java/rife/bld/extension/PmdOperation.java index 0e5ef6f..aa0a61d 100644 --- a/src/main/java/rife/bld/extension/PmdOperation.java +++ b/src/main/java/rife/bld/extension/PmdOperation.java @@ -49,6 +49,10 @@ public class PmdOperation extends AbstractOperation { public static final String RULE_SET_DEFAULT = "rulesets/java/quickstart.xml"; private static final Logger LOGGER = Logger.getLogger(PmdOperation.class.getName()); private static final String PMD_DIR = "pmd"; + /** + * The list of paths to exclude. + */ + private final List excludes_ = new ArrayList<>(); /** * The input paths (source) list. */ @@ -101,6 +105,10 @@ public class PmdOperation extends AbstractOperation { * The default language version(s). */ private Collection languageVersions_ = new ArrayList<>(); + /** + * The classpath to prepend. + */ + private String prependClasspath_; /** * The project reference. */ @@ -272,7 +280,6 @@ public class PmdOperation extends AbstractOperation { return cache(Path.of(cache)); } - /** * Sets the default language version to be used for all input files. * @@ -314,6 +321,37 @@ public class PmdOperation extends AbstractOperation { return this; } + /** + * Adds paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + */ + public PmdOperation excludes(Path... excludes) { + excludes_.addAll(List.of(excludes)); + return this; + } + + /** + * Adds paths to exclude from the analysis. + * + * @param excludes paths to exclude + * @return this operation + */ + public PmdOperation excludes(Collection excludes) { + excludes_.addAll(excludes); + return this; + } + + /** + * Returns the paths to exclude from the analysis. + * + * @return the exclude paths + */ + public List excludes() { + return excludes_; + } + /** * Performs the PMD code analysis operation. */ @@ -456,8 +494,17 @@ public class PmdOperation extends AbstractOperation { * @return this operation */ public PMDConfiguration initConfiguration(String commandName) { - PMDConfiguration config = new PMDConfiguration(); + var config = new PMDConfiguration(); + // addRelativizeRoots + config.addRelativizeRoots(relativizeRoots_.stream().toList()); + + // prependAuxClasspath + if (prependClasspath_ != null) { + config.prependAuxClasspath(prependClasspath_); + } + + // setAnalysisCacheLocation if (cache_ == null && project_ != null && incrementalAnalysis_) { config.setAnalysisCacheLocation( Paths.get(project_.buildDirectory().getPath(), PMD_DIR, PMD_DIR + "-cache").toFile().getAbsolutePath()); @@ -465,38 +512,50 @@ public class PmdOperation extends AbstractOperation { config.setAnalysisCacheLocation(cache_.toFile().getAbsolutePath()); } - config.setFailOnError(failOnError_); - config.setFailOnViolation(failOnViolation_); - + // setDefaultLanguageVersions if (languageVersions_ != null) { config.setDefaultLanguageVersions(languageVersions_.stream().toList()); } + // setExcludes + if (!excludes_.isEmpty()) { + config.setExcludes(excludes_); + } + + // setFailOnError + config.setFailOnError(failOnError_); + // setFailOnViolation + config.setFailOnViolation(failOnViolation_); + + // setForceLanguageVersion if (forcedLanguageVersion_ != null) { config.setForceLanguageVersion(forcedLanguageVersion_); } + // setIgnoreFilePath if (ignoreFile_ != null) { config.setIgnoreFilePath(ignoreFile_); } + // setIgnoreIncrementalAnalysis config.setIgnoreIncrementalAnalysis(!incrementalAnalysis_); + // setInputPathList if (inputPaths_.isEmpty()) { throw new IllegalArgumentException(commandName + ": InputPaths required."); } else { config.setInputPathList(inputPaths_.stream().toList()); } - if (reportProperties_ != null) { - config.setReportProperties(reportProperties_); - } + // setInputUri if (inputUri_ != null) { config.setInputUri(inputUri_); } + // setMinimumPriority config.setMinimumPriority(rulePriority_); + // setReportFile if (project_ != null) { config.setReportFile(Objects.requireNonNullElseGet(reportFile_, () -> Paths.get(project_.buildDirectory().getPath(), @@ -505,12 +564,25 @@ public class PmdOperation extends AbstractOperation { config.setReportFile(reportFile_); } - config.addRelativizeRoots(relativizeRoots_.stream().toList()); + // setReportFormat config.setReportFormat(reportFormat_); + + // setReportProperties + if (reportProperties_ != null) { + config.setReportProperties(reportProperties_); + } + + // setRuleSets config.setRuleSets(ruleSets_.stream().toList()); + + // setShowSuppressedViolations config.setShowSuppressedViolations(showSuppressed_); + // setSourceEncoding config.setSourceEncoding(encoding_); + // setSuppressMarker config.setSuppressMarker(suppressedMarker_); + + // setThreads config.setThreads(threads_); return config; @@ -710,11 +782,36 @@ public class PmdOperation extends AbstractOperation { return numViolations; } + /** + * Prepend the specified classpath like string to the current ClassLoader of the configuration. If no ClassLoader + * is currently configured, the ClassLoader used to load the PMDConfiguration class will be used as the parent + * ClassLoader of the created ClassLoader. + *

+ * If the classpath String looks like a URL to a file (i.e. starts with {@code file://}) the file will be read with + * each line representing an entry on the classpath. + * + * @param classpath one or more classpath + * @return this operation + */ + public PmdOperation prependAuxClasspath(String... classpath) { + prependClasspath_ = String.join(File.pathSeparator, classpath); + return this; + } + + /** + * Returns the prepended classpath. + * + * @return the classpath + */ + public String prependAuxClasspath() { + return prependClasspath_; + } + /** * Adds several paths to shorten paths that are output in the report. * * @param relativeRoot one or more relative root paths - * @return this operations + * @return this operation * @see #relativizeRoots(Collection) */ public PmdOperation relativizeRoots(Path... relativeRoot) { @@ -725,7 +822,7 @@ public class PmdOperation extends AbstractOperation { * Adds several paths to shorten paths that are output in the report. * * @param relativeRoot one or more relative root paths - * @return this operations + * @return this operation * @see #relativizeRootsFiles(Collection) */ public PmdOperation relativizeRoots(File... relativeRoot) { @@ -736,7 +833,7 @@ public class PmdOperation extends AbstractOperation { * Adds several paths to shorten paths that are output in the report. * * @param relativeRoot one or more relative root paths - * @return this operations + * @return this operation * @see #relativizeRootsStrings(Collection) */ public PmdOperation relativizeRoots(String... relativeRoot) { @@ -747,7 +844,7 @@ public class PmdOperation extends AbstractOperation { * Adds several paths to shorten paths that are output in the report. * * @param relativeRoot a collection of relative root paths - * @return this operations + * @return this operation * @see #relativizeRoots(Path...) */ public PmdOperation relativizeRoots(Collection relativeRoot) { @@ -768,7 +865,7 @@ public class PmdOperation extends AbstractOperation { * Adds several paths to shorten paths that are output in the report. * * @param relativeRoot a collection of relative root paths - * @return this operations + * @return this operation * @see #relativizeRoots(File...) */ public PmdOperation relativizeRootsFiles(Collection relativeRoot) { @@ -779,7 +876,7 @@ public class PmdOperation extends AbstractOperation { * Adds several paths to shorten paths that are output in the report. * * @param relativeRoot a collection of relative root paths - * @return this operations + * @return this operation * @see #relativizeRoots(String...) */ public PmdOperation relativizeRootsStrings(Collection relativeRoot) { diff --git a/src/test/java/rife/bld/extension/PmdOperationTest.java b/src/test/java/rife/bld/extension/PmdOperationTest.java index 08df70f..48545e5 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTest.java +++ b/src/test/java/rife/bld/extension/PmdOperationTest.java @@ -166,6 +166,24 @@ class PmdOperationTest { assertThat(config.getSourceEncoding()).as("ISO_8859").isEqualTo(StandardCharsets.ISO_8859_1); } + @Test + void testExcludes() { + var foo = Path.of("foo/bar"); + var bar = Path.of("bar/foo"); + var foz = Path.of("foz/baz"); + var baz = Path.of("baz/foz"); + + var excludes = List.of(foo, bar); + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludes(excludes); + var config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(excludes.toArray(new Path[0])); + + pmd = pmd.excludes(baz, foz); + assertThat(pmd.excludes()).hasSize(4); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).hasSize(4).contains(bar, foz); + } + @Test void testExecute() throws ExitStatusException { var pmd = new PmdOperation().fromProject(new BaseProject()); @@ -368,6 +386,12 @@ class PmdOperationTest { assertThat(pmd).isEqualTo(0); } + @Test + void testPrependAuxClasspath() { + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).prependAuxClasspath("foo", "bar"); + assertThat(pmd.prependAuxClasspath()).isEqualTo("foo" + File.pathSeparator + "bar"); + } + @Test void testPriority() throws ExitStatusException { var pmd = newPmdOperation().inputPaths(CODE_STYLE_SAMPLE).minimumPriority(RulePriority.HIGH); From e7fac3130b78dbb7d1a710bda9c103678a9f142c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 31 Jan 2025 14:04:08 -0800 Subject: [PATCH 26/43] Bumped PMD to version 7.10.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index d7c18ec..bb7319c 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,7 +40,7 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 9, 0); + var pmd = version(7, 10, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 0))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From 25bce33323f205f7ab6030ca1931f995c9f4f0b5 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 31 Jan 2025 14:07:34 -0800 Subject: [PATCH 27/43] Version 1.1.11 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index bb7319c..616d5d5 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 10); + version = version(1, 1, 11); javaRelease = 17; From af25b2f5073dd22dc99cf7d0901ea0920dac27c3 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 1 Feb 2025 12:47:55 -0800 Subject: [PATCH 28/43] BREAKING: reworked excludes methods and added addExcludes methods --- .../java/rife/bld/extension/PmdOperation.java | 140 +++++++++++++++++- .../rife/bld/extension/PmdOperationTest.java | 113 +++++++++++--- 2 files changed, 226 insertions(+), 27 deletions(-) diff --git a/src/main/java/rife/bld/extension/PmdOperation.java b/src/main/java/rife/bld/extension/PmdOperation.java index aa0a61d..25b25c6 100644 --- a/src/main/java/rife/bld/extension/PmdOperation.java +++ b/src/main/java/rife/bld/extension/PmdOperation.java @@ -52,7 +52,7 @@ public class PmdOperation extends AbstractOperation { /** * The list of paths to exclude. */ - private final List excludes_ = new ArrayList<>(); + private final Collection excludes_ = new ArrayList<>(); /** * The input paths (source) list. */ @@ -142,6 +142,79 @@ public class PmdOperation extends AbstractOperation { */ private int threads_ = 1; + /** + * Adds paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludes(Path...) + * @since 1.2.0 + */ + public PmdOperation addExcludes(Path... excludes) { + return addExcludes(List.of(excludes)); + } + + /** + * Adds paths to exclude from the analysis. + * + * @param excludes paths to exclude + * @return this operation + * @see #excludes(Collection) + * @since 1.2.0 + */ + public PmdOperation addExcludes(Collection excludes) { + excludes_.addAll(excludes); + return this; + } + + /** + * Adds paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesFiles(Collection) + * @since 1.2.0 + */ + public PmdOperation addExcludesFiles(Collection excludes) { + return addExcludes(excludes.stream().map(File::toPath).toList()); + } + + /** + * Adds paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesFiles(File...) + * @since 1.2.0 + */ + public PmdOperation addExcludesFiles(File... excludes) { + return addExcludesFiles(List.of(excludes)); + } + + /** + * Adds paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesStrings(Collection) + * @since 1.2.0 + */ + public PmdOperation addExcludesStrings(Collection excludes) { + return addExcludes(excludes.stream().map(Paths::get).toList()); + } + + /** + * Adds paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesStrings(String...) + * @since 1.2.0 + */ + public PmdOperation addExcludesStrings(String... excludes) { + return addExcludesStrings(List.of(excludes)); + } + /** * Adds paths to source files, or directories containing source files to analyze.\ * @@ -322,23 +395,26 @@ public class PmdOperation extends AbstractOperation { } /** - * Adds paths to exclude from the analysis. + * Sets paths to exclude from the analysis. * * @param excludes one or more paths to exclude * @return this operation + * @see #addExcludes(Path...) */ public PmdOperation excludes(Path... excludes) { - excludes_.addAll(List.of(excludes)); + excludes(List.of(excludes)); return this; } /** - * Adds paths to exclude from the analysis. + * Sets paths to exclude from the analysis. * * @param excludes paths to exclude * @return this operation + * @see #addExcludes(Collection) */ public PmdOperation excludes(Collection excludes) { + excludes_.clear(); excludes_.addAll(excludes); return this; } @@ -348,10 +424,60 @@ public class PmdOperation extends AbstractOperation { * * @return the exclude paths */ - public List excludes() { + public Collection excludes() { return excludes_; } + /** + * Sets paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesFiles(Collection) + * @since 1.2.0 + */ + public PmdOperation excludesFiles(Collection excludes) { + excludes(excludes.stream().map(File::toPath).toList()); + return this; + } + + /** + * Sets paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesFiles(File...) + * @since 1.2.0 + */ + public PmdOperation excludesFiles(File... excludes) { + return excludesFiles(List.of(excludes)); + } + + /** + * Sets paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesStrings(Collection) + * @since 1.2.0 + */ + public PmdOperation excludesStrings(Collection excludes) { + excludes(excludes.stream().map(Paths::get).toList()); + return this; + } + + /** + * Sets paths to exclude from the analysis. + * + * @param excludes one or more paths to exclude + * @return this operation + * @see #excludesStrings(String...) + * @since 1.2.0 + */ + public PmdOperation excludesStrings(String... excludes) { + return excludesStrings(List.of(excludes)); + } + /** * Performs the PMD code analysis operation. */ @@ -519,7 +645,7 @@ public class PmdOperation extends AbstractOperation { // setExcludes if (!excludes_.isEmpty()) { - config.setExcludes(excludes_); + config.setExcludes(excludes_.stream().toList()); } // setFailOnError @@ -656,7 +782,7 @@ public class PmdOperation extends AbstractOperation { * * @param inputPath a collection of input paths * @return this operation - * @see #addInputPathsFiles(Collection) ) + * @see #addInputPathsFiles(Collection) */ public PmdOperation inputPathsFiles(Collection inputPath) { return inputPaths(inputPath.stream().map(File::toPath).toList()); diff --git a/src/test/java/rife/bld/extension/PmdOperationTest.java b/src/test/java/rife/bld/extension/PmdOperationTest.java index 48545e5..77321d6 100644 --- a/src/test/java/rife/bld/extension/PmdOperationTest.java +++ b/src/test/java/rife/bld/extension/PmdOperationTest.java @@ -47,6 +47,7 @@ import static org.assertj.core.api.Assertions.assertThatCode; * @since 1.0 */ class PmdOperationTest { + static final String BAR = "bar"; static final String CATEGORY_FOO = "category/foo.xml"; static final Path CODE_STYLE_SAMPLE = Path.of("src/test/resources/java/CodeStyle.java"); static final String CODE_STYLE_XML = "category/java/codestyle.xml"; @@ -55,6 +56,11 @@ class PmdOperationTest { static final String DOCUMENTATION_XML = "category/java/documentation.xml"; static final Path ERROR_PRONE_SAMPLE = Path.of("src/test/resources/java/ErrorProne.java"); static final String ERROR_PRONE_XML = "category/java/errorprone.xml"; + static final File FILE_BAR = new File(BAR); + static final String FOO = "foo"; + static final File FILE_FOO = new File(FOO); + static final Path PATH_BAR = Path.of(BAR); + static final Path PATH_FOO = Path.of(FOO); static final String PERFORMANCE_XML = "category/java/performance.xml"; static final String SECURITY_XML = "category/java/security.xml"; static final String TEST = "test"; @@ -67,6 +73,39 @@ class PmdOperationTest { .reportFile(Paths.get("build", COMMAND_NAME, "pmd-test-report.txt")); } + @Test + void testAddExcludes() { + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).addExcludes(PATH_FOO); + var config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(PATH_FOO); + + pmd = pmd.addExcludes(PATH_BAR); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(PATH_FOO, PATH_BAR); + } + + @Test + void testAddExcludesFiles() { + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).addExcludesFiles(FILE_FOO); + var config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(FILE_FOO.toPath()); + + pmd = pmd.addExcludesFiles(FILE_BAR); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(FILE_FOO.toPath(), FILE_BAR.toPath()); + } + + @Test + void testAddExcludesStrings() { + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).addExcludesStrings(FOO); + var config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(PATH_FOO); + + pmd = pmd.addExcludesStrings(BAR); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(PATH_FOO, PATH_BAR); + } + @Test void testAddInputPaths() throws ExitStatusException { var project = new BaseProject(); @@ -168,20 +207,55 @@ class PmdOperationTest { @Test void testExcludes() { - var foo = Path.of("foo/bar"); - var bar = Path.of("bar/foo"); var foz = Path.of("foz/baz"); var baz = Path.of("baz/foz"); - var excludes = List.of(foo, bar); - var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludes(excludes); + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludes(PATH_FOO, PATH_BAR); var config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getExcludes()).containsExactly(excludes.toArray(new Path[0])); + assertThat(pmd.excludes()).containsExactly(List.of(PATH_FOO, PATH_BAR).toArray(new Path[0])); + assertThat(config.getExcludes()).containsExactly(List.of(PATH_FOO, PATH_BAR).toArray(new Path[0])); - pmd = pmd.excludes(baz, foz); - assertThat(pmd.excludes()).hasSize(4); - config = pmd.initConfiguration(COMMAND_NAME); - assertThat(config.getExcludes()).hasSize(4).contains(bar, foz); + var excludes = List.of(List.of(PATH_FOO, PATH_BAR), List.of(foz, baz)); + for (var exclude : excludes) { + pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludes(exclude); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(exclude.toArray(new Path[0])); + } + } + + @Test + void testExcludesFiles() { + var foz = new File("foz"); + var baz = new File("baz"); + + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludesFiles(FILE_FOO, FILE_BAR); + var config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(FILE_FOO.toPath(), FILE_BAR.toPath()); + + var excludes = List.of(List.of(FILE_FOO, FILE_BAR), List.of(foz, baz)); + for (var exclude : excludes) { + pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludesFiles(exclude); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(exclude.stream().map(File::toPath).toArray(Path[]::new)); + } + } + + @Test + void testExcludesStrings() { + var foz = "foz"; + var baz = "baz"; + + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludesStrings(FOO, BAR); + var config = pmd.initConfiguration(COMMAND_NAME); + assertThat(pmd.excludes()).containsExactly(PATH_FOO, PATH_BAR); + assertThat(config.getExcludes()).containsExactly(PATH_FOO, PATH_BAR); + + var excludes = List.of(List.of(FOO, BAR), List.of(foz, baz)); + for (var exclude : excludes) { + pmd = newPmdOperation().ruleSets(CATEGORY_FOO).excludesStrings(exclude); + config = pmd.initConfiguration(COMMAND_NAME); + assertThat(config.getExcludes()).containsExactly(exclude.stream().map(Paths::get).toArray(Path[]::new)); + } } @Test @@ -388,8 +462,8 @@ class PmdOperationTest { @Test void testPrependAuxClasspath() { - var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).prependAuxClasspath("foo", "bar"); - assertThat(pmd.prependAuxClasspath()).isEqualTo("foo" + File.pathSeparator + "bar"); + var pmd = newPmdOperation().ruleSets(CATEGORY_FOO).prependAuxClasspath(FOO, BAR); + assertThat(pmd.prependAuxClasspath()).isEqualTo(FOO + File.pathSeparator + BAR); } @Test @@ -400,27 +474,26 @@ class PmdOperationTest { @Test void testRelativizeRoots() { - var foo = Path.of("foo/bar"); - var bar = Path.of("bar/foo"); var baz = Path.of("baz/foz"); - var pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)).relativizeRoots(foo).relativizeRoots(bar.toFile()) - .relativizeRoots(baz.toString()).relativizeRoots(List.of(foo, bar, baz)); + var pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)).relativizeRoots(PATH_FOO). + relativizeRoots(PATH_BAR.toFile()).relativizeRoots(baz.toString()) + .relativizeRoots(List.of(PATH_FOO, PATH_BAR, baz)); var config = pmd.initConfiguration(COMMAND_NAME); assertThat(config.getRelativizeRoots()).isEqualTo(pmd.relativizeRoots()) - .containsExactly(foo, bar, baz, foo, bar, baz); + .containsExactly(PATH_FOO, PATH_BAR, baz, PATH_FOO, PATH_BAR, baz); pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) - .relativizeRootsFiles(List.of(foo.toFile(), bar.toFile(), baz.toFile())); + .relativizeRootsFiles(List.of(PATH_FOO.toFile(), PATH_BAR.toFile(), baz.toFile())); config = pmd.initConfiguration(COMMAND_NAME); assertThat(config.getRelativizeRoots()).as("List(File...)").isEqualTo(pmd.relativizeRoots()) - .containsExactly(foo, bar, baz); + .containsExactly(PATH_FOO, PATH_BAR, baz); pmd = newPmdOperation().ruleSets(List.of(CATEGORY_FOO)) - .relativizeRootsStrings(List.of(foo.toString(), bar.toString(), baz.toString())); + .relativizeRootsStrings(List.of(PATH_FOO.toString(), PATH_BAR.toString(), baz.toString())); config = pmd.initConfiguration(COMMAND_NAME); assertThat(config.getRelativizeRoots()).as("List(String....)").isEqualTo(pmd.relativizeRoots()) - .containsExactly(foo, bar, baz); + .containsExactly(PATH_FOO, PATH_BAR, baz); } @Test From dca8baf3adc84b3e097f7e678129425ba7316380 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 1 Feb 2025 12:56:22 -0800 Subject: [PATCH 29/43] Version 1.2.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 616d5d5..f1f3f3c 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 1, 11); + version = version(1, 2, 0); javaRelease = 17; From a2d37055c6f3b6321dd6b41cf4705df7d0a09524 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 24 Feb 2025 23:24:32 -0800 Subject: [PATCH 30/43] Bump JUnit to version 5.12.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index f1f3f3c..d5d6186 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -47,8 +47,8 @@ public class PmdOperationBuild extends Project { scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 11, 4))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 11, 4))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() From e28496ca161d8c965613a58ca6f38cfabb8af826 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 24 Feb 2025 23:24:45 -0800 Subject: [PATCH 31/43] Bump bld to version 2.2.1 --- .idea/libraries/bld.xml | 4 ++-- .vscode/settings.json | 2 +- README.md | 2 +- lib/bld/bld-wrapper.jar | Bin 30440 -> 30440 bytes lib/bld/bld-wrapper.properties | 2 +- .../rife/bld/extension/PmdOperationBuild.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.idea/libraries/bld.xml b/.idea/libraries/bld.xml index 553c281..153a060 100644 --- a/.idea/libraries/bld.xml +++ b/.idea/libraries/bld.xml @@ -2,12 +2,12 @@ - + - + diff --git a/.vscode/settings.json b/.vscode/settings.json index a3f4fd0..ba429d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ ], "java.configuration.updateBuildConfiguration": "automatic", "java.project.referencedLibraries": [ - "${HOME}/.bld/dist/bld-2.2.0.jar", + "${HOME}/.bld/dist/bld-2.2.1.jar", "lib/**/*.jar" ] } diff --git a/README.md b/README.md index 0bdcd9e..8c5f2ed 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![License](https://img.shields.io/badge/license-Apache%20License%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Java](https://img.shields.io/badge/java-17%2B-blue)](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html) -[![bld](https://img.shields.io/badge/2.2.0-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) +[![bld](https://img.shields.io/badge/2.2.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/releases/com/uwyn/rife2/bld-pmd/maven-metadata.xml?color=blue)](https://repo.rife2.com/#/releases/com/uwyn/rife2/bld-pmd) [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pmd/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pmd) [![GitHub CI](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml) diff --git a/lib/bld/bld-wrapper.jar b/lib/bld/bld-wrapper.jar index ed94afd16519c4e36ee7021c1d0bf621cbef8bb2..58e97611fd7803dded57c1ef01a3cab0625855d3 100644 GIT binary patch delta 187 zcmaFymhr_~M&1B#W)=|!4h{|m_016zdFz;g)W$wj8xTFY*Isk;dz;xzAkOAq`)&wB z+KF8cETUR)o)OIWUT6rGnyg)-sK~+);LXk<_eVm3oq>UY6^H}88JR>F;I>T8EpY}L ozq!N{O#d$l0n=fn5PEH?E13VaG!7zO=Fb6iK@`Z$$!p830egZxApigX delta 187 zcmaFymhr_~M&1B#W)=|!4h{~6zZ115^42i}sf~T6HXwR(uf68x_cpVcK%C9J_T3PM zv=h4?SVXnpJR_L#z0eRWHCekvQIUZmz?+?;A60|21SMSTDO diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index b2bcd09..4745e94 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -2,4 +2,4 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true bld.downloadLocation= bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES -bld.version=2.2.0 +bld.version=2.2.1 diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index d5d6186..a09e641 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -42,7 +42,7 @@ public class PmdOperationBuild extends Project { var pmd = version(7, 10, 0); scope(compile) - .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 0))) + .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); From fb0acda205aa948d0d42954ac0e76cf5b48afd4c Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Feb 2025 11:26:15 -0800 Subject: [PATCH 32/43] Bump SLF4J to version 2.0.17 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index a09e641..6c0152a 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -45,7 +45,7 @@ public class PmdOperationBuild extends Project { .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); scope(runtime) - .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 16))); + .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 17))); scope(test) .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) From cfbeeeb5c7ac5bb183a3d26f966857076f6c5a50 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 28 Feb 2025 11:04:50 -0800 Subject: [PATCH 33/43] Bump PMD to version 7.11.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 6c0152a..cfcb385 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,7 +40,7 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 10, 0); + var pmd = version(7, 11, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From 67ce6546fe0c5dfb1e4f8c5b51c40e63078cefee Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 28 Feb 2025 11:08:20 -0800 Subject: [PATCH 34/43] Version 1.2.1 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index cfcb385..34a3232 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 2, 0); + version = version(1, 2, 1); javaRelease = 17; From 91c9556bd95e939d6f9ec5d58aa788954d375222 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 18 Mar 2025 12:29:21 -0700 Subject: [PATCH 35/43] Add generic installation instruction --- README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c5f2ed..dbf968f 100755 --- a/README.md +++ b/README.md @@ -7,9 +7,17 @@ [![Snapshot](https://flat.badgen.net/maven/v/metadata-url/repo.rife2.com/snapshots/com/uwyn/rife2/bld-pmd/maven-metadata.xml?label=snapshot)](https://repo.rife2.com/#/snapshots/com/uwyn/rife2/bld-pmd) [![GitHub CI](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml/badge.svg)](https://github.com/rife2/bld-pmd/actions/workflows/bld.yml) -To install, please refer to the [extensions documentation](https://github.com/rife2/bld/wiki/Extensions). +To install the latest version, add the following to the `lib/bld/bld-wrapper.properties` file: -To check all source code using the [Java Quickstart](https://docs.pmd-code.org/latest/pmd_rules_java.html) configuration, add the following to your build file: +```properties +bld.extension-pmd=com.uwyn.rife2:bld-pmd +``` + +For more information, please refer to the [extensions](https://github.com/rife2/bld/wiki/Extensions) documentation. + +## Check Source with PMD + +To check all source Codecode using the [Java Quickstart](https://docs.pmd-code.org/latest/pmd_rules_java.html) configuration, add the following to your build file: ```java @BuildCommand(summary = "Checks source code with PMD") From 4feba23b90c7062a61cde4c203e0aa84f3ec2e62 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 18 Mar 2025 23:39:47 -0700 Subject: [PATCH 36/43] Bump JUnit to version 5.12.1 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 34a3232..87e92f6 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 2, 1); + version = version(1, 2, 2, "SNAPSHOT"); javaRelease = 17; @@ -47,8 +47,8 @@ public class PmdOperationBuild extends Project { scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 17))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 0))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 0))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() From 355cdf770a73b572f27d67f02776be9fd9c27a5f Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 18 Mar 2025 23:39:56 -0700 Subject: [PATCH 37/43] JDK 24 --- .github/workflows/bld.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index f7e10f8..138f5e5 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -8,7 +8,7 @@ jobs: strategy: matrix: - java-version: [17, 21, 23] + java-version: [17, 21, 24] steps: - name: Checkout source repository From d304b931f9c5a8a598f5e255d43b25a19bb202f1 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Tue, 25 Mar 2025 12:28:54 -0700 Subject: [PATCH 38/43] Add OS matrix for Ubuntu, Windows and macOS --- .github/workflows/bld.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bld.yml b/.github/workflows/bld.yml index 138f5e5..947f3c4 100644 --- a/.github/workflows/bld.yml +++ b/.github/workflows/bld.yml @@ -1,14 +1,16 @@ name: bld-ci -on: [push, pull_request, workflow_dispatch] +on: [ push, pull_request, workflow_dispatch ] jobs: build-bld-project: - runs-on: ubuntu-latest - strategy: matrix: - java-version: [17, 21, 24] + java-version: [ 17, 21, 24 ] + kotlin-version: [ 1.9.25, 2.0.21, 2.1.20 ] + os: [ ubuntu-latest, windows-latest, macos-latest ] + + runs-on: ${{ matrix.os }} steps: - name: Checkout source repository @@ -26,4 +28,4 @@ jobs: run: ./bld download - name: Run tests - run: ./bld compile test + run: ./bld compile test \ No newline at end of file From 7ae16506774602505c5c8f792e0048b7bf183c12 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 28 Mar 2025 05:05:57 -0700 Subject: [PATCH 39/43] Bump PMD from 7.11.0 to 7.12.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 87e92f6..6f2d8a9 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,7 +40,7 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 11, 0); + var pmd = version(7, 12, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From a15218eb1db7ecdcb011eefdc05dcf626ffa6cc5 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 28 Mar 2025 05:14:21 -0700 Subject: [PATCH 40/43] Version 1.2.2 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 6f2d8a9..608abbf 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 2, 2, "SNAPSHOT"); + version = version(1, 2, 2); javaRelease = 17; From 9e8f6c049772118a8303f14d5a1b0000b0bb4e37 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sat, 12 Apr 2025 20:58:01 -0700 Subject: [PATCH 41/43] Bump JUnit to version 5.12.2 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 608abbf..00f5097 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -47,8 +47,8 @@ public class PmdOperationBuild extends Project { scope(runtime) .include(dependency("org.slf4j", "slf4j-simple", version(2, 0, 17))); scope(test) - .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 1))) - .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 1))) + .include(dependency("org.junit.jupiter", "junit-jupiter", version(5, 12, 2))) + .include(dependency("org.junit.platform", "junit-platform-console-standalone", version(1, 12, 2))) .include(dependency("org.assertj", "assertj-core", version(3, 27, 3))); javadocOperation() From 86ea747ba2e57d3c4de567857eb42ad5cd2912e2 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 25 Apr 2025 08:02:04 -0700 Subject: [PATCH 42/43] Bump PMD to version 7.13.0 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 00f5097..867cd32 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -40,7 +40,7 @@ public class PmdOperationBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL, RIFE2_RELEASES, RIFE2_SNAPSHOTS); - var pmd = version(7, 12, 0); + var pmd = version(7, 13, 0); scope(compile) .include(dependency("com.uwyn.rife2", "bld", version(2, 2, 1))) .include(dependency("net.sourceforge.pmd", "pmd-java", pmd)); From 9ea433edce81d9bc653dbebf163cdca6ed931bb5 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 25 Apr 2025 08:06:30 -0700 Subject: [PATCH 43/43] Version 1.2.3 --- src/bld/java/rife/bld/extension/PmdOperationBuild.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bld/java/rife/bld/extension/PmdOperationBuild.java b/src/bld/java/rife/bld/extension/PmdOperationBuild.java index 867cd32..cbaa6ba 100644 --- a/src/bld/java/rife/bld/extension/PmdOperationBuild.java +++ b/src/bld/java/rife/bld/extension/PmdOperationBuild.java @@ -31,7 +31,7 @@ public class PmdOperationBuild extends Project { public PmdOperationBuild() { pkg = "rife.bld.extension"; name = "bld-pmd"; - version = version(1, 2, 2); + version = version(1, 2, 3); javaRelease = 17;