From cd9070aa7bace88dd8d9d3a82fb7b82d751d6021 Mon Sep 17 00:00:00 2001 From: twalters Date: Fri, 6 Mar 2026 18:45:36 +0000 Subject: [PATCH] unusedPropertyRule.suppressions --- pom.xml | 1 + .../com/solubris/enforcer/UnusedPropertyRule.java | 15 +++++++++++++++ .../solubris/enforcer/UnusedPropertyRuleTest.java | 11 +++++++++++ .../org.mockito.plugins.MockMaker | 1 + 4 files changed, 28 insertions(+) create mode 100644 src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/pom.xml b/pom.xml index a9d0fc5..9201119 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ ${skipTests} + junit.version,kept-for-compat.version 7.22.0 6.0.3 diff --git a/src/main/java/com/solubris/enforcer/UnusedPropertyRule.java b/src/main/java/com/solubris/enforcer/UnusedPropertyRule.java index 1474c88..d428f72 100644 --- a/src/main/java/com/solubris/enforcer/UnusedPropertyRule.java +++ b/src/main/java/com/solubris/enforcer/UnusedPropertyRule.java @@ -7,10 +7,12 @@ import javax.inject.Inject; import javax.inject.Named; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.concurrent.atomic.LongAdder; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -28,6 +30,7 @@ @Named("unusedPropertyRule") public class UnusedPropertyRule extends AbstractEnforcerRule { private static final Pattern PROPERTY_PATTERN = Pattern.compile("\\$\\{([^}]+)\\}"); + protected static final String SUPPRESSIONS_PROPERTY = "unusedPropertyRule.suppressions"; private final Model originalModel; private final Model effectiveModel; @@ -66,8 +69,12 @@ protected Stream scanProperties() { // .filter(artifact -> !isExcluded(artifact.getVersion())) .collect(groupingBy(ArtifactV2::getVersion, toList())); + String property = originalModel.getProperties().getProperty(SUPPRESSIONS_PROPERTY); + Set suppressed = parseSuppressedPropertyList(property); + return originalModel.getProperties().entrySet().stream() .filter(UnusedPropertyRule::isVersionProperty) // only check properties that look like versions + .filter(e -> !suppressed.contains(e.getKey().toString())) .map(e -> { String propName = e.getKey().toString(); String propValue = e.getValue() != null ? e.getValue().toString() : ""; @@ -76,6 +83,14 @@ protected Stream scanProperties() { }).filter(Objects::nonNull); } + private static Set parseSuppressedPropertyList(String raw) { + if (raw == null || raw.isBlank()) return Collections.emptySet(); + return Arrays.stream(raw.split("[,\\s]+")) + .map(String::trim) + .filter(s -> !s.isEmpty()) + .collect(Collectors.toSet()); + } + private static boolean isVersionProperty(Map.Entry e) { return e.getKey().toString().endsWith(".version"); } diff --git a/src/test/java/com/solubris/enforcer/UnusedPropertyRuleTest.java b/src/test/java/com/solubris/enforcer/UnusedPropertyRuleTest.java index 96e7442..843db5d 100644 --- a/src/test/java/com/solubris/enforcer/UnusedPropertyRuleTest.java +++ b/src/test/java/com/solubris/enforcer/UnusedPropertyRuleTest.java @@ -16,6 +16,7 @@ import static com.solubris.enforcer.ModelStubber.extensionOf; import static com.solubris.enforcer.ModelStubber.pluginOf; import static com.solubris.enforcer.ModelStubber.reportPluginOf; +import static com.solubris.enforcer.UnusedPropertyRule.SUPPRESSIONS_PROPERTY; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatNoException; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -148,6 +149,16 @@ void unusedVersionPropertyFails() { .contains("unused"); } + @Test + void suppressedUnusedPropertyIsIgnored() { + originalModel.addProperty(SUPPRESSIONS_PROPERTY, "old-lib.version, kept-for-compat.version"); + originalModel.addProperty("old-lib.version", "2.0.0"); + + Stream violations = rule.scanProperties(); + + assertThat(violations).isEmpty(); + } + @Test void nonVersionPropertyIsIgnored() { originalModel.addProperty("project.build.sourceEncoding", "UTF-8"); diff --git a/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000..fdbd0b1 --- /dev/null +++ b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-subclass