This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch feature/improve-message-for-failed-version-rule
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit 4db0e5509a70a4d671be5e086baf4264b60396dd
Author: Konrad Windszus <k...@apache.org>
AuthorDate: Fri Jan 6 15:14:57 2023 +0100

    [MENFORCER-444] Improve error message for failed version rules
    
    Convert lower bound only value to proper range string in message
---
 .../maven/plugins/enforcer/AbstractVersionEnforcer.java | 12 ++++++++++--
 .../maven/plugins/enforcer/RequireJavaVersion.java      | 17 ++++++++++++++---
 .../maven/plugins/enforcer/TestRequireJavaVersion.java  |  2 +-
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git 
a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
 
b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
index 609de91..4e1bf62 100644
--- 
a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
+++ 
b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
@@ -77,12 +77,12 @@ public abstract class AbstractVersionEnforcer extends 
AbstractStandardEnforcerRu
                     vr = 
VersionRange.createFromVersionSpec(requiredVersionRange);
 
                     if (containsVersion(vr, actualVersion)) {
-                        log.debug(msg + " is allowed in the range " + 
requiredVersionRange + ".");
+                        log.debug(msg + " is allowed in the range " + 
toString(vr) + ".");
                     } else {
                         String message = getMessage();
 
                         if (StringUtils.isEmpty(message)) {
-                            message = msg + " is not in the allowed range " + 
vr + ".";
+                            message = msg + " is not in the allowed range " + 
toString(vr) + ".";
                         }
 
                         throw new EnforcerRuleException(message);
@@ -95,6 +95,14 @@ public abstract class AbstractVersionEnforcer extends 
AbstractStandardEnforcerRu
         }
     }
 
+    protected static String toString(VersionRange vr) {
+        // as recommended version is used as lower bound in this context 
modify the string representation
+        if (vr.getRecommendedVersion() != null) {
+            return "[" + vr.getRecommendedVersion().toString() + ",)";
+        } else {
+            return vr.toString();
+        }
+    }
     /**
      * Copied from Artifact.VersionRange. This is tweaked to handle singular 
ranges properly. Currently the default
      * containsVersion method assumes a singular version means allow 
everything. This method assumes that "2.0.4" ==
diff --git 
a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
 
b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
index 87ea432..39b1733 100644
--- 
a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
+++ 
b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireJavaVersion.java
@@ -27,6 +27,8 @@ import java.util.regex.Pattern;
 import org.apache.commons.lang3.SystemUtils;
 import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import 
org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.plugin.logging.Log;
@@ -76,7 +78,7 @@ public class RequireJavaVersion extends 
AbstractVersionEnforcer {
                 + " Build: " + detectedJdkVersion.getBuildNumber() + " 
Qualifier: "
                 + detectedJdkVersion.getQualifier());
 
-        setCustomMessageIfNoneConfigured(detectedJdkVersion, getVersion());
+        setCustomMessageIfNoneConfigured(detectedJdkVersion, getVersion(), 
log);
 
         enforceVersion(helper.getLog(), "JDK", getVersion(), 
detectedJdkVersion);
     }
@@ -115,11 +117,20 @@ public class RequireJavaVersion extends 
AbstractVersionEnforcer {
         return StringUtils.stripEnd(version, ".");
     }
 
-    private void setCustomMessageIfNoneConfigured(ArtifactVersion 
detectedJdkVersion, String allowedVersionRange) {
+    private void setCustomMessageIfNoneConfigured(
+            ArtifactVersion detectedJdkVersion, String allowedVersionRange, 
Log log) {
         if (getMessage() == null) {
+            String version;
+            try {
+                VersionRange vr = 
VersionRange.createFromVersionSpec(allowedVersionRange);
+                version = AbstractVersionEnforcer.toString(vr);
+            } catch (InvalidVersionSpecificationException e) {
+                log.debug("Could not parse allowed version range " + 
allowedVersionRange, e);
+                version = allowedVersionRange;
+            }
             String message = String.format(
                     "Detected JDK version %s (JAVA_HOME=%s) is not in the 
allowed range %s.",
-                    detectedJdkVersion, SystemUtils.JAVA_HOME, 
allowedVersionRange);
+                    detectedJdkVersion, SystemUtils.JAVA_HOME, version);
             super.setMessage(message);
         }
     }
diff --git 
a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
 
b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
index 53cfbfe..4afecbb 100644
--- 
a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
+++ 
b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
@@ -111,7 +111,7 @@ class TestRequireJavaVersion {
                 .isInstanceOf(EnforcerRuleException.class)
                 .hasMessage(
                         "Detected JDK version %s (JAVA_HOME=%s) is not in the 
allowed range %s.",
-                        thisVersion, SystemUtils.JAVA_HOME, requiredVersion);
+                        thisVersion, SystemUtils.JAVA_HOME, "[" + 
requiredVersion + ",)");
     }
 
     @Test

Reply via email to